python 波动率锥_期权波动率“微笑曲线”之谜

“波动率微笑”即具有相同到期日和标的资产而执行价格不同的期权,其行权价格偏离标的资产价格越远,隐含波动率越大。

波动率通常是用来描述股票、期货等资产价格变化有多剧烈的一个统计指标。在期权交易中,有两类波动率比较重要:

一是历史波动率,它是基于对标的资产在过去历史行情中价格变化的统计计算得出的,也就是基于对其价格变化标准差的计算。

在真格量化中可以通过GetVolatility函数计算标的的历史波动率。

二是隐含波动率,它是期权市场对标的资产在期权存续期内波动率的“定价”。一般由一系列估算的波动率代入期权定价公式计算出的价格与期权市场价格对比,通过持续迭代逼近求出。

在真格量化中,可以通过GetImpliedVolatility函数进行计算。

由于在期权交易中受市场买卖意愿不断变化的影响,隐含波动率与历史波动率必然会有所差异。比如,某一月份的期货只有一个历史波动率,但其期权隐含波动率却很多,而不同执行价格的看涨期权、看跌期权的隐含波动率也不尽相同。我们可以认为期权定价模型中唯一的真正变量就是波动率,其他所有参量,包括标的资产的价格、期权的执行价格、期权到期剩余天数、现有的利率水平,在计算某一只期权合约的理论价值时都是固定的。

从这个角度讲,抛开定价模型本身的优劣程度,计算出的理论价格准确性取决于所有输入参量的精确程度。甚至可以说,做期权交易就是做波动率的交易。虽然历史波动率和隐含波动率都可以用来帮助交易者预测未来的波动率,但在实际交易中,隐含波动率更受交易者重视,因为其更直接地显示了某个期权合约“定价的高低”。

在实证研究中,通过传统BS期权定价模型计算出来的隐含波动率呈现出一种被称为“波动率微笑”的现象,即具有相同到期日和标的资产而执行价格不同的期权,这些期权的执行价格偏离标的资产现货价格越远,其隐含波动率越大。Rubinstein(1985年)在综合了BS期权定价模型的各种异常情况下,提出了波动率“微笑”具有期限结构,即波动率“微笑效应”以某种系统的方式依赖于期权的到期期限,且这种“微笑效应”在短期期权中比长期期权更加明显。

对于这种隐含波动率的“微笑“曲线特质,研究上给出了很多种解释,大体可以分为两类:一类是从传统BS期权定价公式基本前提假设条件中的设定与现实相比的不合理之处进行的解释;另一类则是从市场交易机制层面进行的解释。

对于传统BS期权定价公式中基本设定不合理之处的解释主要有四种理论:

1.资产价格非正态分布说

这种理论认为,标准BS模型假定标的资产价格服从对数正态分布,收益率服从正态分布。但是大量实证检验发现,现实市场中,金融资产的收益率分布更加显示出尖峰肥尾的特征。这种分布下,收益率出现极端值的概率高于正态分布,而在公式中采用收益率正态分布的前提假设,会低估了到期时期权价值变为实值与虚值出现的概率,相应也低估了深度实值和深度虚值期权的价格。

2.资产价格跳跃过程说

BS模型采用的是风险中性定价,并假设资产价格服从带漂移项的布朗过程,忽略了现实市场上资产价格在一定冲击下发生跳跃的可能。例如价格在期权临近到期前发生跳跃,且空方根据变化后的价格调整标的资产头寸并持有到期,到期时复制组合与期权价值将可能出现较大偏差,使得期权空方面临额外风险。这种风险无法分散化,空方必须要求相应补偿,造成期权市场价格对理论价格的溢价。

3.Gamma风险和Vega风险说

