MENU

【PO-EA#4】EA開発の分岐点。長期バックテストの落とし穴と「フォワードテスト」の重要性

【PO-EA#4】EA開発の分岐点。長期バックテストの落とし穴と「フォワードテスト」の重要性

前回は、AI(Gemini)に指示書を作ってもらい、AI(Claude)にプログラムを作ってもらった「パーフェクトオーダーEA」にATRに基づいたトレーリングストップを追加し、プロフィットファクターやドローダウンを改善しました。

今回は、カーブフィッティングを気をつけつつ、8年分のバックテストで最適化し、2年分のフォワードテストを行っていこうと思います。

目次

10年のバックテストが突きつけた「絶望的」な数値

まずは、前回の設定で8年分のバックテストを行います。

カーブフィッティングに気をつけつつバックテストとフォワードテストに分けて最適化を行います。

Tips

カーブフィッティング(オーバーフィッティング)とは過剰最適化とも言われ、最適化をするに当たって気をつけるべきポイントのことを指しています。
最適化で相場にあった(優位性のある)パラメータ設定を探していくわけですが、最適化した期間にのみ適した設定になってしまうことがあります。
この場合、別の期間では全く優位性がないので成績が振るわない状態になってしまいます。

今回は、以下のように期間を分けて合計10年分のデータで最適化を行います。

内容期間
バックテスト2016年1月1日~2023年12月31日(8年分)
フォワードテスト2024年1月1日~2025年12月31日(2年分)

PF1.08、DD60%という厳しい現実

前回の設定は以下のとおりです。

  • 通貨ペア:USDJPY
  • 時間足:1時間足
  • スプレッド:20point(2.0pips)
  • 初期資金:10万円
  • SL倍率:1.5
  • TP倍率:3.0
  • ATRトレール倍率:1.0
  • その他は初期値のまま

バックテスト結果は以下になりました。

前回の設定でバックテストを行った結果。資産がほぼ増えず、ドローダウンが大きい状態。

プロフィットファクターは1.08、最大ドローダウンも60.17%で金額にすると83,093円です。

初期証拠金10万円の状態で最大ドローダウンが来たとしたら、目も当てられません。

純益は約29,774円で年利3.7%ですが、資産曲線を見ると55番くらい(2017年9月26日頃)には純益32,313.40円に到達していたのに、ずっと目減りし、その後最後の1年くらい(215番が2022年11月24日頃)に盛り返しただけという、何とも不安定で実用性の欠片もない結果です。

前回のバックテスト期間は2021年1月1日~2025年12月31日だったので、ちょうど盛り返し初めた頃からバックテストをしていることになり、偶然良い結果だけを切り取ったと考えられます。

トレンドフォロー型のEAなので、低ボラティリティ期間でSLに刈られて負け続けたのではないかと思われます。

AIフィルターによる環境認識の再調整

今まで触ってこなかったAIフィルターを調整し、低ボラティリティ期間の無駄なエントリーを除外しましょう。

低ボラティリティ期間のエントリーがダメなので、単純にエントリー時に長期MAの角度が小さいときはエントリーを除外すれば良いのでは、ということで、AIフィルターの「長期MAの最小角度(変化量)」を最適化します。

最小値0.02、ステップ0.001、最大値0.05くらいでどうでしょうか。

最適化時のパラメータ設定。長期MAの最小角度にチェックを入れている様子

最適化の結果は以下のとおりです。

最適化結果。0.026~0.038の範囲のプロフィットファクターが良好な様子

0.026~0.035の範囲のプロフィットファクターが良好ですね。ドローダウンも悪くありません。特に0.032~0.036の範囲は極めて良い結果がでています。

0.02~0.023あたりはプロフィットファクターが1.2台、ドローダウンも30%台なので、その他の設定と比べると少し不安定な結果ですね。
少なくとも、角度が0.023以下の取引は除外しても良さそうです。

まずは、キリの良い数字である0.035を採用し、最適化ではなくバックテストの結果を見てみましょう。

一筋の光?「最適化」で見つけた期待の設定

バックテストの結果は以下です。

長期MAの最小角度を0.035に設定してバックテストした結果。右肩上がりでドローダウンの谷も小さい

プロフィットファクターや最大ドローダウンは最適化時に見た結果と当然同じですが、プロフィットファクターが1.81、最大ドローダウンが26.43%とかなり好成績です。

純益も81,461.10円で、8年で+80%。単純計算で年利10%と破格の成績ですね。

長期MA角度とTP(利確)のバランス

長期MAの最小角度は0.035が良さそうですが、念の為にTP倍率を0にした場合もバックテストしてみましょう。

現在のTPを超えてトレンドが伸びたポイントで、凄まじい利益を出してくれるかもしれません。

バックテストの結果は以下です。

長期MAの最小角度は0.035のままで、TP倍率を0.0設定してバックテストした結果。右肩上がりでドローダウンの谷も小さいが、TP倍率が3.0の時よりもパッとしない結果

プロフィットファクターは1.50で、最大ドローダウンは38.18%(金額は44,541.84円)と、TP倍率が3.0の時と比べるとどうも見劣りしてしまいますね。

おそらく、TP倍率が3.0の時のTP以上にトレンドが伸びないポイントが多かったため、TPにかかったときよりも全体の利益が減ってしまい、結果として成績がワンランク下がってしまったのではないかと思います。

