同じアイデア、2つのバックテスト

まず、このコースに登場する2人を紹介します。2人とも、ドル円(USDJPY)の実際の15分足データ(2004〜2026年)を使って戦略を作りました。数字はすべて実際に計算した結果です。

AさんとBさんは、同じアイデアから出発しました。「ドル円は、東京時間につけた高値や安値を、欧州(ロンドン)の参加者が入ってくる時間帯に抜けると、その方向へトレンドが伸びやすい」というブレイクアウトの狙いです。 データは3つに分けてあります。ルールを作るための探索期間(2005〜2016年の12年間)、途中で確認するための検証期間(2017〜2022年の6年間)、そして最後に1回だけ確かめる最終テスト期間(2023年1月〜2026年7月の3年半余り)です。

Aさんがバックテスト(テスター)上で確認した探索期間の成績は、843回の取引で総利益+2,128.6pips、1取引あたり平均+2.53pips、勝率50.4%、PF(プロフィットファクター)1.15でした(シグナル足の終値約定・コスト0)。現実的な約定条件(次の足の始値約定・往復コスト0.4pips)で見直しても、総利益+1,805.6pips、平均+2.14pipsと十分なプラスです。

一方、Bさんの探索期間の成績は1,893回の取引で、合計−273.8pips、平均−0.14pipsでした。ほぼ横ばいで、バックテストの見た目としては地味でパッとしません。

では、この2つのルールを、探索期間では一度も見ていない「未知の相場(2017〜2026年7月)」にそのまま投入するとどうなったでしょうか。

累積損益(pips、次の足の始値で約定・往復0.4pips)探索 2005–2016検証 2017–2022最終 2023–-4,000-2,00002,0004,0006,000pips20052008201120142017202020232026Aさん(57,600通りから選んだ最適化案)Bさん(事前登録の1通り)
Aさんは探索期間で大きく増えたが、未知の相場(検証・最終テスト)で大崩壊。Bさんは探索期間で横ばい後、未知の相場で堅牢に生き残った(次の足の始値で約定・往復0.4pips)

グラフを見てのとおり、結果は残酷なほど正反対に分かれました。

探索期間のバックテストで+2,129pipsを叩き出したAさんが大敗し、−274pipsと冴えなかったBさんが+3,920pipsで完勝したのです。 なぜこんな逆転が起きてしまうのでしょうか。

※もう一つの罠:テスターとリアル口座の乖離

なお、バックテストにはもう一つ「スプレッド0・終値約定でテストしてしまい、リアル口座で手数料負けする」という罠もあります。5分足スキャルピングEAなどで典型的に起きるこの問題については、単発記事「テスターで勝てるスキャルEAが口座で崩れる理由:終値約定とスプレッド0の罠」で詳しく解説しています。

信号とノイズ:過去問の丸暗記と同じ

相場の値動きには、2種類のものが混ざっていると考えてください。

過去のチャートでは、この2つが区別できない形で重なり合っています。そして過去データは「すでに答えが分かっている問題集」なので、パラメータを細かく調整すれば、いくらでも後から合わせ込めてしまいます。 過剰最適化(過学習、カーブフィッティングとも呼びます)とは、ルールを調整していくうちに、信号ではなく過去のノイズに合わせ込んでしまうことです。

シンプルなルール 全体の流れをつかむ 合わせ込みすぎ 未来の点 過去に完璧・未来で外れる
過去の点を全部通す線ほど、未来の新しい点からは遠い。全部当てる線は、実は何も予測していない

これは、試験勉強で過去問の答えを1問残らず丸暗記した状態に似ています。過去問なら満点が取れますが、身についたのは「解き方」ではなく「特定の過去問の答えそのもの」なので、本番の試験で新しい問題が出ると手も足も出なくなります。 上の図の左側の直線は「本質的な解き方」を捉えた状態で、過去データでは多少のズレが出ますが、未知の未来データにも安定して対応できます。右側のクネクネと曲がった曲線は、答えを丸暗記して過去のノイズに完璧にフィットさせた状態です。

Aさんがやった57,600通りのグリッド探索は、まさにこの「右側の曲線」をパソコンの計算力で作り出してしまった作業でした。 過去の12年間では完璧に機能するように見えたパラメータも、その時代固有のノイズを記憶しただけだったため、新しい相場環境に入った瞬間に機能不全を起こし、−1,416pipsもの大赤字を垂れ流すことになったのです。

