12、局部波动率模型:Dupire公式、局部波动率曲面构建、模型应用场景

局部波动率模型,说白了就是给期权定价找个更靠谱的“脾气”。

BS模型假设波动率是常数,但市场告诉我们,这玩意儿根本不老实。不同行权价、不同到期日的期权,隐含波动率都不一样——这就是我们之前聊的波动率微笑和偏斜。那怎么办?Dupire在1994年给出了一个答案:从这些隐含波动率里,反推出一个“局部波动率”函数。这个函数能描述出,在某个特定时刻、特定标的价格下,波动率到底是多少。

12.1 Dupire公式:从隐含到局部的桥梁

Dupire公式的核心思想,我理解起来其实很简单:

既然市场给了我们一堆不同K和T的期权价格,那我们就假设这些价格背后有一个统一的、只依赖于S和t的波动率函数σ_local(S, t)。然后通过数学推导,把这个函数从期权价格里“挖”出来。

公式长这样(嗯,我知道你看到公式就头疼,但咱们得硬着头皮上):

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

其中:

  • C(K, T) 是行权价为K、到期日为T的看涨期权价格
  • r 是无风险利率,q 是股息率
  • ∂C/∂T 是期权价格对时间的偏导(时间衰减)
  • ∂C/∂K 和 ∂²C/∂K² 是一阶和二阶的“行权价偏导”

你可能会问:这公式怎么用?

我个人习惯是这么理解的:分子部分,是期权价格在时间维度和行权价维度上的变化,再扣掉持有成本;分母部分,是期权价格的“曲率”——也就是微笑的弯曲程度。曲率越大,局部波动率就越高。

核心要点:Dupire公式的本质,是把隐含波动率曲面的“形状”翻译成局部波动率曲面的“数值”。

12.2 局部波动率曲面构建:从理论到代码

理论讲完了,咱们来点实际的。怎么构建这个曲面?

我在项目中遇到过最头疼的问题就是:市场数据是离散的,但公式需要连续的二阶偏导。你想想看,就给你几十个期权报价,你要算出光滑的二阶导?搞不好就全是噪声。

我的做法分三步:

  1. 数据清洗与插值:先把隐含波动率曲面做光滑。我一般用SVI(随机波动率启发式模型)或者三次样条插值,把离散的隐含波动率点连成光滑曲面。
  2. 计算偏导数:在光滑后的曲面上,用有限差分法计算∂C/∂T、∂C/∂K和∂²C/∂K²。注意,这里要用期权价格,不是隐含波动率。所以得先把隐含波动率转回期权价格。
  3. 代入Dupire公式:把算好的偏导代入公式,得到每个(K, T)网格点上的局部波动率。

下面是我常用的Python代码片段:

import numpy as np
from scipy.interpolate import RectBivariateSpline

def build_local_vol_surface(K_grid, T_grid, implied_vol_surface, r, q):
    """
    构建局部波动率曲面
    K_grid: 行权价网格 (1D array)
    T_grid: 到期时间网格 (1D array)
    implied_vol_surface: 隐含波动率曲面 (2D array, shape: len(T) x len(K))
    """
    # 1. 将隐含波动率转为期权价格(略去BS公式实现)
    C = implied_vol_to_price(K_grid, T_grid, implied_vol_surface, r, q)
    
    # 2. 用样条插值获得光滑的价格曲面
    spline = RectBivariateSpline(T_grid, K_grid, C, kx=3, ky=3)
    
    # 3. 计算偏导数
    dC_dT = spline(T_grid, K_grid, dx=1, dy=0, grid=True)
    dC_dK = spline(T_grid, K_grid, dx=0, dy=1, grid=True)
    d2C_dK2 = spline(T_grid, K_grid, dx=0, dy=2, grid=True)
    
    # 4. 代入Dupire公式
    numerator = dC_dT + (r - q) * K_grid * dC_dK + q * C
    denominator = 0.5 * K_grid**2 * d2C_dK2
    
    # 防止除零和负值
    local_var = np.where(denominator > 1e-10, numerator / denominator, np.nan)
    local_vol = np.sqrt(np.maximum(local_var, 0.01))
    
    return local_vol

避坑指南:我曾经在分母接近零的时候吃过亏——局部波动率直接变成无穷大。后来我加了个阈值判断,并且对远价外期权做了截断处理。记住,Dupire公式在价外期权上特别不稳定。

12.3 模型应用场景:什么时候用局部波动率?

局部波动率模型不是万能的,但它有几个特别擅长的场景:

应用场景 为什么用局部波动率 我的经验
奇异期权定价 能准确捕捉障碍期权、亚式期权的路径依赖特征 做回望期权时,BS模型偏差能到20%,局部波动率能压到5%以内
风险管理 提供更准确的希腊字母,尤其是Vanna和Volga 我习惯用它做Delta对冲,效果比BS好不少
波动率套利 识别隐含波动率和局部波动率的差异 当局部波动率曲面出现“尖刺”时,往往是套利机会
压力测试 模拟极端行情下的波动率变化 可以设定局部波动率的上下界,做情景分析

不过我得提醒你,局部波动率模型也有短板。它假设波动率是标的价格和时间的确定性函数,但实际市场里波动率本身也是随机的。所以对于长期限期权或者剧烈波动行情,它的表现就不如随机波动率模型了。

我的建议:如果你做的是短期(3个月以内)的普通期权定价,BS模型加个微笑调整就够了。但如果你碰的是结构性产品、障碍期权或者需要精细风险管理,那局部波动率模型就是你的好帮手。

12.4 知识体系结构图

下面这张图,是我梳理的局部波动率模型的核心逻辑:

局部波动率模型知识体系 市场期权报价 隐含波动率曲面 利率/股息数据 Dupire公式:σ²_local = (∂C/∂T + (r-q)K·∂C/∂K + q·C) / (½·K²·∂²C/∂K²) 核心:从期权价格曲率反推局部波动率 局部波动率曲面 σ_local(S, t) 奇异期权定价 障碍/亚式/回望期权 风险管理 Delta/Vanna/Volga 波动率套利 识别定价偏差 注:局部波动率模型适用于短期、路径依赖型期权,长期限建议使用随机波动率模型

嗯,这张图把整个流程串起来了。从市场数据出发,经过Dupire公式这个“翻译器”,得到局部波动率曲面,最后应用到三个主要场景里。我个人觉得,理解这个流程比死记公式更重要。

最后说一句:局部波动率模型不是银弹,但它绝对是量化金融工具箱里一把好用的螺丝刀。用对了地方,事半功倍。


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