2019年に作ったEAの「PF1.85」を16年分で回し直したら、コスト0でも4ペアとも勝てなかった
0.72〜1.00 コスト0でのPF(4ペア) | 24通り 損切り・利食いの組み合わせ。全部PF1未満 | t=0.58〜1.07 唯一効いた改善。偶然と区別できない |
MT4/MT5のインジケーターを作って、GogoJungleで販売している lab.aiueo です。
2019年に、EA(自動売買のプログラム)を1本作りました。ボリンジャーバンドの逆張りです。
フォルダに、当時のテスト結果の画像が残っていました。ドル円で1,560回の取引、PF(総利益÷総損失)1.85、最大ドローダウン7%。
今の私なら、この数字をまず疑います。8月に、このEAを約16年半のデータで回し直しました。今日は、その結果です。
先に結論を書きます。
当時のEA
ルールは単純です。
- ボリンジャーバンド(期間8、±2σ)の外で終値が付いたら、反対向きに入る
- 入る条件が2つ
- 直前の足のバンドの幅が、その前8本の最大より狭いこと
- 戻す向きのヒゲが、一定以上あること
- 損切り20pips、利食い50pips
- もう1つの決済:いまバンドのどの帯にいるかを0〜5の番号にして、1段でも不利な側へ動いたら決済
当時のテスト結果の画像です。
画像はドローダウンの小さい順に並んでいて、ドル円は上から2行目です。下のほうには、PFが1を下回る通貨ペアも並んでいます。画像には、テストの期間も、テストの方式も写っていません。
回し直した条件
EAと同じルールをPythonで書き直して、Ti〇n FX のMT4に入っている価格データで回しました。
- 通貨ペア:ドル円・ユーロドル・ポンドドル・ドルスイス
- 時間足と期間:4時間足、2009年12月〜2026年7月(約16年半)
- 入り方:足が確定するたびに判定し、次の足の始値で入る
- 損切り・利食い:足の中の高値・安値で、触れたかを見る。同じ足で両方に触れたときは、損切りが先と数える(厳しめ)
- コスト:スプレッドを差し引く(0/0.5/1/2pips)
1つだけ、元のEAから変えた所があります。ヒゲの条件です。
元のEAでは、ヒゲの長さを「0.0004」で決めていました。ユーロドルなら4pipsですが、ドル円では0.04pipsで、条件としてほとんど効いていません。4つのペアで同じ意味になるよう、4pipsにそろえました。
なお、元の0.0004のままのドル円でも、スプレッド0でPF0.86でした。結論は変わりません。
結果:コストを0にしても、勝てない
| 通貨ペア | 取引 | 勝率 | PF(スプレッド0) | PF(スプレッド1pips) |
|---|---|---|---|---|
| ドル円 | 406回 | 31.5% | 0.83 | 0.74 |
| ユーロドル | 719回 | 28.8% | 0.82 | 0.76 |
| ポンドドル | 670回 | 30.7% | 1.00 | 0.92 |
| ドルスイス | 416回 | 29.3% | 0.72 | 0.66 |
取引と勝率は、スプレッド0のときの値です。
ポンドドルの1.00は、16年半の合計で−13.7pips。ほぼゼロで、わずかにマイナスです。
決済の内訳を見ると、理由が見えます。ドル円(スプレッド1pips)では、損切りが260回、利食いが66回でした。利食いの50pipsに届く前に、損切りの20pipsに触れています。
2つの条件も、2つ目の決済も、効いていなかった
入る条件
条件を2つとも外すと、取引は2倍以上に増えました。PFは、4ペアのうち3ペアで、外したほうがむしろ良くなりました。
条件は、取引の回数を減らしていただけでした。
バンドの帯での決済
この決済を外して、損切りと利食いだけにすると、ドル円の勝率は29.8%から22.1%に下がります。勝率は、この決済のおかげで上がっていました。
ところが、PFはほとんど変わらないか、悪くなっていました。4ペアのうち2ペアは、外したほうがPFが高くなります。
損切りと利食いを24通り変えても、全部負け
損切りと利食いの組み合わせを6通り(20/50、20/20、30/30、50/20、40/100、20/100)、4ペアで回しました。24通りすべてで、PFは1未満でした。
損切り50・利食い20にすると、勝率は57〜65%まで上がります。それでもPFは0.65〜0.84です。
設定をいくら変えても勝てないなら、問題は設定ではなく、作りのほうにあります。
唯一効いたこと:上の流れと同じ向きだけに絞る
1つだけ、はっきり良くなる変え方がありました。
4時間足の移動平均(50本・100本・200本)より上にいるときは買いだけ、下にいるときは売りだけ。逆張りを、流れの中の押し目買いと戻り売りに限る形です。
| 通貨ペア | 絞る前 | 50本 | 100本 | 200本 |
|---|---|---|---|---|
| ドル円 | 0.74 | 0.90 | 1.02 | 1.12 |
| ユーロドル | 0.76 | 0.83 | 0.85 | 0.82 |
| ポンドドル | 0.92 | 1.18 | 1.14 | 1.08 |
| ドルスイス | 0.66 | 0.85 | 0.74 | 0.70 |
数字はPF、スプレッドは1pipsです。
4ペアとも、絞る前より良くなりました。ドル円(200本)とポンドドル(50本)は、PFが1を超えています。
それでも、製品にしなかった理由
PFが1を超えた2つを、細かく見ました。
- 回数が少ない:16年半で、ドル円145回、ポンドドル205回。1年に9〜12回ほど
- 1回あたりの儲けが小さい:平均で+1.40pipsと+2.35pips。スプレッドが広がる時間帯や、注文した価格とのずれで消える大きさです
- 偶然と区別できない:1回ごとの損益のばらつきから出したt値は、0.58と1.07。偶然ではないと言える目安の2に届きません
- 良かった長さが、ペアごとに違う:ドル円は200本、ポンドドルは50本。ユーロドルとドルスイスは、どの長さでもPFが1に届きません。あとから一番良い長さを選べば、良く見えるのは当たり前です
方向としては、正しかったと思います。でも、これ単体では製品になりません。
なぜ当時は、PF1.85に見えたのか
当時のテストの条件は残っていないので、ここからは推定です。考えられることが2つあります。
1つは、テストの方式です。MT4でもMT5でも、テスターでは、足の中の値動きをどこまで細かく再現するかを選べます。粗い方式では、足の中で損切りと利食いのどちらに先に触れたかが、実際と違う扱いになることがあります。
もう1つは、EAの中の「間引き」です。このEAは、価格が動くたびではなく、500回に1回だけ判定していました。価格の動きを何回再現するかはテストの方式で変わるので、判定するタイミングも、方式しだいで変わります。
同じEAでも、テストの方式で数字が変わる作りだった、ということです。
もう1枚、2019年4月の最適化の画像も残っていました。1位は、取引17回でPF3.03です。
17回では、偶然と区別がつきません。それでも、EAに残っていた設定は、この表の1位と同じ値でした。
今の私なら、最初にやること
- スプレッド0で回す。0でも負けるなら、その先の調整には意味がない
- 足の中の高値・安値で、損切りに触れたかを確かめる
- 回数が少ない結果は、信じない
- 一番良い行だけを見ない。同じ表の、悪い行も見る
- あとから一番良い設定を選んだ結果は、割り引いて見る
本記事は、私自身が過去に作ったEAを検証した記録です。特定の売買手法を勧めるものではなく、掲載した数値は将来の成績を示すものではありません。検証は、同じルールをPythonで再現したもので、MT4のストラテジーテスターの結果とは一致しない場合があります。投資判断はご自身の責任で行ってください。
最後まで読んでいただき、ありがとうございました。