GARCH 波动模型
一、直观理解:预测的不是涨跌本身,而是“有多动荡”
经典 ARMA/ARIMA 关注条件均值 。但金融收益、某些能源价格变化率常出现:
- 平静期与剧烈期成群出现(波动聚集);
- 收益本身近似不可预测,但方差可预测。
GARCH(Generalized Autoregressive Conditional Heteroskedasticity)对条件方差建模。最常用的 GARCH(1,1):
大冲击会抬高未来一段时间的 ,从而加宽预测区间、提高风险度量(如 VaR)。若题目要的是点预测价格方向,GARCH 单独帮不上大忙;若题目关心波动、风险、区间,GARCH 就很关键。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 高频或日度收益;平方残差有自相关;需要波动率预报、风险区间;均值模型残差存在 ARCH 效应。 |
| 核心优点 | 捕捉波动聚集;参数少(GARCH(1,1) 常够用);可与 ARMA 均值联合估计;扩展多(EGARCH、GJR 非对称)。 |
| 局限与缺点 | 不提升均值方向预测;需充足样本;分布假设影响尾部;结构突变时波动持续参数会偏高;多变量需 VAR-GARCH 等更复杂模型。 |
三、核心原理
1. 为什么需要 GARCH
若真实存在条件异方差,却假设 常数,则:
- 参数标准误不可靠;
- 预测区间在动荡期过窄、平静期过宽;
- 残差平方的 ACF 显著。
2. 平稳性与持续性
GARCH(1,1) 弱平稳通常要求 。 接近 1 表示波动冲击消退很慢(高持续性)。
无条件方差:
3. 非对称扩展
股市常“跌时波动升更多”。GJR-GARCH / EGARCH 引入杠杆项,允许负冲击对 的影响更大。
4. 与均值模型的关系
标准流程:
- 对收益建均值模型(常数、AR、ARMA);
- 检验残差 ARCH 效应(
archtest或平方残差 LB); - 指定
arima的Variance为garch对象联合估计; - 用
forecast得到均值与方差路径。
四、诊断与评价
波动模型不能只看收益的 RMSE。应报告:
- 标准化残差 是否接近白噪声、无 ARCH;
- 预测的 与实现波动(如 、 或日内波动代理)的相关/误差;
- 风险:VaR 突破率是否接近名义水平(如 5% VaR 约 5% 突破)。
五、MATLAB 示例
%% 模拟 GARCH(1,1) 收益并估计
rng(13);
n = 1500;
omega = 0.05; alpha = 0.08; beta = 0.90;
eps = zeros(n,1); sig2 = zeros(n,1);
sig2(1) = omega/(1-alpha-beta);
z = randn(n,1);
for t = 2:n
sig2(t) = omega + alpha*eps(t-1)^2 + beta*sig2(t-1);
eps(t) = sqrt(sig2(t))*z(t);
end
r = 0.01 + eps; % 收益序列
T0 = 1200;
rTrain = r(1:T0); rTest = r(T0+1:end);
% ARCH 效应初筛
figure;
subplot(2,1,1); autocorr(rTrain); title("收益 ACF");
subplot(2,1,2); autocorr(rTrain.^2); title("收益平方 ACF");
[hA,pA] = archtest(rTrain-mean(rTrain),"Lags",5);
fprintf("ARCH test h=%d p=%.4f\n", hA, pA);
% 均值常数 + GARCH(1,1)
varMdl = garch(1,1);
md = arima("Constant",NaN,"Variance",varMdl);
est = estimate(md, rTrain, "Display","off");
summarize(est);
% 标准化残差诊断
[res, varHat, logL] = infer(est, rTrain);
zhat = res ./ sqrt(varHat);
figure; autocorr(zhat); title("标准化残差 ACF");
figure; autocorr(zhat.^2); title("标准化残差平方 ACF");
[h2,p2] = archtest(zhat,"Lags",5);
fprintf("标准化后 ARCH h=%d p=%.4f\n", h2, p2);
% 预测均值与方差
h = 20;
[rF, rMSE] = forecast(est, h, "Y0", rTrain);
% rMSE 为预测均方误差;条件方差路径也可用 simulate/forecast 相关输出
fprintf("未来 1..5 步收益点预测:\n"); disp(rF(1:5).');
% 简单 5% VaR(高斯)对比测试期一步滚动(示意)
% 完整滚动评估建议 for 循环重估或用固定参数一步更新
sigF = sqrt(rMSE); % 近似
VaR5 = rF - 1.645*sigF;
fprintf("h=1 的近似 5%% VaR = %.4f\n", VaR5(1));
% 若只需波动模型、均值已知为 0:
% estV = estimate(garch(1,1), rTrain);
对股价:通常先 price2ret 得收益,再 GARCH;不要对原始价格直接 GARCH。
r = price2ret(price);
六、如何解释结果
论文应写清:
- 为何需要波动模型(图:波动聚集、ARCH 检验);
- 均值方程设定;
- GARCH 阶数与 ,以及 ;
- 标准化残差诊断;
- 波动预测用途(区间、VaR、权重);
- 若点预测收益 RMSE 接近常数均值,要诚实说明“不可预测的是方向,可预测的是强度”;
- 分布假设(正态/t)对尾部的影响。
七、常见误区
1. 用 GARCH 预测股价水平方向
GARCH 主攻 ,不是涨跌符号。
2. 样本太短却拟合高阶 GARCH
GARCH(1,1) 通常是起点;参数过多会不稳定。
3. 忽略
积分 GARCH 边界意味着无条件方差不存在,解释与预测需小心。
4. 只看样本内似然
要用标准化残差检验与滚动 VaR/波动预测评价。
5. 对非平稳价格序列直接建模
先差分/收益化,再谈条件异方差。
八、小结
GARCH 的核心是:
让今日波动依赖于昨日冲击与昨日波动,从而预测条件方差与风险,而不是幻想精确预测每一次涨跌。
在建模中,它常接在 ARMA/ARIMA 残差诊断之后:当平方残差有结构时启用。评价要以标准化残差、波动代理误差和区间/VaR 校准为准,绝不能只报一个 。需要非对称杠杆时,再考虑 EGARCH 或 GJR-GARCH。