跳转到内容

波动率建模:GARCH 族

收益本身接近不可预测,但收益的方差呈现强烈的聚集(大波动跟大波动)与均值回复——这是金融时序中少数真正可靠的可预测成分。GARCH(1,1) 用三个参数刻画它:

σt2=ω+α εt−12+β σt−12,\sigma_t^2 = \omega + \alpha\, \varepsilon_{t-1}^2 + \beta\, \sigma_{t-1}^2,

其中 εt−1=rt−1−μ\varepsilon_{t-1} = r_{t-1} - \mu。无条件方差为 ω/(1−α−β)\omega / (1 - \alpha - \beta);α+β\alpha + \beta 接近 1 表示高持续性——一次冲击的影响衰减很慢。

负收益带来比同幅度正收益更大的后续波动(杠杆效应:下跌推高杠杆率),对称的 GARCH 刻画不了它。两个常用修正:

  • GJR / Threshold GARCH:加一项区分正负冲击,σt2=ω+αεt−12+γ εt−121[εt−1<0]+βσt−12\sigma_t^2 = \omega + \alpha\varepsilon_{t-1}^2 + \gamma\, \varepsilon_{t-1}^2 \mathbf{1}_{[\varepsilon_{t-1}<0]} + \beta\sigma_{t-1}^2,γ>0\gamma > 0 即杠杆效应;
  • EGARCH:在对数方差上建模,天然保证方差为正,且允许冲击影响不对称。

RiskMetrics 的指数加权移动平均只有衰减因子一个参数(日频取 λ=0.94\lambda = 0.94):

σ^t2=(1−λ) εt−12+λ σ^t−12.\hat\sigma_t^2 = (1-\lambda)\, \varepsilon_{t-1}^2 + \lambda\, \hat\sigma_{t-1}^2.

它相当于 ω=0\omega=0 的 GARCH(1,1),不做长期均值回复,但响应快、免估计。做仓位缩放(见波动率目标化)时,EWMA 与 20–60 日简单窗口已是绝大多数场景的最优性价比。

vol-models.py
import numpy as np
def ewma_vol(returns: np.ndarray, lam: float = 0.94) -> np.ndarray:
"""RiskMetrics EWMA 波动率,日频"""
eps2 = returns ** 2
var = np.zeros_like(eps2)
var[0] = eps2[0]
for t in range(1, len(eps2)):
var[t] = (1 - lam) * eps2[t - 1] + lam * var[t - 1]
return np.sqrt(var * 252) # 年化
# 需要 GARCH/EGARCH 时用 arch 库:
# from arch import arch_model
# res = arch_model(returns * 100, vol="GARCH", p=1, q=1, dist="t").fit()
# res.forecast(horizon=1).variance
  1. 波动率目标化:用 σ^t\hat\sigma_t 预测(而非历史实现)作为仓位分母,响应更快;
  2. VaR/ES 计算:条件分布下的尾部度量比无条件分布更贴近明天,见回撤、VaR 与止损;
  3. 残差标准化:策略收益除以 GARCH 条件波动率后,再评估 t 值与夏普,排除"波动率择时"的虚假贡献。
  • 仓位缩放用 EWMA 或短窗口 GARCH 预测波动率,不用全样本波动率;
  • 评估策略时用条件波动率标准化收益,分离"择波动率"与"择方向";
  • 报告 α+β\alpha+\beta 与半衰期,判断波动率持续性是否合理。
  • GARCH(1,1) 的无条件方差 ω/(1−α−β)\omega/(1-\alpha-\beta),α+β\alpha+\beta 接近 1 表示高持续性
  • 杠杆效应:负收益带来更大波动,需 GJR/EGARCH 等非对称模型
  • 简单的 EWMA(RiskMetrics)在多数应用中已足够