VIX 期限結構斜率能預測波動,卻換不到交易 alpha:一個誠實的失敗紀錄
讀者互動
已追蹤瀏覽 0 次,登入會員可按讚與收藏。
VIX 期限結構斜率能預測波動,卻換不到交易 alpha:一個誠實的失敗紀錄
為什麼要寫這一篇
研究路徑上最常見的陷阱之一,是看到一個訊號在「預測波動率」上有統計上的微小優勢,就直接假設它能轉化成「可交易的超額報酬」。這篇文章想分享一個我們親自踩到坑、然後完整驗證、最後得到 NULL RESULT 的案例:用 VIX 與 VIX3M 的比值(VIX 期限結構斜率)做擇時。
我們之前的研究 K975 已經顯示,VIX/VIX3M 斜率對未來 5 天的已實現波動率(realized volatility,RV)有大約 +2.2% 的增量解釋力 ,且兩模型比較顯著。聽起來像一塊還沒人撿走的便宜肉。所以 K993 的問題很單純:
如果這個斜率對 5–22 天的波動率有預測力,能不能設計一個中頻(週調或月調)策略,把這份預測力換成超額報酬?
劇透:不能。但在解釋為什麼不能的過程中,我們得到了一個比成功更值錢的教訓。
訊號是什麼
VIX 期限結構斜率定義很直觀:
- 斜率 = VIX / VIX3M
- 斜率 < 1:contango(短期波動率低於中期),市場相對平靜
- 斜率 > 1:backwardation(短期波動率高於中期),市場處於壓力狀態
從 2010 年到 2026 年共 4088 個交易日的資料來看,VIX 大部分時間都在 contango:
| 狀態 | 佔比 |
|---|---|
| 任何 contango(斜率 < 1) | 92.1% |
| 深度 contango(斜率 < 0.85) | 58.5% |
| Backwardation(斜率 > 1) | 7.9% |
| 強 backwardation(斜率 > 1.05) | 1.7% |
平均斜率 0.895,標準差 0.075。也就是說,這個訊號絕大多數時間都在說「沒事」,少數時候才會跳出來警示。理論上,這正是擇時訊號該有的樣子:平常 risk-on,警示時降槓桿。
我們設計了哪些策略
我們把斜率包裝成幾個 regime(情境)對應的權重,並用兩種不同的再平衡頻率測試:
深度 contango (s < 0.85) → 權重 1.2(積極)
正常 contango (0.85 ≤ s < 1.0) → 權重 1.0(中性)
輕微 backwardation (1.0 ≤ s < 1.05) → 權重 0.7(縮手)
強 backwardation (s ≥ 1.05) → 權重 0.3(防禦)
加上現成的 12/VIX baseline(這是同領域裡最常用的擇時 baseline)做交叉組合,最後比較 7 個策略:Buy & Hold、Daily 12/VIX、Weekly 12/VIX、Slope VT (Weekly/Monthly)、Slope+12/VIX (Weekly/Monthly)。所有訊號都用 signal.shift(1) 滯後一天再進場,避免 lookahead;交易成本一律 5bp(0.05%)。
樣本切分: IS 為 2010–2018,OOS 為 2019–2026 ,OOS 長達 1824 個交易日,跨越 COVID、2022 熊市、2024 八月波動率脈衝、2025 多頭等多種市場狀態。
OOS 表面結果:看起來最好的那個其實在「灌槓桿」
先看樣本外(OOS)的核心數字:
| 策略 | 風險調整後報酬 | 最大回撤 | 平均權重 |
|---|---|---|---|
| Buy & Hold | 0.654 | -33.7% | 1.00 |
| Daily 12/VIX | 0.531 | -14.6% | 0.72 |
| Weekly 12/VIX | 0.477 | -15.6% | 0.72 |
| Slope VT (Weekly) | 0.759 | -25.8% | 1.09 |
| Slope VT (Monthly) | 0.726 | -28.2% | 1.09 |
| Slope+12/VIX (Weekly) | 0.485 | -15.5% | 0.75 |
| Slope+12/VIX (Monthly) | 0.493 | -18.6% | 0.75 |
第一眼會被 Slope VT (Weekly) 的 0.759 吸引——它比所有 baseline 都高。和 Daily 12/VIX 的兩模型比較也達顯著水準(DM 統計量 2.549)。如果只看到這裡,恐怕已經可以直接打包上架。
但仔細看「平均權重」那一欄: 1.09 。
也就是說,Slope VT (Weekly) 平均下來其實 處於 109% 的市場曝險(隱含小幅槓桿) ,而對照組 Daily 12/VIX 平均才 0.72(72% 曝險)。Slope VT 的「高分」, 不是斜率訊號擇時帶來的 alpha ,而是因為它整段 OOS 期間的市場曝險本來就比 baseline 高 50% 左右——在 2019–2026 這個多頭主導、Buy & Hold 風險調整後報酬 0.65 的環境下,誰把曝險拉高,誰的數字就好看。
這也呼應了它的最大回撤: -25.8% ,比 Daily 12/VIX 的 -14.6% 接近翻倍。它沒有比 baseline 更會擇時,它只是承擔了更多 beta。
把斜率「加進」12/VIX 反而更糟
如果斜率真有額外資訊,把它疊加在 12/VIX 上應該要讓 Daily 12/VIX 變得更好。實際結果:
- Daily 12/VIX:0.531(基準)
- Slope+12/VIX (Weekly):0.485( 惡化 )
- Slope+12/VIX (Monthly):0.493( 惡化 )
兩模型比較都不顯著(DM 統計量分別 -0.41、+0.37)。在控制曝險的情況下, 斜率調整不但沒貢獻 alpha,還製造了額外的 noise 。這是一個比 Slope VT 高分還更直接的反證:當你用 12/VIX 把市場曝險「拉到同一個水位」再來比,斜率的價值就消失了。
檢驗門檻:達不到嚴格統計門檻
我們把 OOS 的兩模型比較拉到嚴格統計檢驗門檻(學術界對「真的有 alpha」的常見高標)下檢視。對 Daily 12/VIX 的兩模型比較統計量:
- Slope VT (Weekly):2.549
- Slope VT (Monthly):2.321
- Slope+12/VIX (Weekly):-0.412
- Slope+12/VIX (Monthly):+0.371
沒有一個達到嚴格統計檢驗門檻 (學術界常用 統計強度 > 3.0 作為控制假發現率的高標)。Slope VT 雖然達顯著水準(雙尾 p ≈ 0.011 / 0.020),但在多重比較與資料窺視(data snooping)的考量下,這個強度遠遠不夠支撐「我們發現了一個 alpha 訊號」這種陳述。
真正打臉的是 2022
OOS 期間有兩段壓力測試最具代表性:
COVID 2020(avg slope = 1.15,明確 backwardation)
| 策略 | 報酬 |
|---|---|
| Buy & Hold | -33.4% |
| Daily 12/VIX | -12.6% |
| Slope VT (Weekly) | -20.7% |
| Slope VT (Monthly) | -14.4% |
斜率衝高到 1.15,理論上應該觸發防禦權重。但即使如此,Slope VT 的損失仍比 Daily 12/VIX 大——因為它在 COVID 之前的 contango 期長期維持在 1.2 槓桿,下跌時的損失被放大,斜率轉成防禦時已經晚了一拍。
2022 熊市(avg slope = 0.93,竟然還在 contango)
| 策略 | 報酬 |
|---|---|
| Buy & Hold | -24.1% |
| Daily 12/VIX | -14.2% |
| Slope VT (Weekly) | -25.3% |
| Slope VT (Monthly) | -27.7% |
這一段才是 Slope VT 的「致命傷」。整個 2022 年是一個慢熊(slow bear),不是恐慌型崩跌;VIX 整年都偏高,但 VIX3M 也跟著高, 斜率始終維持在 contango ,平均才 0.93。整個下跌過程中,斜率訊號從頭到尾都在說「risk-on」,策略反而被逐月凌遲,結果比單純買進持有還差。
為什麼預測波動率,卻換不到 alpha?
這是整個 K993 留下的最重要的觀念:
斜率預測的是「波動率水準」,不是「報酬方向」。
未來 5 天高 RV,有可能是崩跌(這時斜率有用),也有可能是高波動的反彈或盤整(這時斜率甚至會誤判方向)。同樣是「未來會很波動」,方向相反,對純多策略的價值就完全相反。這也解釋了為什麼 K975 的 +2.2% R²(對 RV)這麼漂亮,搬到擇時就消失:
- 擇時策略賺的是「方向 × 曝險」,不是「波動率水準」
- RV 預測力是對稱的(漲跌都算高 RV),方向訊號才是不對稱的(只有跌才該降曝險)
- 在 contango 為主的長期樣本裡,斜率多數時間都不發出警告;它能發出警告的場景(COVID 那種)剛好是市場已經跳水的當下,擇時價值很有限
- Slow bear(2022)市場根本不進入 backwardation,訊號完全失效
我們學到什麼
K993 是一個誠實的 NULL RESULT,但它換來幾個對未來研究紀律有用的規則:
- R² 和風險調整後報酬不是同一個東西 。看到一個訊號對波動率有額外解釋力,要再問一個問題:「它對方向有訊息嗎?還是只對水準有訊息?」如果只是後者,做擇時很可能徒勞。
- 平均權重要看清楚 。當策略 A 風險調整後報酬高於策略 B,第一個檢查不是「A 是不是真的比較會擇時」,而是「A 和 B 的平均市場曝險是否相同」。曝險差距才是大多數「假 alpha」的真正來源。
- OOS 要橫跨多種市場狀態 。如果 K993 的 OOS 只有 2019–2021,Slope VT 看起來會很厲害;2022 那年才把它打回原形。這也再次說明研究時要強迫自己包含至少一個空頭環境。
- 嚴格統計檢驗門檻是一道值得守的高牆 。雙尾達顯著水準(p ≈ 0.01)在純粹的單一檢定下確實有用,但在策略研究這種「多重嘗試 + 樣本窺視」高度氾濫的情境,把門檻拉到嚴格統計檢驗門檻能避免我們把 noise 當 signal 上架。
- 不要回頭微調 regime 門檻把它救活 。若我們在 OOS 看完結果後,回頭去微調 (0.85 / 1.0 / 1.05) 這幾個切點,肯定能變漂亮,但那是 in-sample 過擬合。NULL 就是 NULL,不重新粉飾。
給讀者的一個實用建議
如果你正在使用任何「波動率擇時」訊號,下次看到一個漂亮的回測,請固定先問三件事:
- 這個策略的 平均市場曝險 是多少?和 baseline 是不是同一個水位?
- 它在 慢熊 (不是恐慌崩跌)的環境下表現如何?
- 它的 alpha 是來自 訊號對「方向」的判斷 ,還是來自 長期較高曝險賺到的 beta ?
這三個問題能擋掉大部分看似漂亮、實則只是包裝過的多頭曝險。
附圖


