第21章:随机波动率与跳跃扩散模型
做期权交易这么多年,我越来越觉得,光靠BS模型那套假设,在实盘中根本不够用。你想想看,真实市场里波动率会变,价格还会突然跳,这些BS模型都处理不了。今天我们就来聊聊怎么用SVJJ模型和Merton跳跃扩散模型,把这些「异常」给量化出来。
21.1 为什么需要跳跃扩散模型?
先说说我个人的经历。2018年有一次做美股期权,VIX指数突然飙升,标普500在几分钟内暴跌了3%。我当时持仓的价差组合瞬间从盈利变成亏损。事后复盘,我发现BS模型完全没捕捉到这种「跳跃」风险。
BS模型假设价格是连续变化的,但现实不是这样。突发事件、财报发布、央行决议,这些都会让价格「跳」一下。说白了,BS模型只能处理「正常波动」,遇到「异常波动」就抓瞎了。
核心问题:BS模型假设波动率恒定,价格路径连续。但真实市场存在波动率聚集效应和跳跃风险。我们需要更复杂的模型来捕捉这些特征。
21.2 Merton跳跃扩散模型
Merton在1976年提出了跳跃扩散模型,算是这个领域的开山之作。它的核心思路很简单:价格变化 = 正常扩散 + 偶尔跳跃。
数学上,它长这样:
dS/S = (μ - λκ)dt + σdW + (J-1)dN
其中:
- dW:标准布朗运动,代表正常波动
- dN:泊松过程,代表跳跃事件
- J:跳跃幅度,通常假设服从对数正态分布
- λ:跳跃强度,即单位时间内跳跃的平均次数
- κ:跳跃幅度的期望值
我在项目中遇到过一个问题:用Merton模型校准标普500期权时,发现跳跃强度λ的估计值很不稳定。后来我意识到,这是因为样本区间选择不同导致的。建议你用至少3年的数据来做校准,太短的数据会让参数飘忽不定。
实用技巧:Merton模型对短期期权(1个月以内)的定价效果最好。因为短期期权更容易受到跳跃风险的影响。对于长期期权,跳跃的影响会被时间平滑掉。
21.3 SVJJ模型:随机波动率+跳跃
Merton模型有个问题:它假设波动率是常数。但真实市场里,波动率本身也在变。SVJJ模型(Stochastic Volatility with Jumps in both Price and Volatility)把这两者都考虑进去了。
SVJJ模型的数学形式:
dS/S = (r - λκ)dt + √V dW_s + J_s dN_s
dV = κ(θ - V)dt + σ_v √V dW_v + J_v dN_v
这里:
- V:随机波动率,用CIR过程描述
- dW_s, dW_v:两个相关的布朗运动
- J_s, J_v:价格和波动率的跳跃幅度
- N_s, N_v:价格和波动率的跳跃过程
嗯,这里要注意:SVJJ模型有7-8个参数,校准起来相当麻烦。我建议你先用Merton模型跑一遍,把跳跃参数定下来,再引入随机波动率部分。一步到位容易过拟合。
避坑指南:我曾经在SVJJ模型校准中犯过一个错误——同时校准所有参数,结果得到了一个在样本内拟合很好、但样本外完全失效的模型。后来我改用两步法:先校准波动率参数(用VIX期货数据),再校准跳跃参数(用期权数据)。效果好了很多。
21.4 模型校准实战
校准说白了就是找一组参数,让模型价格尽量接近市场价格。常用的方法是最小化均方根误差(RMSE)。
下面是一个简单的校准框架:
# 伪代码:Merton模型校准
def merton_calibration(market_prices, strikes, maturities):
# 目标函数:模型价格与市场价格的误差
def objective(params):
sigma, lambda_, mu_j, sigma_j = params
model_prices = []
for K, T in zip(strikes, maturities):
price = merton_price(S, K, T, r, sigma, lambda_, mu_j, sigma_j)
model_prices.append(price)
return np.sqrt(np.mean((np.array(model_prices) - market_prices)**2))
# 初始参数猜测
initial_guess = [0.2, 0.5, -0.05, 0.1]
# 参数边界
bounds = [(0.01, 1.0), (0.01, 5.0), (-0.5, 0.5), (0.01, 0.5)]
result = minimize(objective, initial_guess, bounds=bounds, method='L-BFGS-B')
return result.x
你想想看,校准过程中最怕什么?局部最优。我建议你用全局优化算法(比如差分进化)先跑一遍,再用局部优化精调。这样能避免掉进坑里。
21.5 套利机会识别
模型建好了,怎么用它赚钱?核心思路是:找到模型价格和市场价格的偏差。
具体做法:
- 计算隐含参数:用当前市场价格反推出模型的隐含参数
- 预测未来价格:用这些参数预测其他期限或行权价的期权价格
- 寻找偏差:如果模型预测价格和市场价格差异超过某个阈值(比如2%),就存在套利机会
我记得有一次,用SVJJ模型发现某只股票的虚值看跌期权被严重高估。模型给出的理论价格是1.2美元,但市场价格是1.8美元。我们做空了那个期权,一周后价格回归到1.3美元,赚了0.5美元的差价。
套利信号判断标准:
| 偏差幅度 | 信号强度 | 建议操作 |
|---|---|---|
| < 1% | 弱 | 观望 |
| 1% - 3% | 中等 | 轻仓参与 |
| 3% - 5% | 强 | 正常仓位 |
| > 5% | 极强 | 重仓出击 |
21.6 知识体系总览
下面这张图展示了本章的核心逻辑:从BS模型的局限性出发,引入跳跃扩散模型和随机波动率模型,最终落实到套利机会识别。
21.7 实战中的注意事项
最后分享几个我在实战中总结的经验:
- 数据频率很重要:校准跳跃模型最好用5分钟高频数据,日线数据会丢失很多跳跃信息
- 跳跃和波动率要分开:如果模型同时包含跳跃和随机波动率,参数之间容易互相混淆。我建议先用VIX数据定波动率参数,再定跳跃参数
- 别忘了交易成本:套利机会看起来很美,但扣除手续费和滑点后可能就不赚钱了。我一般要求理论收益至少覆盖2倍交易成本才动手
- 模型失效要认输:市场结构会变,去年好用的参数今年可能就废了。我每周都会重新校准一次模型参数
一句话总结:SVJJ和Merton模型不是万能药,但它们能帮你捕捉到BS模型看不到的套利机会。关键是要理解每个参数的经济含义,而不是盲目优化。
好了,这一章的内容就到这里。记住,模型只是工具,真正赚钱的是你对市场的理解。下一章我们会聊聊如何把这些模型应用到实际交易策略中。