期权空方的Delta套期保值中还面临Gamma风险和Vega风险。Gamma是期权价格对标定资产价格的二阶导数,Gamma越大,Delta对标的资产价格的变动越敏感,复制组合价值越容易偏离理论期权价值。期权空方因交易成本无法连续调整标定资产头寸时,Gamma风险也就不可避免。Vega是期权价格对标的资产波动率的一阶导数。标的资产的实际波动率并非BS模型假设的常数,而是一个随机变量。当市场其他条件不变时,Vega越大,期权理论价值越容易发生变化,复制组合的价值也越容易与其发生偏离,导致Vega风险。Gamma风险和Vega风险均可通过引入同种标的资产、相同执行价格但期限较短的期权来进行套期保值,因组合中增加了新的期权,还需要相应重新调整标的资产头寸。这都增加了期权空方的Delta套期保值成本。

4.标的资产价格预期说

隐含波动率的“微笑”现象与市场对标的资产未来价格走势的预期有关。假定某标的资产的当前价格为S0,市场预期将很快下跌至S1。此时任何执行价格下的看跌期权价格均上升,看涨期权价格均下降。其中执行价格在S1到S0之间的看跌期权因将从虚值转为实值,期权卖方面临的风险将更大,Delta套期保值的成本更高,价格上升最多。同理,执行价格在S1到S0之间的看涨期权因将从实值转为虚值,价格下跌最多。可见,在当前资产价格尚未发生变动的条件下,虚值看跌期权的隐含波动率上升幅度大于实值看跌期权,实值看涨期权的隐含波动率下降幅度大于虚值看涨期权,体现在波动率“微笑”曲线上,均表现为曲线的左半部分高于右半部分。

从市场交易机制进行的解释也有四种理论:

1.期权市场溢价说

从理论上来看,期权从平值状态变为实值状态和虚值状态的概率应该基本相同,并且在平值状态时其时间价值最大。深度实值期权的Delta接近1,在投资中的杠杆作用最大,相应市场需求量很大。但是除非投资者预期标定资产的价格会有一个根本性的变动,一般不会出售深度实值期权,因此,供给量较小。溢价期权、折价期权分别处于实值和虚值状态,其带给投资者未来较大收益的可能性比平值期权要小,其时间价值也会比平值期权小。深度实值期权的溢价较高,其隐含波动率也较高。对相同执行价格的看涨期权和看跌期权,当一个处于深度实值状态时,另一个必然处于深度虚值状态。根据看涨看跌平价关系,这两个期权的波动率应当大致相同。可见,实值看涨期权的溢价也会造成虚值看跌期权的溢价,造成隐含波动率的“微笑”。

2.标的资产和期权交易成本说

标定资产的交易成本是期权空方Delta套期保值额外成本的重要来源之一。在保值成本增加相同的条件下,深度实值和深度虚值期权的隐含波动率增加更多,呈现出隐含波动率“微笑”曲线。期权本身也存在交易成本。深度实值和深度虚值期权的流动性较差,交易成本也较大,这个效应通过期权的Gamma风险保值,可引发波动率“微笑”。平价期权的Gamma风险最大,如只用标的资产保值,其头寸调整最为频繁,引致的额外成本最大。但是另外两个效应减轻了这个影响:第一,平价期权的Gamma随时间单调衰减的速度非常快,即Gamma风险下降的速度很快;第二,平价期权可利用短期平价期权保值,后者的交易成本相对较低。相比之下,短期深度实值和深度虚值期权的交易成本较高,深度实值和深度虚值期权更倾向于频繁调整标定资产头寸,受标的资产交易成本的影响更大。可见,交易成本对较长期深度实值和深度虚值期权的影响是双重的,大于对平价期权的影响。

3.交易成本不对称说

做市商机制下有可能出现买卖价差的不对称。市场上买方力量较强时,做市商在卖出上收取较多佣金,在买入时收取较少佣金,真实的资产价格将更接近买入价而非买入卖出的中间价。卖方力量较强时正好相反。作为一种保值工具,期权市场需求通常大于市场供给,在做市商的作用下,更易出现买卖价差的不对称,且其真实价格更接近买入价。实证研究中多采用中间价,高估了期权价格,也高估了隐含波动率。对深度实值和深度虚值期权,因其买卖差价更大,中间价对实际价格的高估更多。

