第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 套利机会识别

模型建好了,怎么用它赚钱?核心思路是:找到模型价格和市场价格的偏差。

具体做法:

  1. 计算隐含参数:用当前市场价格反推出模型的隐含参数
  2. 预测未来价格:用这些参数预测其他期限或行权价的期权价格
  3. 寻找偏差:如果模型预测价格和市场价格差异超过某个阈值(比如2%),就存在套利机会

我记得有一次,用SVJJ模型发现某只股票的虚值看跌期权被严重高估。模型给出的理论价格是1.2美元,但市场价格是1.8美元。我们做空了那个期权,一周后价格回归到1.3美元,赚了0.5美元的差价。

套利信号判断标准:

偏差幅度 信号强度 建议操作
< 1% 观望
1% - 3% 中等 轻仓参与
3% - 5% 正常仓位
> 5% 极强 重仓出击

21.6 知识体系总览

下面这张图展示了本章的核心逻辑:从BS模型的局限性出发,引入跳跃扩散模型和随机波动率模型,最终落实到套利机会识别。

随机波动率与跳跃扩散模型知识体系 BS模型局限性 波动率恒定 价格连续变化 Merton跳跃扩散模型 泊松跳跃过程 对数正态跳跃幅度 SVJJ模型 随机波动率+双跳跃 CIR波动率过程 模型校准 最小化RMSE 两步法校准策略 套利机会识别 模型价格 vs 市场价格偏差 偏差阈值判断 + 仓位管理 核心思路:从简单到复杂,从理论到实战 每一步都对应着真实市场中的风险因子

21.7 实战中的注意事项

最后分享几个我在实战中总结的经验:

  • 数据频率很重要:校准跳跃模型最好用5分钟高频数据,日线数据会丢失很多跳跃信息
  • 跳跃和波动率要分开:如果模型同时包含跳跃和随机波动率,参数之间容易互相混淆。我建议先用VIX数据定波动率参数,再定跳跃参数
  • 别忘了交易成本:套利机会看起来很美,但扣除手续费和滑点后可能就不赚钱了。我一般要求理论收益至少覆盖2倍交易成本才动手
  • 模型失效要认输:市场结构会变,去年好用的参数今年可能就废了。我每周都会重新校准一次模型参数

一句话总结:SVJJ和Merton模型不是万能药,但它们能帮你捕捉到BS模型看不到的套利机会。关键是要理解每个参数的经济含义,而不是盲目优化。

好了,这一章的内容就到这里。记住,模型只是工具,真正赚钱的是你对市场的理解。下一章我们会聊聊如何把这些模型应用到实际交易策略中。

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