VIX 進入波動率方程式:六分之一的 OOS 改進,但摸到 GARCH 的天花板
讀者互動
已追蹤瀏覽 0 次,登入會員可按讚與收藏。
VIX 進入波動率方程式:六分之一的 OOS 改進,但摸到 GARCH 的天花板
一句話結論
把「市場恐慌指數 VIX」 直接塞進 GARCH 的變異數方程 ,相對於常見的 GJR-GARCH 基準,能讓 SPY 的樣本外波動率預測 QLIKE 改善約 6.3% ——但這個改進在最嚴格的學術門檻下 還沒過關 ,且模型參數出現「邊界退化」的跡象,提醒我們:VIX 帶來的信號雖然真實,卻 重塑了 GARCH 的內部結構 而不只是錦上添花。本實驗(K438)也同時證實:先前在迴歸架構下風光的 VRP(波動率風險溢酬)在 GARCH-X 框架裡幾乎沒有額外貢獻 ——VIX 一旦進場,VRP 的訊號就被吃光了。

為什麼要做這件事
波動率預測在金融實務上的用途很廣:選擇權定價、風險管理(VaR / ES)、波動率目標(Volatility Targeting)策略、衍生性商品避險。學術上的主流工具是 GARCH 家族 ——它假設「明天的波動率」是「今天波動率」+「今天衝擊」的某種加權組合。GJR-GARCH 進一步加了「壞消息比好消息更會放大波動率」的不對稱性。
但 GARCH 有個天生限制:它 只看歷史報酬 。市場其實還有一個更直接的「未來波動率指標」—— VIX 。VIX 是用 S&P 500 選擇權倒推出來的「市場參與者對未來 30 天波動率的定價」,本質上是一個 前瞻性、含選擇權交易者集體預期 的訊號。如果 GARCH 只用過去報酬資訊,那 VIX 應該帶來新的訊息。
這就是 GARCH-X 的概念:在標準 GARCH 的變異數方程上 外掛 一個外生變數 X(X 可以是 VIX、VRP、總體變數、流動性指標)。先前的相關實驗(K430、K433、K436)已經證明:
- VRP(VIX − 已實現波動率)在「迴歸架構」下對未來報酬有顯著預測力(K436 DM 比較達顯著水準)。
- VIX 的訊息在「日頻」明顯。
但 GARCH-X 框架 過去多次嘗試外掛 VIX、VIX 期限結構、跨國 panel 都失敗。 K438 的問題很單純:給 GARCH 一個誠實的最後機會——這次直接寫 MLE、固定 lookback window、嚴格樣本外、跑足完整檢定,看看 VRP 與 VIX 在變異數方程裡到底能不能拿到分數。
資料與設定
| 項目 | 設定 |
|---|---|
| 標的 | SPY(S&P 500 ETF) |
| VIX 來源 | yfinance ^VIX |
| 樣本期間 | 2005-02-03 ~ 2026-03-25(共 5,318 個交易日) |
| 樣本外期間 | 2023-01-03 ~ 2024-12-31(502 個交易日) |
| Rolling window | 2,000 天 |
| 重新估計頻率 | 每 21 天(約一個月) |
| 共重估次數 | 24 次 |
| 估計方法 | 自寫 MLE(L-BFGS-B + 多起始點) |
比較的四個模型 :
- GJR baseline :標準 GJR-GARCH(1,1)(不對稱效應)
- GARCH-X(VRP) :GJR + 變異數方程加 VRP(lagged 1 day)
- GARCH-X(VIX) :GJR + 變異數方程加 VIX²/252(lagged 1 day)
- GARCH-X(VRP+VIX) :兩者同時加進去
所有外生變數都已確認 lag 1 期 (程式碼第 109-119 行),不存在用「今天的 VIX 預測今天的波動率」這類前視偏誤。
描述統計
| 變數 | 平均 | 標準差 | 偏態 | 峰度 |
|---|---|---|---|---|
| 報酬率(%) | 0.047 | 1.198 | -0.000 | 15.36 |
| VRP(lagged) | 3.516 | 5.502 | -2.583 | 16.46 |
| VIX²/252(lagged) | 1.754 | 2.169 | 5.162 | 36.52 |
| VIX 水準 | 19.18 | 8.62 | 2.54 | 9.66 |
報酬率呈現典型的 胖尾 (峰度 15.36,遠大於常態的 3);VIX²/252 偏態極高(5.16),代表少數極端風險事件主導了長尾。所有外生變數的 ADF 單根檢定都拒絕單根(達顯著水準),符合 GARCH-X 框架對平穩性的要求。
樣本內估計:誰拿到了分數?
把 24 個 rolling window 全跑完之後,看「整個樣本內」的單次估計,比較 AIC / BIC 與 delta(外生變數係數)的統計強度:
| 模型 | 參數量 | NLL | AIC | BIC | 持續性 |
|---|---|---|---|---|---|
| GJR baseline | 4 | 2568.99 | 5145.98 | 5168.38 | 0.988 |
| GARCH-X(VRP) | 5 | 2543.44 | 5096.88 | 5124.88 | 0.995 |
| GARCH-X(VIX) | 5 | 2509.21 | 5028.42 | 5056.42 | 0.822 |
| GARCH-X(VRP+VIX) | 6 | 2509.21 | 5030.41 | 5064.02 | 0.824 |
樣本內贏家是 GARCH-X(VIX) ,AIC/BIC 雙雙最低。但這裡已經出現一個 警訊 :GARCH-X(VIX) 的持續性從 baseline 的 0.988 掉到 0.822, ω(intercept)和 α(ARCH 項)幾乎被估到邊界 1e-8 。這代表什麼?答案後面會詳細談。
Delta 係數的統計強度 (外生變數對變異數的貢獻):
| 模型 | Delta | 標準誤 | 統計強度 | 達顯著水準? |
|---|---|---|---|---|
| GARCH-X(VRP) | 0.00542 | 0.00042 | 13.04 | 是 |
| GARCH-X(VIX) | 0.13256 | 0.02574 | 5.15 | 是 |
| VRP+VIX 同時放 | ||||
| ─ Delta(VRP) | 0.00011 | 0.00241 | 0.04 | 否 |
| ─ Delta(VIX) | 0.13109 | 0.03115 | 4.21 | 是 |
這張表是整個 K438 最重要的訊息之一 :VRP 單獨放,係數 統計強度高達 13.04 (看起來很強);但 一旦把 VIX 也放進去,VRP 的係數立刻塌到接近零(強度 0.04) 。VIX 在 GARCH-X 框架裡 完全吸收 了 VRP 的訊號。
換句話說: VRP(=VIX − RV)在 GARCH-X 變異數方程裡是冗餘變數 ——因為 GARCH 自身的 h_{t-1} 遞迴項已經涵蓋了 RV 的歷史資訊;VRP 真正帶來的「新訊息」其實就是 VIX 的成分 。

