「バックテストではPF1.3だったのに、フォワードではPF1.0を下回っている」
EA運用をしている人から、こういう話をよく聞きます。
バックテストと実運用の乖離は、EA運用で最もよく起きる問題のひとつです。
乖離が起きたとき「このEAは使えない」と判断してしまいがちですが、実は乖離の原因の多くはEAのロジックではなくバックテストの設定や環境の違いにあります。
EA-LabではGENESIS・凜・AXISの開発・運用を通じて、バックテストとフォワードの乖離に何度も向き合ってきました。「なぜ乖離が起きているのか」を分析する経験が積み重なっています。
この記事では、バックテストと実運用で結果が乖離する5つの原因と、それぞれへの対処法を解説します。
原因①:スプレッドの設定が現実と違う
最もよくある原因です。
バックテストではスプレッドを固定値で設定することが多いです。しかし実際のフォワードではスプレッドは常に変動しています。
特に以下の局面でスプレッドが大幅に拡大します。
重要指標発表前後(米雇用統計・FOMC・CPIなど)。流動性が低い時間帯(市場クローズ前後・深夜早朝)。突発的なニュースや地政学的リスク発生時。
バックテストで2pips固定に設定していても、フォワードでは発表時に10pips以上に拡大することがあります。
この差が積み重なってPFの乖離につながります。
GENESISのGBPUSDは特にスプレッドが拡大しやすい通貨ペアです。開発段階でスプレッドを固定の低い値で設定していたとき、フォワードとの乖離が大きくなった経験があります。
現在はバックテストのスプレッドを実際より1〜2pips広めに設定するか、フローティング(可変スプレッド)を使うことで乖離を最小化しています。
スプレッド設定の詳しい考え方はこちらで解説しています。
原因②:スリッページが考慮されていない
バックテストでは注文した価格で約定しますが、実際のフォワードでは約定スリッページが発生します。
スリッページとは、注文した価格と実際に約定した価格のズレです。
特に以下の状況でスリッページが大きくなります。
相場が急激に動いている局面。流動性が低い時間帯。市場注文(成行注文)でのエントリー・決済時。
SLの設定があっても、スリッページで想定より悪い価格で損切りされることがあります。これがフォワードのPFを下げる原因のひとつです。
対処法
ブローカーの約定品質を確認することが重要です。スリッページが少ないブローカーを選ぶことで、バックテストとフォワードの乖離を減らせます。
またMT5のストラテジーテスターでは「遅延」の設定でスリッページをシミュレーションできます。この設定を活用することでより現実的なバックテストが可能になります。
スリッページについてはこちらで詳しく解説しています。
原因③:バックテストデータの品質が低い
MT5のバックテストはヒストリカルデータを使います。このデータの品質が低いと、バックテストの精度が落ちます。
データ品質の問題が起きるケース
データが不足していて一部の期間がシミュレーションで補完されている。データにギャップがある。古いデータで精度が低い。
バックテスト実行後、結果画面(バックテストタブ)の「ヒストリー品質」を確認してください。99%が理想です。これが低い場合、バックテストの信頼性が下がります。
対処法
MT5のデータセンターから最新のヒストリカルデータをダウンロードします。ブローカーが提供する高品質なティックデータを使用します。
また「全ティック」モードでバックテストを実行することが重要です。「始値のみ」モードは処理が速い反面、精度が大幅に落ちます。
MT5のストラテジーテスターの正しい使い方はこちらで解説しています。
原因④:相場環境の変化
バックテストで使ったデータと、フォワードの相場環境が異なる場合に乖離が発生します。
これはEAのロジックが悪いのではなく、相場環境がEAの想定と異なる局面に入っていることが原因です。
GENESISを例にすると、BOXブレイクアウト型のロジックはトレンドが発生しやすい相場で機能しやすいです。しかしダマシが多発するレンジ相場が続く期間は、バックテストの期待値より成績が落ちます。
凜のアノマリー型も同様です。アノマリーが機能しにくい相場環境(ショック相場・祝日が多い月など)では成績が落ちます。
対処法
この原因による乖離は、一時的なものである可能性が高いです。相場環境が変わればパフォーマンスが戻ることがあります。
判断するためには、乖離がバックテストの最大DD範囲内に収まっているかどうかを確認することが重要です。範囲内であれば一時的な相場環境の影響と判断して継続します。
原因⑤:過剰最適化(カーブフィッティング)
これが最も根本的な問題です。
バックテストで良い結果が出るようにパラメータを最適化しすぎると、過去データにだけ適応したEAができあがります。
過剰最適化されたEAは、フォワードで必ず崩れます。なぜなら過去のデータに特有のパターンに適応しただけであり、未来の相場でそのパターンが再現される保証がないからです。
過剰最適化のサイン
バックテストのPFが2.0以上・DDが極端に小さい。取引数が少ないのにPFが高い。異なる期間でバックテストすると結果が大きく変わる。
EA-Labの開発でも、GENESIS・凜・AXISそれぞれで過剰最適化の誘惑に直面しました。特に凜の開発では、時間帯の細分化や複合フィルターを試みたものの、過剰最適化リスクを判断して全て不採用にした経緯があります。
対処法
ロバストネステストを実施します。最適値のパラメータの前後の値でもバックテストを行い、結果が安定しているかを確認します。
サンプル外検証を実施します。最適化に使ったデータとは別の期間のデータで検証します。
ロジックをシンプルに保ちます。パラメータの数が少ないほど過剰最適化のリスクが下がります。
過剰最適化の詳しい解説はこちらで確認できます。
5つの原因をどう見分けるか
バックテストとフォワードの乖離が発生したとき、原因を見分けることが重要です。
乖離が小さい(PFが0.1〜0.2程度の差)場合
スプレッドやスリッページの影響が主な原因の可能性が高いです。バックテストのスプレッド設定を見直すことで改善できる可能性があります。
乖離が中程度(PFが0.3〜0.5程度の差)で一時的な場合
相場環境の変化が原因の可能性があります。DDがバックテストの最大DD範囲内に収まっていれば、一時的な局面として継続を検討します。
乖離が大きい(PFが大幅に異なる)または継続的な場合
過剰最適化が原因の可能性があります。ロジックの根本的な見直しが必要なサインです。
バックテストの信頼性についてはこちらで詳しく解説しています。
フォワードテストの正しい評価方法はこちらで解説しています。
まとめ
バックテストと実運用で結果が乖離する5つの原因をまとめます。
①スプレッドの設定が現実と違う → バックテストのスプレッドを実際より広めに設定する・フローティングを使う。
②スリッページが考慮されていない → 約定品質の良いブローカーを選ぶ・遅延設定を活用する。
③バックテストデータの品質が低い → ヒストリー品質99%・全ティックモードで検証する。
④相場環境の変化 → DDがバックテストの最大DD範囲内なら一時的な影響として継続判断する。
⑤過剰最適化 → ロバストネステスト・サンプル外検証・ロジックのシンプル化で対処する。
乖離が起きたとき「このEAはダメだ」と即断する前に、まず原因を特定してください。
原因によって対処法は全く異なります。正しい原因分析がEA運用で長期的に生き残るための重要なスキルです。