株のシステムトレードをしよう - 1から始める株自動取引システムの作り方

株式をコンピュータに売買させる仕組みを少しずつ作っていきます。できあがってから公開ではなく、書いたら途中でも記事として即掲載して、後から固定ページにして体裁を整える方式で進めていきます。

バックテスト中に買い建玉を作成する ◆ Backtrader 最初の戦略その3

f:id:dogwood008:20201009011714j:plain
Photo by Jason Leung on Unsplash

前回の振り返り

前回は、ログレベルに応じたログ出力をできるように改造した。

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

今回はどうやら初期現金を下回る評価額になったようだ。毎ティック毎の表示がちょっとうるさいので、今は抑制しておくと便利かもしれない。 次回は買い建玉を売る方法について見ていく。

(C) 2020 dogwood008 禁無断転載 不許複製 Reprinting, reproducing are prohibited.