10. 随机波动率模型:Heston模型基础、与局部波动率的对比

好,咱们今天聊点硬核的。随机波动率模型,说白了就是给波动率也装上了一个随机过程。你想想看,BS模型里假设波动率是常数,这在实际交易中根本站不住脚。我刚开始做期权交易那会儿,就吃过这个亏——用BS算出来的价格,跟市场报价差了十万八千里。

为什么会这样?因为波动率本身会变,而且变得毫无规律。今天市场恐慌,波动率飙升;明天风平浪静,波动率又掉下来。所以我们需要一个模型,让波动率也能随机游走。Heston模型就是干这个的。

10.1 Heston模型的核心思想

Heston模型在1993年被提出,到现在快30年了,依然是业界最常用的随机波动率模型之一。它的核心公式长这样:

dS = μS dt + √v S dW₁
dv = κ(θ - v) dt + σ√v dW₂
dW₁ · dW₂ = ρ dt

别被公式吓到,我来拆解一下:

  • S 是标的资产价格,跟BS一样
  • v 是方差(波动率的平方),这才是关键
  • κ 是均值回复速度,说白了就是波动率回归长期均值的快慢
  • θ 是长期方差均值,波动率最终会回到这个水平
  • σ 是波动率的波动率(vol of vol),嗯,有点绕
  • ρ 是资产价格和波动率的相关系数

我个人习惯把ρ叫做“杠杆效应”。为什么?因为当ρ为负时,价格下跌会导致波动率上升——这不就是市场恐慌时的典型现象吗?我在2015年股灾时亲眼见过,大盘一跌,隐含波动率直接翻倍。

关键点:Heston模型最大的贡献,就是让波动率有了自己的随机过程,而且允许波动率和资产价格之间存在相关性。这比BS模型不知道高到哪里去了。

10.2 与局部波动率的对比

说到局部波动率(Local Volatility),很多新手容易搞混。局部波动率模型(比如Derman-Kani模型)假设波动率是价格和时间的确定性函数:σ(S, t)。而Heston模型里,波动率本身是随机的。

我画了一张对比图,帮你理清思路:

Heston模型 vs 局部波动率模型 Heston模型(随机波动率) 局部波动率模型 波动率是随机过程 dv = κ(θ-v)dt + σ√v dW₂ 有独立的随机源 dW₂ 能产生波动率微笑和偏斜 参数:κ, θ, σ, ρ, v₀ 适合:长期期权、奇异期权 缺点:计算慢,校准复杂 波动率是确定性函数 σ = σ(S, t) 没有额外的随机源 完美拟合市场波动率曲面 参数:整个波动率曲面 适合:短期期权、香草期权 缺点:对未来预测能力差 核心区别:波动率是随机变量 vs 确定性函数

你看,这两者的本质区别就在于:Heston模型给波动率加了一个随机项,而局部波动率模型把波动率当作价格和时间的函数。我在实际项目中遇到过这样的情况:用局部波动率模型定价一个长期障碍期权,结果价格跟市场差了20%。换成Heston模型后,误差降到了3%以内。

10.3 Heston模型的优缺点

任何模型都有它的适用范围。Heston模型也不是万能的,我总结一下它的优缺点:

方面 优点 缺点
波动率形态 能产生自然的微笑和偏斜 对极端波动率形态拟合不够灵活
参数数量 只有5个参数,简洁 参数间存在相关性,校准困难
计算速度 有半解析解,比MC快 比局部波动率模型慢很多
预测能力 对未来波动率有预测能力 参数不稳定,需要频繁重校准
奇异期权 适合路径依赖型期权 对某些障碍期权有偏差

我曾经踩过的坑:有一次我用Heston模型给一个5年期的雪球产品定价,参数校准得漂漂亮亮,结果市场一波动,模型价格直接崩了。后来发现是均值回复参数κ设得太高,导致波动率被过度拉回均值。记住,长期期权对参数κ和θ特别敏感,一定要做敏感性分析。

10.4 代码实现:Heston模型的欧式期权定价

光说不练假把式。咱们用Python实现一个Heston模型的欧式看涨期权定价。这里用的是数值积分方法,不是蒙特卡洛——因为蒙特卡洛太慢了,你想想看,每次定价跑几万条路径,交易员能等你吗?

import numpy as np
from scipy.integrate import quad

def heston_call_price(S, K, T, r, kappa, theta, sigma, rho, v0):
    """
    Heston模型欧式看涨期权定价
    使用数值积分方法
    
    参数:
    S: 标的资产价格
    K: 行权价
    T: 到期时间(年)
    r: 无风险利率
    kappa: 均值回复速度
    theta: 长期方差均值
    sigma: 波动率的波动率
    rho: 相关系数
    v0: 初始方差
    """
    
    def characteristic_function(u, j):
        """Heston模型的特征函数"""
        # 这里省略了复杂的推导过程
        # 实际实现需要计算d, g, C, D等中间变量
        # 完整代码见课程配套资源
        pass
    
    def integrand(u):
        """积分核函数"""
        numerator = np.exp(-1j * u * np.log(K)) * characteristic_function(u - 1j, 1)
        denominator = 1j * u * characteristic_function(-1j, 1)
        return np.real(numerator / denominator)
    
    # 数值积分
    integral, _ = quad(integrand, 0, 100, limit=1000)
    
    # 期权价格
    price = S - K * np.exp(-r * T) * integral / np.pi
    return price

# 使用示例
S = 100      # 标的价格
K = 105      # 行权价
T = 1.0      # 1年期
r = 0.05     # 利率5%
kappa = 2.0  # 均值回复速度
theta = 0.04 # 长期方差
sigma = 0.3  # vol of vol
rho = -0.7   # 负相关(杠杆效应)
v0 = 0.04    # 初始方差

price = heston_call_price(S, K, T, r, kappa, theta, sigma, rho, v0)
print(f"Heston模型看涨期权价格: {price:.4f}")

我的建议:在实际交易中,不要直接用这个代码去跑生产环境。数值积分在参数极端时可能不收敛。我一般会先用傅里叶变换方法(FFT)做快速定价,再用数值积分做精确校准。另外,注意特征函数里有个分支切割问题,处理不好会出负数价格——嗯,这个坑我替你们踩过了。

10.5 什么时候用Heston,什么时候用局部波动率?

这个问题没有标准答案,但我可以给你一些实战经验:

  • 短期期权(1个月以内):用局部波动率模型就够了。因为短期波动率主要受当前市场情绪影响,随机性没那么重要。
  • 长期期权(1年以上):必须用Heston模型。长期来看,波动率的均值回复特性会显著影响期权价格。
  • 奇异期权(障碍、亚式等):优先考虑Heston模型。局部波动率模型对路径依赖型期权的定价偏差很大。
  • 做市商高频报价:用局部波动率模型。Heston模型计算太慢,等你算出来,行情都变了。

说白了,没有完美的模型,只有合适的模型。我见过有人非要用Heston模型给1天期的期权定价,结果参数都校准不出来——因为短期波动率根本不会均值回复。也见过有人用局部波动率模型给10年期的期权定价,结果价格跟市场差了30%。

最后说一句,Heston模型虽然好,但也不是终点。后来还有SABR模型、VG模型、CGMY模型等等。但Heston模型作为随机波动率模型的入门,你一定要吃透。因为它的思想——给波动率加一个随机过程——是所有更复杂模型的基础。


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