同じEAを同じ期間で回したのに結果が変わる ── MT4が「前回の設定」を覚えている話
EAを検証していて、こんな経験はないでしょうか。
昨日と同じEA、同じ通貨ペア、同じ期間でバックテストを回したのに、取引回数も損益も違う数字が出てくる。設定を見直しても、どこも変えた覚えがない。
先日これに丸一日ぶつかりました。原因はEAでも相場データでもなく、MT4が前回のパラメータを覚えていて、それを優先していたことでした。ストラテジーテスターの画面に表示されている値とも、渡したはずのファイルの中身とも違う値で走っていたわけです。
知らないと「このEAは再現性がない」と誤った結論を出しかねない挙動なので、実測した数字と一緒に共有します。
何が起きたか
あるEAについて、中身を整理した版と元の版で「取引が完全に一致するか」を確かめていました。ロジックには一切手を入れず、外から変更できるパラメータを増やしただけなので、既定値のまま回せば1本残らず同じ取引になるはずです。
条件は次のとおりです。
- USDJPY / M5
- 2019年1月1日 〜 2026年1月1日(7年)
- 始値のみ / スプレッド20
1回目の結果は期待どおりでした。
- 元の版 1345取引 / 整理した版 1345取引
- 約定を発生順に突き合わせて 1345件すべて一致(100.0%)
- プロフィットファクタ・最大ドローダウンも完全一致
問題は次でした。パラメータを何通りか振って感触を見たあと、もう一度「既定値どうしの比較」に戻したところ、一致率が17.9%まで落ちたのです。
コードは1バイトも変えていません。期間もスプレッドも同じ。それでも1345件のうち8割以上の取引が食い違いました。
ここで普通に考えると「パラメータを増やした改造に副作用があった」という結論になります。実際、私も最初はそう疑いました。
しかし、これはまったくの濡れ衣でした。
真犯人はEAではなくMT4側にあった
種明かしをすると、直前の探索で一度だけ「サーバー時刻のオフセット(GMT)」を1に設定して回していました。その値が次の実行に持ち越され、元の版だけがGMT=1のまま、整理した版はGMT=0で走っていたのです。
時間フィルタを持つEAにとって、サーバー時刻が1時間ずれることは相場が変わるのとほぼ同義です。エントリーの可否が変わり、そこから先の建玉がすべてずれる。8割食い違うのは当然でした。
怖いのは、この状態がどこにも表示されないことです。テスターの画面はいつもどおりで、エラーも警告も出ません。両方のレポートがそれらしい数字で出てくるので、比較した人間だけが「EAのせいだ」と誤解します。
ここまでが現象です。ここから先は、なぜMT4がこうなるのか、そして再現性のある検証をするために具体的に何をすればいいのかを書きます。