樣本外:真正的考驗
樣本內好看不算數,學術上能不能站得住腳,靠的是 樣本外 OOS 表現。我們用 QLIKE (衡量波動率預測準確度的標準損失函數)和 MSE:
| 模型 | OOS QLIKE | OOS MSE | OOS MAE |
|---|---|---|---|
| GJR baseline | 0.5568 | 1.1534 | 0.7080 |
| GARCH-X(VRP) | 0.5513 | 1.1197 | 0.6873 |
| GARCH-X(VIX) | 0.5219 | 1.1338 | 0.6813 |
| GARCH-X(VRP+VIX) | 0.5244 | 1.1354 | 0.6817 |
GARCH-X(VIX) 的 QLIKE 比 baseline 改善 6.27% ,VRP-only 只改善 0.98%(幾乎沒有),組合模型改善 5.82%。
兩模型比較檢定
只有 QLIKE 數字下降不夠,必須做 兩模型比較檢定 確認改進不是運氣:
| 模型 vs Baseline | 比較統計量 | 標準 p | 重抽樣 p |
|---|---|---|---|
| GARCH-X(VRP) | 0.380 | 0.704 | 0.623 |
| GARCH-X(VIX) | 1.961 | 0.050 | 0.027 |
| GARCH-X(VRP+VIX) | 1.823 | 0.068 | 0.039 |
關鍵讀法 :
- GARCH-X(VRP) 樣本外完全沒過 → 與 K436 的迴歸結果不一致 。理由如前所述:GARCH 的遞迴結構已經吃掉了 VRP 的訊息。
- GARCH-X(VIX) 標準 p 值 0.050(剛好觸線),重抽樣 p 值 0.027(達顯著水準)。
- GARCH-X(VRP+VIX) 兩個 p 值都接近邊緣,但 VRP 的係數在這個模型已經塌到零,等於是 VIX-only 加了一個冗餘變數。
但——這裡有一個學術界更高的標準: 嚴格學術門檻(HLZ 2016 多重檢定文獻) 。該文獻主張,在金融研究反覆挖掘變數的環境下,「兩模型比較統計量超過 3.0」才算真正可信。 K438 最強的統計量只有 1.96,距離 3.0 還有不小的距離。
因此 K438 的判決是「部分正面(PARTIAL POSITIVE)」 :VIX 確實貢獻了訊號,但 還沒強到能在最嚴格的學術門檻下發表為新發現 。這個誠實的判讀方式對應我們專案一貫的「研究誠實原則」——數字沒到就是沒到,不靠話術過關。
為什麼 GARCH-X(VIX) 的 ω 和 α 會塌到 0?
這是 K438 最有趣的副產品。GARCH-X(VIX) 的最佳估計裡:
- ω(常數項)≈ 1e-8(基本上是零)
- α(最近一筆衝擊的權重)≈ 1e-8(基本上是零)
- γ(壞消息不對稱權重)≈ 0.363
- β(過去波動率慣性)≈ 0.641
- δ(VIX²/252 的係數)≈ 0.133
直觀解讀 :模型在告訴我們「不需要常數,也不需要對稱的 ARCH 項——只要有 VIX,VIX 就 自己當常數+前瞻訊號 用」。
換句話說, VIX 進入變異數方程時,並不是「在 GARCH 上加一個 X」,而是「VIX 取代了 GARCH 的部分結構」 。GARCH-X(VIX) 在這個資料集上 退化 成接近:
h_t ≈ γ·壞消息衝擊 + β·h_{t-1} + δ·VIX²/252
這既是好消息(VIX 確實有資訊量、能取代 baseline 結構),也是壞消息( 模型撞到參數邊界,標準誤可能不可信 ,外推到其他樣本期或其他資產時行為可能不穩定)。

