Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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"
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
 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()