![見出し画像](https://assets.st-note.com/production/uploads/images/80142890/rectangle_large_type_2_3394c2acfa06874b42bd163b9bd44de2.png?width=1200)
Photo by
soeji
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
ブラウザがいきなり開いて以下のような画面が出ると思います。
![](https://assets.st-note.com/img/1654527377603-6B9w086Rlh.png?width=1200)
このバックテストの結果はグーグルの株価の日足と移動平均線(10日,20日)のクロスでドテン売買をした場合の利益を表しているようです。
2004年から2013年までで1万ドルが7万ドル近くになっていますが・・・
でもこれだとバイ&ホールドとあまり変わりませんね。
次回は別の銘柄、別の戦略で試してみようと思います。
今日はひとまずこんなところで。
それでは。