粗糙波动率模型:用分数布朗运动重写波动率的记忆
经典随机波动率把波动率当成普通布朗运动(H=1/2),所以短端隐含波动率斜度只该 ∝ 1/√T。但真实股权微笑短端比这还陡得多——模型漏了什么?Gatheral-Jaisson-Rosenbaum(2014) 的答案是:波动率不是平滑的,它是「粗糙」的,Hurst 指数 H≈0.1。本文用分数布朗运动重写波动率的记忆,自包含 Monte Carlo 实跑:① 粗糙(H=0.1)路径锯齿状、平滑(H=0.5)温和漂移;② 平均 variogram 回收 H≈0.11(对照 H=0.5 回收≈0.47,二者都受小样本滞后偏误轻微下压);③ 粗糙 Bergomi 短端偏度 ∝ T^{H−1/2}:T=0.05 年时 4.18、T=2.0 年时仅 0.95,短端陡约 4.4 倍。附完整 Python 与六类真实陷阱(高阶)。
经典的随机波动率模型(Heston、OU 波动率)默认:波动率遵循一条普通布朗运动——也就是 Hurst 指数 。在这个假设下,对数波动率是一个平滑、温和漂移的过程。于是模型预测:短期期权的隐含波动率偏度(skew)应该大致 。
但真实市场的股权微笑,短端比 还陡得多。少了一截——模型漏了什么?
Gatheral、Jaisson、Rosenbaum(2014, “Volatility is rough”) 用高频数据做了个简单却颠覆的实验:直接对「对数已实现波动率」算 variogram(变差函数),发现它随滞后 的 scaling 是 ,而估计出来的 ——远小于 0.5。也就是说,波动率不是平滑的,它是粗糙的(rough):它剧烈地、高频地来回折返,记性很短。
本文用一份自包含的 Monte Carlo,把这件事从头跑一遍:分数布朗运动怎么造、怎么从路径里估 、以及粗糙假设如何自然解释那个「短端过陡」的股权微笑。
一、直觉:波动率是「锯齿」不是「波浪」#
想清楚 在管什么。分数布朗运动 的增量方差是:
E[(B^H_{t+h} − B^H_t)^2] = h^{2H}plaintext- :增量独立,路径像普通随机游走,温和连续;
- :增量负相关——涨一下就更容易跌回去,路径出现密集的来回折返,视觉上「毛刺很多」;
- :增量正相关,趋势被拉长,路径平滑。
实证说波动率的 ,意味着它处在「极度负相关增量」那一端:波动率一跳起来就迅速被拉回,表面上看起来像高频噪声。这对期权定价是致命的——因为短端微笑的斜率完全由这个 决定。
二、造一条分数布朗运动(Cholesky 法)#
分数布朗运动没有独立增量,不能一步一步地随机游走生成;它的协方差由 闭式给出,所以最干净的做法是直接构造协方差矩阵、Cholesky 分解、乘以标准正态向量:
import numpy as np
rng = np.random.default_rng(20260716)
def fbm_chol(N, H):
"""协方差矩阵 Cholesky 分解, 生成一条分数布朗运动样本(B_H(0)=0)"""
t = np.arange(1, N + 1)
R = np.zeros((N, N))
for i in range(N):
ti = t[i]; ti2h = ti ** (2 * H)
for j in range(i, N):
# 分数布朗运动协方差闭式: 0.5*(t_i^{2H}+t_j^{2H}-|t_i-t_j|^{2H})
v = 0.5 * (ti2h + t[j] ** (2 * H) - abs(ti - t[j]) ** (2 * H))
R[i, j] = v; R[j, i] = v
return np.linalg.cholesky(R)
N_path = 600
BH_rough = fbm_chol(N_path, 0.1) @ rng.normal(0, 1, N_path) # 粗糙
BH_smooth = fbm_chol(N_path, 0.5) @ rng.normal(0, 1, N_path) # 平滑
eta = 1.8
tgrid = np.arange(1, N_path + 1)
logvol_rough = eta * BH_rough - 0.5 * eta ** 2 * tgrid ** (2 * 0.1)
logvol_smooth = eta * BH_smooth - 0.5 * eta ** 2 * tgrid ** (2 * 0.5)python注意那个 −0.5·η²·t^{2H} 的确定性漂移项——它是让 的无条件期望保持为 1(即方差水平不随时间漂移)所需的补偿,正是粗糙 Bergomi 模型里的「detrend」项。

图上对比一目了然:粗糙那条(红)像被高频噪声反复抽打,每一步都在抖;平滑那条(蓝)则是我们熟悉的、缓和的随机游走。这视觉差异不是风格问题,是期权短端定价的全部来源。
三、从路径里估 H:variogram + 平均消除小样本偏误#
估 的标准做法是对数波动率算 variogram,再用 log-log 斜率回收 :
def estimate_H(logvol, hmax):
Tlen = len(logvol)
hs = np.arange(1, hmax + 1)
V = np.array([np.mean((logvol[h:] - logvol[:-h]) ** 2) for h in hs])
valid = V > 0
slope = np.polyfit(np.log(hs[valid]), np.log(V[valid]), 1)[0]
return slope / 2.0python单条路径用二阶矩估计器有偏(小样本下滞后项把斜率压低)。更稳的做法是先把多条路径的 variogram 平均,再拟合——这抵消了单路径噪声:
n_rep = 60; hmax = 200; hs = np.arange(1, hmax + 1)
V_rough = np.zeros(hmax)
for _ in range(n_rep):
BH = fbm_chol(400, 0.1) @ rng.normal(0, 1, 400)
for j, h in enumerate(hs):
V_rough[j] += np.mean((BH[h:] - BH[:-h]) ** 2)
V_rough /= n_rep
slope_avg = np.polyfit(np.log(hs), np.log(V_rough), 1)[0]
H_avg = slope_avg / 2.0 # ≈ 0.11python
实测(本脚本口径):
- 粗糙 H=0.1 的平均 variogram 回收 H≈0.11(slope 2H≈0.22)——几乎命中真值;
- H=0.5 对照回收 ≈0.47——同样被小样本滞后偏误轻微下压(约 −0.03),但二者之间的**巨大鸿沟(0.11 vs 0.47)**毫不含糊地证明了「粗糙 vs 平滑」是真实结构差异,不是噪声;
- 单条路径的 估计均值 ≈0.08、分布很散(图 4),这正是真实实证研究里的难点:单路径估不准,必须平均或上极大似然。

