def benchmarkMeanRev(filePath): signalGenerator = MeanReversionSignalGenerator.MeanReversionSignalGenerator() parameterList = {"minimumTimeBeforeAction" : "10:05:00.000", "buyDistanceFromMeanThreshold" : 0.001, "sellDistanceFromMeanThreshold" : 0.001, "buyPacketSize" : 50, "sellPacketSize" : 50, "maxBuyPacketSurplus" : 1, "historicalOutlook" : 2} signalGenerator.manualSetup(parameterList) engine = InitialEngine.InitialEngine() engine.setup(None) strategyEvaluator = DummyStrategyEvaluator.DummyStrategyEvaluator() lines = 0 for line in open(filePath) : lines += 1 sys.stdout.write("lines: %d | Time(sec): " % lines) stream = open(filePath, "r") dr = csv.DictReader(stream) initialTime = time.time() trader.run_trial(dr,signalGenerator,engine,strategyEvaluator) print "%.4f" % (time.time() - initialTime)
def testVolume(): dummySignalGenerator = DummySignalGenerator.DummySignalGenerator() initialEngine = InitialEngine.InitialEngine() initialEngine.setup(None) dummyStrategyEvalutator = DummyStrategyEvaluator.DummyStrategyEvaluator() #put some buys in buy1 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"11:00:00.000",'Record Type':"ENTER",'Price':"35.080",'Volume':"500",'Undisclosed Volume':"0",'Value':"35080",'Qualifiers':"",'Trans ID':"0",'Bid ID':"6245081189407525022",'Ask ID':"",'Bid/Ask':"B",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"140",'Seller Broker ID':""} buy2 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"11:01:00.000",'Record Type':"ENTER",'Price':"35.100",'Volume':"100",'Undisclosed Volume':"0",'Value':"35080",'Qualifiers':"",'Trans ID':"0",'Bid ID':"6245081189407525023",'Ask ID':"",'Bid/Ask':"B",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"150",'Seller Broker ID':""} buy3 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"11:02:00.000",'Record Type':"ENTER",'Price':"35.090",'Volume':"1000",'Undisclosed Volume':"0",'Value':"35080",'Qualifiers':"",'Trans ID':"0",'Bid ID':"6245081189407525024",'Ask ID':"",'Bid/Ask':"B",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"160",'Seller Broker ID':""} buy4 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"12:04:30.000",'Record Type':"ENTER",'Price':"30.080",'Volume':"50",'Undisclosed Volume':"0",'Value':"35080",'Qualifiers':"",'Trans ID':"0",'Bid ID':"6245081189407525025",'Ask ID':"",'Bid/Ask':"B",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"160",'Seller Broker ID':""} buy5 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"12:10:30.000",'Record Type':"ENTER",'Price':"36.100",'Volume':"1000",'Undisclosed Volume':"0",'Value':"35080",'Qualifiers':"",'Trans ID':"0",'Bid ID':"6245081189407525026",'Ask ID':"",'Bid/Ask':"B",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"160",'Seller Broker ID':""} #put some sells in sell1 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"12:01:00.000",'Record Type':"ENTER",'Price':"36.100",'Volume':"2000",'Undisclosed Volume':"0",'Value':"70200",'Qualifiers':"",'Trans ID':"0",'Bid ID':"",'Ask ID':"6245081189408853521",'Bid/Ask':"A",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"",'Seller Broker ID':"170"} sell2 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"12:02:00.000",'Record Type':"ENTER",'Price':"35.100",'Volume':"100",'Undisclosed Volume':"0",'Value':"70200",'Qualifiers':"",'Trans ID':"0",'Bid ID':"",'Ask ID':"6245081189408853522",'Bid/Ask':"A",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"",'Seller Broker ID':"180"} sell3 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"12:03:00.000",'Record Type':"ENTER",'Price':"35.080",'Volume':"1000",'Undisclosed Volume':"0",'Value':"70200",'Qualifiers':"",'Trans ID':"0",'Bid ID':"",'Ask ID':"6245081189408853523",'Bid/Ask':"A",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"",'Seller Broker ID':"180"} sell4 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"12:04:00.000",'Record Type':"ENTER",'Price':"35.080",'Volume':"1000",'Undisclosed Volume':"0",'Value':"70200",'Qualifiers':"",'Trans ID':"0",'Bid ID':"",'Ask ID':"6245081189408853524",'Bid/Ask':"A",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"",'Seller Broker ID':"180"} sell5 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"12:05:00.000",'Record Type':"ENTER",'Price':"30.080",'Volume':"1000",'Undisclosed Volume':"0",'Value':"70200",'Qualifiers':"",'Trans ID':"0",'Bid ID':"",'Ask ID':"6245081189408853525",'Bid/Ask':"A",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"",'Seller Broker ID':"180"} #put some amends in amend1 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"11:03:00.000",'Record Type':"AMEND",'Price':"40.080",'Volume':"1000",'Undisclosed Volume':"0",'Value':"35080",'Qualifiers':"",'Trans ID':"0",'Bid ID':"6245081189407525022",'Ask ID':"",'Bid/Ask':"B",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"140",'Seller Broker ID':""} #put some deletes in delete1 = {'Instrument':"BHP",'Date':"2013-03-15",'Time':"12:04:45.000",'Record Type':"DELETE",'Price':"40.080",'Volume':"1000",'Undisclosed Volume':"0",'Value':"35080",'Qualifiers':"",'Trans ID':"0",'Bid ID':"6245081189407525025",'Ask ID':"",'Bid/Ask':"B",'Entry Time':"",'Old Price':"",'Old Volume':"",'Buyer Broker ID':"140",'Seller Broker ID':""} dr = [buy1,buy2,buy3,amend1,sell1,sell2,sell3,sell4,buy4,delete1,buy5,sell5] trades = trader.run_trial(dr, dummySignalGenerator,initialEngine, dummyStrategyEvalutator) assert len (trades) == 4 assert trades[0]['Volume'] == "1000" assert trades[1]['Volume'] == "100" assert trades[2]['Volume'] == "1000" assert trades[3]['Volume'] == "1000"
def main(): """Run the trial, taking market data from stdin""" parser = optparse.OptionParser() parser.add_option('-g', '--generator', dest='generator', default='Dummy Signal Generator', help='signal generator') parser.add_option('-e', '--engine', dest='engine', default='Dummy Engine', help='engine') parser.add_option('-s', '--strategyevaluator', dest='strategyevaluator', default='Dummy Strategy Evaluator', help='strategy evaluator') (options, args) = parser.parse_args() plugin_manager = yapsy.PluginManager.PluginManager() plugin_manager.setPluginPlaces([my_path('plugins')]) plugin_manager.setCategoriesFilter({ 'SignalGenerator': plugins.ISignalGeneratorPlugin, 'Engine': plugins.IEnginePlugin, 'StrategyEvaluator': plugins.IStrategyEvaluatorPlugin, }) plugin_manager.collectPlugins() plugin_info = plugin_manager.getPluginByName(options.generator, 'SignalGenerator') signal_generator = plugin_info.plugin_object signal_generator.setup(plugin_info.details) plugin_info = plugin_manager.getPluginByName(options.engine, 'Engine') engine = plugin_info.plugin_object engine.setup(plugin_info.details) plugin_info = plugin_manager.getPluginByName(options.strategyevaluator, 'StrategyEvaluator') strategy_evaluator = plugin_info.plugin_object strategy_evaluator.setup(plugin_info.details) signal.signal(signal.SIGPIPE, signal.SIG_DFL) fieldnames = sys.stdin.readline() fieldnames = fieldnames[:len(fieldnames)-1] if fieldnames[0] == '#': fieldnames = fieldnames[1:] if fieldnames[len(fieldnames)-1] == ',': fieldnames = fieldnames[:len(fieldnames)-1] dr = csv.DictReader(sys.stdin, fieldnames.split(',')) trades = trader.run_trial(dr, signal_generator, engine, strategy_evaluator) dw = csv.DictWriter(sys.stdout, dr.fieldnames) dw.writerow(dict((fn, fn) for fn in dr.fieldnames)) dw.writerows(trades)
def Run(self): """Run the simulation""" plugin_name = self._signal_generator.GetValue() plugin = self._signal_generators[plugin_name]['plugin'] signal_generator = plugin.plugin_object signal_generator.setup(plugin.details) plugin_name = self._engine.GetValue() plugin = self._engines[plugin_name]['plugin'] engine = plugin.plugin_object engine.setup(plugin.details) plugin_name = self._strategy_evaluator.GetValue() plugin = self._strategy_evaluators[plugin_name]['plugin'] strategy_evaluator = plugin.plugin_object strategy_evaluator.setup(plugin.details) progressMax = len(self._market_data) progressdialog = wx.ProgressDialog("Running Simulation", "Trading records remaining", progressMax , style=wx.PD_CAN_ABORT | wx.PD_ELAPSED_TIME | wx.PD_REMAINING_TIME) progressdialog.Update(0,"Preparing data for processing.\nSimulation will begin shortly.") self._trades = trader.run_trial(copy.deepcopy(self._market_data), signal_generator, engine, strategy_evaluator, progressdialog) progressdialog.Destroy()