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图来总结本章的核心逻辑:

波动率期限结构知识体系 波动率期限结构 定义:σ = f(T) 不同期限特征 拟合方法 短期 中期 长期 线性插值 多项式拟合 样条插值 参数化模型 核心目标:从离散数据到连续曲线 为定价、对冲、风险管理提供基础

7.5 避坑指南

最后,分享几个我踩过的坑:

  • 不要用线性插值做交易:我曾经在回测时用线性插值,结果实盘发现波动率曲线在到期日附近出现明显折点,导致对冲成本计算偏差了3%以上。
  • 注意数据质量:不同交易所、不同经纪商提供的波动率数据可能不一致。我建议至少用两个数据源交叉验证。
  • 小心极端值:如果某个到期日的期权流动性极差,它的隐含波动率可能是“垃圾数据”。拟合前一定要做异常值检测。
  • 不要过度拟合:参数越多,模型越容易过拟合。记住奥卡姆剃刀原则——在能解释数据的前提下,模型越简单越好。

我的个人习惯:

在实盘系统中,我会同时维护三套期限结构:

  1. 实时拟合:用样条插值,每5分钟更新一次
  2. 日终拟合:用参数化模型,每天收盘后重新校准
  3. 历史均值:过去30天的平均期限结构,用于异常检测

三套数据互相印证,能有效避免单一模型带来的风险。

好了,关于波动率期限结构,今天就讲到这里。记住:期限结构不是孤立存在的,它和波动率微笑共同构成了完整的波动率曲面。下一章我们会把这两个维度结合起来,看看如何构建和校准完整的波动率曲面。


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