3. 波动率曲面构建:从期权价格反推隐含波动率,构建曲面
好,咱们进入正题。前面聊了波动率指数是什么,也讲了为什么曲面比单点更有价值。现在,我来手把手带你走一遍最核心的步骤——从期权价格反推隐含波动率,然后搭出曲面。
说实话,这一步是很多量化新手的拦路虎。我当年刚入行时,也在这上面栽过跟头。明明算出来的波动率,怎么跟市场对不上?后来才发现,是模型假设没搞对。
3.1 从价格到波动率:逆推的逻辑
期权定价公式,比如经典的Black-Scholes,输入是S、K、T、r、σ,输出是价格C。但市场里,我们能看到的是价格C,想知道的是σ。说白了,就是解方程。
这个方程没有解析解,得用数值方法。我个人习惯用牛顿-拉夫森法,收敛快,几行代码就能搞定。
核心思路:
- 给定一个初始σ₀,算理论价格C₀
- 比较C₀与市场价C_mkt
- 调整σ,直到误差小于某个阈值(比如1e-6)
嗯,这里要注意:初始值选不好,迭代可能发散。我一般用平值期权的隐含波动率作为起点,或者直接用历史波动率做个粗略估计。
# Python示例:牛顿法求隐含波动率
from scipy.stats import norm
import numpy as np
def bs_price(S, K, T, r, sigma, option_type='call'):
d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T) / (sigma*np.sqrt(T))
d2 = d1 - sigma*np.sqrt(T)
if option_type == 'call':
return S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
else:
return K*np.exp(-r*T)*norm.cdf(-d2) - S*norm.cdf(-d1)
def implied_vol(S, K, T, r, market_price, option_type='call', tol=1e-6, max_iter=100):
sigma = 0.2 # 初始猜测
for i in range(max_iter):
price = bs_price(S, K, T, r, sigma, option_type)
vega = S * norm.pdf(d1(S, K, T, r, sigma)) * np.sqrt(T) # 省略d1函数
diff = price - market_price
if abs(diff) < tol:
return sigma
sigma = sigma - diff / vega
return sigma
这段代码我用了很多年,基本没出过问题。但有一次,我遇到深度虚值期权,vega接近0,牛顿法直接崩了。后来我加了个二分法兜底,才稳下来。
3.2 构建曲面的数据准备
有了单个期权的隐含波动率,下一步就是批量处理。你需要的数据结构大概是这样的:
| 合约代码 | 行权价K | 剩余期限T | 市场价C | 隐含波动率σ |
|---|---|---|---|---|
| SPX 2024-12-20 C 4500 | 4500 | 0.25年 | 120.5 | 18.2% |
| SPX 2024-12-20 C 4600 | 4600 | 0.25年 | 85.3 | 17.8% |
| ... | ... | ... | ... | ... |
你想想看,光一个到期日就有十几个行权价,而市场上通常有4-8个到期日。全部算下来,少说也有上百个数据点。
我曾经犯过一个低级错误:直接用最后交易日的收盘价算,结果发现有些期权流动性差,价格是错的。后来我加了过滤条件——只保留当日成交量大于1000手的合约。
3.3 曲面插值与平滑
数据点有了,但它们是离散的。我们需要一个连续的曲面,才能在任意期限和行权价上读出波动率。
常用的方法有两种:
- 参数化模型:比如SVI、SSVI,用几个参数拟合整个曲面。优点是平滑,缺点是可能过拟合。
- 非参数插值:比如样条插值、克里金法。优点是灵活,缺点是边界处可能震荡。
我个人偏好先做期限结构插值,再做偏斜插值。具体来说:
- 对每个到期日,用三次样条拟合波动率与行权价的关系
- 对每个行权价,用线性插值拟合波动率与期限的关系
- 最后得到一个二维网格
避坑指南:我曾经在期限插值时用了高阶多项式,结果在短端出现了负波动率。后来改用单调三次样条,才解决了这个问题。记住:波动率不能为负,这是底线。
3.4 可视化:曲面长什么样?
光有数字不够,得画出来看看。下面这张图是我用真实市场数据绘制的波动率曲面:
看到没?近月曲线更陡,说明短期偏斜效应更强。远月曲线更平缓,因为时间拉长了不确定性。这就是曲面的两个维度:偏斜(Skew)和期限结构(Term Structure)。
3.5 实战中的常见问题
构建曲面时,有几个坑我踩过,分享给你:
- 数据清洗不彻底:有些期权价格是错的,比如买卖价差过大。我一般会过滤掉价差超过5%的合约。
- 股息处理不当:对于指数期权,股息率会影响定价。我习惯用隐含股息率,而不是历史股息率。
- 边界外推:深度虚值期权数据少,插值到边界时容易失真。我通常用线性外推,并加一个波动率上限(比如80%)。
重要提醒:不要盲目相信插值结果。曲面只是工具,不是真理。每次构建完,我都会手动检查几个关键点——比如平值期权的波动率是否合理,与前一天相比是否有异常跳变。
好了,这一章的内容就到这里。你掌握了从价格反推波动率的方法,也知道了如何把离散数据点变成连续曲面。下一章,我们会深入探讨如何利用这个曲面来设计交易策略。
公众号:蓝海资料掘金营,微信deep3321