第五章:波动率曲面建模
波动率曲面这东西,说白了就是期权市场的「温度计」。我刚开始做结构化产品那会儿,总觉得BS模型算出来的隐含波动率应该是个常数才对——后来被市场狠狠教育了一顿。
你想想看,同一标的、不同行权价、不同到期日的期权,隐含波动率居然不一样。而且这个差异还挺有规律,这就是我们今天要聊的核心。
5.1 波动率微笑与偏斜
先说说波动率微笑。这个词儿挺形象的——把隐含波动率对着行权价画出来,形状像个笑脸。为什么会出现这种现象?
BS模型假设价格是连续变化的,但现实世界里有跳跃。我记得2018年做港股期权做市时,碰到过一次财报前的异动,平值期权和深度虚值期权的波动率差了将近8个点。这就是典型的「肥尾」效应——市场认为极端行情发生的概率比BS模型算出来的要高。
偏斜(Skew)则是微笑的不对称版本。在股票市场里,通常左侧(虚值看跌)的波动率比右侧(虚值看涨)高。为什么?因为大家更怕暴跌。我做过一个统计,标普500期权在2008年之后的偏斜度比之前高了将近一倍——市场是有记忆的。
实战要点:
- 微笑程度可以用「曲率」来量化,偏斜程度用「斜率」
- 外汇市场通常是对称微笑,股票市场是负偏斜
- 商品市场有时候会出现正偏斜(比如原油)
5.2 局部波动率模型
局部波动率模型(LV模型)是Derman和Kani在1994年提出的。它的核心思想很简单:波动率是标的价格和时间的函数,σ(S,t)。
这个模型的好处是——它能完美拟合当前的波动率曲面。我在做奇异期权定价时经常用它,因为对于障碍期权、亚式期权这类路径依赖产品,LV模型比BS模型准得多。
但有个坑:LV模型假设未来的波动率曲面和现在一样。我曾经用LV模型给一个一年期的雪球产品定价,结果三个月后市场结构变了,模型完全失效。嗯,这里要注意——LV模型是静态的。
# 局部波动率计算示例(Dupire公式)
def local_vol(S, t, sigma_surface):
"""
sigma_surface: 隐含波动率曲面
返回局部波动率
"""
# 计算隐含波动率对行权价和时间的偏导
dsigma_dK = gradient(sigma_surface, axis=1) # 对行权价
dsigma_dT = gradient(sigma_surface, axis=0) # 对时间
d2sigma_dK2 = gradient(dsigma_dK, axis=1)
# Dupire公式
numerator = dsigma_dT + 2*t*sigma_surface*dsigma_dT
denominator = 1 + 2*t*sigma_surface*dsigma_dK + \
t*sigma_surface**2*d2sigma_dK2
return sigma_surface * np.sqrt(numerator / denominator)
我的经验:LV模型适合做日内做市和短期产品定价。对于期限超过3个月的产品,我建议搭配随机波动率模型一起用。
5.3 随机波动率模型
随机波动率模型(SV模型)解决了LV模型的静态问题。最经典的是Heston模型,它假设波动率本身也是一个随机过程。
Heston模型的参数有五个:v0(初始方差)、θ(长期均值)、κ(均值回复速度)、σ(波动率的波动率)、ρ(价格和波动率的相关系数)。
这个ρ特别关键。我做过一个回测:当ρ=-0.7时,模型能很好地捕捉到「下跌时波动率飙升」的现象。而ρ=0时,模型就变成了一个纯随机波动率,和市场的偏斜特征对不上。
| 参数 | 典型值(标普500) | 影响 |
|---|---|---|
| v0 | 0.04 | 初始波动率水平 |
| θ | 0.05 | 长期波动率均值 |
| κ | 2.0 | 回复速度,越大越快 |
| σ | 0.3 | 波动率的波动率 |
| ρ | -0.7 | 负值表示杠杆效应 |
避坑指南:我曾经用Heston模型给一个复杂结构化产品做对冲,发现参数校准非常不稳定。后来改用Fourier变换方法做定价,速度快了10倍,而且参数更稳定。记住:SV模型的数值实现比模型本身更重要。
5.4 波动率曲面插值方法
做市交易中,你不可能对所有行权价和期限都有报价。插值就是用来填补这些空白的。
常用的方法有几种:
- SVI参数化:用5个参数拟合整个曲面。我个人比较喜欢这个方法,因为它能保证无套利。我在做期权做市时,每天开盘第一件事就是用SVI拟合前一天的收盘数据。
- 样条插值:在行权价方向用三次样条,时间方向用线性插值。简单粗暴,但容易产生套利机会。
- 核回归:用高斯核做非参数平滑。适合数据量大的情况,但计算慢。
我给大家一个实用建议:对于日内做市,用SVI就够了。对于盘后分析和风控,建议用样条插值加上无套利约束。
# SVI参数化示例
def svi_vol(k, a, b, rho, m, sigma):
"""
k: 对数行权价 ln(K/S)
返回隐含波动率
"""
term = np.sqrt((k - m)**2 + sigma**2)
return a + b * (rho * (k - m) + term)
插值注意事项:
- 永远检查无套利条件:看涨看跌平价、蝶式价差非负
- 期限结构要平滑,不要出现波动率倒挂
- 远月合约的插值要谨慎,流动性差容易出问题
知识体系总览
下面这张图是我自己整理的知识结构,每次做培训都会拿出来用。它把波动率曲面建模的四个核心模块串在了一起:
这张图把四个模块的关系理清楚了。微笑和偏斜是市场现象,LV和SV是两种建模思路,插值是工程实现。做市交易中,这四个东西缺一不可。
最后说一句:波动率曲面建模没有银弹。我在不同市场用过不同方法——港股用SVI+局部波动率,美股用Heston,商品市场用插值加人工调整。关键是要理解每个方法的假设和局限,然后根据你的交易场景做选择。
交易系统化学习资料 微信Strategy888888