核心思想

GARCH (Generalized Autoregressive Conditional Heteroskedasticity) 模型对时间序列的条件方差建立自回归结构,捕捉金融收益率的波动率聚类(volatility clustering)效应。

σt2=ω+i=1pαiεti2+j=1qβjσtj2\sigma_t^2 = \omega + \sum_{i=1}^{p} \alpha_i \varepsilon_{t-i}^2 + \sum_{j=1}^{q} \beta_j \sigma_{t-j}^2

其中 εt=σtzt\varepsilon_t = \sigma_t \cdot z_t 为 innovations,zti.i.d.(0,1)z_t \sim i.i.d.(0,1)

模型族详解

GARCH(p, q) — Bollerslev (1986)

标准形式,条件方差由过去的残差平方(冲击)和过去的条件方差组成:

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

GARCH(1,1) 是最常用的形式。参数约束:ω>0\omega > 0, α0\alpha \ge 0, β0\beta \ge 0, α+β<1\alpha + \beta < 1(平稳性条件)。

波动率均值回归速度α+β\alpha + \beta 决定:越接近 1,冲击衰减越慢,波动持续性越强。

EGARCH — Nelson (1991)

对数条件方差模型,天然保证正性且允许杠杆效应(负冲击比同等幅度的正冲击产生更大的未来波动):

ln(σt2)=ω+αεt1σt1+γεt1σt1+βln(σt12)\ln(\sigma_t^2) = \omega + \alpha \left|\frac{\varepsilon_{t-1}}{\sigma_{t-1}}\right| + \gamma \frac{\varepsilon_{t-1}}{\sigma_{t-1}} + \beta \ln(\sigma_{t-1}^2)

其中 γ<0\gamma < 0 表示杠杆效应(坏消息 > 好消息的影响)。

GJR-GARCH — Glosten, Jagannathan & Runkle (1993)

通过指示变量区分正负冲击的影响:

σt2=ω+αεt12+I(εt1<0)λεt12+βσt12\sigma_t^2 = \omega + \alpha \varepsilon_{t-1}^2 + I(\varepsilon_{t-1} < 0) \cdot \lambda \varepsilon_{t-1}^2 + \beta \sigma_{t-1}^2

其中 I()I(\cdot) 为指示函数,λ\lambda 捕捉非对称杠杆效应。

Python 实现

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)最常用,平稳性约束 α+β<1\alpha+\beta<1
EGARCH对数方差,天然正性,参数化杠杆效应
GJR-GARCH指示变量区分正负冲击
APARCHARCH-Power,更灵活的非对称建模
FIGARCH分数积分 GARCH,长记忆波动率
GARCH-in-Mean波动率进入均值方程(风险溢价)

参考文献

  1. Bollerslev, T., 1986. “Generalized Autoregressive Conditional Heteroskedasticity.” Journal of Econometrics.
  2. Nelson, D.B., 1991. “Conditional Heteroskedasticity in Asset Returns: A New Approach.” Econometrica.
  3. Glosten, L., Jagannathan, R. & Runkle, D., 1993. “On the Relation between the Expected Value and the Volatility of the Nominal Excess Return on Stocks.” Journal of Finance.