普通回測是先看答案再考試。Walk-Forward Analysis 是每個月換一套新題目考你。這個差距,就是「回測幻覺」和「真實績效預期」之間的距離。
普通回測的根本問題
你拿了十年的歷史資料,用全部資料開發策略、調參數、最佳化規則。然後用同一批資料跑回測,看到漂亮的曲線——「年化 25%,最大回撤 12%,太棒了!」
問題在哪?
你用來「出題」和「答題」的是同一份資料。這等於老師把考卷和答案一起給你,你背完答案後宣佈自己考了 100 分。你的回測績效不是策略的能力,是記憶力。
更糟的是,你可能不自覺地做了這件事。每次你「看了一眼」某段資料的走勢,再根據看到的東西調整策略,你就在偷看答案。
大部分人的回測,都有這個問題。
Walk-Forward Analysis(WFA)的核心概念
WFA 解決這個問題的方式很直覺:把時間切成一段一段,每次只用過去的資料最佳化,然後在「未來」的資料上驗證——然後往前滾一步,重複。
具體流程:
- 拿最早的一段資料(比如 2010-2014)當「訓練期」,在上面最佳化策略參數
- 用最佳化的結果,跑在下一段資料(2015)上——這段資料策略從沒見過
- 記錄 2015 年的績效
- 窗口往前滾:訓練期變成 2011-2015,驗證期變成 2016
- 重複,一直滾到最新的資料
最後你得到的是:每一段驗證期的績效拼接起來的曲線。
這條曲線的每一段,都是策略在「它沒見過的資料」上的表現。這比普通回測誠實太多了。
一個比喻
想像你在準備考試。
普通回測的做法:拿到十年份的考古題和答案,背完之後宣佈「我的實力是 95 分」。
WFA 的做法:每個月考一次新的模擬考。你只能用之前的考古題準備,但考題每次都是新的。十二次模擬考的平均成績,才是你真正的實力。
哪個更接近真實?顯然是後者。
而且 WFA 還有一個附帶的好處:如果你的策略在某幾段驗證期表現特別差,你可以回去看那幾段的市場環境——是熊市?是低波動?是某個特殊事件?這幫你理解策略的弱點在哪,比一條混在一起的總績效曲線有用得多。
WFA 能告訴你什麼?
1. 策略的「真實」績效預期
普通回測的績效是被灌水的(因為用了全部資料最佳化)。WFA 的績效更接近你在實盤上能期待的水準。
經驗法則:WFA 的績效通常是普通回測的 50-70%。如果普通回測年化 30%,WFA 可能只有 15-20%。這不是壞消息——這才是真實數字。
2. 策略的穩定性
如果 WFA 的每一段驗證期績效差異很大——有的年賺 40%,有的年虧 20%——代表策略對市場環境非常敏感。這不是一個穩定的策略。
如果每一段的績效都在一個合理的範圍內波動——有的年賺 15%,有的年賺 5%,偶爾小虧——這才是一個可靠的策略。
3. 最佳化是否有意義
如果你在訓練期找到的「最佳參數」,在下一段驗證期完全不管用——代表你的最佳化只是在擬合雜訊。參數根本沒有預測力。
反過來,如果訓練期的參數在驗證期也表現不錯(雖然會有衰減),代表參數確實捕捉到了某種市場結構。
WFA 不能告訴你什麼?
WFA 不是萬靈丹。它有幾個限制:
- 它不能保證未來績效。 WFA 告訴你策略在「歷史上的模擬未來」表現如何,但真正的未來可能和歷史完全不同。
- 它不能取代邏輯判斷。 一個邏輯上說不通的策略,即使 WFA 結果不錯,也可能只是巧合。
- 它對資料量有要求。 你需要夠長的歷史資料,才能切出足夠多的訓練/驗證窗口。資料太短,WFA 的結果統計上不可靠。
- 它不能消除所有偏差。 如果你在做 WFA 之前就已經看過全部資料並據此設計了策略邏輯,WFA 的「樣本外」就不是真正的樣本外。
所以 WFA 要配合其他原則一起用——尤其是「邏輯先於數據」和「過擬合零容忍」。
為什麼大部分人不做 WFA?
兩個原因。
第一,因為做了之後大部分策略會死掉。
普通回測績效年化 30%,WFA 一跑變成年化 5%,甚至虧損。這種感覺非常痛苦——你花了一個月開發的策略,被一個測試方法判了死刑。
很多人寧可「不知道」,也不願面對這個現實。
第二,因為 YouTube 和課程不教。
WFA 比普通回測複雜得多。要切窗口、要滾動、要拼接結果、要解讀。這些步驟不適合拍成十分鐘的 YouTube 教學。
更重要的是,如果 YouTuber 對自己展示的策略做了 WFA,大部分策略的績效會大幅縮水——那影片就不好看了。
所以我該怎麼做 WFA?
這篇只講概念。具體怎麼做——窗口怎麼切、步長怎麼設、結果怎麼判讀、什麼結果代表過擬合——這些是方法論層面的實作細節。
如果你已經在用 Python 做回測,加入 WFA 不會太難。但細節很多,做錯一步結論就會偏。
這也是我的付費內容會深入處理的主題。













