4、波动率预测模型基础:GARCH模型家族介绍、模型参数估计、预测效果评估

波动率这东西,说白了就是市场的「脾气」。有时候市场很温和,波动率低得让人打瞌睡;有时候突然暴怒,一天能给你干出几个标准差。我做了这么多年量化,最深的体会就是——预测波动率比预测方向靠谱得多。方向猜错了可能亏钱,但波动率猜错了,你的仓位管理和风控全得崩。

这一章,咱们就聊聊怎么用GARCH模型家族来预测波动率。嗯,别被名字吓到,其实没那么玄乎。

4.1 为什么是GARCH?

先问个问题:你观察过金融时间序列吗?有没有发现一个现象——大的波动后面往往跟着大的波动,小的波动后面跟着小的波动?这就是所谓的「波动率聚集效应」。

我刚开始做回测时,天真地以为波动率是常数。结果呢?策略在低波动期表现完美,一到高波动期直接爆仓。后来我才明白,波动率是会变的,而且有记忆

GARCH模型就是用来捕捉这种记忆的。它假设今天的波动率不仅受昨天随机冲击的影响,还受昨天波动率本身的影响。说白了,就是「昨天的波动率会影响今天的波动率」。

核心思想: GARCH模型认为,波动率不是独立的,它有自己的「惯性」。就像一个人发脾气,不会突然就消气,总得有个过程。

4.2 GARCH模型家族介绍

GARCH模型家族其实挺庞大的,但常用的就那么几个。我按自己的经验给你捋一捋:

4.2.1 基础款:GARCH(1,1)

这是最经典的,也是我入门的第一个模型。公式长这样:

σ²_t = ω + α * ε²_{t-1} + β * σ²_{t-1}

解释一下:

  • σ²_t:今天的条件方差(波动率的平方)
  • ω:长期平均波动率水平
  • ε²_{t-1}:昨天的市场冲击(残差平方)
  • σ²_{t-1}:昨天的波动率
  • α:对市场冲击的敏感度
  • β:波动率的衰减速度

我记得第一次用GARCH(1,1)拟合沪深300指数时,α+β接近0.98。这意味着什么?波动率的冲击会持续很久,不会马上消失。嗯,这跟我的交易直觉完全吻合——市场恐慌情绪往往要持续好几天。

小技巧: α+β越接近1,波动率的持续性越强。如果α+β > 1,说明模型不稳定,建议换数据或换模型。

4.2.2 不对称款:EGARCH与GJR-GARCH

你有没有发现,市场下跌时的波动率往往比上涨时更大?这就是所谓的「杠杆效应」。基础GARCH模型处理不了这个,因为它只考虑冲击的大小,不考虑方向。

这时候就需要不对称模型了:

  • EGARCH:用对数形式建模,能捕捉正负冲击的不对称性。我习惯用它来建模股指期货,因为下跌时的波动率飙升特别明显。
  • GJR-GARCH:通过引入哑变量来区分正负冲击。说白了就是给下跌冲击加个权重,让它对波动率的影响更大。

我曾经用EGARCH模型回测过2015年股灾期间的数据。结果发现,负冲击的系数是正冲击的3倍多。这说明市场对坏消息的反应远大于好消息。如果你做期权交易,这个信息非常值钱——虚值看跌期权的隐含波动率往往被低估

4.2.3 长记忆款:FIGARCH

有些波动率序列的衰减速度特别慢,慢到像是有「长记忆」。比如VIX指数,它的自相关函数衰减得非常缓慢。这时候用FIGARCH(分整GARCH)更合适。

不过说实话,我在实际项目中很少用FIGARCH。原因很简单——参数估计太复杂,而且对样本量要求很高。如果你只有几百个交易日的数据,建议还是老老实实用GARCH(1,1)或EGARCH。

4.3 模型参数估计

参数估计这块,我踩过不少坑。最常用的方法是最大似然估计(MLE)。简单说,就是找一组参数,让当前数据出现的概率最大。

具体步骤:

  1. 设定均值方程:通常用AR(1)或常数均值。我个人习惯用常数均值,因为波动率模型的重点在方差,均值搞太复杂容易过拟合。
  2. 设定方差方程:选择GARCH的具体形式(GARCH、EGARCH等)。
  3. 假设残差分布:常用正态分布或t分布。我建议用t分布,因为金融数据往往有厚尾特征。
  4. 最大化似然函数:用数值优化算法(如BFGS)求解。

代码实现其实不复杂,以Python的arch库为例:

from arch import arch_model

# 假设returns是收益率序列
model = arch_model(returns, vol='Garch', p=1, q=1, dist='t')
result = model.fit(update_freq=5)
print(result.summary())
注意: 参数估计时,初始值的选择很重要。我曾经因为初始值设得不好,导致优化算法收敛到局部最优。建议多试几组初始值,或者用arch库默认的初始值。

4.4 预测效果评估

模型建好了,参数也估了,怎么知道它好不好?我一般从三个维度来评估:

4.4.1 统计检验

  • Ljung-Box检验:检查残差是否还有自相关。如果有,说明模型没捕捉到所有信息。
  • ARCH-LM检验:检查残差是否还有ARCH效应。如果还有,说明模型不够充分。

我习惯把这两个检验放在模型拟合后立刻做。如果通不过,我会考虑增加阶数或换模型。

4.4.2 预测误差指标

用历史数据做滚动预测,然后比较预测波动率和实际波动率。常用指标:

指标 公式 说明
RMSE √(mean((σ_pred - σ_real)²)) 对大误差惩罚较重
MAE mean(|σ_pred - σ_real|) 更稳健,不受极端值影响
QLIKE mean(ln(σ²_pred) + σ²_real/σ²_pred) 对波动率预测的损失函数更合理

我个人最常用QLIKE。为什么?因为RMSE和MAE需要知道「真实波动率」,但真实波动率是不可观测的。我们用已实现波动率(RV)来近似,但RV本身就有测量误差。QLIKE对测量误差不那么敏感。

4.4.3 经济价值评估

这是我最看重的。模型好不好,最终要看能不能赚钱。我会把波动率预测用到实际策略中:

  • 期权定价:用预测波动率替代历史波动率,看定价误差是否缩小。
  • 风险预算:根据预测波动率动态调整仓位。波动率高时减仓,低时加仓。
  • 波动率套利:比较预测波动率和隐含波动率,寻找套利机会。

我记得有一次,我用EGARCH预测的波动率来做沪深300期权的Delta对冲。结果发现,用预测波动率比用历史波动率,对冲误差降低了约15%。虽然不多,但在高频对冲中,这15%就是实打实的利润。

4.5 本章知识体系

说了这么多,我画个图帮你梳理一下:

GARCH模型家族知识体系 波动率预测核心 GARCH(1,1) 基础款 EGARCH / GJR-GARCH FIGARCH 长记忆 参数估计:最大似然估计(MLE)+ 数值优化(BFGS) 统计检验(LB / ARCH-LM) 预测误差(RMSE / QLIKE) 经济价值(对冲 / 仓位管理) 实际应用:期权定价 / 风险预算 / 波动率套利

这张图把GARCH模型家族的知识体系串起来了。从核心目标出发,到模型选择、参数估计、效果评估,最后落到实际应用。你想想看,每一步都有坑,但也都有对应的解决办法。

最后说一句:模型再漂亮,也要经得起回测的检验。我见过太多人沉迷于复杂的模型,结果回测一跑,还不如简单的GARCH(1,1)。记住,在量化交易里,简单有效才是王道


公众号:蓝海资料掘金营,微信deep3321