シリーズ「AIで自作のEAを作る」第3回
バックテストで右肩上がりの資産曲線が出た。プロフィットファクターも1を超えている。これは信用していいのでしょうか。
結論から書きます。それだけでは、何の証拠にもなりません。利益の源泉が存在しないデータでも、同じ形は作れるからです。
この記事では、それを実際に検証した結果と、自分のEAが本物かどうかを確かめる4つの手順をまとめます。
検証:利益が取れないことが保証されたデータで、EAを最適化する
検証用に、6000本ぶんの価格系列を乱数から生成しました。方向性を持つ動きも、値が跳ね返る水準も、意図的に一切埋め込んでいません。設計上、そこから抜き出せる利益はゼロです。
この系列に対して、第1回で作った移動平均クロスEAを走らせます。短期側と長期側の期間を機械的に振り、987通りの設定を全数評価しました。
結果1:この戦略は、そもそも負ける
| 項目 | 値 |
|---|---|
| 987通りの平均損益 | −88.5 |
| 中央値 | −77.8 |
| プラスになった組み合わせ | 79通り(8%) |
ノイズを移動平均で追いかければ、往復ビンタで削られます。負けるのが当然の結果です。
結果2:それでも「勝てる設定」は必ず見つかる
| 項目 | 値 |
|---|---|
| 最良パラメータ | 短期59 / 長期110 |
| 損益 | +97.5 |
| プロフィットファクター | 1.02 |
| 取引回数 | 50回 |
この数字だけを見せられたら、多くの人が「悪くない」と判断すると思います。中身はただの乱数です。
たまたまその乱数の形が良かったわけでもありません。独立した乱数データを8本用意して同じことをすると、8本すべてで「勝てる設定」が見つかりました。

注目すべきは左側の青い棒です。系列によっては全体平均が−270まで沈んでいます。それでも右側の金色、つまり選び抜いた1通りは +185。母集団が負けていることと、そこから勝ちを取り出せることは、両立します。
なぜこうなるのか
これは相場の性質ではなく、数の性質です。
候補を1000近く並べれば、その端には極端な成績のものが必ず現れます。母集団が大きくなるほど、裾は伸びる。統計として当たり前の挙動です。
そして最適化という作業は、まさにその裾の一点を拾い上げる行為です。拾い上げた成績が優位性に由来するのか、単に裾だったのか——成績そのものを眺めていても、この2つは判別できません。
統計の世界では多重比較の問題として知られています。何百回も検定すれば、偶然「有意」になるものが出てくる。それと同じ現象が、パラメータ最適化でも起きています。
自分のEAを疑う4つの手順
では、当たりくじではないことをどう確かめるのか。順番に効く4つを挙げます。
1. アウトオブサンプル検証:最適化に使っていない期間で回す
これが最優先です。手持ちの期間を分けて、前半だけで最適化し、後半には一切触らずに取っておく。決まったパラメータを後半にそのまま当てて、成績が保たれるかを見ます。
先ほどの検証でも同じことをしています。選ばれた設定を、生成し直した別系列30本にそのまま適用した結果です。

