VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
研究文章 / 穩健性

策略生成的過度最佳化:別被自己騙了

策略生成得夠多,光靠機率就會有一些看起來很漂亮。搜尋範圍越大,這件事越重要。以下說明怎麼分辨。

AlphaPrime 團隊 ·

為什麼搜尋會製造假贏家

想像有 10,000 個策略,完全沒有真正的優勢。它們的回測結果還是會有高有低,因為市場本身充滿雜訊。其中少數幾個會碰巧出現平滑的權益曲線和亮眼的統計數字。如果你照績效排序、只留前段班,留下來的大多是運氣最好的那幾個。

這就是資料探勘偏差,也叫選擇偏差或多重檢定問題。這不是自動生成才有的問題:交易者在同一張圖上手動試五十個點子,碰到的是一樣的問題,只是規模比較小。自動生成會讓問題變大,因為搜尋的範圍更大。

沒有優勢的策略,回測結果呈鐘形分布;右尾最好的幾個,純靠運氣就看起來很漂亮沒有優勢:平均結果回測較差回測較好最好的幾個看起來很漂亮純粹是運氣大量沒有真正優勢的策略,回測結果的分布
示意圖:沒有優勢的策略,因為市場有雜訊,結果還是會分散開來。在大規模搜尋中只留最前段,留下的大多是運氣最好的。

策略只是在貼合雜訊的跡象

  • 一到樣本外,績效就崩掉。這是最明顯的跡象。在建立策略用的資料上表現很強,換到沒看過的資料就普普通通,甚至虧損。
  • 參數高峰很尖。回看長度設 17 有效,設 15 或 19 就不行。真實的效應通常會隨參數移動慢慢變弱。
  • 條件太多、交易太少。每多加一個濾網,就能從過去的紀錄裡剔掉幾筆虧損交易。濾網加得夠多,任何歷史都能弄得很好看。
  • 結果只靠少數幾筆交易。拿掉最好的五筆交易,優勢就不見了。
  • 只在單一商品、單一 K 棒週期有效,而且說不出任何道理。

有幫助的檢查方法

1. 保留一段搜尋完全不碰的資料

開始之前就先把歷史資料切好。在其中一段上建立和挑選策略,再用預留的另一段把入圍策略測一次。如果看了預留資料的結果之後,又回頭修改策略,那段資料就不再是「沒看過」的了。推進分析(Walk-Forward)把這個概念再延伸:在許多連續、沒看過的區間上,測試一套重新調參數的流程。

2. 搜尋範圍越大,標準要拉越高

測的候選越多,最好的那一個光靠運氣就會看起來越好。試 10 次得到的亮眼結果,換成試 100,000 次,可能只是意料中的事。記下總共生成並測試了多少策略;搜尋範圍大的時候,對入圍策略的要求就要更高。

3. 測穩定性,不要只看最佳點

用相近的參數值、稍微不同的起始日期,以及在價格上加入少量雜訊,把入圍策略再跑一次。穩健的策略會慢慢變差;只是貼合歷史的策略會整個垮掉。

4. 對交易序列做蒙地卡羅

把策略的交易重新洗牌或重新抽樣,看看同樣這些交易換個順序,可能出現多大範圍的回撤。歷史回撤只是其中一條路徑,整個分布才告訴你該做好什麼準備。

5. 跟隨機策略比較

在同樣的設定下,用隨機進場生成一批策略,看看你的入圍策略跟這個分布比起來如何。如果最好的隨機策略看起來跟你的一樣好,代表這次搜尋除了雜訊,什麼都沒找到。

6. 一開始就算進合理的成本

很多帳面上好看、其實勉強及格的策略,一算進成本就被淘汰了。在搜尋過程中就納入成本,而不是最後才算,可以避免搜尋偏向高頻的雜訊。請參考回測中的交易成本。

實用的工作流程

  1. 生成任何策略之前,先決定資料怎麼切、成本模型和篩選標準。
  2. 在樣本內資料上生成和篩選,門檻設保守一點。
  3. 對留下來的策略跑穩定性和蒙地卡羅檢查。
  4. 對剩下的策略跑推進分析。
  5. 最後幾個策略,用預留資料測一次。
  6. 寫下整個流程總共測了多少個候選策略。

這些步驟沒有一個能證明策略未來一定有效。但合在一起,可以大幅降低一種可能:你找到的,只是大規模搜尋裡運氣最好的那個結果。

AlphaPrime 在這裡能幫上什麼

AlphaPrime 的策略檢驗讓你自訂門檻,執行基礎、標準或完整三種檢查(包含推進分析);策略沒通過前面的檢查,就不再跑後面的檢查。GPU 回測讓你把更多時間留給這些檢查。

看方案與價格