趨勢策略的回測有一個特別殘酷的性質:它的真實效應很弱,所以任何一點方法瑕疵,都足以把訊噪比從「勉強可交易」推到「看起來很棒」。 一個含前視偏誤、不計成本、在同一份資料上調過 50 次參數的回測,Sharpe 2.0 是常態;同一套規則實盤跑出 0.3 也是常態。這一篇處理如何把回測做到能相信。
一、資料:期貨特有的三個坑
1. 連續合約的接續方式
期貨每隔幾個月換月,價格序列必須人工接起來。三種做法的後果不同:
| 方式 | 做法 | 問題 |
|---|---|---|
| 不調整 | 直接接上新合約 | 換月當天出現虛假跳空,訊號被誤觸發 |
| 差值回溯調整 | 歷史價格整體平移換月價差 | 早期價格可能變成負數,比例類指標(報酬率、ATR%)失真 |
| 比例回溯調整 | 歷史價格乘上比例係數 | 遇到負價(2020 年 WTI)會失效 |
實務共識:訊號用回溯調整序列計算,損益用未調整的實際合約價格計算。 兩者混用是最常見的錯誤來源——用調整後價格算損益,會把換月價差重複計入報酬。
2. 換月的成本與時點
換月本身要付一次買賣價差,一年 4–12 次;若你的市場清單有 30 個,這是一筆真實且可觀的固定支出。回測必須明確模擬換月日與換月成本,而不是假裝合約永遠存在。
3. 已下市市場的存活者偏誤
只用今天還在交易的市場做回測,會系統性排除掉那些流動性枯竭、被交易所下市的合約。對趨勢策略而言影響方向不確定,但它是真實偏誤,至少要在文件中記錄。
二、前視偏誤:三處必檢
✗ 用當日收盤價產生訊號、同時用當日收盤價成交
✓ 收盤產生訊號 → 隔日開盤成交(或收盤前 N 分鐘),並計入隔夜跳空
✗ 用整段樣本估算波動率或相關性
✓ 只用 t 時點之前的資料估 σ_t(事前估計)
✗ 用今天才知道的市場清單、合約規格、保證金
✓ point-in-time 的市場清單與規格
第二項在波動率目標化的系統裡特別致命:用全樣本波動率縮放部位,等於在高波動期間事後降槓桿,回測回撤會漂亮得不真實。
三、成本:把它變成一個數字
成本模型至少要包含三塊:
每次交易成本(以名目金額計) = 買賣價差/2 + 手續費 + 滑點
年化成本拖累 = 年換手率(名目交易額 / 淨值) × 每次交易成本率
流動性最好的期貨(標普 500 迷你、美 10 年期、EUR/USD)單邊成本可壓到名目的 1 個基點以下;冷門商品、新興市場合約可能到 5–15 個基點。以一個中速系統為例:
年換手率 = 6 倍(名目交易額為淨值的 6 倍)
平均單邊成本 = 3 bp
年化成本拖累 = 6 × 0.0003 = 1.8%
在期待報酬只有 5–8% 的策略上,1.8% 是巨大的一塊。這也是為什麼快速訊號在多數市場不可行:把回看期從 12 個月縮到 1 個月,換手率上升 3 倍以上,成本拖累就變成 5% 以上,直接吃掉全部超額報酬。
壓力測試的作法:把成本估計乘以 2 倍與 3 倍再跑一次。若策略在 2 倍成本下就失效,它在實盤上大概率無利可圖,因為真實滑點在你最需要成交的時候(趨勢啟動、波動率跳升)最大。
四、統計顯著性:先算你需要多長的樣本
Sharpe 比率的標準誤近似為
SE(SR) ≈ sqrt( (1 + SR²/2) / T ) # T 為年數
代入趨勢策略的真實水準 SR = 0.5:
| 樣本長度 T | SE(SR) | t 值 | 結論 |
|---|---|---|---|
| 5 年 | 0.47 | 1.06 | 完全無法區分於 0 |
| 10 年 | 0.34 | 1.49 | 仍不顯著 |
| 20 年 | 0.24 | 2.10 | 勉強顯著 |
| 40 年 | 0.17 | 2.97 | 顯著 |
要在 95% 信心下確認一個 Sharpe 0.5 的策略真的有效,你需要大約 17–20 年的資料。 這一個計算就解釋了整個領域的三件事:為什麼學術研究要用 1880 年起的資料、為什麼要 pooled 多市場迴歸(用橫斷面換取檢定力)、以及為什麼 Huang 等人(2020) 逐一市場做迴歸時「幾乎找不到證據」——不是效應不存在,而是單一市場的樣本根本不夠。
同樣的算術也適用於你自己:用 3 年實盤績效判斷策略是否失效,在統計上等於擲硬幣。
五、對抗過擬合的具體程序
- 記錄每一次試驗。 包含「跑了但沒採用」的參數。若總試驗數為 K,最好那組的 Sharpe 期望值會被多重檢定膨脹;Bailey 與 López de Prado 的 deflated Sharpe ratio 就是把 K 納入校正。憑感覺調 50 次而只回報最好那次,是自欺。
- 切三段。 開發期(60%)、驗證期(20%)、鎖起來的樣本外(20%)。最後一段在所有決策定案前不准看,看過就不再是樣本外。
- 走動式驗證(walk-forward)。 每 N 年重新選一次參數,只用當時可得的資料,然後在下一段期間評估。這模擬了真實的決策流程。
- 跨市場一致性檢查。 一組參數應在多數市場為正。若績效集中在 2–3 個市場,那是那些市場的歷史。
- 交易順序的蒙地卡羅。 把單筆損益隨機重排 10,000 次,看最大回撤的分布。你會發現實際回測的最大回撤只是分布中的一個抽樣——真實可能的回撤通常比回測顯示的深 30–50%。這個數字比回測的 max DD 更適合拿來設定風險預算。
- 降級預期。 業界慣例是把回測 Sharpe 打對折當作實盤預期,理由是成本低估、滑點低估、以及未記錄的試驗次數。
六、該看哪些指標
| 指標 | 定義 | 趨勢策略的合理範圍 | 為什麼要看 |
|---|---|---|---|
| Sharpe | 超額報酬 / 波動率 | 0.4–0.8(含成本) | 基本效率 |
| MAR/Calmar | 年化報酬 / 最大回撤 | 0.2–0.5 | 資金能否撐住 |
| 最大回撤 | 淨值高點到低點 | 20–35% | 心理與槓桿上限 |
| 回撤持續期 | 從高點到收復高點的時間 | 可達 24–40 個月 | 比回撤幅度更能預測放棄 |
| 勝率 | 獲利交易占比 | 30–45% | 校正期待,不是目標 |
| 平均賺賠比 | 平均獲利 / 平均虧損 | > 2 | 期望值的來源 |
| 報酬偏態 | 月報酬的三階動差 | 正值 | 確認是趨勢而非賣波動率 |
| 與股票相關性 | 滾動 60 日 | 長期 ≈ 0 | 分散化價值 |
偏態這一項是最好用的「策略體檢」:若你的趨勢系統跑出負偏態,代表某處滲入了賣波動率的行為(例如太緊的獲利了結、逆勢加碼),那不是趨勢策略,風險特性完全不同(對照 網格的回測陷阱)。
回撤持續期則是被嚴重低估的指標。多數人以為自己能忍受 30% 回撤,實際上讓人放棄的是連續 30 個月沒有新高。這一點在 心理面 展開。
驗證通過之後,接下來是把它變成每天真的能執行的東西 → 實戰執行