見出し画像

Backtesting.pyの使い方 その1

今回はバックテストを行うためのpythonライブラリであるBacktesting.pyについて解説します。

ずっと前に公開した自前のバックテストコードではそろそろ物足りなくなってきたので最近はBacktesting.pyを使っています。
最初からこっちを使っていれば良かったんですがなんか英語がいっぱいで難しそうだったので敬遠していました。
しかし自前のBOTを改良したやつでバックテストを行うのに限界を感じたのでこれからはこいつで行きます。無料ですし。
私の有料のバックテストコードは公開を終了します。

それではまずpipでインストールしましょう。

pip install backtesting

これでいけます。

次は以下のコードをコピペしてテキトーな名前をつけて実行してみて下さい。公式ドキュメントからそのまま持ってきたやつです。

from backtesting.test import GOOG
from backtesting import Strategy
from backtesting.lib import crossover
from backtesting import Backtest
import pandas as pd

GOOG.tail()

def SMA(values, n):
    return pd.Series(values).rolling(n).mean()

class SmaCross(Strategy):
    n1 = 10
    n2 = 20

    def init(self):
        self.sma1 = self.I(SMA, self.data.Close, self.n1)
        self.sma2 = self.I(SMA, self.data.Close, self.n2)

    def next(self):
        if crossover(self.sma1, self.sma2):
            self.position.close()
            self.buy()

        elif crossover(self.sma2, self.sma1):
            self.position.close()
            self.sell()

bt = Backtest(GOOG, SmaCross, cash=10_000, commission=.002)
stats = bt.run()
print(stats)
bt.plot()

実行するとコマンドプロンプトに以下のような実行結果と、

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...
dtype: object

ブラウザがいきなり開いて以下のような画面が出ると思います。

このバックテストの結果はグーグルの株価の日足と移動平均線(10日,20日)のクロスでドテン売買をした場合の利益を表しているようです。
2004年から2013年までで1万ドルが7万ドル近くになっていますが・・・
でもこれだとバイ&ホールドとあまり変わりませんね。
次回は別の銘柄、別の戦略で試してみようと思います。
今日はひとまずこんなところで。
それでは。

この記事が気に入ったらサポートをしてみませんか?