VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
交易研究社 / 回測與檢驗

推進分析的樣本外損益為正,代表選得好嗎?

樣本外損益為正,只代表策略在測試窗口內賺了錢,不代表選得好。要判斷選擇品質,請在相同窗口上把每個候選策略與無技巧基準比較,並涵蓋足夠多的窗口與交易。

作者 · 發佈 · 更新於 · 編輯原則

目錄
  1. 樣本外損益為正,代表策略選得好嗎?
  2. 為什麼上漲行情會讓幾乎任何多單策略看起來都不錯?
  3. 如何把策略的貢獻與行情的變動分開?
  4. 為什麼單一的樣本外正負號是薄弱的證據?
  5. 如何在相同的樣本外窗口上為候選策略排名?
  6. 推進分析能告訴你什麼,不能告訴你什麼?
  7. 常見問題
  8. 參考文獻

樣本外損益為正,代表策略選得好嗎?

不代表。推進分析的樣本外損益為正,只說明策略在那些測試窗口內賺了錢。如果行情上漲,而策略大多持有多單,即使毫無技巧也可能賺到這些錢。要判斷選擇品質,請在相同窗口上把每個候選策略與基準比較,並涵蓋許多窗口與交易。

樣本外損益,是策略在完全沒有參與選擇過程的資料上所產生的獲利或虧損。在推進分析中,你先在一段歷史窗口上最佳化(樣本內),再把選出的設定原封不動拿到下一個窗口交易(樣本外),然後重複。一個 fold 就是這樣的一組配對:一個樣本內窗口,加上緊接其後的樣本外窗口。

樣本外損益的正負號只回答一個問題:策略在這裡有沒有賺錢?選擇品質問的則是另一個問題:選擇過程挑出的策略,是否比同一期間內不具技巧的選擇賺得更多?想像一場帆船比賽。一艘順風先到終點的船,船長可能很普通。要了解船長的功力,只能比較同一天、同一條航線上的各艘船。

為什麼上漲行情會讓幾乎任何多單策略看起來都不錯?

多單不論進場聰明或隨機,都會賺到行情的漲幅,所以上漲的測試窗口會拉抬每一個多單策略。買進持有,就是在整個窗口內持有一口多單,並在每次到期時轉倉到下一個合約。在還原調整的連續月序列上,它大致等於窗口第一根 K 棒到最後一根 K 棒的價格變動,未計轉倉成本。

大部分時間都在場內的純多策略,會承接這段漲幅的大部分。如果樣本外窗口剛好落在強勢上升趨勢中,即使它的進出場規則毫無貢獻,也會呈現正號。反過來也一樣。空單策略在下跌行情中看起來很聰明。而一個多單策略若虧得比下跌行情少,即使正負號為負,也可能選得不錯。

如何把策略的貢獻與行情的變動分開?

減去方向相同、在場內時間相同的無技巧部位,在同一窗口內會賺到的金額。最簡單的版本只有一行:

超額損益 = S − e × M

  • S 是策略在該窗口扣除手續費與滑價後的樣本外損益。
  • M 是相同口數在同一窗口內買進持有的損益。
  • e 是策略的淨曝險:持有多單的 K 棒占比減去持有空單的 K 棒占比。多單占 60% 的時間、空單占 10% 的時間,則 e = 0.5。

超額損益,就是樣本外損益中無法由行情變動解釋的部分。基準,是無技巧規則在相同條件下會產生的結果。不同基準能剔除的運氣成分不同:

基準剔除什麼何時使用
窗口內買進持有整體行情水位對大部分時間都在場內的策略做第一道檢查
曝險匹配的買進持有(e × M)行情水位,並依策略持倉的時間長短與方向加以縮放比較曝險不同的候選策略時的預設選擇
隨機進場基準行情水位,以及交易筆數與持倉時間的影響最嚴格的檢查,用於最終入選者

隨機進場基準會保留策略的交易筆數、持倉時間與方向,把進場放在隨機的 K 棒上,並收取相同的成本。重複許多次,就能得到該窗口內無技巧結果的分布範圍。策略結果落在這個範圍中段附近,代表沒有證據顯示它有技巧;落在範圍上緣附近,則代表在該窗口內有一些技巧的證據。

基準在交易時,要收取與策略相同的成本。否則策略可能只因為付了交易成本、而基準沒有,就顯得比較差;請參閱回測中的交易成本。對於多空雙向交易的策略,請把多方與空方分開比較。績效報表中的多空分析可以提供這樣的拆分。

