Backtest Learning ・ BT07
とても良いバックテスト結果ほど、偶然や最適化のやりすぎを疑う価値があります。鍵は、最良点一点の高さではなく、周辺のパラメータでも成績が崩れない「面」の広さです。過剰最適化・カーブフィッティング・未来参照を区別し、プラトーとクリフの読み方から多層検証までを図解します。
この記事の要点
この記事では、TradingViewなどで最適化したストラテジーが「良すぎる」ときに、それが偶然や過剰最適化ではないかを点検する方法を解説します。まず結論を述べ、続いて用語の区別、赤信号、プラトーとクリフの読み方、二変数マトリクス、最適化と偶然の関係、手元の数字で試せるデモ、そして多層防御の順に進みます。バックテスト全体の位置づけから確認したい場合は、まずTradingViewバックテストの全体像を押さえておくと、本記事がどの工程に当たるかが分かりやすくなります。
過剰最適化を防ぐ最初の一歩は、評価軸を変えることです。「最良点のプロフィットファクターが高いか」ではなく、その最良点の周辺でも成績が保たれているかを見ます。パラメータをわずかに動かしただけで成績が急落するなら、その高さは特定の過去期間にだけ当てはまった偶然の産物かもしれません。逆に、周辺の値でも似た成績が続く「面(プラトー)」があるなら、その優位は当てはめの一点だけに依存していない可能性が相対的に高まります。
言い換えると、探すべきは尖った頂点ではなく広い高原です。頂点だけが高い戦略は、実運用でパラメータや相場がわずかに変わっただけで崩れやすくなります。以降では、この「面で見る」考え方を、具体的な架空データ・図・表・インタラクティブなデモで確認していきます。数値はすべて概念理解のための架空の教育用データであり、実在の成績や推奨パラメータではありません。
対策を誤らないために、まず似た言葉を切り分けます。これらは混同されがちですが、原因も対策も異なります。
前の3つは「探索のやりすぎ」で連続的に関係しますが、未来参照は実装のバグに近い別問題です。未来参照があると、いくら丁寧に検証してもバックテスト自体が非現実的な数字を返します。切り分け方の詳細はウォークフォワード分析とOOS検証でも扱っており、本記事では主に前の3つ(探索側)に焦点を当てます。指標そのものの読み方はバックテスト結果の見方を参照してください。
過剰最適化は一つの指標では断定できませんが、複数の兆候が重なるほど疑いが強まります。以下は、手元のバックテストを見直すときの赤信号です。いずれも単独では決定打ではなく、組み合わせで読みます。
調整できる可変要素が多いほど、過去に当てはめる自由度が増え、偶然のパターンまで拾いやすくなります。説明できない変数は減らします。
サンプルが少ないと、少数の外れ値や偶然の連勝に成績が引きずられます。パラメータ数に対して取引数が乏しいと危険度が上がります。
最良点の一つ隣で成績が大きく崩れる(クリフ)なら、その高さは面ではなく点。わずかな条件変化で再現しにくくなります。
特定の銘柄や時間足でのみ突出する場合、その戦略の優位ではなく、その市場の癖に当てはめている可能性があります。
利益の大半が短い一局面から出ているなら、その局面が去れば優位も消えかねません。サブ期間に分けて分布を確認します。
スプレッド・手数料・スリッページを現実的に反映すると成績が崩れるなら、その優位は摩擦に対して脆弱です。コスト感度とストレステストで確認します。
これらの赤信号はチェックの出発点であり、機械的な合否基準ではありません。該当したら即失格ではなく、原因を掘り下げるきっかけとして使ってください。
過剰最適化の有無を最も直感的に見られるのが、パラメータを1つずつ動かしたときの成績変化です。ここでは、移動平均の期間(10〜30)を2刻みで動かしたときのプロフィットファクター(PF)を、性格の異なる2つの架空戦略で比較します。両者とも最良点は期間18ですが、周辺の挙動がまったく違います。
「面か点か」は感覚ではなく数値でも表せます。最良点の左右の値を並べ、周辺の中央値と最良点からの急落幅を見ます。下表は図1と同じ架空データの、最良点(期間18)とその両隣(期間16・20)の比較です。
| 型 | 期間16のPF | 期間18のPF(最良) | 期間20のPF | 周辺中央値 | 急落幅 | 判定 |
|---|---|---|---|---|---|---|
| 高原型 | 1.58 | 1.61 | 1.60 | 1.60 | 0.03 | 面で強い |
| 崖型 | 1.28 | 2.10 | 1.18 | 1.28 | 0.92 | 点で脆い |
崖型は最良点のPFが2.10と高い一方、周辺中央値は1.28にとどまり、急落幅は0.92に達します。高原型は最良点こそ1.61ですが、周辺中央値も1.60で急落幅は0.03しかありません。実運用でパラメータや相場がわずかに動くことを考えると、再現しやすいのは高原型という読み方になります。ここで注意したいのは、これは一般的な傾向であって、崖型が常に無価値、高原型が常に優れるという普遍法則ではない点です。
実際の戦略は複数のパラメータを持つため、一変数の断面だけでは足りません。そこで、2つのパラメータを縦横に並べた安定性マトリクス(ヒートマップ)で、成績が高い「面」がひとかたまりで広がっているかを見ます。下図は移動平均の期間(縦)とストップ幅の倍率(横)を動かした架空のPFです。色の濃さだけでなく、各セルの数値と、安定領域を囲む枠でも意味を示しています。
読み方のコツは、高い数字が連続したブロックになっているかです。安定領域の中央(この例ではMA18×倍率2.5)付近を選べば、隣のセルへ多少ずれても成績が近く、実運用の揺れに耐えやすくなります。逆に、周囲がすべて薄いのに1セルだけ突出しているような配置は、崖の頂点であり、選ぶと再現性を欠きやすくなります。二変数だけでなく、収益・ドローダウン・取引数といった複数の目的を同時に見て、どれか一つだけが良い点に飛びつかないことも大切です。
ここまでのプラトー/クリフや安定性マトリクスの考え方は、Strategy TesterのCSV/XLSXを読み込めば実際の数字で確認できます。まずは無料の基本分析でKPI・エクイティ・ドローダウンを可視化し、パラメータ安定性マトリクスやローリング堅牢性、レジーム検知といった高度な検証が必要になった段階でPro/Premiumのユースケースを確認できます。
なぜ最良点だけを信じてはいけないのか。直感的に言えば、試す回数が増えるほど、実力ではなく運で高い数字が出る組み合わせを見つけやすくなるからです。たとえば実力がまったく同じでも、たくさんのパラメータ組を試せば、その中には偶然良い期間に当たったものが必ず混じります。最適化とは、その「たまたま一番高いもの」を選び出す作業でもあるのです。
もう少し具体的にイメージします。1組しか試さなければ、その数字は素直に読めます。しかし100組、1000組と試すと、選ばれる最大値は全体の平均より上振れします。これは戦略の優位ではなく、探索そのものが生む上振れです。だからこそ、選んだ最良点の高さをそのまま実力と読まず、周辺の面や、最適化に使っていないサンプル外での再現を確認する必要があります。過剰な試行に頼らず、少数の説明できるパラメータで面を探す姿勢が、結果的に再現性を高めやすくします。
この「試行回数の罠」は複雑な統計に踏み込まなくても直感で十分理解できますが、順序やばらつきの影響を数量的に見たいときはモンテカルロ法による破産確率の検証が役立ちます。
例示データセット(高原型/崖型)と、自分が選ぶパラメータ値を切り替えると、最良点・周辺中央値・急落幅が計算されます。あなたの戦略を採点するものではなく、面と点の違いを体感するための概念デモです。入力値はブラウザ内だけで計算し、外部へ送信しません。JavaScriptが無効な場合は、直下の静的な計算例をご覧ください。
パラメータ安定性デモ
上の値で「安定性を計算する」を押すと、選んだ点の周辺の広がりが表示されます。
このデモはロジックのイメージ用で、成績や利益を予測するものではありません。実際の判断では、取引数・サンプル外成績・コスト後の挙動も合わせて確認してください。
過剰最適化への現実的な守りは、一つの検証で「終わり」にせず、性質の異なる検証を層状に重ねることです。パラメータ安定性で面を確認したら、次はサンプル外、順序ばらつき、コスト、相場局面へと、前提を少しずつ揺さぶっていきます。下図は、候補戦略が各層を通過するたびに絞り込まれていく様子を、架空の件数で示したイメージです。
各層は役割が違います。パラメータ安定性は「面か点か」、OOSとウォークフォワードは「学習に使っていない期間で再現するか」、モンテカルロは「取引の順序やばらつきに耐えるか」、コストストレスは「摩擦を入れても残るか」、レジーム・横断確認は「別の相場局面や銘柄でも通用するか」を見ます。単一の層をすり抜けても、別の層で崩れることは珍しくありません。だからこそ重ねる意味があります。コストの反映はコスト感度とストレステスト、複数戦略を束ねたときの挙動は複数戦略ポートフォリオのバックテストで詳しく扱っています。
探索側の対策を固めても、未来参照が残っていればバックテスト自体が非現実的になります。TradingViewで検証する場合は、公式資料を確認しながら次の点を点検します。仕様やUIの名称は変更され得るため、断言せず最新情報にあたるのが前提です。
これらは過剰最適化とは別の問題ですが、両方が同時に起きると数字はさらに信用できなくなります。まず未来参照を潰し、そのうえで面・OOS・多層防御に進むのが安全な順序です。