89通り試した「最良」が、検証期間で8割消えた話
バックテストは右肩上がりなのに、フォワードでは同じようにいかない。EA の検証をしていると繰り返し出会う現象です。
これは「フォワードが異常」なのではなく、多くの場合バックテストの数字のほうが構造的に高く出ていると考えたほうが実態に合います。手元の検証例で、その大きさを測ってみました。
実験
移動平均クロス戦略で、単純な手順を踏みました。USDJPY・日次・2020〜2023年です。
- 短期・長期の組み合わせを 89 通り用意する
- データ前半(IS:学習期間)で全部を回し、最も成績が良い設定を選ぶ
- その設定を、後半(OOS:検証期間)にそのまま適用する
OOS は「選んだ後のデータ」なので、疑似的なフォワードテストにあたります。
結果
| 区分 | シャープレシオ |
|---|---|
| IS(最良を選んだ期間) | 1.295 |
| OOS(同じ設定を適用) | 0.242 |
性能の 8 割以上が消えました。
ロジックは変えていません。相場が急変したわけでもありません。「89 通りの中から過去に最も合うものを選んだ」という操作だけで、この差が生まれています。
なぜ選ぶだけで下がるのか
たくさん試せば、過去データの偶然の癖にぴったり合う設定は必ず見つかります。その設定が拾っているのは、再現性のある優位性ではなく、その期間限りの偶然です。
試行数が増えるほど「偶然よく見える設定」を引き当てる確率は上がります。実際の EA 開発では試行数が数千、数万に及ぶこともあり、その場合の乖離はこの例よりさらに大きくなりえます。
ここで重要なのは、バックテストの数値が嘘だという話ではないことです。計算は正しい。ただ、それが何通りの中から選ばれた数字なのかという情報がないと、実力と偶然を区別できません。
乖離を生むその他の要因
過剰最適化以外にも、同じ方向に働く要因があります。
- コスト設定の差 — スプレッドやスリッページが実環境より甘いと、その分だけバックテストが有利になります
- 相場環境の変化 — 検証期間がトレンド中心なら、レンジに入った途端に前提が崩れます
- ルックアヘッド — その時点で知り得ない情報を誤って使うコード上の問題。バックテストだけが異常に良くなります
いずれも「バックテスト側が高く出る」方向に偏っているのが特徴です。
販売資料で確認したい 4 点
以上を踏まえると、EA の検証結果を見るときに確認したいのは次の点です。
- フォワード成績があるか — バックテストのみなら、上記の乖離分を織り込んで読む
- フォワードの期間と取引回数 — 1〜2 か月・数十回では、まだ偶然の範囲を出ません
- バックテストとフォワードの差 — 差が小さいほど、過剰最適化の疑いは弱まります
- パラメータを何通り試したか — 試行数が大きいほど「最良」は偶然で説明できる範囲が広がります
フォワードが十分な期間・回数で公開されていて、バックテストとの差が小さい。そこまで揃った成績は、条件不明の高い数字よりずっと読みやすくなります。
筆者について
上記の確認手順を、記入式のチェック表と販売者への質問テンプレート(6 問)にまとめた無料の PDF を GogoJungle で配布しています。
- EA販売ページ 5分チェックリスト【無料】(0円・A5・8ページ)
「何通り試した中の成績か」を統計的に補正する手法(Deflated Sharpe Ratio)と、本記事の 89 通りの検証手順は、有料版で詳しく扱っています。
いずれも筆者が作成した PDF 教材です。特定の EA・商品の購入可否を示すものではなく、本文中の検証例は教材用に設計した架空戦略によるものです。最終的な投資判断はご自身の責任で行ってください。