VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 回測與檢驗

回測可以信嗎?上實單前的六項檢查

回測是規則在舊價格上、依所列成本與成交設定交出的紀錄,不是預測。要依序通過六項檢查才可信:沒有前視偏誤或資料錯誤、成本符合實際、樣本外交易筆數足夠、做過推進分析、沒有過度最佳化跡象,以及小額前瞻測試。

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

目錄
  1. 回測可信嗎?通過六項檢查才算
  2. 檢查 1:回測有沒有偷看未來,或用了錯誤資料?
  3. 檢查 2:結果扣掉手續費與滑價後還成立嗎?
  4. 檢查 3 與 4:樣本外要多少筆交易才夠,為什麼推進分析能給你更多?
  5. 檢查 5:如何看出過度最佳化?
  6. 檢查 6:為什麼要先小額前瞻測試,再以完整部位交易?
  7. 常見問題
  8. 參考文獻

回測可信嗎?通過六項檢查才算

回測可信嗎?必須依固定順序通過六項檢查:沒有前視偏誤或資料錯誤、成本符合實際、樣本外交易筆數足夠、做過推進分析、沒有過度最佳化跡象,以及小額前瞻測試。回測是規則在舊價格上、依所列成本與成交設定交出的紀錄,不是預測。任何一項檢查失敗,策略就回到研究階段。

順序有其道理。第 1 項檢查出現洩漏,之後每個數字都失去意義;第 2 項檢查的成本錯誤,會改變哪些策略能進入第 3 項檢查。期貨回測的定義說明回測這份紀錄本身;回測軟體比較列出工具必須讓你設定的項目,否則六項檢查根本無法執行。

六道關卡,依固定順序:洩漏與資料、成本與滑價、樣本外交易、推進分析、過度最佳化檢驗與前瞻測試;任一關未過,策略就回到研究階段,只有六關全過的策略才以完整部位交易 六道關卡,順序固定 過了這關才到下一關 1 2 3 4 5 6 洩漏與資料 成本、滑價 樣本外交易 推進分析 過度最佳化檢驗 前瞻測試 任一關未過 回到研究 六關全過 以完整部位交易 任何一關失敗,策略就停下。 所以:照這個順序過關。
六道關卡,依固定順序。任何一關失敗,策略就停在那裡,回到研究階段。

檢查 1:回測有沒有偷看未來,或用了錯誤資料?

多數在實單中崩潰的回測,用了交易者當時不可能拿到的資訊。前視偏誤,是指規則讀到了當時尚不存在的價格:在給出訊號的那根 K 棒上直接成交、會重繪過去數值的指標、連續月中留下的轉倉跳空、觸發停損的異常報價。先做一根 K 棒位移測試:每個訊號改在下一根 K 棒的開盤價成交,而不是訊號 K 棒的收盤價,再比較兩份報表。結果因此崩掉,代表原本有洩漏。常見的洩漏來源,列在回測中的前視偏誤。

兩列各五根日 K 棒,訊號出現在第 3 根的收盤:洩漏的回測在同一根 K 棒成交,如實的回測在第 4 根的開盤價成交;一根 K 棒位移測試比較這兩個結果 在下一根 K 棒成交 訊號出現在第 3 根 K 棒收盤 訊號 洩漏 如實 同一根 下一根 結果崩掉,就是洩漏。 所以:做一根 K 棒位移測試。
收盤時算出的訊號,只能在下一根 K 棒成交。一根 K 棒位移測試比較的就是這兩個結果。

檢查 2:結果扣掉手續費與滑價後還成立嗎?

把未扣成本的平均每筆損益,與完整的一買一賣成本相比;優勢若與成本相近,多一個跳動點的滑價就會消失。從第一次執行起,就把手續費、交易所費用與滑價放進搜尋;事後才加,會淘汰大部分入圍者,白白浪費搜尋時間。免費的勝率計算機可算出平均每筆損益還剩多少。

假設性範例

未扣成本的平均每筆損益 $90。一買一賣的手續費與費用 $30。每邊各一個跳動點的滑價,每跳動點價值 $10:$20。平均每筆淨損益 $40。若滑價加倍成 $40,淨額降到 $20,不到未扣成本數字的四分之一。

