この記事でできるようになること
- 「過剰最適化(カーブフィッティング)」とは何か、なぜ危険かを説明できる
- 検証期間をインサンプル/アウトオブサンプルに分けて、過剰最適化を見抜ける
- 「これ以上いじらない」と判断する基準を持ち、改善をやめられる
準備するもの
- 第6章の改善サイクルを回してきたEA(版番号付き)
- 第5章で準備した、5年分以上のヒストリカルデータ(足りなければ5-1の手順で追加します)
- 結果の記録表
手順
手順1 過剰最適化とは何かを知る
過剰最適化とは、「過去のデータに合わせすぎて、未来では通用しなくなったEA」を作ってしまうことです。英語で「カーブフィッティング(curve fitting)」とも呼ばれます。「過去のグラフ(カーブ)にぴったり合わせた(フィッティング)」という意味です。
なぜ起きるのかを、たとえ話で説明します。
過去3年分の天気の記録から「火曜の午後は雨が多かったから傘を持つ」というルールを作ったとします。過去のデータでは的中率が高いでしょうが、来年の火曜も雨が多い理由はどこにもありません。
EAでも同じことが起きます。損切りを33pipsに、RSIの期間を13に、買いの水準を27に、火曜と木曜は取引しないように……と細かく調整すれば、過去のテストではPF 3.0のような数字が出せます。ですがそれは「過去3年間の値動き」に合わせた数字であって、来月の値動きに合う保証はまったくありません。
過剰最適化の怖いところは、バックテストの数字だけを見ていると気づけないことです。むしろ数字が良ければ良いほど、疑う必要があります。
手順2 過剰最適化のサインを知る
改善を進める中で、次のようなサインが出たら要注意です。
- 改善を重ねるたびにPFが上がり続け、2.0や3.0を超えた
- input 変数の値が「23」「47」「33」のような中途半端な数字になっている
- ルールが増えて、「〇〇のときは取引しない」の条件が4つも5つもある
- 全期間ではPFが高いのに、前半/後半に分けると片方だけ極端に良い
- 取引数が改善のたびに減り、100回を割り込んできた
1つでも当てはまれば、次の手順で確かめます。
手順3 検証期間を「インサンプル」と「アウトオブサンプル」に分ける
過剰最適化を見抜く一番確実な方法は、改善に使う期間と、確かめる期間を分けることです。
- インサンプル(in-sample): 改善や最適化に「使う」期間。EAはこの期間の値動きを「見て」調整されます
- アウトオブサンプル(out-of-sample): 改善には「一切使わない」期間。調整が終わったEAに、初めて見せる値動きです
アウトオブサンプルは、EAにとって「未来の相場」の代わりです。ここで成績が保てるなら、実際の未来でも通用しやすいと考えられます。
具体的な分け方(例)
5年分のデータがある場合、おおよそ7対3または8対2で分けます。
| 区分 | 期間 | 用途 |
|---|---|---|
| インサンプル | 2021.01.01〜2024.06.30(3年半) | 改善サイクル・最適化に使う |
| アウトオブサンプル | 2024.07.01〜2025.12.31(1年半) | 最後に1回だけ確かめる |
第5章の「前半/後半」検証と似ていますが、違いは「後半は最後まで封印し、改善には使わない」と最初に決めておく点です。データが3年分しかない場合は、2年をインサンプル、1年をアウトオブサンプルにします。1年より短いと取引数が少なすぎて判断しにくくなります。
手順4 インサンプルだけで改善・最適化する
- ストラテジーテスターの「期間を指定」を、インサンプルの期間(例: 2021.01.01〜2024.06.30)にします。
- この期間だけで、6-1の改善サイクルと6-2の最適化を行います。
- アウトオブサンプルの期間は、このあいだ一度もテストしません。うっかり見てしまうと、無意識にその期間に合わせた判断をしてしまい、封印の意味が無くなります。
- 改善が一段落したら(目安は3〜5周)、採用する版とパラメータを決めて、インサンプルの結果を記録します。
手順5 アウトオブサンプルで1回だけ確かめる
- ストラテジーテスターの「期間を指定」を、アウトオブサンプルの期間(例: 2024.07.01〜2025.12.31)に変えます。
- EAとパラメータは、手順4で決めたものから一切変えません。
- 「スタート」を押し、レポートを保存します。
- インサンプルの結果と並べて比べます。数字は例です。
| 期間 | PF | 最大DD | 総取引数 | 純益 |
|---|---|---|---|---|
| インサンプル(2021.01〜2024.06) | 1.48 | 11% | 190 | +160,000円 |
| アウトオブサンプル(2024.07〜2025.12) | 1.31 | 14% | 85 | +52,000円 |
判断のしかた
- アウトオブサンプルでもPFが1.0を超え、インサンプルの6〜7割程度の成績が出ている → 合格。過剰最適化の可能性は低めです
- アウトオブサンプルでPFが1.0を割った → 過剰最適化の疑いが濃厚です。改善を「戻す」必要があります(手順6)
- アウトオブサンプルの方がインサンプルより良い → 悪いことではありませんが、たまたまの可能性もあるので、取引数を確認してください
アウトオブサンプルで成績が多少落ちるのは普通です。「落ち幅が大きすぎないか」「プラスを保てているか」を見ます。
重要な注意があります。アウトオブサンプルの結果を見て「もう少し調整しよう」と戻るのは禁止です。 その瞬間にアウトオブサンプルはインサンプルに変わり、封印した意味が無くなります。データには限りがあるので、実質的には「一発勝負」だと考えてください。
手順6 過剰最適化を防ぐ3つの習慣
アウトオブサンプルで失敗しないために、改善の段階から次の3つを習慣にします。
習慣1: パラメータを丸める
最適化で「33」が最良でも「35」を使う、「23」なら「20」や「25」にする。切りのよい数字にしても成績がほとんど変わらないなら、そのEAは頑丈です。逆に、丸めた途端に成績が崩れるなら、その数字は過去に合わせすぎています。
習慣2: ルールを増やしすぎない
フィルターは多くても2つまでを目安にしてください。ルールを1つ足すたびに「未来の相場でも意味がある理由を説明できるか」を自分に問いかけます。「早朝は値動きが少ないから避ける」は説明できます。「2023年3月に負けが集中していたから3月は取引しない」は説明できません。
習慣3: 改善履歴に「理由」を書く
記録表に、何を変えたかだけでなく「なぜ変えたか」を一言添えます。あとで見返したときに理由が書けていない変更は、たいてい過剰最適化の始まりです。
手順7 改善をやめる基準
「これ以上良くならない」と判断してやめることは、改善を続けることと同じくらい大切です。次のどれかに当てはまったら、改善を終了します。
やめて次に進む(フォワードテストへ)
- 第5章の4つの視点(取引数・時期の偏り・スプレッド・前半/後半)をすべて通過した
- アウトオブサンプルでPFが1.0を超え、最大DDが自分の許容範囲に収まっている
- パラメータを丸めても成績が大きく崩れない
この状態なら、これ以上数字を上げようとするほど過剰最適化に近づきます。第7章のデモ口座でのフォワードテストに進んでください。
やめて作り直す(第3章へ戻る)
- 改善サイクルを5周回しても、PFが1.0前後から抜け出せない
- アウトオブサンプルで2回続けて失敗した(新しい期間を確保して再挑戦したが、また失敗した)
- 取引数が100回を切るまでフィルターを足さないとプラスにならない
この場合、そのルールが今の相場に合っていない可能性が高いです。無理に手を加え続けるより、別の考え方のEA(移動平均線のクロス、ボリンジャーバンド順張りなど)を新しく作る方が、結果的に早道です。
判断に迷ったときの目安
「PFが0.1上がった代わりに、ルールが1つ増えて取引数が2割減った」なら、それは過剰最適化に近づいただけかもしれません。数字の良さより「シンプルなまま、分割検証で崩れない」ことを優先してください。
つまずきポイント
- アウトオブサンプルをうっかりテストしてしまった: その期間はもう「見た」ことになります。可能なら、さらに先の期間(最新の数か月)を新しいアウトオブサンプルとして確保し直してください。データが足りなければ、第7章のデモ口座でのフォワードテストを、実質的なアウトオブサンプルとして扱います。
- アウトオブサンプルの取引数が少なくて判断できない: 1年半で30回未満だと判断は難しいです。その場合は、「PFが1.0を超えているか」だけを最低条件にして、判断の主役は第7章のフォワードテストに譲ります。
- 成績を上げたい気持ちが抑えられない: 誰でもそうなります。対策は「やめる基準を、改善を始める前に紙に書いておく」ことです。始めたあとで決めると、必ず甘くなります。
- 過剰最適化かどうかを判断してくれる機能はないのか: MT4にはありません。ChatGPTに改善履歴と両期間の結果を貼り、「過剰最適化の兆候があるか意見をください」と聞くのは有効ですが、最終判断は自分で行います。
次の記事
7-1 まずデモ口座でフォワードテスト で、検証を通過したEAをデモ口座で実際に動かし、1〜3か月のフォワードテストを始めます。