class CustomSimulation(Simulation): #Custom def __init__(self, code=None): self.code = code self.record_every_stock = False def setting(self, params, fname=None): """複数の株だけど、いくつかの株に絞ってシミュレーションする場合は _fnameにファイル名を指定 """ if 'from' in params: self.set_date_from(params['from']) if 'to' in params: self.set_date_to(params['to']) print 'from:', self.date_from print 'to:', self.date_to if self.code is not None: self.simulate_a_stock(self.code) # privateメソッドのため、親クラスのメソッドを直接呼び出す else: self.simulate_all_stocks(fname) def set_trading_system(self, params): self.trading_system = TradingSystem(params) def set_date_from(self, date): self.date_from = date def set_date_to(self, date): self.date_to = date def set_data_loader(self, data_loader): Simulation.data_loader = data_loader def set_record_dir(self, record_dir, setting_file_name, system_name, version): self.recorder = \ Recorder(os.path.join(record_dir,system_name,version)) self.recorder.create_record_folder() self.recorder.record_setting(setting_file_name) def set_record_every_stock(self, true_or_false): self.record_every_stock = true_or_false
data = DataToStock(data_dir, dbname) estrangement_system = TradingSystem({ 'entries': EstrangementEntry({ 'span': 20, 'rate': 5 }), 'exits': [StopOutExit(), EstrangementExit({ 'span': 20, 'rate': 3.5 })], # stop_out_exitは最後につける(損切りの手仕舞いだから) 'stops': AverageTrueRangeStop({'span': 20}), 'filters': MovingAverageDirectionFilter({'span': 30}) }) recorder = Recorder() recorder.record_dir = 'result/estrangement/test_simulation' simulation = \ Simulation({'trading_system':estrangement_system, 'data_loader': data, 'recorder':recorder}) recorder.create_record_folder() #simulation.simulate_a_stock(8604) # code.csv simulation.simulate_all_stocks( os.getcwd() + '/../data/test_stock.csv') # _stats_for_each_stock.csv
trade.volume = stock.unit print "trade",trade print "entry",trade.entry_date print "entry_price",trade.entry_price print "trade_type", trade.trade_type print "volume",trade.volume # check exit if trade is not None: trading_system.check_exit(trade, i) if trade.isclosed(): trades.append(trade) print "exit",trade.exit_date print "exit_price",trade.exit_price trade = None return trades con = sqlite.connect(os.getcwd()+'/../data/daily_stock_data.db') recorder = Recorder() recorder.record_dir = 'result/test' recorder.create_record_folder() recorder.record_setting(__file__) # 現在実行中のソースファイル名 results = [ simulate(code) for code in (7203,4063, 8604) ] results = [trades for trades in results if len(trades)!=0] for trades in results: recorder.record_a_stock(trades) recorder.record_stats_for_each_stock(results) recorder.record_stats(results)