推進式測試:用策略從沒見過的資料驗證它

推進式測試(walk-forward testing)透過在一段視窗擬合、在下一段視窗測試來驗證策略。因為測試視窗從沒參與過調校,它能暴露過擬合。

MyTrade Academy 編輯部
7 分鐘閱讀

一個在某一整段歷史上擬合得很漂亮的回測,換個地方可能到處失效。推進式測試是在真實資金介入之前抓住這一點的方法:在一段視窗擬合,在下一段測試,然後往前滾動重複。

因為每一段被測試的時期都從沒參與過調校,結果比單一樣本內擬合更有份量。

TL;DR

推進式測試在一個訓練視窗擬合策略,在緊接著的樣本外視窗測試,然後向前滾動重複。因為每個測試視窗從沒用於調校,結果能暴露過擬合,也比單一樣本內回測更有份量。

推進式測試怎麼運作

歷史被切成連續視窗。策略先在第一個訓練視窗擬合,然後在它從沒見過的下一個視窗測試。過程向前滾動:每一步都用最近的資料擬合,用接下來的一段測試。

結果是一系列樣本外測試,而不是一個樣本內數字,這讓過擬合更難藏住。

樣本內擬合與推進式測試的對比
維度單一樣本內擬合推進式測試
參數在哪裡設定在完整測試歷史上只在訓練視窗
測試什麼被調校過的同一份資料從沒用過調校的視窗
過擬合暴露藏在擬合裡被測試暴露
結果一個亮眼的數字一系列樣本外結果

為什麼它能暴露過擬合

擬合到雜訊的策略,只在它被調校的那份資料上表現好。當推進式測試移到從沒參與調校的視窗時,對雜訊的擬合就停止運作了。

在樣本外視窗裡持續的表現,比一個樣本內數字更強的證據,因為模式在策略從沒見過的時期裡存活了。

範例:單一樣本內擬合 vs 推進式測試(3 個滾動視窗合計)
項目單一樣本內擬合(50 筆,調校用的同一段歷史)推進式測試(3 個視窗,合計 100 筆,全部樣本外)
勝率60%(30 / 50 筆)44%(44 / 100 筆)
平均獲利350 元 / 筆350 元 / 筆
平均虧損200 元 / 筆200 元 / 筆
期望值+130 元 / 筆+42 元 / 筆

同一套參數,在被擬合過的那段歷史上表現是 130 元一筆,挪到 3 個從沒用來調校的視窗後,縮水到 42 元一筆。

樣本內勝率60%(30/50)
樣本內期望值+130 元 / 筆
樣本外(推進式)勝率44%(44/100)
樣本外期望值+42 元 / 筆
樣本內的 130 元,樣本外只剩 42 元

同一套參數在被調校過的那 50 筆歷史上,期望值是 130 元一筆;挪到 3 個從沒參與調校的視窗、合計 100 筆之後,只剩 42 元一筆。這段縮水,正是推進式測試要暴露的東西:如果優勢是真實的,它不會在沒見過的資料裡掉這麼多。

重要的選擇

視窗大小與測試向前滾多遠都是選擇,它們會影響結果。短的訓練視窗擬合的資料少;長的視窗可能以另一種方式過擬合。

紀律是在運行之前訂好流程:視窗長度、步長與步數都提前設定,而不是對著結果調。

測試視窗絕不能碰到調校

推進式測試的全部價值,來自測試視窗是策略沒有被擬合過的資料。如果流程讓測試時期漏進調校,那只是一個更複雜的樣本內擬合。

它的侷限

推進式測試不是保證。每個樣本外視窗仍然來自同一段市場歷史,沒有任何流程能證明策略未來會有效。

最好把它和其他過擬合檢查一起用:參數數量、正當性、子期間一致性和日期敏感度。

常見問題

推進式測試和留存期是一回事嗎?

不是。留存期是一個固定的樣本外時期;推進式測試在多個連續視窗上重複擬合與測試的循環。

通過推進式測試能證明策略有效嗎?

不能。它比樣本內擬合更強的證據,但不能保證未來表現。

應該用多少個視窗?

沒有通用數字。流程應該提前訂好,並產出足夠多的樣本外結果來看到模式。

在策略從沒見過的時期上驗證

第 44 課解釋過擬合、參數風險,以及獨立時期驗證怎麼暴露對雜訊的擬合。

開啟第 44 課