策略檢驗清單:信任回測前的 7 項檢查
依固定順序執行七項檢查,由成本低的開始:資料品質、成本、前視偏誤、依時間排序的樣本內/樣本外切分、推進效率、蒙地卡羅與參數壓力測試,以及最低交易筆數。每個通過/未通過的數字都在第一次執行前寫下,策略在第一個未通過的檢查就停止。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
期貨策略的策略檢驗清單有哪些項目?
期貨策略的策略檢驗清單,是依固定順序執行的七項檢查:資料品質、成本、前視偏誤、樣本內/樣本外切分、推進分析、蒙地卡羅與參數壓力測試,以及最低交易筆數,其通過/未通過門檻在第一次執行前就已寫下。策略只要有一項未通過,就在那裡停止。
策略檢驗清單是一份固定的檢驗列表,對每個候選策略都依同樣的順序執行,且每項檢驗的通過門檻,在讀到第一個結果之前就已寫下。可以想成機場的七道關卡:護照查驗沒通過的旅客,不會再被送到行李掃描機,指望那一關會順利些。順序之所以重要,是因為前三項檢查決定輸入,之後每一項檢查讀到的,都是建立在這些輸入上的結果。本文的主張是:順序與事先寫好的數字,比任何單一檢驗更有用,包括那些耗時又令人印象深刻的檢驗。
| 檢查 | 能抓出什麼 | 所需時間 |
|---|---|---|
| 1 資料品質 | 未調整的轉倉、跳空、異常報價、錯誤時區 | 數分鐘 |
| 2 計入成本 | 小於一買一賣成本的優勢 | 數分鐘 |
| 3 前視檢查 | 以規則當時不可能取得的價格成交 | 數分鐘 |
| 4 樣本內/樣本外 | 只描述某一段歷史的規則 | 多跑一次 |
| 5 推進分析 | 在新資料上重新選定後就失效的設定 | 多次執行 |
| 6 蒙地卡羅與參數壓力測試 | 碰巧有利的交易順序;鄰近設定都不好的單一設定 | 多次執行 |
| 7 交易筆數與門檻 | 建立在過少交易上的結果;事後移動的合格標準 | 查看一次 |
AlphaPrime(Valynox)在策略檢驗中就是這樣運作:門檻由你在搜尋前設定,未通過前面檢查的候選策略,不會繼續進入較慢的檢查。
檢查 1 至 3:在讀任何結果之前,資料、成本與成交順序正確嗎?
先做成本低的檢查,因為轉倉處理錯誤、漏掉一買一賣成本,或規則讀取自己所交易那根 K 棒的收盤價,都可能讓虧損的規則變成獲利的回測,之後任何檢查都無法補救。這三項檢查只需數分鐘,就能在動用任何統計之前,剔除大部分看似獲利的假贏家。
- 檢查 1,資料品質。連續月期貨序列是由多個合約月份接成的,每次轉倉的價差跳動必須調整,否則趨勢規則會去交易一個沒人交易得到的跳空。檢查轉倉日期、隔夜跳空、K 棒的時區與休市日曆。通過標準:每次轉倉都用同一種方式調整,沒有任何 K 棒遠離相鄰的 K 棒,且交易時段與你實際交易的時段一致。
- 檢查 2,成本。從一開始,就在每次執行中放入手續費、交易所費用與滑價,以一買一賣(進場加出場)計算。然後拿成本後的平均每筆損益,與一買一賣的成本比較。毛平均每筆損益與交易成本相近的規則,沒有優勢,而且通常正是交易筆數最多的規則。
- 檢查 3,前視偏誤。前視偏誤是回測使用了規則下決定的那一刻還拿不到的資訊。最常見的漏洞,是規則依某根 K 棒的收盤價下決定,又以同一個收盤價成交。解法是下一根 K 棒成交:收盤時下決定,下一根開盤時成交。單根 K 棒檢查:讓策略比訊號晚一根 K 棒成交再跑一次;若結果崩潰,代表規則讀到了未來。
你的軟體是否顯示轉倉調整、是否支援每邊滑價、能否強制下一根 K 棒成交,最好在看任何結果之前就弄清楚;回測軟體比較中的六項檢查,說明了該看什麼。
檢查 4:樣本內與樣本外資料該怎麼切分?
依時間切分,只在較早的部分調整,在較晚的部分原封不動執行規則,並保留最後一段近期 K 棒,在最後一次檢驗前誰都不去碰。樣本內(IS)資料是用來選規則與設定的那部分歷史。樣本外(OOS)資料是留在一旁,只用來執行完成的規則並讀取結果的那部分。讀書用的教材,和考試的試卷必須是不同的頁面。
- 在第一次執行之前就決定切分日期並寫下來。常見的比例,是約 70% 樣本內、約 20% 樣本外,最近的 10% 保留給最後一次檢驗。
- 確認兩邊都含有趨勢、盤整與波動大的區段。若樣本外的幾年是一路上漲,單純做多的規則就會因錯誤的原因通過。
- 計算樣本外的交易筆數,而不是年數;檢查 7 會說明原因。
- 讀過樣本外結果後,所有設定都要固定下來。只要改了設定,那段資料就成了調整的一部分,這次檢驗就用掉了。
樣本內結果應保留多少、結果較弱但沒壞時該怎麼辦,請見樣本內 vs 樣本外的切分方式。
檢查 5:推進效率多少才算通過?
推進效率,是樣本外每單位時間的獲利,除以樣本內每單位時間的獲利;約一半或更高的數字,是常見的通過門檻,要在執行前寫下,並以所有視窗合計判讀,而不是只看最好的那一個。推進分析是一種檢驗:在一個歷史視窗調整設定,原封不動套用到緊接的下一個視窗,兩個視窗一起往前移動並重複,直到接起來的樣本外片段形成一份完整結果。它把一次切分變成多次切分,並從同一份資料產生更多樣本外交易。
除以時間,兩邊才能比較:三年的樣本內視窗與一年的樣本外視窗,無法用總獲利比較。Pardo(2008)描述了這個比率;許多系統化交易人以約 50% 作為下限。要讀的是所有視窗合計的數字。單一視窗表現弱屬正常,因為市場在視窗之間會變。合計數字遠低於門檻、正負號在視窗之間來回翻轉,或結果只存在於一個視窗,都算未通過。
假設性範例
五個滾動視窗。每個樣本內視窗每年賺約 100 單位。樣本外視窗每年賺 60、45、70、20 與 55 單位,因此效率分別為 60%、45%、70%、20% 與 55%。合計起來,500 單位中有 250 單位保留,即 50%,符合執行前寫下的 50% 通過門檻。第四個視窗單獨看會未通過;合計數字則通過。
視窗長度、需要多少個視窗,以及如何解讀接起來的曲線,請見推進分析。
檢查 6:蒙地卡羅與參數壓力測試,比單一條權益曲線多提供什麼?
一條權益曲線只是交易的一種排列,也只是參數網格上的一個點;打亂交易順序,能看出回撤原本可能多深,把每個設定上下移動,能看出結果落在高原還是尖峰上。你看到的曲線只是一次發牌。同樣的 200 筆交易換一種順序發牌,淨損益相同,最糟的回撤卻不同。
蒙地卡羅檢驗,是把交易明細重新排序或重新抽樣許多次,記錄每個新序列的最大回撤,得到的是一個範圍而不是單一數字。任何一份交易明細,都可以用免費的交易用蒙地卡羅模擬器跑一次;歷史回撤通常落在這個範圍中較樂觀的一側,原因見蒙地卡羅回測。可行的通過規則要事先寫下:95% 的洗牌結果都不會超過的回撤,必須是你要交易的帳戶承受得起的。

