シミュレーション編
11章。libフォルダのtrade.py
#!/usr/bin/env python # -*- coding: utf-8 -*- # 取引を表すクラス class Trade: # 仕掛ける def __init__(self, params): self.stock_code = params['stock_code'] self.trade_type = params['trade_type'] self.entry_date = params['entry_date'] self.entry_price = params['entry_price'] self.volume = params['volume'] self.entry_time = params['entry_time'] self.length = 1 self.exit_date = None self.exit_price = None self.exit_time = None self.first_stop = None self.stop = None # 手仕舞う def exit(self, params): if 'exit_date' in params: self.exit_date = params['exit_date'] else: self.exit_date = params['date'] if 'exit_price' in params: self.exit_price = params['exit_price'] else: self.exit_price = params['price'] if 'exit_time' in params: self.exit_time = params['exit_time'] else: self.exit_time = params['time'] # 手仕舞い済みかどうか def closed_check(self): if self.exit_date and self.exit_price: return True else: return False # 買いトレードかどうか def long_check(self): if self.trade_type == 'long': return True else: return False # 売りトレードかどうか def short_check(self): if self.trade_type == 'short': return True else: return False # 損益金額 def profit(self): return self._plain_result() * self.volume # %損益 def percentage_result(self): return (float(self._plain_result()) / self.entry_price) * 100 # R def r(self): if self.first_stop == None: return if self.long_check() == True: return self.entry_price - self.first_stop elif self.short_check() == True: return self.first_stop - self.entry_price # R倍数 def r_multiple(self): if self.first_stop == None: return if self.r() == 0: return return float(self._plain_result()) / float(self.r()) # Private # 株数を掛けない損益 def _plain_result(self): if self.long_check() == True: return self.exit_price - self.entry_price elif self.short_check() == True: return self.entry_price - self.exit_price if __name__ == '__main__': trade = Trade({'stock_code': 8604, 'trade_type': 'long', 'entry_date': '2011/11/14', 'entry_price': 251, 'entry_time': 'open', 'volume': 100}) print(trade.stock_code) print(trade.entry_date) print(trade.entry_price) print(trade.long_check()) print(trade.short_check()) print(trade.closed_check()) trade.first_stop = 241 trade.stop = 241 trade.length = 1 print(trade.first_stop) print(trade.stop) print(trade.r()) print(trade.length) trade.length += 1 print(trade.length) trade.exit({'date': '2011/11/15', 'price': 255, 'time': 'in_session'}) print(trade.closed_check()) print(trade.exit_date) print(trade.profit()) print(trade.percentage_result()) print(trade.r_multiple())
Pythonの場合は
if __name__ == '__main__':
を使えばチェック用のファイルを別に用意しなくていいとやっとわかった。