ウォークフォワード分析は、先のデータでパラメータを選び、その後の区間で評価する手順を繰り返します。検証対象は最後の設定値だけでなく、更新の手続きです。評価結果を見る前にカレンダーと選び方を固定します。窓を増やしても独立性や将来利益が自動的に得られるわけではありません。

更新手順を、最適化する前に書く

学習・評価の長さ、更新頻度、候補の集合、採用基準、同点処理、候補なしの行動を指定します。利益最大化も一つの選択基準であり、中立的な既定値ではありません。費用、数量と標本数を揃えて比べます。

候補を増やすほど過去の偶然を選ぶ可能性がありますが、200取引の勝率75%超やPF3.5超という数字だけで過適合は確定しません。データ、費用、試した全候補と選択履歴を残します。バックテストの手順と併せて確認します。

標本の番号だけでなく、ラベルの最後も調べる

規則的な期間、番号の揃った標本を仮定。ラベルtは完全な終値t+1とt+2を使います。評価は期間10からで、期間9の確定後、10の開始前に学習します。この模型では確定した必要データは即座に使えると仮定します。

横にスクロールすると図全体を確認できます。

二期間先ラベルと、間隔一・二の違い評価の最初は期間10、ラベルtには次の二終値が必要。gap1の最終学習8は終値10を必要とし未確定。gap2の最終7は終値9で完成。期間9確定後、評価開始前に学習する。評価開始:期間10ラベルt:終値t+1とt+2gap=1:学習の最後は標本8123456789101112ラベル8は終値9・10を使う。この時点で終値10は未知。gap=2:学習の最後は標本7123456789101112ラベル7は終値9で完成。期間10の開始前に利用可能。緑:学習、灰:間隔、黄:評価
評価の最初は期間10、ラベルtには次の二終値が必要。gap1の最終学習8は終値10を必要とし未確定。gap2の最終7は終値9で完成。期間9確定後、評価開始前に学習する。

gap1では最終学習標本8が残り、そのラベルには終値10が必要で未知です。gap2なら最終7のラベルは終値9で終わります。終値9後には標本7のラベルが完成。これは二期間先を使う本模型の結論で、常にgap2なら安全という処方ではありません。

各標本についてラベルが最後に必要とする期間を書き出します。ラベル定義・予測地平が変われば再計算。TimeSeriesSplitのgapは評価直前の学習標本を除く機能で、すべての情報漏れを検出する機能ではありません。

ローリング更新を時系列に沿って実行

架空の年間例では2018–2021で学習・選択し、設定を凍結して2022を評価。次は2019–2022で学習し、2023を評価します。後の更新で、すでに過去となった2022を学習に含めることと、最初の2022評価を事後に書き換えることは異なります。

2018–2023に四年学習・一年評価を年次更新で置くと完全な評価は2022と2023の二つです。学習窓の重なりと隣接する評価期間は、統計的に独立な観測を意味しません。OOS取引を時系列に結合し、不確実性も見る。評価結果を見て設計を変更したなら、最後の未使用評価区間を別に残します。

開始点を動かすか、固定して伸ばすか

ローリングは長さを固定し古いデータを除きます。四年の例は2018–2021、2019–2022、2020–2023。アンカード/拡大型は開始点を固定し、2018–2021、2018–2022、2018–2023へ伸ばします。

短い記憶は古い環境を除く一方、標本も減らします。長い記憶は異なる状態の観測を残すかもしれません。どちらも速い適応や設定の安定を保証せず、トレンド型は必ず前者、平均回帰は後者という普遍則もありません。OOS結果を使って窓を選び直す行為も選択に数えます。

正規化、特徴量選択、欠損補完も許された学習データだけで学習させ、その変換を評価へ適用。全履歴の平均や特徴選択を先に計算しません。等間隔標本は窓の期間を揃えやすくしますが、不規則なイベントでは別途カレンダーが必要です。

WFEは比率の中身を見て読む

TradeStationの説明に沿う定義では、同じ費用・数量・収益率の定義で年率換算OOS収益率を年率換算IS収益率で割ります。架空10%÷20%=0.5=50%です。ISが0なら未定義。−5%÷−10%も0.5になり、両方損失でも見かけの比率は同じです。

TradeStationの50%は目安であり、実資金投入の普遍的な合格基準ではありません。1超だけで未来情報の使用が確定することもありません。純損益、カバー範囲、ドローダウン、特定窓への利益集中と感度を別に見ます。

比率と、事後に選び直した成績を区別

