前回の振り返り
前回は、ログレベルに応じたログ出力をできるように改造した。
how-to-make-stock-trading-system.dogwood008.com
今回の内容
今回は、簡単なロジックに基づいて、バックテスト中に株を買う処理を追加する。ただし、実際に買うのではなく、買ったことにしてバックテストを行う。終了時点で「買った株はどれくらい上がっているでしょうか!」というのを体験してみる。
変更差分
# 参考文献: mementum, "Quickstart Guide - Backtrader", # "https://www.backtrader.com/docu/quickstart/quickstart/#adding-some-logic-to-the-strategy", # アクセス日:2020年10月30日, # 日本語のコメント部とdataclose->_dataclose, log->_logの置換は著者による class TestStrategyWithLogger(bt.Strategy): (中略) def next(self): # Simply log the closing price of the series from the reference self.log('Close, %.2f' % self.dataclose[0]) if self.dataclose[0] < self.dataclose[-1]: # 追加部 # current close less than previous close # 追加部 if self.dataclose[-1] < self.dataclose[-2]: # 追加部 # previous close less than the previous close # 追加部 # BUY, BUY, BUY!!! (with all possible default parameters) # 追加部 self._log('BUY CREATE, %.2f' % self.dataclose[0]) # 追加部 self.buy() # 追加部
self.buy()
は、 予め backtrader.Strategy
に用意されているメソッド で、これを呼ぶとその株を成り行き(ただし、バックテスト中は次回ティックの始値)で買ったことになる。それでは実行結果を見てみよう。
$ docker-compose up Starting stock-trading-system_app_1 ... done Attaching to stock-trading-system_app_1 app_1 | [DEBUG] 2000-01-03, Close, 26.27 app_1 | [DEBUG] 2000-01-04, Close, 23.95 app_1 | [DEBUG] 2000-01-05, Close, 22.68 app_1 | [DEBUG] 2000-01-05, BUY CREATE, 22.68 app_1 | [DEBUG] 2000-01-06, Close, 21.35 (中略) app_1 | [DEBUG] 2000-12-20, BUY CREATE, 25.35 app_1 | [DEBUG] 2000-12-21, Close, 26.24 app_1 | [DEBUG] 2000-12-22, Close, 28.35 app_1 | [DEBUG] 2000-12-26, Close, 27.52 app_1 | [DEBUG] 2000-12-27, Close, 27.30 app_1 | [DEBUG] 2000-12-27, BUY CREATE, 27.30 app_1 | [DEBUG] 2000-12-28, Close, 27.63 app_1 | [DEBUG] 2000-12-29, Close, 25.85 app_1 | Starting Portfolio Value: 100000.00 app_1 | Final Portfolio Value: 99740.45 stock-trading-system_app_1 exited with code 0
今回はどうやら初期現金を下回る評価額になったようだ。毎ティック毎の表示がちょっとうるさいので、今は抑制しておくと便利かもしれない。 次回は買い建玉を売る方法について見ていく。