階段 03進階

滾動前進與樣本外驗證

一個只存在於你用來最佳化的那段資料裡的結果,是對過去的描述,不是對未來的預測。

2 分鐘閱讀進階

一個只存在於你用來最佳化的那段資料裡的結果,是對過去的描述,不是對未來的預測。整個驗證的紀律,只為了回答一個問題:這個優勢能不能撐過參數從未見過的資料?

滾動前進分析(walk-forward)是散戶最實際可行的答案。

樣本內與樣本外

把資料切開。在樣本內那段最佳化參數,然後在不做任何變動的情況下,在樣本外那段評估選出來的參數。樣本外的結果才是誠實的估計。

兩者之間出現某種程度的衰退是正常的,也在預期之內。問題在於落差的大小。溫和的衰退表示存在一個真實但估計不完美的優勢。獲利因子從樣本內 2.0 崩到樣本外 0.9,則告訴你樣本內的結果是擬合出來的。

滾動前進怎麼運作

滾動前進以滾動的方式重複這個切分。在一段資料視窗上最佳化,交易接下來那段視窗,然後把視窗往前滾並重複。每一步都產生一段樣本外區間。

把那些區段接起來,你就得到一條完全由「在看到資料之前所做的決策」構成的連續淨值曲線。那條曲線比任何單一次最佳化跑出來的結果,都遠遠更誠實地估計了前瞻績效。

怎麼讀這個衰退

把滾動前進的結果與樣本內最佳化做比較。具體看獲利因子、最大回撤,以及這個策略是否在多數個別視窗中都維持獲利,而不是靠一兩個視窗撐起來。

同時檢查選出參數的穩定性。如果最佳值在各視窗之間劇烈跳動,那個參數並沒有捕捉到一個持續存在的效應——它只是在追逐那個視窗裡剛好發生的事。

保留最後一段留存資料

保留最後一段在開發期間絕對不碰的資料,並在你相信自己已經完成的時候跑一次。這是你最後的誠實檢查。

困難的是紀律。每次你在看過留存結果之後又調整什麼,它就不再是留存資料了。如果你忍不住,那你根本沒有留存資料——而你應該承認這件事,而不是假裝有。

構建

Create and backtest your systematic trading strategies without coding.

重點整理

  • 在樣本內最佳化、在樣本外評估,並預期某種程度的衰退
  • 滾動前進把滾動的樣本外區段接成一條誠實的淨值曲線
  • 最佳參數劇烈跳動,表示是在擬合雜訊,不是真實效應
  • 保留最後一組留存資料,而且只跑一次
重點一覽
  • 把資料切成樣本內供最佳化、樣本外供確認
  • 滾動前進在滾動視窗上重新最佳化,並測試接下來那段期間
  • 某種程度的衰退是正常的,全面崩塌則是紅旗
  • 保留最後一組你絕對不碰的留存資料
常見錯誤

不斷拿樣本外資料調整參數,直到它已經不再是樣本外。

在 Strategist 上實作

閱讀不等於驗證

把你剛讀到的概念寫成明確的規則,然後測試它。那是唯一能知道它到底行不行的方法。

建立策略