架空の二戦略では年率OOS12%÷IS30%=0.4、OOS20%÷IS25%=0.8。これだけで持続的な優位性がある戦略は選べません。先ほどの2018–2023の設定なら完全な評価は二回で、同じ履歴から五回を作ったとはしません。

別の同点処理模型では、二回の選択でAとBが学習時に同点。事前の規則はAを選び、OOS純額はAが+5、−2、Bが−1、+6です。複利なしの所定手順は+3。各OOSで後から勝者を選ぶと+5+6=+11、履歴全体を見てBへ変更するなら−1+6=+5です。

三つは違う実験です。同点の全候補と採用IDを評価前に保存します。結果を見て作った選択規則は新しい手順の版として後のデータで評価し、元のOOS成績に置き換えません。

追加例:JSTの確定時刻と、実際の受信時刻を分ける

図の即時利用仮定を外した、別の実装模型です。ラベルは同じく次の二終値を必要とします。JSTの2026年10月26日15:00:02で入力を凍結し、評価用の最初の発注判断を15:00:10に予定。これは架空の処理時刻で、実際の市場の休場や約定規則ではありません。

終値付与された確定時刻JSTこのシステムの受信時刻JST
814:00:0014:00:05
915:00:0015:00:05
1016:00:0016:00:05

標本7のラベルは終値8・9を必要とし、完全に受信するのは15:00:05。入力凍結15:00:02にはまだありません。標本6のラベルは終値7・8を使い、終値7は14:00より前に受信済みと指定。したがってこの模型では最後に完全なラベルを持つのは6です。サンプル番号だけならgap2で7が残っても、受信時刻の条件で除外します。

3秒待ってデータを採用するなら、入力凍結と学習・注文予定を組み直す別の手順です。後から届いた値を、15:00:02の凍結版へ戻し入れません。JST15:00:02は同日UTC06:00:02。時刻の付与、受信、版、欠落を区別した記録が必要です。

この確認で防げるのは指定した遅延漏れで、データ改訂や他の特徴量の漏れ、良い予測、約定を保証しません。デモで実装を観察する場合も、実際に受信した入力を保存します。

窓の境界で損失やポジションを消さない

更新時の未決済ポジションを、費用付きで閉じるのか明示規則で管理継続するのか先に決めます。含み損を消して残高を初期化しません。較正中の利益を混ぜず、OOSを時系列へ結合し、重複する評価の同じエクスポージャーを二重計上しません。

全期間ドローダウンは結合したequity経路から計算します。各窓のドローダウンの平均とは別の操作です。取引ゼロ期間や一部窓への集中も残す。同じデータ、費用と数量で、事前指定の更新しない基準戦略とも比較します。

MT5のForwardは履歴区間の後半で選ばれた設定を評価する機能で、自動的な複数窓ウォークフォワードや未来のデモ試験ではありません。履歴の留保区間、将来の観察、モンテカルロは別の問いです。並べ替えは入力結果を保持して順序を変えますが、未来の全相場状態や費用を表現しません。

WFE、デモの月数、シミュレーションの分位点に固定の値を置いて利益を保証しません。試した全カレンダー、基準と変更理由を保存します。

確定時刻よりも、保存版の受信時刻を見る

確定時刻よりも、保存版の受信時刻を見る架空JST15:00:02で入力凍結、終値9は15:00:05に受信。仮定に基づく計算番号だけなら標本7ラベル終端9受信確認を加える15:00:05は凍結後利用可能な最後標本6
確定時刻よりも、保存版の受信時刻を見る. 架空JST15:00:02で入力凍結、終値9は15:00:05に受信。

3秒後の値を過去の凍結版へ戻さず、遅延と欠落も検証条件へ残します。

小さな画面では横にスクロールするか、図を拡大できます。数値と要点は下のテキストにも記載しています。

番号だけなら標本7
ラベル終端9 – gap2が残す最後の標本
受信確認を加える
15:00:05は凍結後 – 標本7はこの版へ入れない
利用可能な最後
標本6 – 必要な終値7・8は受信済みという設定

次のテストを具体化する

  1. 必要な窓数と履歴量を計算。四年学習+一年評価は五年で一組。年次更新を五回評価するには最初の四年+五評価年=九年が必要です。
  2. 2018–2023の模型なら最初に2018–2021を選択し2022を評価、次に2019–2022から2023。候補、同点処理、版と後の全純結果を保存します。
  3. WFEの年率化と分母を確認し、元のリターンと結合equityの最大下落を読む。低い比率や50%超の設定変更だけで過適合を断定しません。
  4. 使っていない最終評価を設計選択へ流用せず、結果を使ったなら新たな未使用データが必要と記録する。