參數壓力測試,是把每個設定從選定值向上與向下移動幾步,再重跑策略。回看期 20 有效、而 18 與 22 接近零,就是尖峰:這個設定描述的是那段歷史裡的雜訊。回看期 20 的鄰近值從 16 到 26 表現都相近,就位於高原,高原才值得保留。滑價加倍、起始日期位移幾個月,也屬於同一項檢查。
檢查 7:回測需要多少交易筆數?要事先設定哪些門檻?
平均每筆損益的不確定性,隨交易筆數的平方根縮小,因此只有幾十筆交易的執行只是線索,不是結果;每一個通過/未通過的數字(交易筆數、效率、回撤、成本後獲利因子)都必須在搜尋前寫下,結果才無法移動合格標準。由十幾筆交易算出的平均值,換掉三筆交易就會大幅移動;由數百筆算出的平均值,幾乎不動。
平均損益的不確定度 = 各筆交易的離散程度 ÷ √N
其中單筆交易的離散程度是一般交易偏離平均的程度(標準差),N 是交易筆數,√N 是它的平方根。交易筆數變為四倍,不確定性減半。
假設性範例
平均每筆損益為 1,000 單位,單筆交易通常偏離該平均 4,000 單位。41 筆交易時,不確定性約為 4,000 ÷ 6.4 ≈ 625 單位,因此真實的平均值可能遠低於 1,000。160 筆時約為 316 單位;640 筆時約為 158 單位。只有較大的兩個樣本,才讓平均值明顯遠離零。
通過門檻要在搜尋前寫下。許多系統化交易人使用的範例值如下:
| 門檻 | 範例通過門檻 | 原因 |
|---|---|---|
| 已完成交易 | 合計數百筆;樣本外少於 30 筆只算線索 | 低於此數,平均每筆損益不穩定 |
| 推進效率,合計 | 50% 或更高 | 重新選定設定後,樣本內優勢仍保留一半 |
| 成本後獲利因子 | 1.3 或更高 | 獲利因子是總獲利除以總虧損;接近 1 的數值只是成本與雜訊 |
| 蒙地卡羅回撤 | 第 95 百分位數落在帳戶可承受範圍內 | 歷史回撤只是一次發牌 |
| 參數鄰近值 | 兩側各兩步,正負號相同 | 高原,而不是尖峰 |
下面這次執行說明了,為什麼交易筆數的影響這麼大。AlphaPrime 對 ES 日 K 棒執行了一次搜尋,期間 2019-01-02 至 2025-06-30,多空皆做,一口,每筆交易收取 $20 手續費與 $25 滑價。規則是替代用的,並非本文主題:以效率比率(Efficiency Ratio)規則作為唯一的進場與出場,沒有停損、停利與濾網。所示的候選策略,是搜尋嘗試的 1,024 個中留下的那一個,因報酬相對回撤而被選中;事後挑出留下的那一個會美化它,這些數字描述的是一條過去的路徑,不代表這個規則能賺多少,也不是讀者可以預期的結果。
來源:AlphaPrime 產品引擎(CPU),2026-10-31 執行。ES 日線,2019-01-02 至 2025-06-30,多空都做,1 口,每筆手續費 $20、滑價 $25。
| 數字 | 結果 |
|---|---|
| 淨損益(已平倉交易) | $50,967.5 |
| 最大回撤 | $19,100 |
| 交易筆數 | 41 |
| 勝率 | 56.1% |
| 獲利因子 | 2.107 |
| 平均每筆損益 | $1,243.11 |
| 持倉時間占比 | 15.84% |