為什麼單一的樣本外正負號是薄弱的證據?

只從少數幾筆交易、一個 fold、一種行情型態得到的正負號,近乎擲硬幣;而在許多候選策略中挑選,更幾乎必然挑到一個幸運的正值。四個獨立的問題會疊加在一起:

  1. 交易筆數少。窗口內只有少數幾筆交易時,一筆大賺或大賠就決定了正負號。這個正負號描述的是一筆交易,而不是一條規則。
  2. 只有一個 fold。單一樣本外窗口只是一次抽樣。完全沒有優勢的策略,因為結果散布在零附近,約有一半的時間會以正值結束窗口。
  3. 依賴行情型態。行情型態(regime)是指具有典型特徵的一段市場,例如穩定趨勢、震盪盤整或高波動的下殺。如果所有樣本外窗口都落在同一種型態,它們就共享同樣的順風或逆風。
  4. 候選策略很多。如果你觀察十個彼此無關、毫無優勢的候選策略,其中至少一個在某窗口以正值結束的機率高於 99.9%。於是看起來最好的倖存者,只是搜尋之下的預期結果,並不是什麼發現。
多個互相獨立、沒有優勢的候選策略中,至少有一個在樣本外區間收益為正的機率(每個機率各為 50%):選 1 個為 50%,2 個為 75%,5 個約 97%,10 個超過 99.9% 試越多次,越容易出現幸運贏家 無優勢策略至少一個勝出的機率 選 1 個 50% 選 2 個 75% 選 5 個 ≈97% 選 10 個 >99.9% 獲利的倖存者說明不了什麼。 所以:要與基準比較。
如果每個沒有優勢的候選策略出現正值窗口的機率都像擲硬幣,只要看上幾個,出現一個正值的倖存者就近乎必然(假設候選策略彼此獨立)。

關於資料窺探(data snooping)的研究也正式地說明了同一件事。White(2000)提出 Reality Check,在考量到搜尋過許多模型的前提下,檢驗眾多模型中最好的那一個是否勝過基準。Sullivan、Timmermann 與 White(1999)把這個概念應用到大量的技術交易規則。Bailey 等人(2017)衡量回測過度配適的機率:樣本內排名最佳的設定,在樣本外落到中位數以下的頻率。Harvey 與 Liu(2015)主張,回測結果應該依其背後的測試次數打折。更多內容請見回測過度配適研究。

如何在相同的樣本外窗口上為候選策略排名?

以相對基準的超額損益為候選策略排名,窗口與成本必須完全相同,並且重視跨窗口的一致性勝過總額大。比較來自不同窗口的原始損益,比的是行情水位,而不是候選策略。

  1. 固定一組樣本外窗口,並讓每個候選策略都使用它。
  2. 每個候選策略都使用相同的成本、口數與成交假設。
  3. 在每個窗口中,計算每個候選策略相對於其曝險匹配基準的超額損益。
  4. 為每個候選策略記錄四個數字:總超額損益、超額損益為正的窗口數、最差窗口的超額損益,以及每個窗口的交易筆數。
  5. 先依勝過基準的窗口數與最差窗口排名,總超額損益作為同分時的決勝依據。
  6. 換第二種窗口配置再做一次,例如不同的樣本內與樣本外長度。只在一種配置下成立的排名是脆弱的。

假設範例

三個候選策略、四個為期六個月的樣本外窗口,結果以指數點數計,已扣除成本。一口買進持有的行情變動為 +400、+300、−200 與 +500 點(合計 +1,000)。候選策略 A 有 80% 的時間持有多單,B 有 30% 的時間持有多單,C 多空持倉時間相等(e = 0)。

候選策略各窗口樣本外損益總損益各窗口超額損益總超額損益勝過基準的窗口
A(e = 0.8)+300、+200、−220、+420+700−20、−40、−60、+20−1004 個中的 1 個
B(e = 0.3)+150、+140、+20、+160+470+30、+50、+80、+10+1704 個中的 4 個
C(e = 0)+80、−40、+60、−20+80+80、−40、+60、−20+804 個中的 2 個

三者都是正的。依原始損益排名,A 是第一。依超額損益排名,A 是最後:在四個窗口中的三個,它賺得比在相同時間比例內持有行情還少。

三個候選策略在相同區間的假設排名:依樣本外原始損益,A 第一為 +700,B 為 +470,C 為 +80;依超額損益(相對基準),B 第一為 +170,C 為 +80,A 墊底為 −100 A 從第一掉到最後 原始損益 vs 超額,假設 原始損益 超額 1 A +700 2 B +470 3 C +80 1 B +170 2 C +80 3 A −100 原始損益反映的是行情,不是實力。 所以:依超額損益排名。
同樣三個候選策略、同樣的窗口:依原始損益排名與依超額損益排名,A 分別落在相反的兩端。

