halo 的技术博客

返回

金融数据有一条被反复验证的「非对称铁律」:下跌之后的波动,比上涨之后的波动更大。1982 年 Engle 提出的 ARCH、1986 年 Bollerslev 的 GARCH,都把条件方差写成过去冲击平方的加权和——问题恰恰出在这个「平方」上:ε² 把 -3% 和 +3% 当成同一件事。现实里,一只股票单日跌 5% 之后,接下来几天的恐慌盘、追加保证金、止损盘会明显放大波动;而涨 5% 之后往往风平浪静。这就是杠杆效应(Leverage Effect),最早由 Black(1976)提出:股价下跌 → 公司杠杆率被动上升 → 股权风险变大 → 波动率上升。

GARCH 家族给出的解决方案,是让条件方差依赖冲击的方向。本文用 numpy 从零实现两个最主流的非对称模型——EGARCH(Nelson, 1991)与 GJR-GARCH(Glosten-Jagannathan-Runkle, 1993),在一个「已知带杠杆」的合成数据上验证:它们能否把方向信息捡回来,而对称 GARCH 会系统性漏掉多少。

1. 两个模型:非对称从哪来#

标准 GARCH(1,1) 的条件方差递归是:

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

这里 ε²_{t-1} 是纯平方,天然对方向无感。两个非对称模型各自用不同方式「掰弯」这一项:

  • GJR-GARCH:在平方项上叠加一个只对负冲击生效的指示项:
σ²_t = ω + (α + γ·I[ε_{t-1}<0])·ε²_{t-1} + β·σ²_{t-1}
plaintext

γ > 0 时,负收益日的有效系数是 α+γ,正收益日仍是 α——坏消息被额外加权。

  • EGARCH:干脆对对数方差建模,把冲击拆成「幅度」和「方向」两路:
ln σ²_t = ω + β·ln σ²_{t-1} + α·(|z_{t-1}| - E|z|) + γ·z_{t-1}
plaintext

其中 z_{t-1} = ε_{t-1}/σ_{t-1} 是标准化冲击。γ 就是杠杆系数γ < 0 意味着负的 z(坏消息)推高对数方差。EGARCH 的好处是对数形式天然保证方差为正,不需要约束参数符号。

2. 数据:一个「已知答案」的实验#

为了检验模型,我先合成一条 T=1500 的日收益序列,真实 DGP 就是一个 EGARCH 过程,参数设为 γ = -0.12(明确带杠杆)。这样我们知道真值,再看三个模型谁能估回来。

EGARCH 生成的收益序列与条件波动率

上图是收益和真实条件波动率。肉眼能看到的线索是:波动率有聚集性(大波动跟着大波动),但「下跌之后的波动是否系统性更大」这种细微的方向信息,单靠看图是看不出来的——必须上模型。

我用前 1200 天拟合、后 300 天做样本外评估,三个模型都用(准)极大似然估计(QMLE)。关键结果:

  • GARCH 估出 (α, β) = (0.095, 0.837)
  • EGARCH 估出 (ω, α, γ, β) = (-0.209, 0.106, **-0.096**, 0.982)
  • GJR 估出 (α, γ, β) = (0, 0.079, 0.938),杠杆项 γ=0.079 > 0

EGARCH 的 γ = -0.096 与真实值 -0.12 同号、同量级——杠杆效应被正确识别出来了。而 GARCH 根本没有这个参数,等于默认市场是对称的。

3. 新闻冲击曲线:把非对称画出来#

最直观的证据是 News Impact Curve(新闻冲击曲线)——横轴是上一期的冲击 ε_{t-1}(从 -4% 到 +4%),纵轴是它带来的下一期条件方差。对称模型是一条以 0 为轴的抛物线;非对称模型在负半轴会「翘」得更高。

新闻冲击曲线对比

图中灰色是 GARCH 的对称抛物线,橙色 GJR、红色 EGARCH 都明显向负半轴倾斜:同样是 3% 的幅度,-3% 冲击带来的方差比 +3% 高出约 1.5 倍。这就是杠杆效应最干净的视觉定义。

正负收益日条件方差的均值对比

把训练集按「当日收益正/负」分组,计算模型隐含条件方差的均值:GARCH 正负两组几乎一样(因为它的方差根本不看方向),而 EGARCH 的负收益日平均方差显著高于正收益日。这张图把「模型是否感知方向」这个问题直接做成了柱状对比。

4. 样本外检验:非对称值几个点#

拟合得好不等于预测得好。后 300 天样本外对数似然是更硬的裁判:

样本外对数似然对比

结果:GARCH 样本外对数似然 1261.6,GJR 1266.6,EGARCH 1268.1。两个非对称模型都稳定跑赢对称 GARCH,EGARCH 略胜 GJR。虽然绝对差距只有几个点,但在波动率建模这种「差一点就是钱」的领域,这几个点对应的是更准的期权定价、更稳的 VaR、更合理的保证金——实战里足够让一个非对称模型进入生产流水线。

5. 为什么这件事对量化重要#

杠杆效应不只是学术好奇心,它直接落在三个实战环节:

  1. 风险预算:用对称 GARCH 估 VaR,会在下跌后系统性低估风险,因为真实波动比模型预期涨得更快。非对称模型能在暴跌次日就给出更高的风险敞口估计。
  2. 波动率择时/期权定价:隐含波动率本身就有「微笑」和「偏斜」,非对称 GARCH 族是连接历史波动与期权偏斜的自然桥梁。
  3. 杠杆 ETF 与保证金建模:下跌 → 杠杆率上升 → 波动上升,这是一个自我强化的正反馈回路,只有显式建模 γ 项才能抓住。

6. 完整实现要点#

核心递归只有几行,关键是 z_{t-1} 用「当前 log 方差」反推出来:

import numpy as np

def egarch_filter(r, w, a, g, b):
    E_abs_z = np.sqrt(2 / np.pi)
    n = len(r)
    lv = np.zeros(n)
    lv[0] = np.log(np.var(r))
    for t in range(1, n):
        z_prev = r[t-1] / np.exp(lv[t-1] / 2)
        lv[t] = w + b * lv[t-1] + a * (abs(z_prev) - E_abs_z) + g * z_prev
    return np.exp(lv)
python

然后用负对数似然 0.5·Σ(ln σ²_t + r²_t/σ²_t) 做 QMLE,Nelder-Mead 或 L-BFGS 都能收敛。GJR 只需要在平方项后加一个 γ·ε²·I[ε<0],实现更简单,但约束更多(需要保证方差为正)。

结论一句话:市场对坏消息和好消息的反应从来不对称,用对称 GARCH 等于假装自己看不见这条规律。EGARCH 与 GJR 用两个截然不同的数学机制把「方向」装回了方差方程,代价只是多一个参数——而这一个参数,换来的是一整个被低估的风险维度。

杠杆效应的量化表达:EGARCH 与 GJR 如何让波动率记住坏消息
https://blog.halo26812.eu.org/blog/egarch-gjr-leverage-effect
Author halo
Published at 2026年8月30日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