第1章:局部波动率模型:Dupire公式、局部波动率曲面构建与交易应用

1.1 从BS到局部波动率——我为什么放弃常数波动率

做期权交易的人,早晚都会撞上一堵墙——BS模型。

BS模型漂亮,优雅,拿过诺奖。但用它做实际交易?说实话,有点天真。BS假设波动率是常数,可市场根本不是这么玩的。你去看期权报价,虚值看跌期权的隐含波动率往往比平值高出一大截,这就是所谓的“波动率微笑”。

我刚开始做期权量化那会儿,也迷信BS。直到有一次,我用BS算了一个深度虚值看跌期权的理论价,觉得便宜得离谱,重仓卖了不少。结果市场一跌,波动率瞬间飙升,我的头寸直接被打穿。嗯,那次教训让我明白:波动率不是常数,它随标的价格和时间变化

局部波动率模型(Local Volatility Model)就是来解决这个问题的。它允许波动率是标的价格和时间的函数:σ(S, t)。这样一来,模型就能自动捕捉波动率微笑和偏斜。

核心思想:局部波动率模型假设,在任意时刻t、任意标的价格S下,存在一个确定的瞬时波动率σ(S, t)。这个波动率完全由市场数据决定,不需要额外假设。

1.2 Dupire公式——从期权价格反推波动率

1994年,Dupire发表了一篇论文,给出了一个惊人的结论:如果市场上有足够多的欧式期权报价,我们可以直接从期权价格反推出局部波动率函数

公式长这样:

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

其中:

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

说白了,这个公式就是在告诉你:给定一个期权价格的曲面,你可以把它“微分”一下,就能得到局部波动率曲面

我在项目中第一次实现这个公式时,踩了个大坑——∂²C/∂K²在分母上。如果期权价格曲面不够光滑,二阶导数可能为负,算出来的局部波动率就是负数。这显然不合理。

避坑指南:我曾经因为直接用市场报价做差分,算出一堆负的局部波动率。后来发现,必须先用平滑算法(比如样条插值)对期权价格曲面做预处理,否则Dupire公式根本没法用。

1.3 局部波动率曲面构建——从理论到工程

构建局部波动率曲面,我一般分四步走:

  1. 获取市场数据:收集不同行权价、不同到期日的期权报价
  2. 计算隐含波动率曲面:用BS模型反推出每个期权的隐含波动率
  3. 平滑插值:对隐含波动率曲面做平滑处理(我常用三次样条或双线性插值)
  4. 应用Dupire公式:从平滑后的期权价格曲面计算局部波动率

这里有个关键点:Dupire公式需要的是期权价格对行权价的二阶导数。直接对市场报价求导,噪声会被放大到离谱。我建议先用参数化模型(比如SVI模型)拟合隐含波动率曲面,再转成期权价格,最后求导。

给你看一段我常用的Python代码片段:

import numpy as np
from scipy.interpolate import RectBivariateSpline

def build_local_vol_surface(strikes, maturities, implied_vol_surface, r, q):
    """
    从隐含波动率曲面构建局部波动率曲面
    """
    # 1. 将隐含波动率转为期权价格
    option_prices = bs_to_price(strikes, maturities, implied_vol_surface, r, q)
    
    # 2. 用双三次样条平滑
    spline = RectBivariateSpline(strikes, maturities, option_prices)
    
    # 3. 计算偏导数
    dC_dT = spline(strikes, maturities, dx=0, dy=1)
    dC_dK = spline(strikes, maturities, dx=1, dy=0)
    d2C_dK2 = spline(strikes, maturities, dx=2, dy=0)
    
    # 4. 应用Dupire公式
    numerator = dC_dT + (r - q) * strikes * dC_dK + q * option_prices
    denominator = 0.5 * strikes**2 * d2C_dK2
    
    local_vol = np.sqrt(np.maximum(numerator / denominator, 1e-8))
    
    return local_vol

个人经验:我习惯在分母上加一个很小的正数(比如1e-8),防止除零错误。另外,如果算出来的局部波动率超过100%或低于5%,我会直接截断——市场极端情况下的数据往往不可靠。

1.4 交易应用——局部波动率模型能帮你做什么

局部波动率模型在实际交易中,主要有三个用途:

应用场景 具体做法 我的评价
奇异期权定价 用局部波动率模型为障碍期权、亚式期权等路径依赖产品定价 比BS准得多,但计算慢
波动率套利 比较局部波动率与隐含波动率的差异,寻找定价偏差 需要高频数据,适合做市商
风险管理 计算更准确的希腊字母,尤其是Vega和Gamma 这是我最常用的场景

举个例子。你持有某个股票的看涨期权头寸,用BS算出来的Delta是0.5。但如果你用局部波动率模型重新算,可能会发现Delta其实是0.55。为什么?因为局部波动率模型考虑了波动率随标的价格的变化——当股价上涨时,波动率可能下降,这会影响Delta。

我记得有一次,一个同事用BS算了一个障碍期权的价格,觉得被低估了,想买入。我建议他用局部波动率模型重新定价,结果发现BS低估了约8%。他后来感谢我说,这8%的差异差点让他亏钱。

1.5 局部波动率模型的局限性——别把它当万能药

说实话,局部波动率模型也不是完美的。它有几个硬伤:

  • 动态不一致:模型假设波动率是确定的函数,但实际中波动率会随机变化。用局部波动率模型做动态对冲,效果可能不如随机波动率模型。
  • 数据需求高:需要大量不同行权价和到期日的期权报价。对于流动性差的品种,曲面构建会很不稳定。
  • 计算成本高:每次定价都要做数值求解,不像BS那样有解析解。

但话说回来,局部波动率模型仍然是业界最常用的工具之一。它比BS更贴近市场,又比随机波动率模型更容易实现和校准。我个人认为,对于大多数实际交易场景,局部波动率模型是“性价比”最高的选择。

一句话总结:局部波动率模型用Dupire公式从市场数据中提取波动率曲面,解决了BS模型常数波动率的缺陷。它不完美,但很实用。

1.6 本章知识体系

下面这张图,是我自己画的局部波动率模型知识框架。你看一眼,就能明白各模块之间的关系:

局部波动率模型知识体系 BS模型局限 常数波动率假设 无法解释微笑/偏斜 Dupire公式 从期权价格反推 局部波动率函数 局部波动率曲面 平滑插值 参数化拟合 交易应用 奇异期权定价 | 波动率套利 | 风险管理 局限性 动态不一致 | 数据需求高 | 计算成本高 核心逻辑:BS局限 → Dupire公式 → 曲面构建 → 交易应用 → 认识局限

嗯,这一章的内容就到这儿。局部波动率模型是期权量化交易的基础工具,理解它,你就能看懂市场上很多定价偏差和套利机会。下一章我们会深入随机波动率模型,看看它和局部波动率模型有什么不同。


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