研究文章 / 檢驗
推進分析(Walk-Forward):為什麼只跑一次回測不夠
一次回測只能告訴你,策略跟過去的資料貼合得多好。推進分析問的是更難的問題:你建立和調整策略的方法,放到還沒看過的資料上,還撐得住嗎?
AlphaPrime 團隊 ·
只跑一次回測的問題
回測就是把一套規則套在歷史資料上,看看當時會發生什麼事。如果這些規則或參數,是看著同一段資料挑出來的,那回測結果有一部分只是在衡量你把這段資料貼合得多好。貼合得越好,這個數字對明年的參考價值就越低。
這不是回測本身的缺陷,而是一次回測能回答的問題有限。想知道一套建立策略的流程靠不靠得住,就要拿這套流程沒用過的資料來測。
推進分析在做什麼
推進分析會沿著整段歷史,反覆做一個簡單的循環:
- 最佳化:在一段資料(樣本內區間)上最佳化策略參數。
- 測試:把選出的參數直接拿到緊接在後的下一段資料(樣本外區間)上測試,什麼都不改。
- 往前推:往前推進一個樣本外區間的長度,再重複一次。
最後把各段樣本外結果接成一條權益曲線。這條曲線上的每一筆交易,用的參數都是在最佳化還沒用到那段資料之前就選好的。這跟你實際操作策略的方式接近得多:定期重新調參數,然後往前交易。
區間怎麼選
沒有一體適用的設定,但有幾個經驗法則還算可靠:
- 樣本內要夠長,交易筆數才夠。一個區間只有寥寥幾筆交易,最佳化能貼合的就只剩雜訊。很多交易者會讓每個樣本內區間至少有 30 到 50 筆交易,參數多的策略要更多。
- 樣本外要比樣本內短。樣本內與樣本外的長度比,常見落在 3:1 到 5:1 之間。樣本外區間越短,重新最佳化的次數越多,也越接近實際定期調參數的情況。
- 錨定式或滾動式。滾動式區間往前推時,會丟掉最舊的資料;錨定式區間永遠從頭開始算。滾動式對市場變化反應較快,錨定式用到的資料較多。不確定哪種適合你的策略,兩種都試試看。
- 涵蓋不同的盤勢。完整的歷史資料應該包含趨勢盤、盤整盤、高波動和低波動的期間,這樣樣本外區段才不會全部來自同一種盤勢。
結果怎麼看
接起來的樣本外曲線是最主要的結果,但不要只看最後的數字:
- 推進效率。比較樣本外和樣本內的績效水準(例如每個區間換算成年化的淨損益)。如果樣本外只留下樣本內績效的一小部分,代表最佳化大多是在貼合雜訊。
- 各區間是否一致。如果整條曲線只靠一兩個運氣好的區間撐起來,那就很脆弱。數一數有幾個樣本外區間是正報酬,再看最差的區間有多差。
- 參數穩定性。如果每換一個區間,最佳化就選出差很多的參數,表示這個策略在這組參數範圍內沒有穩定的優勢。相鄰區間選出相近的數值,是好跡象。
- 有沒有算進成本。沒算手續費和滑價的推進分析結果,可能看起來比實際好很多,交易頻繁的策略尤其如此。請參考如何把交易成本算進回測。

推進分析矩陣
區間長度本身也是一種選擇,所以最好用幾種組合來跑,例如樣本內 2、3、4 年,搭配樣本外 3、6、12 個月。如果策略只在某一種組合下撐得住,這個結果就要存疑。如果大多數組合的樣本外表現都差不多,結果就比較可信。
推進分析做不到的事
- 它沒辦法修正本身就有偏差的流程。如果你跑了幾百次推進分析,只留下最好的那一次,等於把推進分析本身也最佳化了。請參考策略生成的過度最佳化。
- 它無法證明未來會跟過去一樣。它只能告訴你,一套重新調參數的流程,在你手上這段歷史裡有沒有用。
- 它很吃運算資源。每個區間都是一次完整的最佳化。9 種組合跑 15 年的矩陣,可能就要跑幾百次最佳化,這時運算能力就開始限制你能測得多徹底。
AlphaPrime 在這裡能幫上什麼
AlphaPrime 的策略檢驗包含推進分析,也能自訂門檻:策略沒通過前面的檢查,就不再跑後面的檢查。