假設性平均每筆損益:未扣成本 90 美元,減去手續費與費用 30 美元、滑價 20 美元,淨額 40 美元;若滑價加倍,淨額降到 20 美元 成本吃掉一半以上 平均每筆損益(假設性) 未扣成本 手續費 滑價 淨額 滑價 2× +$90 −$30 −$20 +$40 +$20 滑價加倍,淨額減半。 所以:第一次就把成本算進去。
成本單筆看來不多,累計卻不少。成本決定優勢究竟存不存在。

檢查 3 與 4:樣本外要多少筆交易才夠,為什麼推進分析能給你更多?

用已完成的交易筆數、而不是年數,來衡量歷史中未動過的那一段,因為平均每筆損益的不確定度,只會隨交易筆數的平方根縮小。樣本外(OOS)資料,是從未參與選擇規則或設定的那段歷史。兩年的樣本外資料,月度波段規則只有二十四筆交易,日內規則卻有一千筆;日期相同,證據的分量差距極大。只有一條公式:

平均每筆損益的不確定度 = 單筆交易的離散程度 ÷ √N

單筆交易的離散程度,是單筆結果通常偏離平均多遠;N 是樣本外交易筆數;√N 是它的平方根。樣本外交易有幾百筆是可行的目標;不到約 30 筆只是線索,不是結果。

平均每筆損益的不確定度,隨樣本外交易筆數下降的曲線:以 100 筆為基準,30 筆為 1.8,只是線索,400 筆為 0.5,所以交易筆數多四倍,不確定度減半 交易數 4×,疑慮減半 相對值,100 筆 = 1.0 不確定度 交易筆數 30 → 1.8 100 → 1.0 400 → 0.5 不到 30 筆只是線索。 所以:數筆數,不數月數。
平均每筆損益的不確定度隨交易筆數的平方根下降,所以從 100 筆增加到 400 筆,也只是減半。

推進分析是這樣一種測試:在一個區間內最佳化設定,原封不動套用到接下來的區間,往前推進再重複,最後把各測試段接成一條曲線。這條接起來的曲線,是你唯一真正可能交易到的一條;它包含的樣本外交易,比同一段歷史只切一次來得多;也能看出重新選出的設定,在區間往前推進時是否持續有效(Pardo,2008)。在 AlphaPrime(Valynox)中,推進分析是策略檢驗的其中一步;通過門檻在搜尋開始前就已寫定,策略一旦沒過前面的檢查,後面的檢查就停止。

推進分析:四個區間依時間往前推進,各自在樣本內的部分最佳化,再在其後的樣本外部分測試;各測試段接成一條權益線,這是你唯一評斷的曲線,它的長度以交易筆數來看 只評斷測試段 四個區間依時間往前推進 最佳化 測試 只評斷這條 接起來的測試段交易較多。 所以:以筆數看它的長度。
推進分析沿著歷史重複「先最佳化、再測試」的切分。只評斷接起來的測試段,它的長度以交易筆數來看。

檢查 5:如何看出過度最佳化?

最佳結果出自大規模搜尋,會被搜尋本身美化,所以要先做參數高原測試、以蒙地卡羅重排交易順序,並確認獲利分散在不同時期,才去讀標題數字。下列這次執行測的是 NQ 日 K 棒,期間 2019-01-02 至 2025-06-30,多空皆做,一口,以艾爾德射線的空頭力道(Bears Power)規則作為替代規則,而非主題本身;它是 1,024 次嘗試中,依報酬相對回撤而留下的那一個候選策略;事後挑出留下的那一個會美化它,讀者不能預期得到這些數字。

來源:AlphaPrime 產品引擎(CPU),2026-10-31 執行。NQ 日線,2019-01-02 至 2025-06-30,多空都做,1 口,每筆手續費 $20、滑價 $10。

