Pythonでバイナリーオプションのバックテストやってみた!
先日こんなツイートをしました。
Pythonで為替の過去データを1年分の勝率、利益、曜日別、時間別の勝率、利益を分析してみた
— いしくらたける@プログラミング大好き (@tk_takeru_) 2020年11月1日
ロジックは
・RSI 30以上以下 かつ CCI 200以上-200以下 かつ ボリバン 3σ上下越え pic.twitter.com/8eashFacaM
highwin:82 highlose:50
— いしくらたける@プログラミング大好き (@tk_takeru_) 2020年11月1日
lowwin:157 lowlose:115
win:239 lose:165 total:404
HighWP: 62.12% LowWP: 57.72% WP: 59.15%
MON_WP:62.68%
TUE_WP:55.84%
WED_WP:59.74%
TUR_WP:55.55%
FRI_WP:63.21%
SAT_WP:50.0%
0 WP: 62.5%
1 WP: 43.75%
2 WP: 60.86%
3 WP: 70.96%
4 WP: 66.66%
5 WP: 54.83%
6 WP: 50.0%
— いしくらたける@プログラミング大好き (@tk_takeru_) 2020年11月1日
7 WP: 60.0%
8 WP: 42.85%
9 WP: 73.07%
10 WP: 61.11%
11 WP: 66.66%
12 WP: 50.0%
13 WP: 66.66%
14 WP: 50.0%
15 WP: 58.82%
16 WP: 44.44%
17 WP: 52.17%
18 WP: 73.33%
19 WP: 53.33%
20 WP: 37.5%
21 WP: 50.0%
22 WP: 85.71%
23 WP: 50.0%
takeprofit:1,015,750
loss:-825,000
PL:+190,750
— いしくらたける@プログラミング大好き (@tk_takeru_) 2020年11月1日
PF:1.2312121212121212
Max WIn: 11
Max Pro: + 46750.0
Max Lose: 6
Max DD: - 30000
Ave Pips: -207.2210676150628
という結果になりました。時間別、曜日別で取得することでロジックの細かい部分の勝ちやすいポイント負けやすいポイントを知ることができて非常に便利ですね。
3時、9時、18時、22時の勝率が70%を超えているのに対し、1時、8時、16時、20時は勝率が50%にも満たしていないですね。月曜日と、金曜日が非常に勝率が高い傾向にあるので曜日を絞ってトレードすることでさらに期待値を高めることができるますね!
— いしくらたける@プログラミング大好き (@tk_takeru_) 2020年11月1日
こちらのツイートではPythonを使ってバイナリーオプションの取引仕様でバックテストをしていきました。
用意するものどこからでもいいのですが、MT4でダウンロードしたヒストリカルデータを使ってバックテストをしていきます。
pandasでcsvファイルを読み込んで、for文で回して条件が一致したらエントリー。エントリー条件でフラグを立ててフラグが立ってたら現在の終値と次の行の終値で差額を出して判定して勝ちと負けでカウントする流れです。
勝ち負け判定時に時間別、曜日別でもカウントして配列に入れて最後にトータルの利益のグラフも出していきます。
ではtweetとは違うロジックでRSIで25以下でHighエントリー、75以上でローエントリーという条件で実際にバックテストを実行して
- USDJPY
- 5分後判定
- RSI25-75 Rogic
- ペイアウト1.85倍
- エントリー額1,000円
- Highエントリー勝率
- Lowエントリー勝率
- トータル勝率
- 総利益
- 総損失
- 最終利益
- プロフィットファクター
- 曜日別勝率
- 時間別勝率
- 最大連勝数
- 最大利益
- 最大連敗数
- 最大損失
- 平均獲得Pips
これらの数値を出していきます。それではやっていきましょう!
RSI25-75バックテスト結果はこちらです
RSI25-75
highwin: 6,254 highlose: 4,797 hightotal 11,051 HighWP: 56.59 %
lowwin: 6,691 lowlose: 5,536 lowtotal 12,227 LowWP: 54.72 %
win: 12,945 lose: 10,333 total: 23,278 WP: 55.61 %
MON_WP: 55.19 %
TUE_WP: 55.78 %
WED_WP: 55.68 %
TUR_WP: 54.78 %
FRI_WP: 56.51 %
SAT_WP: 64.1 %
0_WP: 57.92 %
1_WP: 56.89 %
2_WP: 60.61 %
3_WP: 56.16 %
4_WP: 56.3 %
5_WP: 55.72 %
6_WP: 57.25 %
7_WP: 56.66 %
8_WP: 54.48 %
9_WP: 58.14 %
10_WP: 53.38 %
11_WP: 57.41 %
12_WP: 58.76 %
13_WP: 55.99 %
14_WP: 56.09 %
15_WP: 55.48 %
16_WP: 53.77 %
17_WP: 54.31 %
18_WP: 54.32 %
19_WP: 56.29 %
20_WP: 53.38 %
21_WP: 50.54 %
22_WP: 52.83 %
23_WP: 54.68 %
take: 11,003,250 Jpy
loss: 10,333,000 Jpy
PL: 670,250 Jpy
PF: 1.064864995645021
Max WIn: 16
Max Pro: + 13,600.0 Jpy
Max Lose: 11
Max DD: - 11,000 Jpy
Ave Pips: 242.41423414445774
このような結果になりました。トータルで勝率55.61%となりました。
最終的に67万250円という結果になりました!
次回は別のロジックも検証してみたいと思います!
ありがとうございました!