第九章 随机波动率模型:Heston模型、SABR模型简介与参数校准
聊到波动率微笑,咱们得面对一个现实——BS模型假设波动率是常数,这在实际市场中根本站不住脚。我刚开始做期权交易那会儿,就吃过这个亏。当时用BS模型算出来的价格,跟市场报价差了老远,怎么调都不对劲。
后来我才明白,波动率本身也是随机的。这就引出了我们今天要聊的两个经典模型:Heston模型和SABR模型。说白了,它们就是给波动率也装上了随机引擎,让它能跟着市场一起跳舞。
9.1 为什么需要随机波动率模型?
先说说BS模型的硬伤。它假设波动率是固定的,但实际市场里,波动率会随着标的价格、时间变化而变化。你想想看,市场恐慌的时候,波动率会飙升;市场平静的时候,波动率又会回落。
我印象很深的一次,2018年2月VIX指数突然暴涨,很多用BS模型做对冲的机构直接爆仓。为什么?因为BS模型根本没考虑波动率本身的风险。
随机波动率模型的核心思想就是:波动率本身也是一个随机过程。它有自己的均值回归特性,有自己的波动率(没错,波动率的波动率)。
核心要点:随机波动率模型能更好地拟合市场波动率微笑形态,尤其适用于长期期权和深度价外期权的定价。
9.2 Heston模型:最经典的随机波动率模型
Heston模型是1993年由Steven Heston提出的。它假设标的资产价格和波动率都服从随机过程,而且两者之间存在相关性。
模型公式长这样:
dS = μS dt + √v S dW₁
dv = κ(θ - v) dt + σ√v dW₂
dW₁ · dW₂ = ρ dt
解释一下这些参数:
- S:标的资产价格
- v:方差(波动率的平方)
- κ:均值回归速度——波动率回到长期均值的快慢
- θ:长期方差均值——波动率长期会回到的位置
- σ:波动率的波动率——方差本身的波动程度
- ρ:价格与波动率的相关系数——这是关键
我个人习惯把ρ叫做"杠杆效应参数"。为什么?因为当ρ为负时,价格下跌会导致波动率上升,这就是典型的杠杆效应。我在做美股期权时,发现标普500期权的ρ通常在-0.7到-0.5之间。
实战技巧:Heston模型有一个解析解,可以用特征函数快速计算期权价格。但要注意,当Feller条件(2κθ > σ²)不满足时,方差可能变成负数,这在数值计算中需要特殊处理。
9.3 SABR模型:更简洁的随机波动率模型
SABR模型是2002年由Hagan等人提出的。它比Heston模型更简洁,特别适合处理利率衍生品和外汇期权。
SABR的公式:
dF = αF^β dW₁
dα = να dW₂
dW₁ · dW₂ = ρ dt
参数含义:
- F:远期价格
- α:波动率参数
- β:弹性参数——决定模型是正态(β=0)、对数正态(β=1)还是中间状态
- ν:波动率的波动率
- ρ:相关系数
嗯,这里要注意一点。SABR模型没有均值回归项,所以它更适合短期期权。我曾在做欧元兑美元期权时用过SABR,效果不错,但超过1年期的合约就开始偏离市场了。
避坑指南:我曾经在SABR模型校准中遇到过"参数爆炸"的问题——ν和ρ同时变得很大,模型完全失效。后来发现是数据质量有问题,有些深度价外期权的报价本身就不合理。所以,数据清洗是校准的第一步。
9.4 参数校准:从理论到实战
模型再好,参数不对也是白搭。参数校准说白了就是:找到一组参数,让模型价格尽可能接近市场价格。
我常用的校准方法有两种:
- 最小二乘法:最小化模型价格与市场价格的平方差
- 隐含波动率匹配:最小化模型隐含波动率与市场隐含波动率的差异
我个人更推荐第二种。为什么?因为市场价格本身可能有套利空间,直接拟合价格容易过拟合。而隐含波动率更平滑,校准结果也更稳定。
下面是一个简单的Heston模型校准代码框架:
import numpy as np
from scipy.optimize import minimize
def heston_price(params, S, K, T, r, market_prices):
"""Heston模型定价函数"""
v0, κ, θ, σ, ρ = params
# 这里用特征函数法计算价格
# ... 省略具体实现
return model_prices
def calibration_error(params, S, K, T, r, market_prices):
"""校准误差函数"""
model_prices = heston_price(params, S, K, T, r, market_prices)
return np.sum((model_prices - market_prices) ** 2)
# 初始参数猜测
initial_params = [0.04, 2.0, 0.04, 0.3, -0.7]
# 参数边界
bounds = [(0.001, 1.0), (0.1, 10.0), (0.001, 1.0), (0.01, 1.0), (-0.99, 0.99)]
result = minimize(calibration_error, initial_params,
args=(S, K, T, r, market_prices),
bounds=bounds, method='L-BFGS-B')
校准小技巧:我建议先用SABR模型快速校准,得到一组初始参数,再用Heston模型做精细校准。这样能大大减少计算时间。另外,每次校准后都要检查参数的经济学意义——比如κ应该在1-5之间,ρ应该在-0.9到-0.3之间。
9.5 两个模型的对比与选择
| 特性 | Heston模型 | SABR模型 |
|---|---|---|
| 均值回归 | 有 | 无 |
| 解析解 | 有(特征函数) | 有(近似解) |
| 适用期限 | 长期更优 | 短期更优 |
| 参数数量 | 5个 | 4个 |
| 校准难度 | 中等 | 较容易 |
| 常见应用 | 股票、股指期权 | 利率、外汇期权 |
怎么选?我的经验是:
- 做股票期权,尤其是长期合约,优先用Heston
- 做利率衍生品或外汇期权,SABR更顺手
- 如果数据稀疏(比如只有几个行权价),SABR更稳健
- 如果要做风险管理,Heston的均值回归特性更有优势
9.6 知识体系总览
下面这张图是我自己整理的随机波动率模型知识框架,帮你快速理清思路:
这张图把Heston和SABR的核心参数、特点、适用场景以及校准方法都串起来了。你想想看,有了这个框架,是不是对随机波动率模型的理解更清晰了?
最后说一句:模型只是工具,关键还是理解市场。我见过太多人沉迷于参数校准的数学细节,却忽略了市场微观结构。记住,好的模型是简单且稳健的,而不是复杂且脆弱的。