问题描述
有大佬知道,不使用BS模型倒推来计算IV有什么方法吗?谢谢大佬们
解决方案
在期权量化交易中,Black-Scholes (BS) 模型倒推是计算隐含波动率(IV)最经典的方法。然而,BS模型存在一些严格的假设(如波动率恒定、标的资产服从几何布朗运动、仅限欧式期权等),这在实际市场中往往不成立(例如波动率微笑现象)。
如果不使用BS模型倒推,业界和学术界还有以下几种主流的计算或估算期权隐含波动率的方法:
1. 无模型隐含波动率 (Model-Free Implied Volatility, MFIV)
这是目前最著名且应用最广的非BS模型方法,CBOE的VIX指数就是基于此方法计算的。
- 原理:MFIV 不依赖于任何特定的期权定价模型。它基于方差互换(Variance Swap)的复制原理,利用同一到期日、一系列不同行权价的虚值看涨和看跌期权的市场价格,通过积分计算出预期方差,再开根号得到隐含波动率。
- 优点:不需要假设标的资产的价格服从何种分布,能够捕捉到波动率偏斜和跳跃风险,更真实地反映市场对未来波动的预期。
- 适用场景:计算整个市场或某个标的在特定期限内的综合隐含波动率水平。
2. 二叉树模型 (Binomial Tree) 倒推
BS模型主要针对欧式期权,而国内的商品期权大多是美式期权(可以在到期前任意时间行权)。
- 原理:对于美式期权,使用BS模型倒推会产生误差(因为忽略了提前行权的溢价)。此时可以使用二叉树模型(如CRR模型)来正向定价,然后结合市场价格,使用数值求根算法(如二分法、牛顿-拉夫逊法、Brent法)反推出IV。
- 优点:完美适配美式期权的特性,考虑了提前行权价值。
- 缺点:计算量大,耗时较长。
3. Bjerksund-Stensland (B-S) 近似模型
- 原理:这是另一种专门针对美式期权定价的解析近似模型。它将美式期权的提前行权边界分为两个阶段进行近似。
- 优点:计算速度远快于二叉树模型,同时精度非常高。在实际的商品期权做市商系统中,经常使用Bjerksund-Stensland模型结合牛顿迭代法来倒推美式期权的IV。
4. 机器学习与神经网络
- 原理:将期权定价视为一个黑盒。利用大量的历史期权数据,将标的价格、行权价、剩余到期时间、无风险利率以及期权市场价格作为输入特征,将真实的IV(或者未来实际波动率)作为标签,训练一个深度神经网络(DNN)或随机森林模型。
- 优点:计算速度极快(模型训练好后,推理只需一次前向传播),且可以隐式地学习到市场的微观结构和摩擦成本。
在 JoinQuant 平台上的实现思路
在 JoinQuant 平台上,你可以获取期权行情数据,并利用 Python 强大的科学计算库(如 scipy, numpy)来实现上述算法。
以计算无模型隐含波动率 (MFIV / VIX算法) 为例的简要思路:
import numpy as np
import pandas as pd
from jqdata import *
def calculate_mfiv(current_date, underlying_symbol, expire_date):
# 1. 获取特定到期日的所有期权合约
# 注意:这里需要根据JoinQuant API获取期权合约列表
# options_list = get_options_by_expire_date(underlying_symbol, expire_date)
# 2. 获取这些期权在 current_date 的收盘价或盘口中间价
# prices = get_price(options_list, end_date=current_date, count=1, fields=['close'])
# 3. 筛选出虚值期权 (OTM)
# 找到平值期权(ATM)的行权价 K0
# 对于 K < K0,使用看跌期权(Put)价格
# 对于 K > K0,使用看涨期权(Call)价格
# 对于 K = K0,使用 Call 和 Put 价格的平均值
# 4. 应用 VIX 积分公式
# Variance = (2 / T) * sum( (delta_K / K^2) * e^(R*T) * Q(K) ) - (1 / T) * (F / K0 - 1)^2
# 其中 Q(K) 是期权价格,T 是年化剩余期限,R 是无风险利率
# 5. IV = sqrt(Variance)
pass
总结:
如果你交易的是欧式期权(如50ETF期权),且不想用BS,可以尝试计算 MFIV 来获取整体波动率曲面的信息。
如果你交易的是美式期权(如大多数商品期权),强烈建议使用 二叉树模型 或 Bjerksund-Stensland模型 配合数值求根法来倒推,这比BS模型准确得多。