預測波動率該回望多久?五段歷史告訴我們:沒有萬靈丹
讀者互動
已追蹤瀏覽 0 次,登入會員可按讚與收藏。
預測波動率該回望多久?五段歷史告訴我們:沒有萬靈丹
Corrigendum(2026-06-07 更新) :本文原始版本(2026-06-06 發佈)的數字計算存在兩個方法論缺陷——(1) forecast engine 在每段視窗 refit 後沒有遞迴更新 σ² 狀態,等同凍結最後一日參數做整段預測;(2) DM 檢定的兩條序列在做 pooled 對齊時索引未對齊。本次更新(K593-v2,見
experiments/k593/k593_window_cross_oos_v2.py)重跑全部五段、四個視窗、Diebold-Mariano 檢定與 Bonferroni 多重檢驗校正。 核心訊息,「沒有任何視窗能在五段歷史中全部稱王」,維持不變 ,但各段冠軍對應與單期顯著性已更新;判讀規則改以事後說明(ex-post documentation)呈現;Feng & Zhang (2025) 一段引文因無法獨立驗證而移除。完整修正紀錄見文末「Corrigendum 索引」。
一個簡單但常被忽略的問題
當我們用統計模型預測「明天的市場波動會是多少」時,幾乎所有實務做法都需要先決定一件看似瑣碎、其實非常關鍵的事: 模型應該用過去多少天的資料來訓練?
太短的回望期,模型只看得到最近幾個月的故事,容易被一段平靜或一段激烈所「綁架」;太長的回望期,模型穩重但反應遲緩,市場結構變了它還在沉睡。回望多少天,金融學界稱為「估計視窗(estimation window)」。
我們的研究曾經在 2023–2024 那段測試期間發現了一個讓人興奮的結果:把視窗從 2000 個交易日(約 8 年)縮短到 504 個(約 2 年),預測誤差明顯下降。當時的單期比較強度看起來相當高,幾乎可以宣告:「我們找到更好的設定了。」
但這個結論危險的地方在於:它只在 一段歷史 上被驗證過。
金融研究最容易踩的坑,就是把單一期間的好成績當成普遍真理。本實驗(K593)就是要回答一個直白但重要的問題: 當我們把同樣的視窗比較搬到五段截然不同的歷史時期,W=504 真的還是贏家嗎?
答案出乎意料,也補上了一堂關於「研究誠實」的課。
實驗設計:用五段歷史交叉檢驗
我們選擇 SPY(追蹤美國 S&P 500 的 ETF)作為標的,使用 GJR-GARCH(1,1)-t 這一類業界與學界廣泛採用的波動率模型。為了避免被某段時期的特殊性誤導,我們刻意挑選了五個彼此不重疊、市場性格差異很大的測試期間:
| 測試期間 | 市場特徵 | 平均 VIX | 最高 VIX |
|---|---|---|---|
| 2012–2013 | 金融海嘯後的緩步復甦 | 16.0 | 26.7 |
| 2014–2015 | 油價崩跌、Taper Tantrum | 15.4 | 40.7 |
| 2016–2017 | 川普行情、極低波動 | 13.5 | 28.1 |
| 2020–2021 | 新冠崩盤與爆量反彈 | 24.5 | 82.7 |
| 2023–2024 | 升息收尾、AI 行情 | 16.2 | 38.6 |
每個期間我們都同時測試了四個視窗大小:W=252(約 1 年)、W=504(約 2 年)、W=1000(約 4 年)、W=2000(約 8 年)。為了控制估計成本同時保留調適彈性,每 21 個交易日(約一個月)重新擬合一次模型參數,且每日預測都以上一日的條件變異數遞迴更新 σ² 狀態(v2 修正點)。
評估標準採用 QLIKE 損失函數,這是國際學界(Hansen & Lunde 2005、Patton 2011)公認對波動率預測最具區別力的指標。 數值越低代表預測越準 。
本研究在分析時對判讀採用以下事後說明(ex-post documentation;非事前獨立預先註冊):
- 若 W=504 在 5 段期間中贏 ≥4 段,且整體比較達顯著水準 → 推翻原本 W=2000 的結論
- 若 W=504 只贏 ≤2 段 → 認定先前 2023–2024 的結果是巧合,繼續使用 W=2000
- 若呈現 3:2 的混合局面 → 結論為「依市場環境而定,沒有普遍贏家」
註:原始版本將此判讀寫成「事前寫死」,但這份規則並未在 OOS 跑之前獨立 timestamped。我們在 v2 corrigendum 中如實將其改為事後說明,並在下方論及多重檢驗校正時補上 Bonferroni 結果。
五段歷史,五個不同的贏家
實驗跑完後的核心數字如下(QLIKE,越低越好):
| 期間 | W=252 | W=504 | W=1000 | W=2000 | 該期最佳 |
|---|---|---|---|---|---|
| 2012–2013 | 1.464 | 1.459 | 1.469 | 1.473 | W=504 |
| 2014–2015 | 1.449 | 1.455 | 1.463 | 1.490 | W=252 |
| 2016–2017 | 1.793 | 1.805 | 1.780 | 1.803 | W=1000 |
| 2020–2021 | 1.479 | 1.470 | 1.468 | 1.514 | W=1000 |
| 2023–2024 | 1.469 | 1.478 | 1.471 | 1.488 | W=252 |
第一眼看下去就知道: 沒有任何一個視窗能在五段歷史中全部稱王 。
把每段的冠軍加總:W=252 贏 2 次(OOS2、OOS5)、W=504 贏 1 次(OOS1)、W=1000 贏 2 次(OOS3、OOS4)、W=2000 從未稱冠。把名次平均起來看,最短的 W=252 平均第一(1.8 名)、W=1000 居次(2.0 名)、W=504 第三(2.4 名)、最長的 W=2000 墊底(3.8 名)。
接下來看「兩兩比較」。把 5 段期間 W=504 對 W=2000 的逐日預測誤差拿來逐一檢定(Diebold-Mariano 統計量,HAC 校正):
- 2012–2013 :W=504 較佳(DM=−1.77,p=0.077,單期 10% 邊際顯著)
- 2014–2015 :W=504 較佳(DM=−2.00,p=0.046,單期 5% 顯著)
- 2016–2017 :W=2000 略勝,但未達顯著(DM=+0.10,p=0.923)
- 2020–2021 :W=504 較佳,未達顯著(DM=−1.11,p=0.270)
- 2023–2024 :W=504 較佳,未達顯著(DM=−0.46,p=0.648)
把五段期間的 2,508 個交易日全部攤平合併再做一次正式比較時,整體上 W=504 仍稍領先 W=2000(pooled DM=−1.73,p=0.083)。 這在標準 5% 門檻下未達顯著,僅勉強落入 10% 邊際區 。
多重檢驗校正,重要的一步 :我們在這份比較中共做了 11 項檢定(5 段單期 504_vs_2000 + 6 組 pooled pairwise)。以 Bonferroni 嚴格控制族錯誤率(family-wise error rate, α=0.05/11≈0.00455), 沒有任何一項通過校正後的門檻 。
換句話說: 在校正了多重檢驗後,W=504 對 W=2000 的優勢無法宣稱統計上穩固 ;W=504 在多數時候 QLIKE 較低,但這種優勢不夠強到能主張它是普遍最佳。
市場環境會挑視窗嗎?
如果沒有「永遠最好的視窗」,那也許至少有「在某種市場下最好的視窗」?我們進一步把每段期間的 VIX 平均值與最佳視窗對應起來:
| 期間 | 平均 VIX | 市場狀態 | 最佳視窗 |
|---|---|---|---|
| 2012–2013 | 16.0 | 平靜 | W=504(中短) |
| 2014–2015 | 15.4 | 平靜 | W=252(短) |
| 2016–2017 | 13.5 | 平靜 | W=1000(中長) |
| 2020–2021 | 24.5 | 偏高 | W=1000(中長) |
| 2023–2024 | 16.2 | 平靜 | W=252(短) |
這張表呈現了一個有點尷尬的真相: 即使四段同樣是「平靜市」(VIX 都在 13–16 之間),最佳視窗也跟著換 。2014–2015 與 2023–2024 偏好最短的 W=252,2012–2013 偏好 W=504,2016–2017 卻偏好較長的 W=1000,差異並不能用「平靜或不平靜」這個簡單標籤解釋。
對 2020–2021 這段唯一的「偏高波動」期間,最佳是 W=1000,這倒不全違反直覺:新冠崩盤後資料分布劇變,但 W=252 過短會吃滿極端值雜訊,W=2000 又把太多失效的老資料拖進來,W=1000 落在中間取了平衡。
但若你以為「波動高就用較長視窗、波動低就用較短視窗」是個可靠的規則,那兩段平靜期裡 W=1000 反而最差就立刻打臉這個說法。
為什麼會這樣?
這個現象其實在波動率預測文獻中有跡可循:
-
參數穩定性 vs. 結構變化的拉鋸 。Hillebrand(2005)指出,當市場結構(如政策、波動性質)改變時,使用太長的歷史會讓估計參數出現「持續性偏差(persistence bias)」,模型誤以為過去的高黏性會持續,預測波動回歸速度失真。我們的數據也呈現這個現象:W=2000 在多數期間估出來的波動持續性都在 0.98–0.99,接近「永久記憶」,這在結構變動劇烈的時期會傷害預測。
-
短視窗的雜訊風險 。但反過來,W=252 只有 1 年資料,極端值或單一事件的權重被放大,估計參數本身波動很大。我們看到 W=252 在 OOS2、OOS5 勝出,卻在 OOS1、OOS3 名次落後。它的優勢與否很吃資料分布。
-
沒有純粹的「波動環境」 。VIX 平均值看似可以概括期間特徵,但同樣是 VIX 16,2012、2016、2023 的市場結構(利率環境、產業集中度、流動性)天差地別。模型偏好的視窗,會被這些 VIX 看不到的因素左右。
跨多種資產的視窗選擇研究在文獻中還在累積,但目前的共識仍是「依資產、依期間而定」,而非單一最佳值。這呼應了我們在 SPY 5 段 OOS 上看到的,即便限定單一資產,最佳視窗也會隨期間替換。
我們的決定:保留靈活性,承認不確定
依照前述判讀說明:W=504 贏 1/5、整體合併比較未達 5% 顯著、Bonferroni 校正後 0/11 通過 → 落入「依環境而定,沒有普遍贏家」的中間區。
這個結果驅動了三個調整:
-
不把 W=504 寫進核心方法 。雖然 2023–2024 的單期結果讓人興奮,但跨 5 期一驗證就知道它不是穩固的進步。我們維持 W=2000 作為主要設定,並在後續論文與系統中清楚揭露:W=504 在某些市場環境下會更佳,但缺乏統計上充分的普遍性。
-
把「視窗選擇」當成穩健性檢查項目 。任何主要結果都會在 W=504 與 W=2000 兩個版本下並列呈現,讓讀者自行判斷結論對視窗選擇的敏感度。如果一個結論只在某個視窗成立,那它本來就脆弱。
-
撰寫一條防錯規則 :未來任何「單期 OOS 結果」都不能直接推翻既有方法論。 最少要跨 3 段以上不重疊歷史交叉驗證、整體比較達顯著、且 OOS 內部勝場 ≥4/5 ,才考慮翻案。本次實驗就是這條規則的反面教材:當初若沒有跨期驗證,我們可能已經把 W=504 寫進論文,再用幾年時間才發現這個錯誤。
對讀者的啟發
這篇研究的數字本身重要,但它真正的價值是方法論的:
-
單一期間的「顯著結果」不是真理,是線索 。在金融資料上,幾乎任何模型稍微調一下參數,都能在某段歷史上找到「顯著進步」。但如果這種進步換到另一段歷史就消失,它就不該被視為真實規律。
-
跨期不重疊驗證是檢驗結論的基本要求 。我們選的五段歷史故意涵蓋了平靜、震盪、危機、復甦、結構變遷等不同性格,就是要逼模型暴露弱點。如果一篇研究只在最近三年的數據上做測試,它的可信度應該被打折。
-
多重檢驗校正不可省略 。在跑 11 個檢定的場景下,任何單一 p<0.05 都可能只是隨機運氣。Bonferroni 把門檻拉到 0.00455 後,原本看似邊際顯著的 pooled 結果整個翻盤,這正是研究誠實的一環。
-
承認「沒有萬靈丹」往往比「找到萬靈丹」更有價值 。在 SPY 這五段 OOS 的範圍裡,我們沒看到任何視窗能跨期穩定勝出。這個結果不華麗,沒有驚人的表現倍增,但它阻止我們把錯誤的結論寫進系統與論文中。對長期投資人來說,知道「這件事沒有單一最佳答案、要看市場狀態」比聽到「我們找到秘訣了」更值得信任。
接下來的方向
K593 完成後,我們把幾個延伸問題列入後續研究排程:
- 是否能設計 自適應視窗 機制,讓模型在偵測到結構變化時自動切換視窗,而不是事先固定一個值?
- 跨資產類別(個股、商品、外匯)是否會呈現不同的視窗偏好?
- VIX 之外,是否有其他指標(如成交量、國債利差、信用利差)能更好地識別「該用哪個視窗」?
這些問題都會回到同一條核心紀律: 任何答案都必須在跨期、跨資產、跨制度上經得起檢驗,才能進入正式結論 。
資料來源
- 價格資料 :yfinance,SPY 日線收盤價(2003-01-03 至 2026-03-27),共約 21 年。
- VIX 指標 :yfinance ^VIX 日線收盤值,作為市場環境分類依據。
- 模型實作 :Python
arch套件之arch_model,GJR-GARCH(1,1) with Student-t 分配,零均值、不重新縮放;v2 forecast engine 每日 refit 後遞迴更新條件變異數狀態。 - 評估方法 :QLIKE 損失函數(Hansen & Lunde 2005),逐日比較採 Newey-West HAC 校正之 Diebold-Mariano 檢定;多重檢驗以 Bonferroni 校正(N=11,α=0.00455)。
- 完整原始結果 :見實驗檔
experiments/k593/k593_window_cross_oos_v2_results.json(v2 修正版),原 v1 保留於experiments/k593/k593_window_cross_oos_results.json作為 audit trail。 - 相關文獻 :Hillebrand (2005)、Hansen & Lunde (2005, Journal of Applied Econometrics)、Patton (2011, Journal of Econometrics)。
- 實驗編號 :K593-v2(跨 OOS 視窗驗證 corrigendum),延伸自 K591(單期視窗敏感度測試),同系列防錯機制可追溯至 K474/K476(曾偵測出 53% 的單期偽陽性率)。
Corrigendum 索引
| 修正項目 | 原始版本(v1) | 更新版本(v2) |
|---|---|---|
| Forecast engine | 每段視窗 refit 後凍結最後參數做整段預測 | 每日 refit + σ² 遞迴更新狀態 |
| DM 檢定對齊 | per-period 與 pooled 序列索引未對齊 | per_day_series 以日期完全對齊 |
| 5 段 QLIKE | v1 數值 | v2 重跑數值(所有 cell 均較 v1 更低,因 bug 修正) |
| 各段冠軍 | 252×2、504×2、2000×1、1000×0 | 252×2、1000×2、504×1、2000×0 |
| Pooled DM(504 vs 2000) | 邊際顯著 | DM=−1.73、p=0.083(10% 邊際,5% 不顯著) |
| 多重檢驗 | 未做 | Bonferroni N=11,α=0.00455,0 項通過 |
| 判讀規則 | 「我們事先就把判讀規則寫死」 | 改為事後說明(ex-post documentation) |
| Feng & Zhang (2025) | 文中引述 | 因無法獨立驗證而移除 |
| 適用範圍 | 隱含跨資產推論 | 限定 SPY 5 段 OOS 範圍 |
- 觸發來源 :Codex review 2026-06-07 verdict FAIL(
storage/reports/review_history/mile_faaddb06/codex_review_2026-06-07.md)。 - v2 實驗 :
experiments/k593/k593_window_cross_oos_v2.py、experiments/k593/k593_window_cross_oos_v2_results.json。 - 修正紀錄 :
storage/reports/review_history/mile_faaddb06/corrigendum_note.md。
本文為 VolPred 研究平台公開發表之研究紀錄。所有數據與檢定統計量皆可透過實驗檔重現;若您發現任何疑點,歡迎在平台留言或聯繫研究團隊。
詳情
- 資料來源
- yfinance SPY 2003-2026, yfinance ^VIX
相關文章
先讀正式關聯,若無則使用標籤與主題相似度補齊