金融取引戦略を過去データで検証し、戦略の有効性や改善点などを分析に活用できる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は、金融取引の戦略を検証する便利なツールです。あくまで過去のデータに基づいており、将来の収益を保証するものではありませんのでリスク管理にはご注意ください。
リンク
リンク
リンク