長期MAの最小角度は0.035、TP倍率は3.0が良さそうに見えますね。

「TPあり」がもたらした見かけ上の安定感

TPを設定したことで、不安定なロジックの粗(あら)が隠され、まるでパズルのピースが偶然ハマったかのような『偽りの安定感』が生まれていました。

でも、この時の私はそのことには気づかず「TP倍率0だと数値が下がるから、TP倍率は3.0で正解だね」と安易に考えていました。

そして、これが後にフォワードテストで牙を剥くことになります。

衝撃のフォワードテスト。最新相場での「純益マイナス」

早速、先程の最適化で見つけた設定でフォワードテストを行います。

設定は以下です。

  • 通貨ペア:USDJPY
  • 時間足:1時間足
  • スプレッド:20point(2.0pips)
  • 初期資金:10万円
  • SL倍率:1.5
  • TP倍率:3.0
  • ATRトレール倍率:1.0
  • 長期MAの最小角度:0.035
  • その他は初期値のまま

2024年〜2025年。変わり果てたEAの挙動

結果は以下です。

バックテストでプロフィットファクター1.81を叩き出した設定のフォワードテスト。上下しつつ原価割れしている。

まさかのマイナス

「あんなにバックテストの結果が良かったんだから、フォワードテストも問題ないでしょう」とワクワクしていたらこれです。

初期証拠金の10万円を上回っている期間がほぼなく、純益は-5,000円、プロフィットファクターも1.0を割り込み0.90。

完全に使うだけ損なEAです。

なぜバックテストの「最適解」は裏切るのか

原因は明らかです。

わかりやすくするために、結果を表にしてみましょう。

項目バックテストフォワードテスト変化
プロフィットファクター1.810.90-0.91
純益81,461.10-5,000.01-86,461.11
勝率52.38%40.0%12.38%
勝トレード平均5527.943933.72-1594.22
負トレード平均-3365.36-2900.26465.1

勝率は下がり、勝トレード平均額も下がっています。

負トレード平均は多少改善されていますが、勝トレード平均の下がり幅の約3分の1程度なので、あまり意味はなかったようです。

これは、バックテストの8年間の相場ではTPの設定値がハマりTPで逃げ切れていましたが、フォワードテストの2年間の相場ではTPの設定値が意味をなさず、トレーリングストップでトントン、またはSLに直行で損失ばかりになってしまっていたということです。

つまり、カーブフィッティング(過剰最適化)です。

特定の期間でしか通用しない「偽りの聖杯」を作っていたことに、フォワードテストでようやく気づかされました。

【徹底分析】チャートが教えてくれた「往復ビンタ」の正体

トレンドの初動は、赤ん坊の歩みのようにゆっくりと始まります。

一方、トレンド中の戻し(押し目)は、崖を転がり落ちるような鋭い動きを見せることがあります。

AIフィルターは、この「鋭い偽物の動き」を本物と勘違いし、「本物の緩やかな動き」を無視してしまっていたのです。

上昇トレンドの「深い押し目」に騙される売りのロジック

兎にも角にも原因を考えないと使い物にならないEAのままなので、チャートを確認していきましょう。

チャートを1つずつ確認すると、負けパターンの共通点が見えてきました。

上昇トレンドの途中で一時的に急落した際、一瞬だけ「下降パーフェクトオーダー」が形成され、EAがそれに反応して売っていました。

しかし、それは単なる「押し目」であり、すぐに上昇トレンドに戻って損切りされる……という典型的な往復ビンタを喰らっていました。

上昇トレンド中の戻しに発生した下降パーフェクトオーダーで売りエントリーし、損切りしている様子。

MA角度フィルターの限界と機会損失

さらには、売りポジションが損切りされた後や、その前に発生している上昇トレンドのパーフェクトオーダーでは買いエントリーしていません(こんなに伸びているのに…)

上昇トレンド発生時に買いエントリーせず、戻しの時だけ売りエントリーして損切りされている様子。

これは、上昇トレンド発生時の長期MAの角度が緩やかなため、AIフィルターで除外されてしまったためです。

トレンドフォロー型なのに、トレンドの逆方向にエントリーするというチグハグな状態ですね。

この後、短期MAの最小角度や中期MAの最小角度、逆転の発想で長期MAの最大角度フィルターなどを実装してみましたが、暖簾に腕押し、特に良い結果は得られませんでした。

まとめ:角度だけでは「今」を勝ち抜けない

AIが提案してくれた角度フィルターは、どうもパーフェクトオーダーのロジックには噛み合わない可能性がでてきました。

今のままでは、どんなに最適化しても勝てない。

必要なのはパラメーターの微調整ではなく、相場を見る「視点」そのものの転換でした。

次回、MAの角度という呪縛を解き放ち、新たなフィルターで挑む「大逆転編」が始まります。

今回作成したコード

今回作成したMQL4コードはこちらです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

開発エンジニア。「AIでEAを作ったが動かない」という壁を突破するための、修正のコツや検証技術を発信しています。作成代行や販売経験を活かし、皆さんが自分のロジックを自由に形にできるための小さな「燈」を灯します。 (※現在は作成代行の受付は行っておりません)

コメント

コメントする

CAPTCHA


目次