はじめに
前回、紹介した Backtesting.pyでプルバック戦略を使ったバックテストプログラムを最適化してみた。銘柄は 1475 iシェアーズ・コア TOPIX ETF 1株価格が3000円未満 かつ 1株単位で買えます。
といっても、前回紹介したプログラムに少し手を加えるだけです。
実際のプログラム
解説
class PullbackStrategy の宣言のあとに、
n = 5 で過去5日間の安値を
m = 20 で過去20日間の高値を指定しています。
n = range(2,10,1) で 2から10までで1刻みでnの値を増やしていきます。
m = range(5,30,5)で 5から30まで5刻みでmの値を増やしていきます。
以上の条件で、n と mの値を変化させて、最も利益率の高い組み合わせを探してくれます。
n m の組み合わせの値を表示してくれます。この1行がないと、表示が見切れてしまい最適な組み合わせが見れなかったりします。
結果
Start 2022-01-04 00:00:00
End 2024-04-01 00:00:00
Duration 818 days 00:00:00
Exposure Time [%] 88.52459
Equity Final [$] 14405.0
Equity Peak [$] 14601.0
Return [%] 44.05
Buy & Hold Return [%] 35.093615
Return (Ann.) [%] 18.238847
Volatility (Ann.) [%] 15.482452
Sharpe Ratio 1.178033
Sortino Ratio 2.092337
Calmar Ratio 2.347042
Max. Drawdown [%] -7.770994
Avg. Drawdown [%] -2.255028
Max. Drawdown Duration 112 days 00:00:00
Avg. Drawdown Duration 23 days 00:00:00
# Trades 5
Win Rate [%] 100.0
Best Trade [%] 47.54522
Worst Trade [%] 43.179539
Avg. Trade [%] 45.242181
Max. Trade Duration 725 days 00:00:00
Avg. Trade Duration 676 days 00:00:00
Profit Factor NaN
Expectancy [%] 45.250874
SQN 82.724333
_strategy PullbackStrategy…
_equity_curve Equ…
_trades Size EntryBa…
dtype: object
PullbackStrategy(n=9,m=20)
n=9 m=20 の組み合わせで、
Buy & Holdが35%のリターンに対して 44%のリターンになっています。
あとは、ウォークフォワードテストを行って、最適化されていない組み合わせを探していく感じでしょうか?
コメント