第12章:局部波动率模型:Dupire公式与局部波动率曲面

聊到波动率曲面,很多人第一反应就是BS隐含波动率。但说实话,BS模型有个硬伤——它假设波动率是常数。这在实际市场中根本不成立。你想想看,同一个标的,不同行权价、不同到期日的期权,隐含波动率能差出好几个百分点。

那怎么办?学术界和业界都在想:能不能搞一个更灵活的模型,让波动率既随标的价格变,又随时间变?这就是局部波动率模型(Local Volatility Model)的出发点。

12.1 从BS到局部波动率:为什么要升级?

BS模型里,我们假设股价服从几何布朗运动:

dS = μS dt + σ S dW

这里的σ是常数。但真实市场里,波动率有明显的“微笑”和“偏斜”特征。比如指数期权,虚值看跌期权的隐含波动率通常比平值高不少。这说明什么?市场认为大跌的概率比BS模型预测的要大。

我刚开始做期权交易那会儿,就吃过这个亏。用BS模型算出来的对冲比率,在极端行情下完全失效。后来才明白,不是公式错了,是假设太理想化了。

局部波动率模型的核心思想很简单:让波动率成为标的价格S和时间t的函数,即σ(S, t)。这样就能捕捉到波动率的“微笑”特征。

12.2 Dupire公式:从期权价格反推局部波动率

1994年,Dupire发表了一篇里程碑式的论文。他证明了一个重要结论:如果市场上有足够多的欧式期权价格数据,我们可以唯一地反推出局部波动率函数

这个公式长这样:

σ²_loc(K, T) = [∂C/∂T + (r - q)K ∂C/∂K + qC] / [½ K² ∂²C/∂K²]

其中:

  • C(K, T) 是行权价为K、到期日为T的欧式看涨期权价格
  • r 是无风险利率
  • q 是股息率

说白了,这个公式就是在告诉你:给定一个完整的期权价格曲面,你可以算出每个(S, t)点上的瞬时波动率。

关键理解:Dupire公式的本质是“反问题”。从期权价格反推波动率,而不是像BS那样从波动率算价格。

12.3 局部波动率曲面的构建流程

在实际操作中,构建局部波动率曲面需要几个步骤。我画了一张图,帮你理清思路:

局部波动率曲面构建流程 步骤1:获取期权报价 不同行权价、到期日 步骤2:构建隐含波动率曲面 插值、平滑处理 步骤3:转换为期权价格曲面 BS公式反算 步骤4 Dupire公式 局部波动率曲面 σ(S,t) 注意事项 • 数据质量至关重要 • 插值方法影响结果 • 边界处理要小心 • 数值稳定性检查 • 定期重新校准

嗯,这里要注意:步骤2的插值方法选择很关键。我见过有人直接用线性插值,结果搞出来的曲面全是锯齿。我个人习惯用三次样条或者带平滑项的插值方法。

12.4 数值实现:Dupire公式的离散化

实际代码中,我们需要对Dupire公式做离散化处理。下面是一个Python实现的简化版本:

import numpy as np
from scipy.interpolate import RectBivariateSpline

def dupire_local_vol(S, T, K_grid, T_grid, price_surface, r, q):
    """
    计算局部波动率
    S: 当前标的价格
    T: 到期时间
    K_grid: 行权价网格
    T_grid: 到期时间网格
    price_surface: 期权价格曲面 (K x T)
    """
    # 对价格曲面做二维样条插值
    interp = RectBivariateSpline(K_grid, T_grid, price_surface)
    
    # 计算偏导数
    dC_dT = interp(K_grid, T_grid, dx=0, dy=1)  # ∂C/∂T
    dC_dK = interp(K_grid, T_grid, dx=1, dy=0)  # ∂C/∂K
    d2C_dK2 = interp(K_grid, T_grid, dx=2, dy=0)  # ∂²C/∂K²
    
    # Dupire公式
    numerator = dC_dT + (r - q) * K_grid * dC_dK + q * price_surface
    denominator = 0.5 * K_grid**2 * d2C_dK2
    
    # 避免除零
    mask = denominator > 1e-10
    local_vol = np.sqrt(np.maximum(numerator / denominator, 0))
    local_vol[~mask] = np.nan
    
    return local_vol

实战技巧:代码里我加了denominator的阈值判断。为什么?因为深度虚值期权的二阶导数可能接近零,直接除会出问题。我曾经在生产环境里遇到过这个坑,结果算出来的波动率全是inf。

12.5 局部波动率模型的优缺点

任何模型都有两面性。局部波动率模型也不例外:

优点 缺点
完美拟合市场期权价格 对未来波动率的预测能力有限
模型自洽,无套利 计算量大,需要频繁校准
可以用于奇异期权定价 在极端行情下可能失效
对冲效果比BS好 参数稳定性差,容易过拟合

我记得有一次做回测,局部波动率模型在正常市场环境下表现很好。但到了2018年2月的“波动率末日”事件,模型完全崩溃了。为什么?因为局部波动率假设波动率是S和t的确定函数,但真实市场里波动率本身也是随机的。

12.6 避坑指南:实际应用中的注意事项

这些年我用局部波动率模型踩过不少坑,总结几条给你:

  • 数据清洗是第一关:期权报价里经常有异常值,比如深度虚值的报价明显不合理。我曾经因为没做清洗,算出来的局部波动率曲面全是尖刺。
  • 插值方法要选对:我建议用带平滑项的样条插值,或者用SVI参数化方法先拟合隐含波动率曲面,再转成价格曲面。
  • 边界处理要小心:在行权价的两端,二阶导数可能不稳定。我一般会在边界处用线性外推,或者截断到合理范围。
  • 定期重新校准:局部波动率曲面不是一成不变的。我习惯每天开盘前重新校准一次,如果市场波动大,盘中也会更新。

重要警告:局部波动率模型不是万能药。它最大的问题是“向前看”的能力弱。如果你要做的是波动率预测或者风险管理,建议结合随机波动率模型一起使用。

12.7 小结

局部波动率模型是连接BS模型和更复杂模型的桥梁。Dupire公式给了我们一个从市场数据反推波动率曲面的方法。虽然它有不少局限性,但在期权定价和对冲中仍然是一个重要的工具。

我个人觉得,理解局部波动率模型的关键在于:它不是一个预测模型,而是一个插值模型。它告诉你的是“当前市场隐含的瞬时波动率是多少”,而不是“未来波动率会怎么走”。

如果你刚开始接触这个领域,建议先从简单的代码实现开始,用真实市场数据跑一遍。你会发现,理论公式和实际代码之间,还有不少细节需要处理。


公众号:蓝海资料掘金营,微信deep3321