10、高阶话题:随机波动率模型(Heston、SABR)与曲面拟合,机器学习在曲面预测中的应用
做Gamma交易做到一定阶段,你会发现一个尴尬的事实:
BS模型假设波动率是常数,但市场显然不是这么玩的。波动率本身会变,而且变得毫无规律。你想想看,一个标的今天IV是20%,明天可能因为一个突发事件跳到35%,你的Gamma头寸瞬间就变了味道。
所以,我们需要更高级的工具——随机波动率模型。
10.1 为什么BS模型不够用?
BS模型有个致命缺陷:它假设波动率是固定的。但实际交易中,波动率曲面会扭曲、会倾斜、会微笑。我早年做期权做市商时,吃过这个亏。当时持仓了一堆深度虚值期权,BS模型告诉我Delta对冲后风险很小。结果市场一波动,波动率曲面整个左移,我的Gamma暴露直接翻倍。
说白了,BS模型只能处理「波动率不变」的静态世界。而真实市场是动态的,波动率本身就是一个随机过程。
核心认知: 随机波动率模型的核心思想,就是把波动率也当作一个随机变量来处理。它有自己的均值回复速度、波动率(vol of vol),以及和标的资产的相关性。
10.2 Heston模型:最经典的随机波动率模型
Heston模型是我个人最常用的随机波动率模型之一。它的数学形式是这样的:
dS = μS dt + √v S dW₁
dv = κ(θ - v) dt + σ√v dW₂
dW₁ · dW₂ = ρ dt
解释一下:
- S:标的资产价格
- v:瞬时方差(波动率的平方)
- κ:均值回复速度——波动率偏离长期均值后,回归的速度
- θ:长期方差均值——波动率最终会回到的水平
- σ:波动率的波动率(vol of vol)——波动率本身有多不稳定
- ρ:标的与波动率的相关性——负相关意味着市场下跌时波动率上升(杠杆效应)
我在项目中遇到过一个问题:Heston模型虽然漂亮,但参数校准很麻烦。尤其是ρ和σ这两个参数,它们高度相关,容易导致校准不唯一。我曾经花了两周时间调试一个Heston校准器,最后发现是初始值设得不对。
实战技巧: 校准Heston模型时,我建议先用短期限期权数据锁定κ和θ,再用长期限数据校准ρ和σ。分步校准比一次性全参数校准稳定得多。
10.3 SABR模型:更适合利率和外汇市场
SABR模型是另一个我常用的随机波动率模型。它特别适合处理波动率微笑的形态。公式如下:
dF = αF^β dW₁
dα = να dW₂
dW₁ · dW₂ = ρ dt
参数含义:
- F:远期价格
- α:波动率参数(类似Heston中的√v)
- β:CEV指数——控制波动率与价格的关系(β=0是正态,β=1是对数正态)
- ν:vol of vol
- ρ:相关性
SABR的好处是它有近似解析解,可以快速计算隐含波动率。我记得有一次做利率期权交易,市场波动率曲面出现了明显的「微笑」形态,Heston模型怎么都拟合不好,换成SABR后,几分钟就搞定了。
注意: SABR模型在极端行权价(深度虚值或深度实值)时,可能会出现数值不稳定的情况。我建议在拟合时,对远期限权重的设置要小心,避免过度拟合尾部数据。
10.4 曲面拟合:从模型到实际交易
有了随机波动率模型,下一步就是拟合到实际市场数据。曲面拟合说白了就是:给定一堆期权报价,找到一组参数,让模型输出的波动率曲面最接近市场报价。
我常用的拟合方法:
- 最小二乘法:最直接,但容易过拟合
- 带正则化的优化:加入参数惩罚项,防止参数跑飞
- 分步拟合:先拟合ATM波动率,再拟合倾斜和微笑
这里给个简单的Python代码框架:
import numpy as np
from scipy.optimize import minimize
def heston_price(params, S, K, T, r):
# Heston定价函数(略)
pass
def calibration_error(params, market_prices, S, K, T, r):
model_prices = heston_price(params, S, K, T, r)
return np.sum((model_prices - market_prices)**2)
# 初始参数猜测
initial_params = [0.04, 0.04, 0.5, -0.7, 0.2] # v0, θ, κ, ρ, σ
result = minimize(calibration_error, initial_params,
args=(market_prices, S, K, T, r),
method='L-BFGS-B',
bounds=[(0.01, 0.2), (0.01, 0.2), (0.1, 2), (-0.99, 0.99), (0.01, 0.5)])
个人经验: 拟合时一定要加边界约束。我曾经不加约束,结果vol of vol跑到了0.8,模型直接发散。边界约束就像给模型套上缰绳,让它别乱跑。
10.5 机器学习在曲面预测中的应用
这两年,我开始把机器学习引入曲面预测。为什么?因为随机波动率模型虽然好,但参数校准慢,而且对市场突变反应迟钝。
机器学习能做什么?
- 预测波动率曲面形态:用历史数据训练模型,预测未来5分钟或1小时的曲面变化
- 参数快速校准:用神经网络替代传统优化器,实现毫秒级校准
- 异常检测:识别曲面中的异常点,可能是报价错误或市场操纵
我最近在尝试的一个方法:
# 用LSTM预测波动率曲面
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.LSTM(64, return_sequences=True, input_shape=(lookback, n_features)),
tf.keras.layers.LSTM(32),
tf.keras.layers.Dense(n_tenors * n_strikes) # 输出整个曲面
])
model.compile(optimizer='adam', loss='mse')
# 训练数据:过去N个时间点的曲面数据
# 标签:下一个时间点的曲面数据
说实话,机器学习不是万能药。我踩过不少坑:
- 数据量不够时,模型容易过拟合
- 市场结构变化(比如加息周期)时,历史模式失效
- 模型解释性差,你不知道它为什么这么预测
我的建议: 机器学习做曲面预测,最好作为辅助工具,而不是替代传统模型。我通常的做法是:用ML预测曲面变化方向,再用Heston或SABR做精确校准。两者结合,效果最好。
10.6 知识体系总览
下面这张图,是我整理的本章节知识结构。你可以看到,从BS模型的局限出发,到随机波动率模型,再到曲面拟合和机器学习,是一条完整的技术演进路径。
嗯,以上就是本章的全部内容。随机波动率模型和机器学习,是Gamma交易进阶的必经之路。我个人觉得,Heston和SABR是基本功,必须掌握;机器学习是加分项,能让你在竞争中多一份优势。
最后说一句: 模型再复杂,最终还是要服务于交易决策。别为了用模型而用模型,关键是理解它背后的逻辑,以及它在你的Gamma策略中能解决什么问题。
公众号:蓝海资料掘金营,微信deep3321