コンテンツにスキップ

Pythonライブラリ Backtesting.py

Pythonで米国株の相関係数を求める方法をまとめる

Backtesting.py

Pythonのバックテスト用ライブラリ

公式ページ

Backtesting.py

インストール

pip3 install backtesting

Backtesting.pyはPython3で動作する

使い方

    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()
    stats
BackTest(DataFrame(pandas), Strategyクラス, 手数料)
引数に渡すデータフレームのカラムは頭文字が大文字'Open', 'High', 'Low', 'Close'にする 注文は現在のローソク足の終値(または次のローソク足の始値)で計算される
run()はバックテストのシミュレーション結果をpandasのseries型で返す
    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

バックテストを可視化する

bt.plot()
backtesting

ズームや詳細のポップアップなど動的なグラフをプロットできる

参考

Sugano様のMediumの記事が詳細にまとめられていて参考になる