| 最適化したデータ | 別データ30本 | |
|---|---|---|
| 損益 | +97.5 | 平均 −39.1 |
| プラスの割合 | — | 13/30本 |
一歩外に出た瞬間に、ほぼコイン投げに戻ります。本物であれば、ここまで落ちません。落ちたなら当たりくじです。
2. パラメータの周辺を見る:崖か、高原か
最良パラメータの隣を確認してください。短期59が良かったなら、57や61でも同じように良いか。
- 周辺も同じくらい良い(高原)→ 何らかの実体がある可能性がある
- そこだけ突出して隣は崖(ピーク)→ ほぼ確実に偶然
本物の優位性は、パラメータを少し動かしたくらいでは消えません。1だけずらすと崩壊するなら、それはデータの形にはまり込んでいるだけです。
このEAも記事も、AIと一緒に作っています。私はプログラマーではありません。MT5のEAもインジケーターも、今回の検証プログラムも、Claude(AI)と対話しながら作っています。コードが書けなくても、作りたいものを言葉にできれば形になります。無料でも使えるので、同じように「作る側」に回ってみたい方は、こちらから試せます。
https://claude.ai/referral/sWCPCcvVWQ
※紹介リンクです。
3. 取引回数を確認する:少ないほど当てにならない
取引20回で勝率70%と、取引500回で勝率55%では、後者のほうがはるかに信用できます。回数が少ないほど、偶然でその成績になる確率が上がるからです。
今回の最良パラメータの取引回数は50回でした。50回という数字は、偶然でこの程度の成績が出るには十分すぎる少なさです。
4. 乱数データをベンチマークにする
今回やったことを、そのまま自分のEAでもできます。
- 自分のEAの最適化結果(最良の損益やPF)を記録する
- 同じ本数の乱数データを作る
- 同じパラメータ範囲で、同じ総当たりをする
- 乱数で出た最良と、実データで出た最良を比べる
実データの成績が乱数の成績と同程度なら、そのEAは相場から何も取れていません。「プラスかどうか」ではなく「乱数より明確に上か」で判断する——これが基準になります。
検証コード自体を疑う
もうひとつ、見落とされがちな落とし穴があります。検証コードにバグがあると、負ける戦略が聖杯に化けます。
とくに多いのが先読みです。ポジションを決めた時点より前の値動きを損益に含めてしまうと、未来を見て売買したことになり、成績が異常に良くなります。
見分け方は簡単です。「ランダムに売買するだけ」の戦略を同じコードで回してください。損益がゼロ付近にならなければ、コードのどこかが壊れています。
結果が良すぎるときは、まず自分のコードを疑う。これはAIにコードを書かせる場合、とくに重要になります。
この検証は再現できます
この記事の数字は、次の条件で出しています。乱数系列は6000本(シード20260824)、グリッドは短期3〜59を2刻み × 長期15〜200を5刻みの987通り。アウトオブサンプルはシード900〜929の別系列30本、独立8系列はシード7000〜7007です。
なお、この数字はスプレッドも手数料もゼロで算出しています。片道2pipsを入れると、平均は−88.5から−90.6、プラスの組み合わせは79通りから77通り、最良は+97.5から+96.5。ほとんど変わりません。
検証に使ったPythonスクリプトは、全文をnoteの記事に載せています。コピーして実行すれば、上の数字がそのまま再現できます。
まとめ
| 見るもの | 当たりくじの兆候 |
|---|---|
| アウトオブサンプル | 別期間で成績が大きく落ちる |
| パラメータの周辺 | 最良の隣が崖になっている |
| 取引回数 | 数十回しかない |
| 乱数ベンチマーク | 乱数データの最良と大差ない |
| 検証コード | ランダム売買の損益がゼロにならない |
EAを組めるようになった先にあるのは、華やかな作業ではありません。自分が出した数字を潰しにかかるという、地味で反復的な工程です。ここを省略した時点で、そのEAは運用資産ではなく賭け札になります。
実験の全記録はnoteに書きました
この記事は手順に絞りました。乱数チャートをどう作り、987通りをどう回し、途中でどんなバグを踏んだのか——その過程をそのまま書いた記事をnoteに公開しています。
乱数で作ったニセのチャートでEAを987通り試したら、ちゃんと「勝てる設定」が見つかった(note)
※シリーズの過去回はこちらです。
第1回:プログラムが書けない私が、AIと30分で「移動平均線だけのEA」を作った全記録
第2回:AIに「お世辞を言うな」と書いたら、EA作りが進むようになった話
使用ブローカー
MT5を使うには口座が必要です。私が使っているのはExnessです。口座開設はこちらから。
https://one.exnessonelink.com/a/frbss95cj4
お問い合わせ
公式LINE:https://lin.ee/9yDXJ19
メール:ea-designer-kuu@hashibito-llc.com
免責事項
本記事は情報提供および技術解説を目的としたものであり、投資勧誘を目的としたものではありません。本記事の検証は乱数で生成したデータによるものであり、特定の相場や商品の将来を示すものではありません。本記事で紹介するEAおよび検証手順は学習用のものであり、収益を保証するものではありません。バックテストの結果は将来の成果を保証しません。FX・CFD取引には元本を割り込むリスクがあります。取引の最終判断はご自身の責任で行ってください。
EA Designer Kuu

コメント