在 AlphaPrime(Valynox)中,推進分析是策略檢驗的一部分,門檻可由你自行設定。策略資料庫讓你搜尋、排序候選策略並重新檢驗,所以每個最終入選者都能在相同的窗口與設定下檢查,再拿來與行情變動比較。

推進分析能告訴你什麼,不能告訴你什麼?

推進分析能告訴你,你挑選並重新調整策略的方式,在你的歷史所包含的行情型態中,面對未見過的資料是否站得住腳。它無法告訴你,這個過程在歷史從未出現過的行情型態中會有什麼表現。

推進分析能呈現推進分析無法呈現
在樣本內選出的設定,在下一個窗口是否持續有效優勢能否撐過資料中不存在的行情型態
結果在各窗口之間如何變動候選策略為什麼勝出,除非你把它與基準比較
選出的參數在各 fold 之間是否保持穩定如果你跑了很多次推進分析並只留下最好的,推進分析本身是否被過度搜尋
選擇過程在你的歷史所涵蓋的各種行情型態中表現如何對未來報酬的預測

行情型態轉換,是這個方法最弱的地方。每個樣本內窗口看的都是過去。在市場行為出現斷裂之後,最初幾個樣本外窗口測試的,是針對剛剛結束的市場所配適的設定。這些窗口顯示的是這個過程在轉折點上的表現,所以請單獨解讀,不要讓兩側表現良好的窗口把它們平均掉。請確認你的歷史包含數種不同的行情型態,並且除了總額之外,也要看每種型態下的超額損益。

如果你使用 AlphaPrime,這代表:對每個最終入選者,以相同的窗口與成本執行推進分析,然後在排名之前,把每個窗口的結果與該窗口的行情變動並排來看。在多數窗口都勝過基準、且最差窗口尚可承受的候選策略,比總額為正且最大的那一個,能告訴你更多。

常見問題

推進分析中的樣本外損益是什麼意思?

它是策略在每次最佳化之後的那個窗口上所產生的獲利或虧損,使用的設定在看到該窗口資料之前就已固定。把這些窗口串起來,得到的結果類似於定期重新調整、向前交易的情況。它仍然包含這些窗口期間的行情變動。

推進分析的樣本外結果為正,就足以交易這個策略嗎?

單憑結果為正,證據薄弱,尤其是在交易筆數少、fold 少,或測試窗口來自同一種行情型態時。請逐窗口檢查策略相對於基準的表現,基準的方向與在場內時間要與策略相同。同時也要檢查最差窗口,以及每個窗口的交易筆數。

期貨策略該用什麼基準?

先從相同口數、相同窗口的買進持有開始,並依策略的淨曝險加以縮放。對最終入選者,採用交易筆數、持倉時間、方向與成本都相同的隨機進場基準會更嚴格。多方與空方請分開比較。

樣本外損益為負的策略,仍可能是好的選擇嗎?

在某些情況下可以。一個多單策略如果在下跌窗口中虧得比曝險匹配的基準少,相對於持有行情,它就是有所貢獻的。請在所有窗口上評估它,而不只看下跌的那一個。

為什麼我的策略通過了推進分析,行情一變卻虧損?

推進分析只測試你的歷史中出現過的行情型態。如果所有樣本外窗口都處在同一種趨勢或波動水準,結果描述的就只是那種型態。當行情型態改變時,樣本內窗口反映的仍是舊的市場。

參考文獻

  • Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.
  • Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2017). The Probability of Backtest Overfitting. Journal of Computational Finance, 20(4), 39–69.
  • White, H. (2000). A Reality Check for Data Snooping. Econometrica, 68(5), 1097–1126.
  • Sullivan, R., Timmermann, A., & White, H. (1999). Data-Snooping, Technical Trading Rule Performance, and the Bootstrap. The Journal of Finance, 54(5), 1647–1691.
  • Harvey, C. R., & Liu, Y. (2015). Backtesting. The Journal of Portfolio Management, 42(1), 13–28.

AlphaPrime 在這裡能幫上什麼

AlphaPrime 的策略檢驗提供基本、標準與完整檢驗、推進分析,以及可自訂的門檻。策略資料庫讓候選策略保持可搜尋,並能在相同窗口上隨時重新檢驗。

看方案與價格