14、曲面插值与外推:SABR模型、样条插值
做期权交易的朋友都知道,市场上能直接看到的报价,永远就那么几个。比如沪深300ETF期权,每天活跃的合约也就几十个。但你要做风险管理、定价对冲,需要的可是整个波动率曲面——从虚值到实值,从近月到远月,每个点都得有数。
这就引出了我们今天的话题:曲面插值与外推。说白了,就是怎么用已知的离散报价,推算出整个连续曲面上每个点的值。
我个人习惯把这个问题拆成两步:插值是填补已知点之间的空白,外推是猜测已知范围之外的值。这两步用的工具不一样,但目标一致——让曲面既光滑又合理。
14.1 为什么不能直接线性插值?
你可能会想,相邻两个行权价之间,直接拉条直线不就行了?嗯,我刚开始做量化时也这么干过。结果呢?算出来的vega对冲参数一塌糊涂,回测里看着挺美,实盘一跑就露馅。
问题出在哪?波动率曲面不是线性的。它有自己的形状——微笑、偏斜、期限结构。线性插值会把这些特征抹平,产生不自然的拐点。更麻烦的是,线性插值出来的曲面,在行权价边界处导数不连续,这会导致期权价格的二阶导数(gamma)出现跳跃,对冲时你就得频繁调仓。
14.2 SABR模型:从参数到曲面
SABR模型是我在实战中最常用的工具之一。它全称是Stochastic Alpha Beta Rho,由Hagan等人提出。这个模型的好处是:你只需要几个参数,就能描述一整条波动率微笑曲线。
SABR模型的公式长这样:
σ(K, F) = α / (F^(1-β)) * [1 + ((1-β)^2/24 * (ln(F/K))^2 + ...)] * (z/χ(z))
看着复杂?别怕。实际用的时候,我们只需要关注四个参数:
| 参数 | 含义 | 典型范围 |
|---|---|---|
| α (Alpha) | 波动率的整体水平 | 0.1 ~ 0.5 |
| β (Beta) | 刻画波动率与标的资产的关系 | 0 ~ 1(常用0.5) |
| ρ (Rho) | 波动率与标的资产的相关系数 | -1 ~ 1 |
| ν (Nu) | 波动率的波动率(vol of vol) | 0.1 ~ 0.5 |
我在项目中遇到过最头疼的事,就是参数校准。明明同样的市场数据,不同的人能校准出完全不同的参数组合。后来我总结了一个经验:先固定β,再调其他三个。β取0.5通常是个不错的起点,因为它在CEV模型里对应平方根过程,比较稳定。
14.3 样条插值:让曲面更光滑
SABR模型擅长描述单一行权价方向的微笑,但处理期限结构时,样条插值更灵活。我常用的有两种:
- 三次样条(Cubic Spline):保证二阶导数连续,曲面非常光滑。适合期限方向插值。
- 双三次样条(Bicubic Spline):同时在行权价和期限两个方向插值,生成完整的曲面。
样条插值的核心思想很简单:用分段低次多项式逼近整体函数。每段之间保证连接点处函数值、一阶导、二阶导都连续。这样整个曲面看起来就像一张平滑的丝绸,没有褶皱。
举个例子,假设我们有三个到期日(1个月、3个月、6个月)的波动率数据,想插出2个月的值:
# Python伪代码示意
from scipy.interpolate import CubicSpline
import numpy as np
# 已知数据点
tenors = np.array([1, 3, 6]) # 月份
vols = np.array([0.18, 0.20, 0.22])
# 构建三次样条
cs = CubicSpline(tenors, vols, bc_type='natural')
# 插值2个月
vol_2m = cs(2.0)
print(f"2个月波动率: {vol_2m:.4f}")
14.4 外推:小心边界效应
插值做完了,但曲面边缘还有空白。比如深度虚值看涨期权,市场上根本没有报价。这时候就得外推。
外推比插值危险得多。我见过有人用样条直接往外推,结果波动率变成了负数——这显然不合理。常用的外推方法有:
- 常数外推:边界处的波动率保持不变。简单粗暴,但可能产生不连续。
- 线性外推:用最后两个点的斜率继续延伸。比常数好一点,但斜率不能太陡。
- SABR外推:用校准好的SABR参数直接计算远行权价的波动率。这是我最推荐的方法,因为它有金融理论基础。
我曾经在做一个股指期权项目时,用线性外推处理深度虚值期权。结果回测时发现,某个极端行情下,外推出来的波动率高达80%,导致期权定价严重偏离。后来改用SABR外推,把vol of vol限制在0.3以内,问题就解决了。
14.5 实战流程:从数据到曲面
好了,理论讲完了。咱们看看实际怎么做。我一般按这个流程走:
- 数据清洗:剔除流动性差的合约,处理异常报价。
- 期限方向插值:用三次样条,按到期日插出标准期限(如1M、2M、3M...)。
- 行权价方向拟合:对每个标准期限,用SABR模型拟合微笑曲线。
- 曲面生成:将SABR参数在期限方向做平滑,生成完整曲面。
- 外推处理:对曲面边缘,用SABR模型外推。
- 无套利检查:验证曲面是否存在日历价差或蝶式价差套利机会。
下面这张图展示了整个流程的逻辑关系:
14.6 避坑指南
最后,分享几个我踩过的坑:
- 不要过度拟合:SABR参数越多,越容易过拟合。我一般只用3个参数(α、ρ、ν),β固定。
- 注意期限结构的一致性:不同期限的SABR参数应该平滑变化。如果ρ从-0.2跳到0.5,那肯定有问题。
- 外推要有上限:我习惯把波动率上限设为100%,下限设为5%。超出这个范围,直接截断。
- 定期重新校准:市场变了,参数也得变。我一般每天开盘前重新校准一次。
嗯,曲面插值与外推,说到底就是在数学光滑性和金融合理性之间找平衡。SABR模型给了你理论框架,样条插值给了你灵活性,两者结合,才能做出真正可用的波动率曲面。
公众号:蓝海资料掘金营,微信deep3321