7、波动率期限结构:期限结构的定义、不同期限的波动率特征、期限结构的拟合方法
各位同学,今天我们来聊聊波动率期限结构。说实话,这个知识点在实战中特别重要,但很多人容易把它和波动率微笑搞混。我刚开始做期权交易那会儿,也犯过这个错——盯着微笑曲线看了半天,结果忽略了期限结构的变化,导致对冲策略出了大问题。
好,咱们直接进入正题。
7.1 什么是波动率期限结构?
简单来说,波动率期限结构描述的是:对于同一个标的资产,不同到期期限的期权,其隐含波动率之间的关系。
你想想看,一个1个月后到期的期权,和一个1年后到期的期权,它们的波动率能一样吗?显然不能。市场对短期和长期的不确定性预期是不同的。
用数学语言表达就是:
σ_imp = f(T) 其中 T 是剩余到期时间
这里的 f(T) 就是期限结构函数。它可以是向上倾斜的、向下倾斜的,甚至是驼峰状的。
核心区别:
- 波动率微笑:固定到期时间,看执行价格 K 的变化
- 波动率期限结构:固定执行价格(通常是平值),看到期时间 T 的变化
嗯,这里要注意:实际市场中,两者是交织在一起的。我们通常用波动率曲面来同时描述这两个维度。但今天咱们先聚焦在期限结构上。
7.2 不同期限的波动率特征
我在项目中观察到的规律是这样的:
7.2.1 短期波动率(1个月以内)
- 波动剧烈:受突发事件、财报、宏观数据影响极大
- 均值回归快:短期冲击后,波动率往往迅速回落
- 容易出现尖峰:比如某天突然暴跌,隐含波动率瞬间飙升
我记得有一次做美股期权策略,遇到非农数据公布日。当天短期平值期权的隐含波动率直接从18%跳到了35%。这种极端情况,如果你没有在期限结构上做好预案,很容易被打爆仓。
7.2.2 中期波动率(1-6个月)
- 相对平滑:短期噪音被时间平滑掉一部分
- 趋势性更强:反映市场对中期宏观环境的判断
- 与标的走势相关性高:比如大盘持续下跌时,中期波动率会缓慢抬升
7.2.3 长期波动率(6个月以上)
- 稳定性最高:受短期事件影响最小
- 反映结构性预期:比如利率环境、地缘政治等长期因素
- 往往存在“波动率溢价”:长期期权通常比短期贵,因为不确定性更大
实战小技巧:
我个人习惯用 期限结构斜率 来判断市场情绪。如果短期波动率远高于长期(即期限结构向下倾斜),说明市场正在恐慌。反之,如果长期波动率高于短期(向上倾斜),说明市场预期未来不确定性会增加。
7.3 期限结构的拟合方法
好,理论说完了,咱们来点干货。怎么把离散的期权数据拟合成一条连续的期限结构曲线?
说白了,我们手头只有几个到期日的期权数据(比如1周、1月、3月、6月、1年),但我们需要知道任意到期时间的波动率。这就得靠拟合。
7.3.1 线性插值法
最简单粗暴的方法。假设两个相邻到期日之间的波动率是线性变化的。
def linear_interp(T, T_list, sigma_list):
"""
线性插值波动率期限结构
T: 目标到期时间
T_list: 已知到期时间列表
sigma_list: 已知波动率列表
"""
import numpy as np
return np.interp(T, T_list, sigma_list)
# 示例
T_known = [0.02, 0.08, 0.25, 0.5, 1.0] # 单位:年
sigma_known = [0.25, 0.22, 0.20, 0.19, 0.18]
T_target = 0.15 # 约55天
sigma_target = linear_interp(T_target, T_known, sigma_known)
print(f"目标到期时间 {T_target:.2f} 年的波动率为 {sigma_target:.4f}")
注意:线性插值虽然简单,但会引入“折线效应”。在到期日附近,波动率变化不光滑,可能导致定价不连续。我建议只在快速原型验证时用。
7.3.2 多项式拟合
用多项式函数来拟合整个期限结构。常用的是二次或三次多项式。
def poly_fit(T, T_list, sigma_list, degree=3):
"""
多项式拟合波动率期限结构
"""
import numpy as np
coeffs = np.polyfit(T_list, sigma_list, degree)
poly = np.poly1d(coeffs)
return poly(T)
# 示例
sigma_target_poly = poly_fit(T_target, T_known, sigma_known, degree=3)
print(f"多项式拟合结果:{sigma_target_poly:.4f}")
嗯,这里要注意:多项式阶数不能太高。我见过有人用5次多项式去拟合6个点,结果曲线在两端疯狂震荡,完全失真。一般3次就够了。
7.3.3 样条插值(推荐)
我个人最推荐的方法。样条插值能保证曲线光滑,且通过所有已知点。
from scipy.interpolate import CubicSpline
def spline_fit(T, T_list, sigma_list):
"""
三次样条插值拟合波动率期限结构
"""
cs = CubicSpline(T_list, sigma_list, bc_type='natural')
return cs(T)
# 示例
sigma_target_spline = spline_fit(T_target, T_known, sigma_known)
print(f"样条插值结果:{sigma_target_spline:.4f}")
为什么推荐样条?
- 光滑性:一阶、二阶导数连续,不会出现折线
- 局部性:修改一个点,只影响附近区域,不会全局震荡
- 灵活性:可以加入边界条件(如自然样条、固定斜率等)
7.3.4 参数化模型(SVI、SSVI等)
对于更专业的应用,我们会用参数化模型。比如 SVI(Stochastic Volatility Inspired)模型,它不仅能拟合期限结构,还能同时拟合微笑。
不过这个内容比较深,咱们后面章节会专门讲。今天先知道有这个东西就行。
7.4 知识体系结构图
下面我用一张SVG图来总结本章的核心逻辑:
7.5 避坑指南
最后,分享几个我踩过的坑:
- 不要用线性插值做交易:我曾经在回测时用线性插值,结果实盘发现波动率曲线在到期日附近出现明显折点,导致对冲成本计算偏差了3%以上。
- 注意数据质量:不同交易所、不同经纪商提供的波动率数据可能不一致。我建议至少用两个数据源交叉验证。
- 小心极端值:如果某个到期日的期权流动性极差,它的隐含波动率可能是“垃圾数据”。拟合前一定要做异常值检测。
- 不要过度拟合:参数越多,模型越容易过拟合。记住奥卡姆剃刀原则——在能解释数据的前提下,模型越简单越好。
我的个人习惯:
在实盘系统中,我会同时维护三套期限结构:
- 实时拟合:用样条插值,每5分钟更新一次
- 日终拟合:用参数化模型,每天收盘后重新校准
- 历史均值:过去30天的平均期限结构,用于异常检测
三套数据互相印证,能有效避免单一模型带来的风险。
好了,关于波动率期限结构,今天就讲到这里。记住:期限结构不是孤立存在的,它和波动率微笑共同构成了完整的波动率曲面。下一章我们会把这两个维度结合起来,看看如何构建和校准完整的波动率曲面。