なぜ気づけないのか:失敗が好成績の形で現れる

多くの失敗は、やればすぐに分かります。プログラムのバグならエラーで止まりますし、間違った注文なら即座に損失が出ます。 ところが過剰最適化の本当に恐ろしいところは、「検証に大失敗しているときほど、画面上には奇跡的な好成績が現れる」という、極めて厄介な性質を持っている点です。

トレードシステム検証の専門家 Timothy Masters は、インタビューでこの点を次のように説明しています(Better System Trader のインタビュー動画、18:06〜23:20)。 相場はノイズが極めて大きく、本物の規則性はその中にわずかに埋もれているにすぎません。ルールが弱すぎると本物の規則まで見逃し、強すぎるとノイズまで規則だと思い込みます。 弱すぎる失敗は、成績が悪く出るのですぐに分かります。問題は強すぎる失敗のほうで、過去データの上ではほとんど奇跡のような右肩上がりの成績が出るため、それが本物の優位性なのか、ノイズを覚えただけなのかを、テスト結果の数字だけからは区別できません。

ルールの失敗には2つの形がある:なぜ過剰最適化に気づけないのか 弱すぎる失敗 • 本物の規則まで見逃す(過小適合) • 過去のバックテスト成績:悪い 【結果】すぐに気づいて捨てられる 実資金を投じる前に防げる無害な失敗 危険度:小(資金は減らない) 強すぎる失敗(過剰) • 相場のノイズまで規則と思い込む • 過去のバックテスト成績:奇跡的に良い 【結果】成功と誤認して本番で投入 実際の相場で即座に破綻・大損害 危険度:最大(「最高の成績」の顔をして現れる)
弱すぎる失敗は悪い成績として見えるが、強すぎる失敗は良い成績として見える。成績だけでは、本物とノイズの区別がつかない

この非対称性のせいで、トレーダーの心理も真逆の方向に誘導されます。成績が悪ければ「何がダメなんだろう」と原因を探しますが、成績が良ければ大喜びして疑うのをやめてしまうのです。 そして試行回数を増やせば増やすほど、成績の良いものは必ず見つかります。当たる確率が極めて低いくじ引きでも、何千回・何万回と引き続ければ、必ず当たりを引いてしまうのと同じです。

57,600通りも試せば、ルール自体の実力とは無関係に、偶然だけで綺麗な右肩上がりになるパラメータが絶対に存在します。Aさんはその「偶然の当たりくじ」を拾い上げ、「ついに聖杯(必勝法)を見つけた!」と信じ込んでしまったのです。

数字で見る:バックテストの成績は将来をほとんど説明しない

「バックテストの成績の良さは、将来の成績をほとんど説明しない」というのは、経験の浅い人には信じがたいかもしれません。 しかし、これは学術研究でも、大規模な実データ分析でも繰り返し証明されている事実です。

たとえば、探索期間で総当たりした候補の中から、探索期間の1取引あたり平均利益の順にランキングを作り、上位の案が最終テストでどうなったかを調べた結果を見てみましょう。

頂上を1つ選ぶほど偶然をつかむ:探索順位と最終テスト成績(買いのみの案) 0 pips/取引 -2 +2 +4 +6 探索 1位の案 -1.01 pips (下から1.6%に転落) 探索 上位10案の中央値 -0.76 pips (下から2.4%に転落) 探索 広い上位(1,000案平均) +4.11 pips (プラスをしっかり維持) ※ 探索で突出した1点を選ぶほど「偶然のノイズ」を掴み、広い台地を選ぶほど本物のエッジが残る
探索期間の1位は最終テストで下から1.6%、上位10案の中央値も下から2.4%。広い上位(1,000案)は +4.11 を保った。頂上を1つ選ぶほど偶然をつかむ

探索期間で堂々の「第1位」だった案は、未知の最終テスト期間では1取引あたり−1.01pipsに沈み、全候補の中で下から1.6%という惨憺たる順位に転落しました。上位10案の平均も−0.65pipsとマイナスです。 一方で、上位1,000案をまとめて見ると平均+4.11pipsとプラスを維持しています。

