Backtest Learning ・ BT06
ウォークフォワード分析は、学習期間と未使用の検証期間を時系列で分け、固定した条件を次の期間で評価する工程です。SG Groupのバックテスト分析ラボで自分の履歴の基本指標を無料確認し、Premiumのサンプル外・ウォークフォワード検証へ進むと、学習内の好成績と検証側の劣化を分けて点検できます。本稿は分割・窓幅・リーク対策を解説します。元のバックテストを自動で再実行する機能ではありません。検証期間の使い回しには注意が必要で、結果は将来成績を保証しません。
この記事の要点
この記事では、TradingViewなどで最適化したストラテジーを、実運用に近い形で検証するためのウォークフォワード分析とOOS検証の設計手順を解説します。まず結論を述べ、続いて用語の区別、3つの分割方式、ウィンドウ設計、結果の読み方、リーク対策、そして手元の数字を試せるシミュレーターの順に進みます。基礎から確認したい場合は、まずTradingViewバックテストの全体像を押さえておくと、本記事の位置づけが分かりやすくなります。
OOS検証とは、パラメータの最適化に一切使っていない将来側の期間で、固定したルールの成績を評価することです。学習に使った期間(インサンプル=IS)の好成績は、たまたまその期間に当てはまっただけかもしれません。そこで、まだ触れていない期間(アウトオブサンプル=OOS)で同じルールをそのまま走らせ、成績がどれだけ落ちるかを見ます。落ち込みが小さいほど、その優位は当てはめの産物ではない可能性が相対的に高まります。
ウォークフォワード分析は、この「学習して固定し、次の期間で評価する」というひとまとめの手続きを、時間を少しずつ進めながら繰り返す設計です。1回だけの分割よりも複数の局面で評価できるため、結論が一つの偶然の期間に依存していないかを確かめられます。ただし後述するとおり、これは過剰適合を見抜きやすくする手法であって、将来の利益を保証するものではありません。
言葉を先に整理します。混同すると、検証したつもりで実は最適化を繰り返しているという事故が起きます。
一般的な機械学習では、データをランダムに学習用と検証用へ分けます。しかし相場のような時系列データでこれをやると、未来のバーが学習側に混ざり込む可能性があります。トレンドやボラティリティは時間的に連続しているため、未来の情報を含んだ状態でパラメータを選ぶと、評価期間の答えを先に覗いたのと同じ状態(未来参照リーク)になります。だからこそ、分割は時間順に行い、学習期間より後ろの期間だけを評価に使います。指標そのものの読み方はバックテスト結果の見方で詳しく扱っています。
ウォークフォワードの分割には主に3つの形があります。目的に応じて選び、可能なら複数を並べて結論が揺れないかを確認します。
全期間を「前半=IS/後半=OOS」と一度だけ分ける、最もシンプルな方法です(図1)。手早く過剰適合の当たりを付けられますが、評価が一つの局面に依存するため、その期間がたまたま追い風/向かい風だと結論が偏ります。
学習窓の長さを一定に保ったまま、窓全体を前へずらしていく方式です。古いデータは学習から外れていくため、直近の相場局面への追従性を見たいときに向きます。一方、遠い過去の情報は使い切らないため、長期の安定性は見えにくくなります。
学習窓の開始点を固定し、評価を進めるたびに窓を後ろへ伸ばしていく方式です。データを最大限使い、蓄積した情報で長期の安定性を見たいときに向きます。ただし直近の変化に対する反応は、ローリングよりも鈍くなりがちです。
| 方式 | 学習窓 | 向く目的 | 注意点 |
|---|---|---|---|
| 固定一回 | 1区切りのみ | 素早い当たり付け | 評価が一局面に依存 |
| ローリング | 長さ一定で前進 | 直近局面への追従 | 遠い過去を使い切らない |
| アンカード | 開始固定で伸長 | 長期の安定性 | 直近変化への反応が鈍い |
分割方式を決めたら、次は具体的な長さと頻度を設計します。ここに普遍的な黄金比はありません。戦略の性質から逆算します。
本記事では以降、学習18か月・評価6か月・ステップ6か月・全期間72か月という設定を一貫した例示に使います。これは説明のための架空の教育用データであり、推奨する比率ではありません。
ここまでの一回分割やローリングの考え方は、Strategy TesterのCSV/XLSXを読み込めば実際の数字で確認できます。まずは無料の基本分析でKPI・エクイティ・ドローダウンを可視化し、ウォークフォワード分割やOOS信頼性スコアといった高度な検証が必要になった段階でPremiumのユースケースをPro/Premiumで確認できます。
各fold(1回分の学習・評価のまとまり)では、次の順序を厳守します。順序を崩すと検証が成り立ちません。
ここで最も大切な鉄則は、評価窓の結果を見てからパラメータを選び直さないことです。もし評価結果を見て調整すれば、その期間はもう最適化に使われたことになり、サンプル外ではなくなります。「良い数字が出るまでOOSを見ながら調整する」は検証ではなく、時間差の最適化です。どうしても調整したいなら、まだ一度も見ていない新しい期間を評価用に確保し直します。パラメータ探索の落とし穴そのものは過剰最適化を防ぐ方法で掘り下げています。
foldごとの評価が集まったら、単一のスコアで良し悪しを決めず、複数の観点を横に並べて読みます。以下は前述の設定(学習18か月・評価6か月)で回した架空の教育用データです。
| Fold | 評価期間 | IS PF | OOS PF | WFE(純益比) | OOS取引数 | OOS最大DD | 状態 |
|---|---|---|---|---|---|---|---|
| F1 | 2020年下期 | 1.82 | 1.44 | 61% | 64 | -7.8% | 安定寄り |
| F2 | 2021年上期 | 1.75 | 1.51 | 68% | 59 | -6.9% | 安定寄り |
| F3 | 2021年下期 | 1.93 | 1.12 | 34% | 48 | -12.4% | 劣化大 |
| F4 | 2022年上期 | 1.70 | 1.33 | 55% | 53 | -9.6% | 中間 |
| F5 | 2022年下期 | 1.86 | 1.08 | 29% | 44 | -13.1% | 劣化大 |
| F6 | 2023年上期 | 1.78 | 1.39 | 58% | 57 | -8.3% | 安定寄り |
この例では、6分割のWFE(ウォークフォワード効率)の平均は約51%で、学習時の優位のうちおよそ半分が評価期間で失われています。注目すべきはF3とF5で、WFEが30%前後まで落ち、最大ドローダウンも他より深くなっています。両者は市場のボラティリティが変わった局面にあたり、特定のレジームでルールが効きにくい可能性を示唆します。平均値だけを見て「まずまず」と判断せず、どのfoldで、なぜ崩れたのかを個別に読むことが重要です。ドローダウンの深掘りは最大ドローダウンの見方を参照してください。
ウォークフォワードの信頼性は、リークを防げているかにかかっています。よくある落とし穴を挙げます。
対策の一つが、学習窓と評価窓の間にエンバーゴ(緩衝期間)を置くことです。指標の計算に必要なルックバックがまたがると、境界付近で情報が漏れることがあります。数バー分の空白を挟めば、学習の情報が評価窓の入口に染み出すのを抑えられます。
総期間・学習月数・評価月数・ステップ月数を入れると、例示タイムライン上にfoldを描画します。入力値はブラウザ内だけで計算し、日付や個人データを外部へ送信しません。JavaScriptが無効な場合は、直下の静的な計算例をご覧ください。
ウォークフォワード分割シミュレーター
上の値で「分割を計算する」を押すと、foldの数と各窓が表示されます。
このシミュレーターはロジックのイメージ用で、成績や利益を計算するものではありません。実際のfold設計は取引数やレジームの分布を見ながら調整してください。
ウォークフォワードでOOS劣化が小さくても、それは「過去のどの局面でも当てはめ一辺倒ではなかった」ことを示すにとどまります。将来の相場が過去と同じ性質を保つ保証はありません。特に、これまで一度も現れていないレジームが来れば、前提そのものが崩れます。
そこで、過去データのウォークフォワードの次に、実運用に近い環境でのフォワードテストへ接続します。約定・スプレッド・スリッページを含めた条件で前向きに走らせると、机上のOOSでは見えない摩擦が表面化します。コストの反映方法はコスト感度とストレステストで、複数戦略を束ねたときの挙動は複数戦略ポートフォリオのバックテストで扱っています。単一の検証で「終わり」にせず、複数の角度から前提を揺さぶることが、過剰適合に対する現実的な防御です。
Strategy Testerの見方・CSV分析・堅牢性検証の全体像。
BT05 ・ リスク計算方法・回復期間・Calmar/Ulcerでリスクを読む。
BT07 ・ 過剰最適化パラメータ安定性・プラトー/クリフ検出でロバスト性を見る。
BT10 ・ ポートフォリオ相関・配分・ドローダウンを統合して検証する。