
回測:台股雙檔均值回歸策略 2023-2026 — 為何 Sharpe 1.2 是過度樂觀
台股雙檔配對均值回歸策略表面 Sharpe 1.2 看似可行,但加入手續費、滑點與 look-ahead 修正後降至 0.4。本文誠實拆解 RED 訊號:top-2 trades 占 60%、cost-sweep 不穩、結構偏移擊穿假設。
目錄
回測:台股雙檔均值回歸策略 2023-2026 — 為何 Sharpe 1.2 是過度樂觀
1. 策略描述
這次測試的是一個常見的入門級配對交易框架:挑選兩檔走勢長期相關的台股 ETF 與成分股(本文以加權指數代理 ^TWII 與一檔追蹤型 ETF 為觀察對象),計算其價差的滾動 z-score,當 z-score 偏離 ±2 時進場,回到 0 出場,設 z-score 突破 ±3 時停損。
背後的 edge 假設很單純:兩個高相關標的的價差在中短期應呈均值回歸,偏離只是雜訊,非結構性事件。這是教科書式 pair trading 邏輯,在學術 literature 中對 2000 年代美股有效,但在 2020 年代資金結構大幅變動的台股是否依然成立,需要逐項驗證。
之所以挑這個策略做誠實紀錄,是因為它在中文量化教學圈被反覆推銷,常見話術是「相關性 0.95 以上的兩檔配對,用 z-score 進出場就能穩定獲利」。這類話術隱藏了三個假設:相關性是穩定的、價差呈定態、執行成本可忽略。本文要做的,正是把這三個假設逐一拆給數據檢驗。
進出場規則:
- 進場:|z-score| > 2.0
- 出場:|z-score| < 0.2
- 停損:|z-score| > 3.0
- 留倉上限:20 個交易日
- 部位:等資金兩腿,L/S market-neutral
2. 資料與工具
| 項目 | 設定 |
|---|---|
| 期間 | 2023-01-03 至 2026-04-22 |
| 頻率 | 日線收盤 |
| 來源 | TWSE OHLCV 與 Yahoo Finance ^TWII 交叉對齊 |
| 引擎 | Python 3.11 + Backtrader 1.9.78 |
| Rolling window | 60 日 z-score |
| 手續費 | 兩腿單邊 0.1425% × 0.6 折讓,證交稅 ETF 0.1% / 個股 0.3% 出場端 |
| 滑點 | 0.05% per leg(初版)→ 0.15% per leg(壓力版) |
資料對齊上有兩個小細節值得記錄:^TWII 與 TWSE 收盤時點一致,但若直接用 Yahoo 的調整收盤(adjusted close),除息日的 z-score 會出現假突波。最後採用未調整收盤,股息以單獨欄位回灌 PnL。另一個細節是停牌日處理 — 若任一腿當日無成交,該日整對配對不參與訊號計算,而非用前一日價格 forward-fill。這個小選擇對結果有放大鏡效應,後段會看到差異。
工具版本上,Backtrader 雖然在主動社群維護減少,但 single-strategy event-driven 回測足夠;只要把 commission scheme 與 cheat-on-close 都關掉,並用自寫的 SizerLeg 控制兩腿等資金,就能避開 vendor 預設的隱藏假設。
3. 結果摘要
下表呈現三個漸進嚴格設定下的績效:
| 設定 | Sharpe | Max DD | Win rate | Avg trade (bps) | Trades |
|---|---|---|---|---|---|
| A. 無成本、含當日資訊 | 1.78 | -8.4% | 58% | +24 | 142 |
| B. 含成本、滑點 0.05% | 1.20 | -11.6% | 53% | +11 | 138 |
| C. 含成本 + 滑點 0.15% + next-bar 進場 | 0.41 | -16.2% | 48% | +3 | 135 |
警示:Sharpe > 2 先假設 seed / per-day / fill bug。本回測未跨過此門檻,但 Sharpe 1.2 在加上現實約束後迅速衰退,本身就是 edge 脆弱的訊號。
設定 A 是教學上常見的「show off」版本,是把假設當結論的危險樣本;設定 C 才是接近真實可執行的版本。從 A 到 C 的衰退路徑,本身就是這次回測最有價值的觀察。
4. 觀察重點 1 — 績效分解暴露集中度問題
單句主旨:三年半 135 筆交易中,正報酬 60% 來自前 2 筆。
把設定 C 下所有交易按 PnL 排序後拆解:
- 全期累計毛獲利約 +405 bps
- 第 1 筆貢獻約 +162 bps(約占 40%)
- 第 2 筆貢獻約 +82 bps(約占 20%)
- 其餘 133 筆合計約 +161 bps,平均單筆 +1.2 bps
兩筆「明星交易」分別發生在 2024 年 8 月台股單月最大震盪(月內加權指數一度自高點下挫近 12%)與 2025 年 4 月某次 AI 鏈短期回檔。這兩個事件本質上是 regime shock 而非均值回歸,策略只是「碰巧」站對方向。換言之,這兩筆並不是策略 edge 的證據,而是樣本期內被一兩次極端事件「拗回來」的偶發勝利。
把這兩筆移除後,剩下 133 筆的累計毛獲利約 +161 bps,扣除設定 C 的全成本後接近歸零;再算 Sharpe 為 0.06。若回測者只看完整樣本的數字而沒做 trade-level 分解,很容易把運氣誤當成 alpha。
依 Phase 6 RPT diagnostics 思路常用的 top-2 contribution gate,門檻通常設在 30%。本回測 top-2 占比約 60%,明確逾越警戒。
5. 觀察重點 2 — sanity checks 三項全敗
單句主旨:cost-sweep、ffill rate、next-bar latency 三道過濾器全部踩到紅線。
依高頻均值回歸常用的 fill fantasy gate(見 RPT Day 3 經驗):
| Sanity check | 門檻 | 實測 | 判定 |
|---|---|---|---|
| Cost sweep 1×→2× | Sharpe 衰退 < 30% | 1.20 → 0.62 (-48%) | RED |
| Cost sweep 1×→3× | Sharpe > 0 | 1.20 → 0.06 | RED-edge |
| Slippage 0.05%→0.15% | Sharpe 衰退 < 40% | 1.20 → 0.41 (-66%) | RED |
| Next-bar entry | Sharpe 衰退 < 25% | 1.20 → 0.83 (-31%) | RED |
| Stale fill rate | < 10% | 14.6% | RED |
特別值得注意的是 stale fill。z-score 觸發時,有相當比例的進場價並非當日真實交易得到的價格,而是低成交量時段被 forward-fill 的「紙上價格」。把這些位置強制 next-bar 真實成交,Sharpe 從 1.20 直接掉到 0.83,再加 0.15% 滑點即跌穿 0.5。
這種衰退模式跟 Phase 7 Day 3 RPT 1-min calendar MR 的崩盤路徑高度相似:diagnostics 看起來通過,但 fill 真實性檢查一上,edge 就消失。也就是說,設定 B 的 Sharpe 1.2 並非因為策略真有 alpha,而是因為回測引擎默許了不切實際的成交假設,把雜訊算成了報酬。
更進一步把 cost 從 1× 等距 sweep 到 4×,Sharpe 呈單調下滑且在 2.5× 附近就跌至 0.5 以下,完全沒有 plateau。健全 edge 的特徵是:cost 微幅上升時績效幾乎不動;本策略卻像浮木一樣,水位稍漲就沒頂。
6. RED signals 判定
按既有的 cross-source / fill-fantasy / event-lottery 三道 gate 框架,本策略至少踩到三條:
- Top-2 trade 占比 ~60%:遠超 30% 門檻 → event-lottery RED
- Cost-sweep 1× → 3× 接近歸零:edge 對成本極度敏感 → fragile-edge RED
- Stale fill 14.6%:fill fantasy 風險 → fill-fantasy RED
更深一層,2023-2026 期間台股經歷了 AI 帶動權值股集中度大幅上升,加權指數中前十大成分股市值占比顯著高於 2010-2019 區間,這對「指數 vs 成分」型 pair 是結構性逆風 — 兩腿的相關性內嵌了結構偏移,而非單純的隨機 spread。換言之,均值回歸假設在這個樣本期間本身就站不太住。
值得補上一個診斷:對 60 日 rolling correlation 做時間序列觀察,2023 年中以前確實穩在 0.93 以上,但 2024 年後段曾數度跌破 0.85,且修復路徑長達數十個交易日;這段期間進場的部位往往不是回歸,而是 spread 的單邊擴張。回測上的「停損」反覆觸發,是放大虧損而非保護資金。
7. 結論與下一步
把以上所有觀察彙整為一句話:在 2023-2026 樣本期、日線頻率、加上接近真實的成本與滑點假設下,本配對均值回歸框架在台股沒有可重複的優勢,Sharpe 1.2 是回測引擎默許的幻覺。這是一個**典型的「初看可行、細看潰散」**回測案例,結論誠實寫:設定 A 的 Sharpe 1.78 與設定 B 的 Sharpe 1.2 都是過度樂觀,真正可比照真實執行的設定 C 落在 0.4,屬於零 edge 區間。
可記錄的負面結論:
- 教科書 pair trading 在 2023-2026 台股、日線、權值代理對上,扣除真實成本後沒有可重複的 alpha
- 大樣本 Sharpe 數字若 top-2 集中度 > 50%,應降權看待
- 若有人對外宣稱「台股均值回歸 Sharpe 1+」而未公布 cost sweep / fill 真實性 / top-2 contribution,通常是過度樂觀
下一步的合理探索方向(也就是「不會再走原路」):
- 換到更高頻 + 真實 L2 book 來源評估 microstructure 而非統計 spread
- 把 pair 對象換成同產業近似標的(例如兩檔同類型 ETF),避開「指數 vs 成分」的結構偏移
- 加入 regime filter(例如波動度區間),只在特定市場狀態下啟動,但需明示這是 conditional strategy 而非 universal alpha
無論哪一條,出發前必須先補齊本文揭示的三道 sanity gate。直接套教科書框架到當前台股,扣完成本後幾乎沒有空間。
最後留下一段給未來自己的備註:回測的價值不在於漂亮的權益曲線,而在於誠實標示哪些假設被擊穿、哪些區間是運氣。一份只列 Sharpe、Max DD、Win rate 的摘要表,看起來專業,卻常常掩蓋掉 fill 真實性、成本敏感度、單筆貢獻度這三個真正關鍵的訊號。把這三道 gate 內建進後續的回測流程,才是這次失敗測試最有價值的副產品。
如果未來有人拿著相似的均值回歸框架,主張在台股可以穩定取得超額報酬,合理的回應是要求對方公開:全期間的 trade-level PnL 分布、cost 1× 至 4× 的 Sharpe sweep、以及 next-bar 真實成交版本的權益曲線。三項任何一項拿不出來,結論可逕自視為過度樂觀。
來源
本站為觀察研究,不作價格預測或個股薦股;上列所有數字以撰文時為準,後續發展請自行追蹤一手來源。
地緣優先的投資觀察週報
每週一封。方法論、失敗紀錄、量化驗證結果。不寄明牌,不寄投資建議。 免費訂閱即可收到精選摘要,付費解鎖完整深度研究。
- 免費版:每週 1 篇精選 + 市場速覽
- 付費版:每週 3 篇深度研究 + 數據附件
同一條思路下的其他研究

Walk-Forward 設計守則:OOS 不是跑一次就算
很多回測報告寫著「OOS 表現良好」就把策略 GREEN 了。但 OOS 做一次不叫 walk-forward,那只是運氣。這篇整理 walk-forward 分段的三個設計關鍵,以及每一段應該記錄什麼才算誠實的 robustness 檢驗。

公開回測紀律:為什麼我們把 Sharpe > 2 先當成 bug
十多次失敗的回測告訴我一件事:高 Sharpe 不是 edge,是訊號。是「該去找 bug」的訊號。本文整理三個最常見的高 Sharpe 假象、對應的診斷步驟、以及為何把「先假設壞掉」寫成預設值,對長期研究才誠實。把門檻寫出來,是為了下次看到漂亮數字時仍能按順序跑完七條檢查,而不是被僥倖拉走。

「615 回測後 670 反彈」的敘事解剖:為什麼 90% 的 Level Prediction 是事後合理化
市場充滿精確的價格預測:『S&P 615 回測,670 反彈』。但為什麼這些預測事前很少成立,事後總能解釋?這篇文章用統計學和心理學拆解三個預測存活的機制,以及如何區分『真預測』與『事後合理化』。