一個在某一整段歷史上擬合得很漂亮的回測,換個地方可能到處失效。推進式測試是在真實資金介入之前抓住這一點的方法:在一段視窗擬合,在下一段測試,然後往前滾動重複。
因為每一段被測試的時期都從沒參與過調校,結果比單一樣本內擬合更有份量。
推進式測試在一個訓練視窗擬合策略,在緊接著的樣本外視窗測試,然後向前滾動重複。因為每個測試視窗從沒用於調校,結果能暴露過擬合,也比單一樣本內回測更有份量。
推進式測試怎麼運作
歷史被切成連續視窗。策略先在第一個訓練視窗擬合,然後在它從沒見過的下一個視窗測試。過程向前滾動:每一步都用最近的資料擬合,用接下來的一段測試。
結果是一系列樣本外測試,而不是一個樣本內數字,這讓過擬合更難藏住。
| 維度 | 單一樣本內擬合 | 推進式測試 |
|---|---|---|
| 參數在哪裡設定 | 在完整測試歷史上 | 只在訓練視窗 |
| 測試什麼 | 被調校過的同一份資料 | 從沒用過調校的視窗 |
| 過擬合暴露 | 藏在擬合裡 | 被測試暴露 |
| 結果 | 一個亮眼的數字 | 一系列樣本外結果 |
為什麼它能暴露過擬合
擬合到雜訊的策略,只在它被調校的那份資料上表現好。當推進式測試移到從沒參與調校的視窗時,對雜訊的擬合就停止運作了。
在樣本外視窗裡持續的表現,比一個樣本內數字更強的證據,因為模式在策略從沒見過的時期裡存活了。
| 項目 | 單一樣本內擬合(50 筆,調校用的同一段歷史) | 推進式測試(3 個視窗,合計 100 筆,全部樣本外) |
|---|---|---|
| 勝率 | 60%(30 / 50 筆) | 44%(44 / 100 筆) |
| 平均獲利 | 350 元 / 筆 | 350 元 / 筆 |
| 平均虧損 | 200 元 / 筆 | 200 元 / 筆 |
| 期望值 | +130 元 / 筆 | +42 元 / 筆 |
同一套參數,在被擬合過的那段歷史上表現是 130 元一筆,挪到 3 個從沒用來調校的視窗後,縮水到 42 元一筆。
同一套參數在被調校過的那 50 筆歷史上,期望值是 130 元一筆;挪到 3 個從沒參與調校的視窗、合計 100 筆之後,只剩 42 元一筆。這段縮水,正是推進式測試要暴露的東西:如果優勢是真實的,它不會在沒見過的資料裡掉這麼多。
重要的選擇
視窗大小與測試向前滾多遠都是選擇,它們會影響結果。短的訓練視窗擬合的資料少;長的視窗可能以另一種方式過擬合。
紀律是在運行之前訂好流程:視窗長度、步長與步數都提前設定,而不是對著結果調。
推進式測試的全部價值,來自測試視窗是策略沒有被擬合過的資料。如果流程讓測試時期漏進調校,那只是一個更複雜的樣本內擬合。
它的侷限
推進式測試不是保證。每個樣本外視窗仍然來自同一段市場歷史,沒有任何流程能證明策略未來會有效。
最好把它和其他過擬合檢查一起用:參數數量、正當性、子期間一致性和日期敏感度。
常見問題
推進式測試和留存期是一回事嗎?
不是。留存期是一個固定的樣本外時期;推進式測試在多個連續視窗上重複擬合與測試的循環。
通過推進式測試能證明策略有效嗎?
不能。它比樣本內擬合更強的證據,但不能保證未來表現。
應該用多少個視窗?
沒有通用數字。流程應該提前訂好,並產出足夠多的樣本外結果來看到模式。