資料來源
- 價格資料 :yfinance(SPY、^VIX、^VIX3M),2010-01-04 至 2026-04-06,共 4088 個共同交易日
- 樣本內期間 :2010–2018(2263 天)
- 樣本外期間 :2019–2026(1824 天)
- 訊號滯後 :所有策略訊號皆
signal.shift(1),無 lookahead - 交易成本 :每次權重變動 0.05%
- 隨機種子 :
np.random.seed(42) - 完整實驗檔 :experiments/k993/(README + Python script + results JSON + 兩張原始圖)
- 前置研究 :K975(VIX/VIX3M 斜率對 5d RV 的 +2.2% R²)、K976(將斜率併入日頻 MF2-GARCH 的 NULL 結果)
結論
K993 對「 VIX 期限結構斜率能否轉化成可交易 alpha 」這個問題給出的答案是: 不行 。
- 看似最高分的 Slope VT (Weekly) 0.759,其實是 109% 曝險帶來的 beta,不是 alpha
- Slope+12/VIX 在控制曝險後反而比純 12/VIX 更差
- 沒有任何策略達到嚴格統計檢驗門檻
- 2022 慢熊市場直接證明斜率訊號在最需要的時候失靈
這個結果不否定 K975(斜率對 RV 仍有預測力),它只是把那份預測力放回了它真正屬於的地方: 風險管理 / 波動率預測 ,而不是 擇時收益 。下一步的方向是把斜率丟進 risk-targeting 框架(控制組合波動率、動態風險預算),而不是繼續嘗試讓它「擇時」。
研究有時候最重要的產出不是一條新策略,而是把一條看起來能上架、實則站不住的策略,誠實地關掉。
詳情
- experiment_refs
- K993
相關文章
先讀正式關聯,若無則使用標籤與主題相似度補齊