backtest.pyサンプルコードを動かしてみる。株価のバックテスト【Python入門】

python

金融取引戦略を過去データで検証し、戦略の有効性や改善点などを分析に活用できるPythonオープンソースのバックテストライブラリ”backtest.py”のサンプルコードを動かしてみます。

backtest.pyとは?

金融取引戦略を過去データで検証し、戦略の有効性や改善点などを分析に活用できるPythonオープンソース。

backtest.pyのインストール方法

pipを使う場合、下記のようにしてbacktest.pyライブラリをインストールします。

pip install backtesting

backtest.pyのサンプルコード

公式サイトのサンプルコードを動かしてみます。

from backtesting import Backtest, Strategy
from backtesting.lib import crossover
from backtesting.test import SMA, GOOG

class SmaCross(Strategy):
    def init(self):
        price = self.data.Close
        self.ma1 = self.I(SMA, price, 10)
        self.ma2 = self.I(SMA, price, 20)

    def next(self):
        if crossover(self.ma1, self.ma2):
            self.buy()
        elif crossover(self.ma2, self.ma1):
            self.sell()


bt = Backtest(GOOG, SmaCross, commission=.002,
              exclusive_orders=True)
stats = bt.run()
print(stats)
bt.plot()

このコードは、移動平均線クロスオーバー戦略のバックテストの一例です。

Google株の「10日移動平均線」と「20日移動平均線」のクロスオーバーシグナルに基づいて、株式の売買を行う戦略です。

クロスオーバーとは?

  • ゴールデンクロスとデッドクロスを合わせた総称
  • ゴールデンクロスで買い、デッドクロスで売りという戦略やルールを「クロスオーバー戦略」「クロスオーバールール」と呼びます。

サンプルコードの実行

コードを保存したら実行してみます。

python3 [保存したファイル名].py

サンプルコードの実行結果

実行結果が表示されます。

ターミナルには検証結果が出力されます。

Start                     2004-08-19 00:00:00
End                       2013-03-01 00:00:00
Duration                   3116 days 00:00:00
Exposure Time [%]                   97.067039
Equity Final [$]                  68221.96986
Equity Peak [$]                   68991.21986
Return [%]                         582.219699
Buy & Hold Return [%]              703.458242
Return (Ann.) [%]                   25.266427
Volatility (Ann.) [%]               38.383008
Sharpe Ratio                         0.658271
Sortino Ratio                        1.288779
Calmar Ratio                         0.763748
Max. Drawdown [%]                  -33.082172
Avg. Drawdown [%]                   -5.581506
Max. Drawdown Duration      688 days 00:00:00
Avg. Drawdown Duration       41 days 00:00:00
# Trades                                   94
Win Rate [%]                        54.255319
Best Trade [%]                       57.11931
Worst Trade [%]                    -16.629898
Avg. Trade [%]                       2.074326
Max. Trade Duration         121 days 00:00:00
Avg. Trade Duration          33 days 00:00:00
Profit Factor                        2.190805
Expectancy [%]                       2.606294
SQN                                  1.990216
_strategy                            SmaCross
_equity_curve                             ...
_trades                       Size  EntryB...

まとめ

backtest.pyのサンプルコードについてでした。

backtest.pyは、金融取引の戦略を検証する便利なツールです。あくまで過去のデータに基づいており、将来の収益を保証するものではありませんのでリスク管理にはご注意ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA