同一個公式,兩種用法,差距天壤之別:VaR 的「記憶長度」決定你的風險計算準不準
讀者互動
已追蹤瀏覽 0 次,登入會員可按讚與收藏。
同一個公式,兩種用法,差距天壤之別:VaR 的「記憶長度」決定你的風險計算準不準
[提出: 用戶, 執行: Claude]
2020 年 3 月,SPY 在短短 23 個交易日裡跌了 34%。之後大多數模型做了什麼?繼續用 2015 到 2019 年的平靜市場資料,估算出一個「還算正常」的風險數字。結果接下來的違約次數超過預期兩倍以上,銀行監理的交通燈轉成紅色。
這不是模型的計算錯了,是模型的「記憶」太長。
風險模型有記憶問題
用 VaR(Value at Risk)量化投資組合的下行風險,核心問題只有一個: 你拿哪段歷史來估計明天可能的最大損失?
最常見的兩種做法:
Expanding window(滾動式擴充) :從資料第一天累積到今天,所有歷史都拿來用。用的資料越來越多,估計越來越穩定,但也越來越遲鈍。2020 年的暴跌,被 2010 年代那段超長多頭市場的平靜給「稀釋」掉了。
Rolling window(固定長度滾動) :只看最近 252 個交易日(大約一年)。資料始終新鮮,市場換了 regime,模型跟著換。2020 年暴跌之後,一年內這段異常波動就變成計算的核心素材。
直覺上,「用更多資料」聽起來更穩。實際跑出來,是「用更新的資料」贏了。
跨三資產實測:6/6 全通過 vs 4/6
我們用 Cornish-Fisher 展開式(CF)計算 VaR,對 SPY(美股大盤)、QQQ(科技股 ETF)、GLD(黃金 ETF)各做 OOS(樣本外)測試,期間從 2019 年到 2026 年,共約 1,827 個交易日。
Cornish-Fisher 展開式的做法:不假設報酬呈常態分配,而是根據最近的偏度(左偏程度)和峰度(尾端厚度),動態調整分位數。公式本身不變,差別在於輸入這個公式的統計量,是用過去一年(rolling)還是全期(expanding)計算。
評分標準採 Trinity Test,必須同時通過三關:
- Kupiec 檢定 :違約次數是否統計上符合設定比例(2.5% 或 1%)
- Christoffersen 檢定 :違約是否散開,不能一堆連在一起(連串違約代表模型根本沒捕捉到尾端行為)
- Basel 交通燈 :銀行監理基準,紅燈代表超標
結果如下:
| 方法 | Trinity 全通過 | SPY 2.5% 違約率 | QQQ 2.5% 違約率 | GLD 2.5% 違約率 |
|---|---|---|---|---|
| 常態分配(Normal) | 0/6 | 3.72% | 4.11% | 3.45% |
| Student-t(df=8) | 1/6 | 3.56% | 3.78% | 3.23% |
| CF-Rolling(252天) | 6/6 | 2.24% | 2.63% | 2.41% |
| CF-Expanding(全期) | 4/6 | 1.70% ❌ | 2.08% ✓ | 1.92% ✓ |
(預期違約率 = 2.5%;偏低一樣算失敗,代表 VaR 過度保守,偏高則低估風險)
數據來源:yfinance,OOS 期間 2019-01-01 至 2026-04-10,共約 1,827 個觀測值。實驗 K1034,GJR-GARCH(1,1) 條件變異數。

圖一:六組測試(三資產 × 兩 alpha 水準)的通過情況。CF-Rolling 全綠,CF-Expanding 在 SPY 2.5% 失敗(過度保守),常態分配全紅。
CF-Expanding 輸在哪裡
CF-Rolling 6/6 全過,CF-Expanding 4/6,差距聽起來不大。但 CF-Expanding 輸掉的方式很有意思: 不是低估風險,是高估太多。
SPY 在 2.5% 水準,CF-Expanding 的實際違約率只有 1.70%,理論值是 2.5%,它給的保護比需要的多 47%。Kupiec 檢定直接 FAIL:「你的 VaR 太高了,跟實際市場行為嚴重不符。」
原因就是記憶太長。2020 年 COVID 崩盤被記下來,加到全期的統計裡,往後幾年還在影響估計。即使市場 2021-2023 年已經恢復,擴充視窗模型仍然「記得害怕」,繼續給出偏保守的 VaR。這不算好事:過度保守的 VaR 讓風控部門誤以為風險比實際大,資本配置失真。
Rolling 視窗的邏輯是:市場有 regime,每個 regime 都有自己的偏度和峰度分布。用 252 天的偏度和峰度調整分位數,讓 VaR 跟著當下市場的尾端特性走,而不是被過去的大事件拖著。

圖二:各方法、各資產、各 alpha 水準的實際違約率。橫線為目標值。CF-Rolling 最接近目標,常態分配和 Student-t 的實際違約率幾乎是目標的 1.5 倍。
常態分配壞在哪
資產偏度和峰度是這樣的:SPY 偏度 -0.80,超額峰度 3.25;QQQ 偏度 -0.73,超額峰度 2.82;GLD 偏度 -0.40,超額峰度 3.17。
換成大白話:三個資產的報酬分配都比常態分配的尾巴厚,而且左邊的尾巴比右邊長(左偏),大跌比大漲更常發生,跌幅也更深。
常態分配假設偏度為零、峰度為 3(超額峰度為 0),直接忽略這兩個特徵。結果在 2.5% 水準,SPY 的實際違約率是 3.72%,比設計值高 49%。Student-t 用 df=8 的固定厚尾調整,比常態好一點,但 df=8 寫死了,不管市場今年是平靜還是動盪,用的都是同一組假設,SPY 還是 3.56%,仍然超標。
CF-Rolling 的做法是每 63 天重新估計 GJR-GARCH,拿最新 252 天的標準化殘差算偏度和峰度,代入:
z_cf = z_α + (z_α²-1)/6 × S + (z_α³-3z_α)/24 × K_excess − (2z_α³-5z_α)/36 × S²
這個調整後的分位數隨市場變,正常年分偏度小、峰度低,VaR 不會算太高;高波動期偏度變大、峰度飆高,VaR 自動往外推。

圖三:在不同偏度水準下,CF 分位數相比常態和 Student-t 的差異。偏度越大(越左偏),CF 給出越大的 VaR 調整量。
不用猜分配,但也不是萬能
CF 最大的優點是「半參數」,用的是 GJR-GARCH 算出的條件變異數,加上從殘差資料直接估計的偏度和峰度,不強迫套常態分配的假設。比純粹的常態 VaR 靈活,比需要假設 Pareto 尾端的 EVT(極值理論)簡單。
但 CF 的限制也真實存在。它是四階近似,當超額峰度超過 10 的時候,這個展開式可能失去單調性,計算出來的分位數會出現不合理的數字。極端市場崩潰的尾端,比四階展開式能捕捉的還要厚。
這次測試也只用 GJR-GARCH 做基底,期間包含 COVID 衝擊,但只是 2019-2026 的一個區間。Rolling 視窗固定 252 天,沒有做敏感度分析看窗口長度怎麼影響結果。
實務上怎麼用
對大多數散戶來說,直接操作 CF-VaR 不容易,但背後的邏輯轉化成投資決策是有意義的:
靜態風險數字要懷疑。 很多線上工具給你一個固定的「最大損失」估計,背後用的是歷史全期常態假設。這次測試顯示,這類工具在 2.5% 水準的實際誤差接近 50%。
波動率本身會跟著市場狀態變。 2023 年算出來的 VaR 不等於 2021 年的 VaR,更不等於 2020 年 3 月的 VaR。市場換 regime,風險估計要跟著更新。
「用越多歷史資料越安全」這個直覺是錯的。 對 VaR 來說,資料新鮮度比資料量更重要。過長的記憶讓模型跟不上 regime 轉換,給出失真的保護。
對機構風控和量化投資人,CF-Rolling + GJR-GARCH 的組合在這次三資產測試裡達到 6/6 完美通過,是目前系統內在不引入外部信號(如 VIX、市場情緒指標)條件下最乾淨的 VaR 解法。若要進一步改良,可以測試 CF 與 A4f 模型的組合(A4f 透過乘法項引入 VIX 等外部因子,K995 已達 12/12 Trinity)。
本文基於實驗 K1034(腳本:experiments/K1034/k1034.py,結果:experiments/K1034/k1034_results.json)。資料來源:yfinance,期間 2005-01-01 至 2026-04-10,OOS 期間 2019-01-01 起共 1,827 個交易日。相關實驗:K995(A4f-t Trinity 12/12)、K1026(Conformal VaR)、K159(EVT-GPD)。
詳情
- image_urls
- https://qxhfgdfzazwpkdgesavm.supabase.co/storage/v1/object/public/article-images/k1034_violation_rates.png, https://qxhfgdfzazwpkdgesavm.supabase.co/storage/v1/object/public/article-images/k1034_trinity_heatmap.png, https://qxhfgdfzazwpkdgesavm.supabase.co/storage/v1/object/public/article-images/k1034_cf_quantile_comparison.png
- topic_cluster
- spy
- cluster_waiver
- K1034_article_general explicitly assigned task — CF-Rolling vs CF-Expanding regime comparison angle not covered by existing SPY articles
- experiment_refs
- K1034
- topic_cluster_30d
- {"cap":10,"count":44,"ratio":0.1571,"exempt":false}
相關文章
先讀正式關聯,若無則使用標籤與主題相似度補齊