ここから導き出される重要な教訓は次の2つです。

  1. 広い塊には意味がある:東京レンジを抜けた方向に順張りするというアイデアそのものには、未知の期間でも通用する優位性がありました。
  2. 頂上の1点を選ぼうとするほど偶然をつかむ:1位や上位数件の案は、優位性に加えて「探索期間特有の偶然の幸運」を最も極端に取り込んだ案です。幸運は未来に続かないため、本番では最下位近くまで急降下します。

さらに、米国のアルゴリズム取引プラットフォーム Quantopian の研究チームが、ユーザーが作成した888の戦略を分析した論文(Wiecki et al., 2016, "All That Glitters Is Not Gold")でも、衝撃的な結果が示されています。

「バックテストで勝てているから安心」は完全に間違いです。何通り試したか、市場の構造に基づいているか、未知データでどう振る舞うかを総合的に評価しなければ、検証は何の意味も持ちません。

このコースの地図:決める → 数える → 壊す → 1回だけ確かめる

過剰最適化という怪物は、何かひとつの魔法の指標で防げるものではありません。 このコースでは、体系的な対策を4つの柱に整理し、全19回で実践していきます。

過剰最適化対策の4つの柱:検証を科学にする手順 第6〜9回 ① 決める • 結果見る前に仮説 • データの分け方 • 合格ライン・コスト 後出しジャンケン防止 第3,8,14回 ② 数える • 試行回数Nを記録 • 捨てた案も数える • 成績を割り引く 隠れた試行の台帳化 第10〜14回 ③ 壊す • 比較対象と勝負 • 感応度・台地検証 • 置換検定・信頼区間 手元データで破壊点検 第15〜18回 ④ 1回だけ確認 • WFA(ローリング) • 最終テスト(封印) • 1回開けたら戻らない 未使用データで審判 全体の土台:仕組みを知る(第1〜5回:過剰最適化・ノイズ・隠れた試行・先読み) 「なぜ人間は過剰最適化に自ら嵌まり込んでしまうのか」の構造を理解した上で4つの柱を運用する
先に決め、試した数を数え、手元のデータで壊し、残ったものだけを未使用のデータで1回だけ確かめる

4つの柱は、コースの4部構成と次のように対応しています。

部回答える問いAさんとBさんの実例
第1部 仕組みを知る01〜05何が起きていて、なぜ気づけないのか。自分の検証はどの型に当たるか規則のない相場でも「聖杯」が見つかる罠(第2回)、隠れた試行の数え方(第3回)
第2部 データを見る前に決める(①決める・②数える)06〜09何を、なぜ、どうなったら失敗とするか。データをどう分け、Nをどう数えるか。コストをいつ入れるかBさんの事前登録(第6回)。データ予算の管理(第7回)。コストを入れ忘れる破壊力(第9回)
第3部 手元のデータで壊す(③壊す・②数える)10〜14ルールがなくても儲かったのではないか。最良点の周りはどうか。この数字はどれくらいぶれるか帰無仮説ベンチマーク(第10回)、パラメータ感応度(第11回)、試行数による成績割引DSR(第14回)
第4部 未知のデータで確かめる(④確かめる)15〜18再最適化のやり方は通用するか。最終テストをどう開け、運用中にどこで止めるかウォークフォワード検証(第15回)、最終テストの開封(第17回)、フォワード監視(第18回)
検証は「勝てる手法を探す作業」ではなく「思いついた手法を疑って壊す作業」

検証を「勝てる手法を見つける宝探し」と考えていると、どうしてもたくさん試して一番見栄えの良いものを選びたくなり、過剰最適化の罠にまっすぐ落ちていきます。 このコースが一貫して伝えるのは、検証の本当の価値は、勝てない戦略を早く安く見捨てられることにあるという姿勢です。 Bさんのように、探索期間で地味でも市場の構造に賭け、事前に決めたテスト手順を守り抜くことこそが、相場で長く生き残る唯一の道です。

よくある間違い

「バックテストの成績が良ければ良い手法だ」

過去成績の良さは、本物の優位性の証拠にもなれば、ノイズへの合わせ込みの証拠にもなります。数字の大きさだけを見ても、どちらなのかは絶対に分かりません。 Aさんは探索期間で+2,129pipsを出しましたが未知相場で−1,416pipsと崩壊し、888戦略の研究でも将来のばらつきの97.5%以上はバックテストと無関係でした。 成績の数字は、必ず「何通り試したか」「市場の合理的な理由があるか」「未知のデータでどうだったか」と一緒に評価してください。

「条件を増やせば精度が上がる」

