局部波动率:Dupire 公式与前向方差
从期权价格曲面反解出唯一的局部波动率函数:Dupire 公式的推导、蝶式分母的数值陷阱、Andreasen-Huge 校准,以及这个模型在哪些问题上会骗你。
1994 年,Dupire 和 Derman-Kani 各自独立发现了同一件事:给定一张完整的隐含波动率曲面,存在唯一一个函数 ,使得模型 为每一个欧式期权给出与市场完全一致的价格。波动率不再是常数,也不是一个独立的随机状态——它是现货价格和时间的确定性函数,而这个函数可以直接从市场报价里算出来。
这个结论值得停下来想一想。隐含波动率微笑本来是 Black-Scholes 假设失败的证据,现在它反过来变成了输入:整张微笑、连同它的期限结构,都被一个单因子扩散精确吸收。代价我们后面再算——先看这台机器是怎么搭起来的。
前向 PDE
从 Black-Scholes PDE 出发,把常数扩散系数换成 :
这是一个”向后”的方程:固定合约 ,沿状态 求解。问题是市场数据的形状正好相反——现货 只有一个,而行使价和期限有几百个。我们观察到的是 空间上的一片价格 ,要恢复的是 。用向后方程,每个 都得单独解一遍,而且解不出反问题。
Dupire 的关键一步是换方向:把看涨价格看成 的函数。令 是未折现的看涨价格(即时刻 为到期 、行使价 的欧式看涨支付的价格,其余一切固定)。那么 满足一个前向方程:
结构上这就是局部 vol 过程的前向 Kolmogorov / Fokker-Planck 方程,只是变量从密度换成了看涨价格:与向后 PDE 相比,时间方向反了, 的位置被 占了。方向一换,整张市场曲面变成了同一个方程的解——一次求解覆盖所有 ,反问题也随之打开。
前向方程的起始条件就是收益本身:
( 是今天;严格说, 处 ,前向方程从这里向后面的期限推进。)选对了 ,解出来的 复现整张市场曲面。
Dupire 公式
既然市场已经把 告诉我们了,前向方程里唯一的未知数就是 。把它解出来:
这就是 Dupire 公式。右边只有市场曲面的导数,没有任何模型参数——分子是一阶导,分母是二阶导,代入即得局部波动率。
每个导数都对应一个可交易的期权组合,这不是巧合,而是无套利的具体形态。 是日历价差:同一行使价、相邻期限的价格差。 是无限窄看涨价差的价格,也就是数字期权。 是无限窄蝶式价差的价格极限——它正比于 处的风险中性密度,所以必须非负,否则曲面里就有蝶式套利。
市场数据是离散的,导数用有限差分近似:
分母就是蝶式的价值。它一小、一负,数值就崩——这是整个方法的软肋,值得单独算一遍给你看。
分母有多脆弱:一个算例
取 ATM 附近的 SPX,,,红利率 1.8%,,,行使价间距 45 点(1%)。二阶导的中心差分:
Black-Scholes 给出的三个价格(忽略偏度):
分子:。分母:。结果 ——这正是该点的风险中性密度,跟解析值对得上。
注意发生了什么:三个 200 上下的价格,相减之后只剩 1.8。现在放一点现实进来。假设每个期权的买卖价差是 1 个指数点,中间价的不确定性约 点。分子是系数为 的组合,独立误差下它的标准差约 ——而真值只有 1.8。报价噪声和信号同一个量级,直接差分算出来的密度误差可以到百分之几十,平方后进入 还会再放大。
所以没有人在生产里对原始报价直接差分。先把数据拟合成光滑函数(三次样条、核平滑,或下面的 Andreasen-Huge),再解析求导。
校准:从报价到曲面
流程本身不长,每一步都有讲究:
- 预处理市场数据。买卖价转中间价,插值缺失的行使价,跨期限平滑。IV、跨式价、蝶式价各有各的插值约定,混用会引入伪套利。
- 数值求导。用上面的中心差分,或者先做样条拟合再解析求导—— 方向的二阶导噪声最大,原因刚才算过了。
- 逐点求值 Dupire 公式,得到每个 的 。
- 检查正性。 必须处处非负,负值说明平滑后的曲面本身有套利。
- 外推。深度虚值两翼报价稀疏,局部 vol 在低行使价方向可能爆炸,标准做法是在某个范围外取边界值截断。
一个演示量级的实现:
import numpy as np
def local_vol_dupire(C, K_grid, T_grid, r):
K, T = np.meshgrid(K_grid, T_grid, indexing='ij')
Kp, Km = K + 1e-6, K - 1e-6
dC_dK = (np.interp(Kp, K_grid, C) - np.interp(Km, K_grid, C)) / 2e-6
d2C_dK2 = (np.interp(Kp, K_grid, C) - 2*C + np.interp(Km, K_grid, C)) / 1e-12
Tp = T + 1e-6
dC_dT = (np.interp(Tp, T_grid.ravel(), C.ravel()) - C) / 1e-6 # 简单前向差分
sigma2 = (dC_dT + r * K * dC_dK) / (0.5 * K**2 * d2C_dK2)
sigma2 = np.maximum(sigma2, 0.0)
return np.sqrt(sigma2)
这段代码只演示公式结构,别拿它对付真实报价——理由就是上面的噪声算术。生产实现走无套利插值,代表就是 Andreasen-Huge。
Andreasen-Huge:不求导的校准
Andreasen 和 Huge(2011)的思路是绕开显式求导:不从连续公式出发,而是在一个与市场报价对齐的网格上(每个报价行使价一列、每个报价到期一行)直接解离散的 Dupire 方程:
反解出每个网格点的 。二阶导从头到尾不单独成形,只以离散格式出现在方程里;离散化本身的结构保证了输出曲面无套利、正性成立。这比数值求导稳健得多,商业系统里的生产级局部 vol 基本都是这一族方法。
顺带说清一个理论问题:为什么每张平滑无套利曲面都对应唯一的局部 vol 函数?因为前向方程有唯一解。微笑是终值分布的状态价格,编码了扩散沿路径的累积效应;前向方程把这个累积反演回去,恢复出的就是那个马尔可夫扩散。局部 vol 模型不是被”假设”出来的,是从市场数据里被重建出来的。
拿到曲面之后
有了 ,任何欧式收益的定价都归结为解一个系数已知的 PDE:
有限差分、有限元、时变波动率的树,都行。路径依赖收益则直接模拟 SDE:
微笑和微笑的期限结构自动进入每一条路径——这就是”单因子局部 vol”的卖点:一个因子,整张曲面自洽。
生产流水线大致是:预处理报价;用 Andreasen-Huge 在覆盖所有报价的网格上(比如 60 个行使价 × 30 个期限)解出 ;对 、 以及极短、极长期限取边界值截断外推;架一个双线性或双三次的 2D 插值器;然后蒙特卡洛用 Euler 或 Milstein 推进, 接近 0 时收细时间步:
最后一步永远是验证:拿一组参考欧式期权重新定价,和输入曲面比,应该一致到数值精度。不一致就是流水线里有 bug,不是模型问题。
一个具体的曲面长什么样
取 SPX,,,红利率 1.8%。ATM 隐含波动率:30 天 16%,90 天 17%,1 年 18%。偏斜略负:30 天 25-delta 看跌 19.5%,25-delta 看涨 17%。校准出的局部 vol 曲面大致是:
- 、 处 ATM 局部 vol ≈ 17%——注意它高于 30 天 ATM 的 16%,因为局部 vol 是前向瞬时量,期限结构上行时它跑在隐含前面。
- 、 处 ≈ 18.5%,同样略高于 1 年隐含的 18%。
- 、 处 ≈ 24%:左翼被深度虚值看跌的高 IV 抬起来,而且比隐含偏斜本身更陡——隐含 vol 是局部 vol 沿路径的某种平均,平均要达到 19.5%,低位的局部值就得更高。
- 、 处 ≈ 14%,右翼镜像地低于隐含。
这些值按构造精确复现所有市场报价。校准失败的方式也都认得出来:某个角落 为负(曲面有套利)、两翼在 方向爆炸(外推没截断)、深度虚值处 让公式打出离谱的值(翼部报价太稀)。还有一条纪律:用校准到 1 年数据的曲面给 10 年期权定价是不行的,重新校准。理论是干净的,生产系统靠的是错误处理。
它错在哪
按构造,局部 vol 只对欧式期权”完全正确”。一旦产品依赖微笑将来怎么动,它就开始给错误答案。股票指数上有三个著名的偏差,而它们其实是同一件事的三个投影:
前向微笑太平。在校准到典型负偏斜曲面的局部 vol 模型里,远期起始的微笑随起始日推后而变平;经验上,市场的前向微笑基本保持和今天的现货微笑一样陡(Bergomi, 2008)。这就是定价 cliquet 和远期起始期权时著名的前向微笑问题——这类产品对前向偏斜和前向凸性的敞口被系统性算错,偏差可以到两位数百分比的量级,方向取决于产品结构吃哪一边。
现货-波动率相关被钉死在 。局部 vol 里 是 的确定性函数,瞬时相关的绝对值恒为 1;负偏斜曲面下就是 跌、vol 升,相关 。经验上这个相关是负的但不完全,Heston 类校准通常给出 上下的量级。确定性关联和随机关联是不同的现象,对冲比率会因此不同。
没有独立的波动率风险。上面两条的根源:模型里根本没有第二个随机源。vol 不会在 不动时自己动,而现实中它会。
这三条正是随机 vol 模型(Heston、SABR)和前向方差模型(Bergomi)存在的理由。下一篇讲 Heston,就是从”给波动率一个自己的随机源”开始的。
前向方差
有一个量把局部 vol 和方差互换那一族工具连起来。定义前向方差为期望累积方差对期限的导数:
它是模型对”时刻 附近的瞬时方差”的今日预测。累积起来就是方差互换的公平执行价:
而 有一个不依赖任何模型的表达。按 Carr-Madan 公式(方差互换那篇文章会完整推导),方差互换的公平执行价可以直接从期权价格积分出来:
这里有一个值得记住的一致性:只要路径连续(没有跳跃),方差互换执行价由香草曲面唯一决定——所以精确拟合曲面的局部 vol 模型,自动复现模型无关的 。这不是巧合,是”曲面决定终值分布、终值分布决定对数合约价格”的直接推论。分歧出现在别处:有跳跃时复制公式本身失效;更重要的是,波动率互换、VIX 期权这类对前向方差怎么动敏感的产品,局部 vol 给出的动态是错的——前向方差曲线在局部 vol 里是确定性的,而市场里它自己会波动。静态的量对,动态的量错,这个模式贯穿局部 vol 的一切。
怎么用它
知道了缺陷,为什么各家的台还在天天跑局部 vol?因为它有三样别的模型给不了的东西。第一,它是唯一精确拟合所有报价欧式期权的模型——随机 vol 模型只有几个参数,市场有几百个行使价,精确拟合在数学上就做不到。第二,校准集上的 mark-to-market 误差是零(买卖价差以内),账面自洽。第三,对着曲面做 delta 和 gamma 对冲有可信的参照点。
所以正确的用法是把它当作校准的、确定性的参考点:日常欧式定价用它;奇异产品先用它出一个基准价,再用随机 vol 模型量出”微笑动态”值多少;当局部 vol 价格和市场成交价不一致时,那个差就是信息——要么是机会,要么是你的曲面有问题。近年不少团队干脆把隐含波动率曲面本身当作状态量看待:局部 vol、随机 vol、SABR、前向方差曲线,是同一组市场信念的不同表示,各自照亮不同的侧面。当账簿出现交易员解释不了的 mark-to-market P&L,答案往往是:曲面自己动了,而你的模型只会重新校准、不会描述这种移动。修法是换一个有微笑动态的模型,不是把曲面再拟合一遍。
局部 vol 描述的是”市场现在信什么”;随机 vol 描述的是”这个信念会怎么变”。两个都要有。
阅读清单。 Hull, Options, Futures, and Other Derivatives, 第 10 版(2018)中关于波动率微笑与局部波动率的章节。Wilmott, Paul Wilmott on Quantitative Finance, 第 2 版(2007)对前向 PDE 和 Dupire 推导的展开。Dupire, “Pricing with a Smile,” Risk (1994)。Gatheral, The Volatility Surface (2006)。Andreasen & Huge, “Volatility Interpolation,” Risk (2011)关于无套利局部 vol 校准。