先看交易筆數:約六年半只有 41 筆交易。依上面的公式,41 筆讓 $1,243.11 的平均每筆損益帶有相當大的誤差範圍,而 $50,967.5 的淨損益與 $19,100 的最大回撤,只是這 41 筆交易的一種序列。對照事先寫下的數百筆通過門檻,這個候選策略是一條線索,值得帶進視窗更多或 K 棒週期更短的推進分析,而不是可以拿來交易的結果。
為什麼搜尋中最好的回測,仍然要通過七項檢查?
留下的候選策略是多次嘗試中最好的一個,帶有選擇加成,只有未見過的資料與事先寫下的門檻才能把它扣除;而單獨通過的策略,還必須與你已經在交易的其他策略一起檢驗。選擇加成,是搜尋中最好的回測裡,來自搜尋本身、而不是來自規則的那一部分。
給 1,024 個人各一枚硬幣,請每人擲十次。大約有一個人會擲出十次正面,而這個人並沒有任何技巧。上面 ES 的執行,是 1,024 次嘗試中留下一個候選策略,因此結果有一部分就是這種加成,而樣本內的數字無法說明有多少。Bailey、Borwein、López de Prado 與 Zhu(2014)指出,即使每個規則都是雜訊,搜尋中預期的最佳回測仍會隨嘗試次數上升;Harvey 與 Liu(2015)則提出,依結果背後的檢定次數折減結果。影響有多大、背後有哪些研究,請見回測過度最佳化。
這就是檢查 4 至 7 存在、且它們的門檻要先寫下的原因:未見過的資料不帶有這種加成,事先寫下的門檻也無法為了配合結果而移動。七項之後還有一道關卡。單獨通過的策略,只有與你已在交易的策略合併後,才會改變你的帳戶;兩個策略若在同幾週一起虧損,回撤就會相加。如何衡量,請見投資組合回測。
下一步:取一個你正在考慮的策略,把它的七條通過門檻連同今天的日期寫在一頁紙上,在再次查看它的權益曲線之前,先對它的資料執行檢查 1。
常見問題
實單交易前應該檢驗什麼?
先檢查輸入:調整過的轉倉與乾淨的 K 棒、每筆交易都計入的手續費與滑價,以及下一根 K 棒成交。接著在規則從未見過的資料上檢驗:依時間排序的樣本外區段、合計效率約一半或更高的推進分析、蒙地卡羅回撤範圍,以及參數高原。最後確認交易筆數達數百筆,且每一條通過門檻都是在執行前寫下的。
回測需要多少交易筆數才可信?
多到幾筆交易改變時,平均每筆損益也不會大幅移動。平均值的不確定性隨交易筆數的平方根縮小,因此筆數變為四倍,不確定性減半。許多系統化交易人希望合計有數百筆交易,並把樣本外少於約 30 筆視為只是線索。較短的 K 棒週期或推進分析的設計,能從同一段歷史產生更多交易。
推進效率多少才算通過?
推進效率,是樣本外每單位時間的獲利除以樣本內每單位時間的獲利。所有視窗合計約 50% 或更高,是常見的通過門檻。單一視窗表現弱屬正常,因為市場會變;合計數字遠低於門檻,或樣本外獲利只存在於單一視窗,則算未通過。門檻要在執行前寫下。
怎麼避免回測過度最佳化?
相對於交易筆數,要讓調整的設定數量保持少;從第一次執行就計入成本;只用搜尋從未接觸過的資料來判斷。鄰近值表現相近的設定,優於單獨突出的某一個數值。記住,多次嘗試中最好的候選策略帶有選擇加成,所以每條通過門檻都要在搜尋前設定,並套用在樣本外與推進分析的結果,而不是樣本內曲線。
參考文獻
- Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies (2nd ed.). John Wiley & Sons.
- 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.
- Harvey, C. R., & Liu, Y. (2015). Backtesting. The Journal of Portfolio Management, 42(1), 13–28.