インジケーターやフィルタ条件を足すと、過去データの成績は確実に上がります。しかし、それは精度の向上ではなく、単に過去のノイズに形状を合わせる自由度(パラメータ)が増えただけのことが大半です。 条件を1つ足すごとに、「なぜその条件が必要なのか」を相場の仕組みとして説明できるか自問してください。説明できない条件は、例外なく過去の答え合わせにすぎません(第6回)。

「プログラムで自動売買(EA)をする人だけの話だ」

裁量トレーダーも全く同じ過ちを犯します。「このチャートパターンは勝てる」という感覚の多くは、過去チャートをパラパラと眺める中で、無意識のうちに「きれいに勝っている場面」ばかりを記憶に焼き付けた結果です。 頭の中で何百通りものチャートを見比べて都合のいい形を選び出しているため、やっていることはAさんの総当たり探索と同じです。 裁量トレードでも、検証ログをつけて負けパターンも含めた全試行を記録することが不可欠です(第5回)。

実戦課題:自分のバックテストを点検する

読んで終わりにしないための課題です。現在使っている、または過去に作ったルールを1つ選び、次の4項目を点検してください。

  1. 試行回数(N)を正直に数える:自動最適化の回数だけでなく、「移動平均の期間をいくつか変えてみた」「時間足を変えてみた」「直近で負けた曜日を外してみた」など、手作業で試した回数もすべて数えます。1桁で終わることはまずありません。
  2. 約定条件とコストを確認する:スプレッド0や、シグナル足の終値ちょうどの約定を前提にしていないか。スプレッドやスリッページを引いた後でも、十分な優位性が残るか確認します。
  3. 利益の理由を市場の仕組みで書く:そのルールが勝てている理由は何か。「欧州勢の参入によるブレイク」「資金需要による仲値の偏り」のように、相場の構造で1文で説明できるか考えます。説明できなければ、それは単なるノイズです。
  4. 一度も見ていない未使用データが残っているか:パラメータを決定した後に、一度も結果を見ていない相場期間が残っているか。手元のデータをすべて見て調整してしまったなら、現在のバックテストはただの「過去問の丸暗記」です。

やるべきこと/やるべきでないこと

やるべきことやるべきでないこと
良い成績が出たら、まず「何通り試したか」を数える成績が良いことを、そのまま実力の証拠とみなす
理由と反証条件を、結果を見る前に書くよく伸びたチャートを集めてから後付けでルールを作る
探索・検証・最終テストを最初に分け、最終テストは1回だけ開ける後半を「確認用」と呼びながら、見ては直すことを繰り返す
次の足の始値で約定し、コストを1回目の検証から入れるスプレッド0・シグナル足の終値での約定で最適化する
市場の仕組みに基づくシンプルなルールを基本にする成績を上げるために理由のないフィルタを次々と足す
上位の広い塊が安定しているかを見る探索期間のランキング1位を1つだけ選ぶ
合格ラインに届かなければ「保留」や「棄却」とする結果を見てから合格ラインを緩める

チェックリスト

次の回に進む前に、以下を自分の言葉で説明できるか確認してください。

ミニテスト

最後に4問だけ確認です。不正解なら別の選択肢を選び直せます。正解すると解説が表示されます。

Q1. 過剰最適化の説明として最も適切なのは?

過去問の答えを丸暗記した状態と同じで、過去の成績は上がりますが、偶然の部分は未来に続きません。パラメータの調整だけでなく、負けた日を後から除外するフィルタを追加することも過剰最適化の一種です。

Q2. 過剰最適化に本人が気づきにくい理由は?

Masters が説明するとおり、弱すぎるルールの失敗は悪い成績としてすぐ見えますが、強すぎるルールの失敗は良い成績として見えます。好成績が出たときほど、それが実力か偶然かを疑う必要があります。

Q3. Quantopian の888戦略の調査から言えることは?

バックテストの成績の良さは、それ単体では将来の証拠になりません。多く試すほど偶然に合った成績が混じるので、将来との乖離も大きくなります。Aさんの探索期間1位が最終テストで下から1.6%に落ちたのも同じ現象です。

Q4. このコースの4つの柱の順番として正しいのは?

決めることと数えることは、結果を見る前にしかできません。手元のデータで壊す検査を生き残ったものだけを、合格ラインを書いたうえで未使用のデータで1回だけ確かめます。