第12章:Vanna-Volga方法:定价与微笑调整

聊到波动率微笑,很多新手第一反应就是「用不同行权价的IV去定价不就完了?」。嗯,理论上没错,但实际操作中你会发现——流动性差的期权,IV根本没法直接看。这时候,Vanna-Volga方法就派上用场了。

我个人习惯把Vanna-Volga叫做「用三个点拟合整条微笑曲线」的方法。说白了,就是利用市场上最活跃的三个期权(通常是25D Call、25D Put和ATM),通过风险因子调整来给其他行权价定价。这方法在欧元/美元外汇期权市场用得特别多,我当年做外汇量化时几乎天天跟它打交道。

12.1 核心思想:风险因子补偿

Vanna-Volga的核心逻辑其实很朴素:

  • Vanna:波动率对标的资产价格的敏感度(∂²V/∂S∂σ)
  • Volga:波动率对波动率本身的敏感度(∂²V/∂σ²)

为什么是这两个希腊字母?因为微笑的本质就是波动率不是常数。当标的价格变动时,波动率也会跟着变(Vanna效应);当波动率自己波动时,期权价格也会非线性变化(Volga效应)。

核心公式(简化版):

V_V调整 = V_BS + Vanna_调整 + Volga_调整

其中:
Vanna_调整 = Vanna × (σ_25DC - σ_ATM) × 权重
Volga_调整 = Volga × (σ_25DC + σ_25DP - 2σ_ATM) × 权重

我在项目中遇到过一个问题:直接用这个公式算出来的价格,在某些极端行权价上会「飞掉」。后来发现是权重函数没选对——嗯,这里要注意,权重的选择直接影响定价稳定性。

12.2 实际操作步骤

Vanna-Volga的落地流程,我一般分四步走:

  1. 获取三个基准期权:ATM、25D Call、25D Put的隐含波动率
  2. 计算风险因子:用BS模型算出目标期权的Vanna和Volga
  3. 构建调整矩阵:计算三个基准期权对Vanna和Volga的暴露
  4. 求解权重:通过线性方程组得到每个基准期权的权重

避坑指南:我曾经直接用市场报价的25D波动率去算,结果发现不同经纪商对「25D」的定义不一样。有的用Delta=0.25,有的用Delta绝对值=0.25,还有的用远期Delta。一定要先统一口径。

12.3 代码实现(Python示例)

下面是我常用的Vanna-Volga定价函数。代码不长,但每个细节都踩过坑:

import numpy as np
from scipy.stats import norm

def vanna_volga_price(S, K, T, r, sigma_atm, sigma_25dc, sigma_25dp):
    """
    Vanna-Volga调整后的期权价格
    S: 标的价格
    K: 行权价
    T: 剩余期限(年)
    r: 无风险利率
    sigma_atm: ATM波动率
    sigma_25dc: 25D Call波动率
    sigma_25dp: 25D Put波动率
    """
    # 1. 先算BS价格
    d1 = (np.log(S/K) + (r + 0.5*sigma_atm**2)*T) / (sigma_atm*np.sqrt(T))
    d2 = d1 - sigma_atm*np.sqrt(T)
    
    bs_price = S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
    
    # 2. 计算Vanna和Volga
    vanna = -norm.pdf(d1) * d2 / sigma_atm
    volga = norm.pdf(d1) * d1 * d2 / sigma_atm
    
    # 3. 计算调整项
    # 这里用简化权重:假设三个期权等权重
    # 实际生产中需要用矩阵求解
    vanna_adjust = vanna * (sigma_25dc - sigma_atm) * 0.5
    volga_adjust = volga * (sigma_25dc + sigma_25dp - 2*sigma_atm) * 0.3
    
    return bs_price + vanna_adjust + volga_adjust

注意:上面代码中的权重0.5和0.3是我随便写的示例。实际使用时,权重需要通过求解线性方程组得到,而且不同期限的权重曲线形状差异很大。我曾经因为偷懒用了固定权重,结果回测时发现远月期权的定价偏差达到了3%以上。

12.4 实际交易案例

讲个真实案例。2022年9月,欧元/美元在0.99附近震荡,市场对1.00的整数关口非常敏感。当时有个客户想买一个1.05的欧元看涨期权,但1.05对应的行权价流动性极差,直接看市场报价根本不可靠。

我当时的处理流程是这样的:

步骤 操作 数据
1 获取三个基准波动率 ATM=9.5%, 25DC=10.2%, 25DP=11.8%
2 计算目标期权的Vanna/Volga Vanna=-0.15, Volga=0.08
3 求解权重矩阵 w_ATM=0.6, w_25DC=0.25, w_25DP=0.15
4 计算调整后波动率 σ_adjusted = 10.35%

最终我们用调整后的波动率10.35%给客户报了价。你想想看,如果直接用ATM波动率9.5%去定价,那这个期权就卖便宜了将近8%。而如果用25D Call的10.2%,又高估了风险。Vanna-Volga正好给出了一个「居中偏上」的合理定价。

12.5 方法优缺点

用了这么多年Vanna-Volga,我总结了几点:

  • 优点:计算快、逻辑透明、只需要三个市场报价
  • 缺点:对深度虚值期权效果差、权重选择有主观性

为什么会这样?因为Vanna-Volga本质上是一个二阶泰勒展开,当行权价离三个基准点太远时,展开的误差就会急剧放大。我曾经测试过,对于Delta小于0.1的期权,Vanna-Volga的定价误差可能超过5%。这时候我一般会改用SABR模型或者直接插值。

我的建议:

  • 流动性好的行权价:直接用市场IV
  • 流动性一般的行权价:用Vanna-Volga
  • 深度虚值/实值:换用随机波动率模型

12.6 本章知识体系

下面这张图是我自己画的Vanna-Volga方法逻辑框架,你看一眼就能明白整个流程:

Vanna-Volga方法核心逻辑 市场输入 ATM / 25DC / 25DP IV 风险因子计算 Vanna / Volga 权重矩阵求解 线性方程组 Vanna-Volga调整量 Vanna_adj + Volga_adj 调整后期权价格 BS价格 + VV调整 关键假设 • 微笑由Vanna/Volga驱动 • 三个基准点足够描述 • 权重线性可解 • 忽略高阶希腊字母

这张图把整个Vanna-Volga的流程串起来了。从市场输入到风险因子计算,再到权重求解和最终调整,每一步都有明确的数学对应。我个人习惯在做交易决策前,先按这个流程走一遍,确保定价逻辑没有遗漏。


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