4.报价机制和价格误差说

资产的实际价格是连续变动的,但在市场交易中标的资产、期权和无风险利率都存在报价的最小间距,造成实际价格与报价之间存在误差。资产的真实价格应在当前报价水平上加上或减去一个微小的差价。此外,标的资产与期权报价间的不同步、当前指数价格或者成分股当前价格的不同步等也会影响期权价格的准确性。

— — — — — — E N D — — — — — —

往期文章:

真格量化可访问:

真格量化微信公众号,长按关注:

遇到了技术问题?欢迎加入真格量化Python技术交流QQ群 726895887

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算波动微笑曲线的方法一般是先使用市场上的期权价格反推出各个行权价对应的波动,然后将波动与行权价的关系绘制成图形。以下是一个简单的Python实现,使用了scipy.optimize.minimize函数来解出每个行权价对应的波动: ```python import numpy as np from scipy.stats import norm from scipy.optimize import minimize import matplotlib.pyplot as plt def bs_option_price(S, K, r, q, sigma, T, option_type): d1 = (np.log(S/K) + (r - q + sigma**2/2) * T) / (sigma * np.sqrt(T)) d2 = d1 - sigma * np.sqrt(T) if option_type == 'call': Nd1 = norm.cdf(d1) Nd2 = norm.cdf(d2) option_price = S * np.exp(-q * T) * Nd1 - K * np.exp(-r * T) * Nd2 elif option_type == 'put': Nd1 = norm.cdf(-d1) Nd2 = norm.cdf(-d2) option_price = K * np.exp(-r * T) * (1 - Nd2) - S * np.exp(-q * T) * (1 - Nd1) else: raise ValueError('Invalid option type') return option_price def implied_volatility(S, K, r, q, T, option_price, option_type): obj_fun = lambda sigma: (bs_option_price(S, K, r, q, sigma, T, option_type) - option_price)**2 res = minimize(obj_fun, x0=0.2) return res.x[0] def smile_curve(S, r, q, T, option_type, strike_range, option_prices): vols = [] for K, option_price in zip(strike_range, option_prices): vol = implied_volatility(S, K, r, q, T, option_price, option_type) vols.append(vol) plt.plot(strike_range, vols) plt.xlabel('Strike') plt.ylabel('Implied Volatility') plt.title(f'{option_type.capitalize()} Implied Volatility Smile') plt.show() S = 100 r = 0.05 q = 0.02 T = 0.25 option_type = 'call' strike_range = np.linspace(80, 120, 41) option_prices = [13.05, 10.40, 7.93, 5.75, 4.00, 2.66, 1.68, 1.02, 0.58, 0.31, 0.15, 0.07, 0.03, 0.01, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.01, 0.03, 0.07, 0.14, 0.25, 0.42, 0.67, 1.00, 1.44, 2.02, 2.74, 3.60, 4.60, 5.73, 7.00, 8.39, 9.92, 11.57, 13.34, 15.24] smile_curve(S, r, q, T, option_type, strike_range, option_prices) ``` 该代码首先定义了两个函数,bs_option_price用于计算期权价格,implied_volatility用于根据期权价格解出对应的波动。然后,使用np.linspace函数生成一组行权价,再根据这些行权价和市场上观察到的期权价格,使用implied_volatility函数求出对应的波动。最后,使用plt.plot函数将波动与行权价的关系绘制成图像。 上述代码中使用的是调整后的BS公式,而实际操作中可能会使用带有波动哑变量的公式,例如Black-Scholes模型或Heston模型。此外,算法的可靠性也需要进一步考虑,例如如何处理有多个期权价格的情况,如何处理异常值等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值