項目結果
淨利(已平倉)$130,510
最大回撤$86,105
交易筆數227
勝率52.86%
獲利因子1.229
平均每筆$574.93
持有部位時間55.42%
請看標示出的樣本外區段,而不是整條曲線:策略就是在那一段被評斷,下方的回撤面板則是你實際會經歷的。
請看標示出的樣本外區段,而不是整條曲線:策略就是在那一段被評斷,下方的回撤面板則是你實際會經歷的。 NQ · 日 K 棒 · 2019-01-02 至 2025-06-30 · CPU 引擎回測
前瞻測試扣除成本後平均每筆損益的刻度:低於零為紅色,代表停止;從回測值的 50% 起往上為綠色區間,代表繼續,回測值標在中央附近 用先訂好的區間評斷 前瞻平均每筆損益,扣除成本後 停止 繼續 回測 0 50% 較弱但在區間內屬正常。 所以:開始前先寫好區間。
重排同樣 227 筆交易的順序,會得到一個可能回撤的範圍。把這個範圍的寬度,與單一報表上的回撤相比,後者只是從中抽出的一個值。 NQ · 日 K 棒 · 2019-01-02 至 2025-06-30 · CPU 引擎回測

過度最佳化,是把規則調得和某一段歷史貼得太近,以致它描述的是那一段的雜訊。三項測試能讓它現形。第一,跑相鄰的設定:回看期間在 20 有效、在 18 與 22 失效,是尖峰,不是高原。第二,用免費的交易用蒙地卡羅模擬器重排交易順序,讀回撤的範圍,而不是單一數值;若要同時跑多個策略,應以投資組合回測與合併後的回撤為規劃依據。第三,數有幾個季度貢獻了獲利。Bailey 等人(2014)指出,搜尋試的變體越多,最佳者被高估得越多;Bailey 與 López de Prado(2014)則提出依試驗次數對夏普比率打折的方法。更多在信任策略之前先設法打破它的方法,見交易策略的穩健度測試。

回看期間 10 到 30 的兩條獲利曲線:只在 20 有效、在 18 與 22 失效的尖峰,因為描述的是雜訊而被捨棄;相鄰設定一致的高原,則往下一步推進 尖峰還是高原? 各回看期間的獲利,10 到 30 尖峰:捨棄 高原:保留 10 20 30 10 20 30 相鄰設定必須一致。 所以:不只測 20,也測 18 與 22。
只在某個精確數值有效的設定,是運氣好的尖峰。相鄰設定一致的設定,才是高原。

檢查 6:為什麼要先小額前瞻測試,再以完整部位交易?

以最小口數做一段短期的實單或模擬運行,把回測中關於成交、滑價與交易時段時點的假設,變成量到的數字。前瞻測試,是把固定下來的規則,放到規則寫成時尚不存在的價格上執行。開始之前先寫好容忍範圍:例如,實單扣除成本後的平均每筆損益,必須維持在回測數字的一定比例之內;量到的滑價不得高於檢查 2 所用的數值。累積到足以判讀的交易筆數後,依這個容忍範圍比較回測與實單結果。在範圍內,就提高到原訂的部位大小;在範圍外,帶著量到的成本回到檢查 2。

下一步:拿出你最信任的策略,把每一次成交從訊號 K 棒的收盤價,改到下一根 K 棒的開盤價,再比較兩份報表。這一根 K 棒的位移就是檢查 1,不花任何成本,只要幾分鐘。

常見問題

回測賺錢,實單就會賺錢嗎?

不會。回測是規則在舊價格上、依所列成本與成交設定交出的紀錄,不是預測。六項檢查靠移除洩漏、正確計入成本、用未動過的資料評分、以小額度量真實成交,來縮小回測與實單結果之間的落差。

回測要有多少筆交易才可靠?

數樣本外交易筆數,不要數年數。平均每筆損益的不確定度隨交易筆數的平方根縮小,所以筆數多四倍,不確定度才減半。樣本外有幾百筆交易是可行的目標,而推進分析能從同一段歷史產生更多筆。

如何分辨過度最佳化與真正的優勢?

跑相鄰的設定:相鄰設定一致的高原,比單一尖峰是更好的跡象。確認獲利分散在各季度,讀蒙地卡羅的回撤範圍而不是單一數值,並依搜尋試過的變體數量,把最醒目的結果打個折扣。

回測到底可靠嗎?

作為規則在過去價格上、依你設定的成本、交易時段與成交規則所做之事的紀錄,回測是可靠的;作為對未來結果的預測,則不可靠。把報表當成有待檢查的證據,讓六項檢查決定它有多大的分量。

參考文獻

  • 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., & López de Prado, M. (2014). The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting and Non-Normality. The Journal of Portfolio Management, 40(5), 94–107.
  • Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies (2nd ed.). John Wiley & Sons.