GARCH (Generalized Autoregressive Conditional Heteroskedasticity) 模型对时间序列的条件方差建立自回归结构,捕捉金融收益率的波动率聚类(volatility clustering)效应。
其中 为 innovations,。
标准形式,条件方差由过去的残差平方(冲击)和过去的条件方差组成:
GARCH(1,1) 是最常用的形式。参数约束:, , , (平稳性条件)。
波动率均值回归速度由 决定:越接近 1,冲击衰减越慢,波动持续性越强。
对数条件方差模型,天然保证正性且允许杠杆效应(负冲击比同等幅度的正冲击产生更大的未来波动):
其中 表示杠杆效应(坏消息 > 好消息的影响)。
通过指示变量区分正负冲击的影响:
其中 为指示函数, 捕捉非对称杠杆效应。
import numpy as np
from arch import arch_model
from statsmodels.tsa.arima.model import ARIMA
def fit_garch(returns, order=(1, 0, 0), vol_order=(1, 1), dist='norm'):
"""拟合 GARCH 模型并返回诊断信息"""
# ARIMA 部分:提取残差(处理均值方程)
arima = ARIMA(returns, order=order)
arima_result = arima.fit()
residuals = arima_result.resid
# GARCH 部分
model = arch_model(residuals, vol='Garch', p=order[0], q=vol_order[1],
dist='skewt') # t分布或学生t分布通常更适合金融数据
result = model.fit(disp='off')
return {
'params': result.params,
'alpha': result.params['omega'] if 'omega' in result.params else None,
'sum_params': result.params['alpha[1]'] + result.params['beta[1]'],
'AIC': result.aic,
'BIC': result.bic,
'residual_diagnostic': result.diagnostic()
}
def simulate_garch(params, n=1000):
"""从 GARCH(1,1) 参数模拟波动率路径"""
omega, alpha, beta = params
sigma2 = np.zeros(n)
epsilon = np.random.randn(n)
sigma2[0] = omega / (1 - alpha - beta) # 稳态方差
for t in range(1, n):
sigma2[t] = omega + alpha * epsilon[t-1]**2 * sigma2[t-1] + beta * sigma2[t-1]
returns = epsilon * np.sqrt(sigma2)
return pd.Series(returns), pd.Series(np.sqrt(sigma2))
# 波动率预测
def garch_forecast(result, steps=10):
"""GARCH 波动率预测"""
forecast = result.forecast(steps=steps)
return {
'volatility_path': np.sqrt(forecast.var.iloc[:, 0].values),
'ci_lower': np.sqrt(forecast.var.quantile(0.025, axis=1).values),
'ci_upper': np.sqrt(forecast.var.quantile(0.975, axis=1).values),
}
| 类型 | 说明 | 最低要求 |
|---|---|---|
| 收益率序列 | 日频或更高频收益 | ≥500 个交易日 |
| 残差诊断 | ARCH-LM 检验、Q-Q 图 | — |
| AIC/BIC | 模型选择准则 | — |
| 模型 | 特点 |
|---|---|
| GARCH(1,1) | 最常用,平稳性约束 |
| EGARCH | 对数方差,天然正性,参数化杠杆效应 |
| GJR-GARCH | 指示变量区分正负冲击 |
| APARCH | ARCH-Power,更灵活的非对称建模 |
| FIGARCH | 分数积分 GARCH,长记忆波动率 |
| GARCH-in-Mean | 波动率进入均值方程(风险溢价) |