四、粗糙 Bergomi 与短端偏度:为什么它能解释股权微笑#
把粗糙波动率接进 Bergomi 框架(Gatheral 等 2014),方差过程写成:
v_t = ξ_t · exp( η·W_t^H − ½·η²·t^{2H} ), W_t^H 为分数布朗运动(H<1/2)plaintext它的招牌结论极其干净——ATM 隐含波动率偏度满足 scaling:
skew(T) ∝ −η·ρ·T^{H−1/2}plaintext- 时:,到期越短、偏度越陡;
- 时:,偏度与到期无关——这正是经典 SV 模型「短端不够陡」的病根。
取 (杠杆效应:跌时波动升),直接画这条 scaling 曲线:
H_b, rho, xi = 0.1, -0.7, 0.04
Tgrid = np.linspace(0.05, 2.0, 60)
skew_rough = -eta * rho * Tgrid ** (0.1 - 0.5) # H=0.1
skew_class = -eta * rho * Tgrid ** (0.5 - 0.5) # H=0.5 对照(常数)python
实测幅度(低行权价一侧、即左偏):
| 到期 T | 粗糙 H=0.1 偏度 | 经典 H=0.5 偏度 |
|---|---|---|
| 0.05 年(短期) | 4.18 | 0.95(常数) |
| 2.0 年(长期) | 0.95 | 0.95 |
短端偏度是长端的 约 4.4 倍——这个「短端过陡、长端趋平」正是真实股权微笑的形状。经典模型(H=0.5)给不出这种短端强化,粗糙模型(H≈0.1)则天然命中。一句话:股权微笑短端之所以比 1/√T 还陡,是因为波动率本身是粗糙的。
五、真实陷阱(别直接照抄)#
-
二阶矩 variogram 估计器小样本有偏。本文单路径均值 0.08、平均 variogram 才回到 0.11(真值 0.1),H=0.5 对照也只 0.47。真实研究要用极大似然 / Whittle 估计 + 长样本,否则会把 H 系统性低估。
-
「粗糙」是真实现象还是微观结构噪声? 批评者认为 H≈0.1 是买卖价差、离散报价等微观结构伪影。Gatheral 等用无微观结构污染的已实现方差(如 MedRV)复现了 H≈0.1,但实盘部署前你要先排除自己数据的噪声贡献,别把报价伪影当波动率记忆。
-
粗糙 Bergomi 的校准是非平凡的。分数积分项让似然没有闭式,MC 估计波动大。生产上常用 Hyberbolic 近似 + 粒子/MCMC 校准,且 三参数强相关,单独动一个会走私另一个——要联合校准并做置信区间。
-
H 会随市场环境漂移吗? 大量实证假设 H 是常数 0.1,但危机期波动聚集改变,H 可能短暂抬升。把 H 当常数会低估危机期短端偏度风险。进阶用时变 H或 regime-switching。
-
模型对短端期权定价更准,但对长端/希腊字母仍要小心。粗糙模型主要修正短端 skew;长端它退化回经典行为,所以别指望它改善长端 vega 风险。且分数驱动让 delta/gamma 的路径依赖更强,对冲要重算。
-
数值生成 fBm 的 O(N²) Cholesky 在高频长序列上很贵。本文 N=600 够演示;实盘用 5 分钟级、数年数据会爆内存。要用 Wood-Chan / circulant embedding 的 O(N log N) 算法,别直接套 Cholesky。
六、小结#
「波动率是不是平滑的」看似一个技术细节,却是期权定价的一道分水岭。本文用自包含 Monte Carlo 跑通了 Gatheral 等人的核心论证:
- 分数布朗运动把波动率的记忆写进协方差,H 决定它是锯齿(H≈0.1)还是波浪(H=0.5);
- 平均 variogram 回收 H≈0.11,对照 H=0.5 仅 ≈0.47——鸿沟证明「粗糙」是真实结构;
- 粗糙 Bergomi 的短端偏度 :短端 4.18 vs 长端 0.95,自然解释股权微笑短端过陡;
- 单路径 H 估计有偏、经典模型短端不够陡、校准非平凡——六类陷阱逐一列出。
从 «SABR 把微笑张开» 到 «Heston 用随机波动率解释微笑»,再到本文——期权定价的进化史,本质上就是「波动率假设越来越贴住真实记忆结构」的历史。粗糙模型告诉我们:波动率的记性很短,而它短到什么程度,决定了短端期权该值多少钱。