參數穩定性
把 24 個 rolling window 看下來:
| 參數 | 平均 | 標準差 | 區間 | 翻號次數 |
|---|---|---|---|---|
| GARCH-X(VRP) δ | 0.00519 | 0.00037 | [0.00443, 0.00551] | 0 |
| GARCH-X(VIX) δ | 0.12940 | 0.00598 | [0.12033, 0.13937] | 0 |
| 共構 δ_VRP | -0.00051 | 0.00061 | [-0.00166, 0.00031] | 5 |
| 共構 δ_VIX | 0.13661 | 0.00870 | [0.11674, 0.15084] | 0 |
兩個單變數模型的 δ 都 24/24 視窗同號、變動小 ——這是「真效應」的特徵。但 共構模型裡的 δ_VRP 翻了 5 次號 ——是「冗餘變數被殘餘隨機性推著走」的典型樣貌,再次印證 VRP 在 VIX 出場後沒戲。
哪個情境下 VIX 最有用?
K438 還做了 情境分析 :把樣本外 502 天按 VIX 水準切成三段。
| VIX 區段 | 天數 | GJR baseline QLIKE | GARCH-X(VIX) QLIKE | 改善幅度 |
|---|---|---|---|---|
| 低 VIX(<15) | 234 | 0.0642 | 0.0135 | −79.0% |
| 中 VIX(15–25) | 261 | 0.8779 | 0.8667 | −1.3% |
這張表很驚人 :GARCH-X(VIX) 在 低 VIX 環境下改善幅度高達 79% ,但中 VIX 環境只剩 1.3%。
直觀解釋:低 VIX 期間市場很「平靜」,GJR baseline 容易因為偶發小衝擊「過度反應」(α 項把單日跳動放大);而 VIX 在低水準時 比歷史報酬更早確認「市場真的安定」 ,把預測波動率拉到正確的低位。但中 VIX 環境裡市場本來就劇烈,VIX 與已實現波動率走勢同步,邊際資訊量自然下降。
對實務的意涵 :如果你用波動率預測來做 槓桿/縮放決策 (VT 策略、選擇權部位 sizing),在低 VIX 期間用 VIX 做外生變數的好處會被放大;但在恐慌期,傳統 GARCH 反而沒輸多少。
三個關鍵洞察
洞察 1:VIX 在變異數方程裡帶來訊息,VRP 沒有。 這顛覆了從 K436 等迴歸實驗推論「VRP 有預測力 → VRP 應該在 GARCH-X 裡也有用」的直覺。原因:迴歸架構下沒有 h_{t-1} 的遞迴項,VRP 的「VIX 部分」與「歷史 RV 部分」都會貢獻訊號;但 GARCH 的 β·h_{t-1} 已經吸收 RV 訊息,VRP 的真正增量訊息其實只剩 VIX 本身。
洞察 2:VIX 不是錦上添花,而是改寫 GARCH 結構。 ω 和 α 塌到 0 不是 bug,而是模型告訴你「VIX 當常數+前瞻訊號就夠了」。這對「把 GARCH-X 當 GARCH 的微調」這種傳統認知是個打臉。模型的詮釋與外推必須以「結構性替換」的角度重新看,不能套用傳統 GARCH 的解讀。
洞察 3:6.3% 的改進在學術門檻外,在實務上仍可能值得。 嚴格統計門檻文獻(統計量 > 3.0)下,K438 的最強改進(1.96) 不算發現 。但對實務交易者來說,OOS QLIKE 改 6.3%(重抽樣 達顯著水準(顯著性 0.027))+ 低 VIX 環境改 79% 已經有實用價值——前提是 承認模型結構的不穩定性 並做敏感性測試。
限制與下一步
目前的限制 (誠實列出):
- 自寫 MLE 沒有 BHHH/OPG 標準誤,只用數值 Hessian——標準誤在邊界附近 可能不可信 。
- VRP 用 VIX(30天 IV)對 21天 RV,存在期限不匹配。
- OOS 期間(2023–2025)相對平靜,高 VIX 樣本不夠多。
- δ 約束在 [-1, 1],極端值未探索。
- h_t 正性靠 max(h, 1e-8) 截斷而非 log-volatility 重參數化。
未來方向 :
- 用 realized kernel 或 5-min RV 取代 squared returns 當 RV proxy
- 用 VIX9D 或 VIX 期限結構斜率 而非 VIX level 平方
- 改用 log-GARCH-X 重參數化避開邊界 + 多起始點 ≥100 的標準
- 跨資產驗證(QQQ / IWM / 個股 ETF)測試結論的普適性
為什麼這個結果重要
K438 不是「發現新王者」式的故事,而是一個 收斂性實驗 :
- 它 確認 :VIX 在變異數方程裡有不可忽視的邊際價值。
- 它 否定 :VRP 在 GARCH-X 框架裡是有效的外生變數。
- 它 揭露 :GARCH-X(VIX) 的 ω、α 邊界退化是模型結構性問題,不是統計噪音。
- 它 示範 :「迴歸架構下顯著的變數,在 GARCH-X 裡未必同樣顯著」——這是實證金融常見的陷阱,值得寫進方法論教材。
對讀者更重要的訊息是: 6.3% 的 QLIKE 改進聽起來不大,但分到不同 VIX 區段就會看到 79% 的大改進與 1.3% 的微小改進並存 。波動率模型的價值經常 集中在某些情境下被釋放 ,而不是均勻分佈在所有交易日。實務應用時, 情境分析比平均改進更有指導性 。
資料來源
- 報酬率 :yfinance,SPY 收盤價,2005-02-03 ~ 2026-03-25(5,318 個交易日)
- VIX :yfinance,
^VIX指數收盤價,同期間 - VRP 構造 :VIX − sqrt(252 × 21日滾動 RV), 滯後 1 期 進入模型(程式碼
vrp.shift(1)) - OOS 期間 :2023-01-03 ~ 2024-12-31(502 個交易日)
- 完整實驗檔 :
experiments/k438/k438_garchx_vrp_results.json、experiments/k438/k438_garchx_vrp.py - 相關實驗 :K430(VRP 樣本內預測力)、K433(SSVS 變數選擇)、K436(VRP 日頻迴歸預測力)
- 參考文獻 :
- Han & Kristensen (2014) "Asymptotic Theory for QMLE in GARCH-X" Econometric Theory 30(1): 95–130
- Engle & Rangel (2008) "Spline-GARCH" Review of Financial Studies 21(3): 1187–1222
- Bollerslev, Tauchen & Zhou (2009) "Expected Stock Returns and Variance Risk Premia" Review of Financial Studies 22(11): 4463–4492
- HLZ (2016) "Editorial: Replication in Financial Economics" Critical Finance Review 5: 1–9
詳情
- errata
- {"update_at":"2026-05-08T12:14:12.187823+00:00","update_action":"k438_k681_image_regen_2026_05_08","update_history":[{"at":"2026-05-08T12:14:12.187823+00:00","action":"k438_k681_image_regen_2026_05_08","summary":"重新繪製 K438(3 張)與 K681(2 張)原始圖(PNG 已從 disk 遺失),上傳 Supabase 並修復文章中的 broken-image 引用。圖表數據完全來自 k438_garchx_vrp_results.json / k681_results.json(K681 重跑 backtest 對齊 stored MDD:-8.58% / -34.19% identical)。"}],"update_summary":"重新繪製 K438(3 張)與 K681(2 張)原始圖(PNG 已從 disk 遺失),上傳 Supabase 並修復文章中的 broken-image 引用。圖表數據完全來自 k438_garchx_vrp_results.json / k681_results.json(K681 重跑 backtest 對齊 stored MDD:-8.58% / -34.19% identical)。"}
- experiment_refs
- K438
相關文章
先讀正式關聯,若無則使用標籤與主題相似度補齊