進階課程 · Lesson 7
若看到 test 結果後再改策略,test 就已成為新的 validation。需要保留新的未見資料或進入真正 forward test。
金融資料有時間依賴、regime 與重疊標籤。隨機切割會讓未來 regime 的資訊進入訓練,也可能讓相鄰樣本同時落在 train 與 test。基本做法應保持時間順序;有重疊持有期時,還要考慮 purge/embargo,避免標籤期間交疊。
Expanding window:
Train 2016–2019 → Test 2020
Train 2016–2020 → Test 2021
Train 2016–2021 → Test 2022
Rolling window:
Train 2016–2019 → Test 2020
Train 2017–2020 → Test 2021
Train 2018–2021 → Test 2022
Expanding 保留所有歷史,估計較穩;rolling 更能適應 regime change,但樣本較少、參數可能更不穩定。
在每個 train fold 內重新:
先用全資料標準化再切 fold,仍屬 leakage。
不要平均各 fold Sharpe。應串接所有 chronological OOS returns,再以同一頻率計算整體 CAGR、volatility、Sharpe 與 drawdown;同時分 fold 報告穩定性。
觀察:
穩健策略通常在一片參數區域有效,而不是只有單一尖峰。例如 SMA window 18–24 都合理,通常比只有 21 有效、20 與 22 皆失敗可信。這不是證明 alpha,而是排除對單點參數的脆弱依賴。
執行:
python .\code\walk_forward_demo.py
範例只在 train window 中選擇移動平均參數,再套用到下一段 test,最後串接 OOS returns。請比較 expanding 與 rolling 的參數穩定性。
你應能標出每一個時間點屬於 train、validation 或 test,並證明所有 fit 與參數選擇只使用該 test 之前的資料。