隐含波动率的计算

  通过BS公式无法反解出隐含波动率,常用的求解方法有牛顿迭代法和二分法。

牛顿迭代法

  主要思路是,先设定一个初始波动率值,比如20%;然后建立一种迭代关系:如果由初始波动率值得到的期权价格高于市场价格,那么初始波动率减少一定的量(因为期权价格与波动率成正比),反之增加,如此迭代;直到计算出的期权价格越来越逼近市场真实价格,可设置一个阈值,比如二者之差的绝对值小于一个基点就认为它们相等。

  假设某一期权的S、K、r、σ和t分别为5.29,6,0.04,0.24和0.5,看涨期权的市场价格为0.1566,看跌期权的市场价格为0.7503,求解这两种期权的隐含波动率。

from scipy.stats import norm
import numpy as np
def bscall(S,K,r,sigma,t):d1=(np.log(S/K)+(r+0.5*sigma**2)*t)/(sigma*np.sqrt(t))d2=d1-sigma*np.sqrt(t)return S*norm.cdf(d1)-K*np.exp(-r*t)*norm.cdf(d2)
def bsput(S,K,r,sigma,t):d1=(np.log(S/K)+(r+0.5*sigma**2)*t)/(sigma*np.sqrt(t))d2=d1-sigma*np.sqrt(t)return -S*norm.cdf(-d1)+K*np.exp(-r*t)*norm.cdf(-d2)def newton_call(P,S,K,r,t):sigma=0.2while abs(bscall(S,K,r,sigma,t)-P)>0.0001:if bscall(S,K,r,sigma,t)>P:sigma-=0.0001else:sigma+=0.0001return sigma
def newton_put(P,S,K,r,t):sigma=0.2while abs(bsput(S,K,r,sigma,t)-P)>0.0001:if bsput(S,K,r,sigma,t)>P:sigma-=0.0001else:sigma+=0.0001return sigma
print('看涨期权隐含波动率为{:.4f}\n看跌期权隐含波动率为{:.4f}'.format(newton_call(0.1566,5.29,6,0.04,0.5),newton_put(0.7503,5.29,6,0.04,0.5)))看涨期权隐含波动率为0.2426
看跌期权隐含波动率为0.2446

二分法

  二分法的计算效率要比牛顿迭代法快一倍,因为二分法是折半迭代。其基本思路是设定波动率的初始最小值和最大值,以及居中值,形成两个区间;然后都代入BS公式看市场价格位于哪个区间内;之后该区间再折半,如此往复,最终求出的居中波动率值就是隐含波动率。

def binary_call(P,S,K,r,t):sigma_up=1sigma_down=0.001sigma_mid=(sigma_up+sigma_down)/2while abs(bscall(S,K,r,sigma_mid,t)-P)>0.0001:if bscall(S,K,r,sigma_down,t)<P<bscall(S,K,r,sigma_mid,t):sigma_up=sigma_midsigma_mid=(sigma_mid+sigma_down)/2elif bscall(S,K,r,sigma_up,t)>P>bscall(S,K,r,sigma_mid,t):sigma_down=sigma_midsigma_mid=(sigma_up+sigma_down)/2else:print('error!')breakreturn sigma_mid
def binary_put(P,S,K,r,t):sigma_up=1sigma_down=0.001sigma_mid=(sigma_up+sigma_down)/2while abs(bsput(S,K,r,sigma_mid,t)-P)>0.0001:if bsput(S,K,r,sigma_down,t)<P<bsput(S,K,r,sigma_mid,t):sigma_up=sigma_midsigma_mid=(sigma_mid+sigma_down)/2elif bsput(S,K,r,sigma_up,t)>P>bsput(S,K,r,sigma_mid,t):sigma_down=sigma_midsigma_mid=(sigma_up+sigma_down)/2else:print('error!')breakreturn sigma_mid
print('看涨期权隐含波动率为{:.4f}\n看跌期权隐含波动率为{:.4f}'.format(binary_call(0.1566,5.29,6,0.04,0.5),binary_put(0.7503,5.29,6,0.04,0.5)))看涨期权隐含波动率为0.2427
看跌期权隐含波动率为0.2447

  可以发现两种方法计算出的结果差别非常小,但是二分法的效率更高。

波动率微笑和波动率偏斜

  波动率微笑(smile)描述了期权隐含波动率和执行价格之间的关系,即在其他条件相同的情况下,期权的隐含波动率在平值点附近最小,在虚值和实值区域更大;若隐含波动率在低执行价格区域高于高执行价格区域(即单调递减),那么就称为波动率偏斜(skew),对于股票期权来说这种情况更常见。

  以2018年6月27日到期的、不同执行价格的上证50ETF期权合约在2017年12月29日的收盘价数据为研究对象,看涨看跌期权各有7支。当天50ETF的净值为2.859元,无风险利率为六个月的shibor,当天为4.8823%。7支执行价格从2.7元至3元的看涨期权收盘价分别为0.2841,0.2486,0.2139,0.1846,0.1586,0.1369,0.1177;7支执行价格从2.7元至3元的看跌期权收盘价分别为0.0464,0.0589,0.0750,0.0947,0.1183,0.1441,0.1756。根据上述数据画出两种期权的波动率微笑(偏斜)。

from datetime import date
t=(date(2018,6,27)-date(2017,12,29)).days/365
S=2.859;r=0.048823
K=np.arange(2.7,3.05,0.05)
Pcall=np.array([0.2841,0.2486,0.2139,0.1846,0.1586,0.1369,0.1177])
Pput=np.array([0.0464,0.0589,0.0750,0.0947,0.1183,0.1441,0.1756])
volcall=np.zeros_like(K)
for i in range(len(K)):volcall[i]=(binary_call(Pcall[i],S,K[i],r,t))
volput=np.zeros_like(K)
for i in range(len(K)):volput[i]=(binary_put(Pput[i],S,K[i],r,t))
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
plt.plot(K,volcall,label='50ETF认购期权')
plt.plot(K,volput,label='50ETF认沽期权')
plt.xlabel('执行价格')
plt.ylabel('隐含波动率')
plt.title('50ETF期权的波动率微笑(偏斜)')
plt.legend()
plt.grid()


  理论上根据平价公式,相同执行价格、到期日等条件下的看涨看跌期权计算出来的隐含波动率应该相同,否则存在套利机会。但是事实上由于交易成本、卖空限制等因素,看涨看跌期权的隐含波动率允许存在一定的偏差,在这个合理的偏差范围内,平价套利是无法实施的。

波动率微笑/偏斜现象的解释

  关于波动率微笑的形成,主要是因为BS公式假定资产价格服从对数正态分布,而事实上该资产服从一个更加尖峰厚尾的分布,两边尾部的风险更高,因此隐含波动率更大;同时资产价格有跳跃现象(比如外汇期权的外汇受到央行管制),期权价值的不确定性增大,这也会导致两边变成肥尾。

  波动率偏斜现象(左高右低)在股票期权中更为常见,因为股票价格也不是完全服从对数正态分布,而是一种尖峰、左肥尾、右瘦尾的分布(股票涨得少跌得多),因此左尾更加肥厚,表明隐含波动率更高。

  还有一种较为可靠的解释是崩盘恐惧症(crashophobia):低执行价格区域对应的虚值看跌期权按照BS模型定价很低,但是实际上没这么低(股灾不少见),导致市面上定价有溢价,因此高的价格形成了高的σ。

(三十七)期权的隐含波动率计算与图形相关推荐

  1. 【正点原子Linux连载】第三十七章 Linux内核移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  2. 数据科普:期权的隐含波动率(投资必知必会)

    投资小课堂由开课啦????本篇是最后一章 1.期权类型与到期盈亏 2.定价模型与平价关系式 3.期权价格和相关变量的关系 4.期权的希腊字母(上) 5.期权的希腊字母(下) 在布B-S模型中,可以直接 ...

  3. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己:索引缓存的故事

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8304741 作者:毛星云(浅墨 ...

  4. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果. 时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微 ...

  5. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  6. NeHe OpenGL教程 第三十七课:卡通映射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形

    原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...

  8. WebGL入门(六)-通过坐标计算实现图形的平移、旋转和缩放变换

    通过坐标计算实现图形的平移.旋转和缩放变换 1.图形的平移 1.1平移效果说明 1.2平移原理说明 1.3平移图形的实现步骤 1.3.1在顶点着色器中声明存放平移信息的uniform变量u_Trans ...

  9. 深度学习入门(三十七)计算性能——硬件(TBC)

    深度学习入门(三十七)计算性能--硬件(CPU.GPU) 前言 计算性能--硬件(CPU.GPU) 课件 电脑 提升CPU利用率① 提升CPU利用率② CPU VS GPU 提升GPU利用率 CPU/ ...

最新文章

  1. 【ACM】杭电OJ 1004
  2. AttributeError: module ‘tensorflow‘ has no attribute ‘applications‘
  3. 在中间层 .NET 应用程序中通过授权管理器使用基于角色的安全
  4. 【OpenCV学习】抠图
  5. 软件测试2019:第一次作业
  6. linux kernel 进程管理,Linux内核 | 进程管理
  7. 数据库的移动 1007 sqlserver
  8. Dijkstra算法求单源最短路径
  9. 34步优化sql语句
  10. 第十一讲 在ASP.NET中使用用户控件
  11. 计算机文化基础(高职高专版 第十一版)第七章 答案
  12. Python将npy文件转换为mat文件
  13. PHPmywind 调用方法
  14. [译] 改善 DaVinci Resolve 性能的 5 个秘诀
  15. 跨考电子信息408一点经验
  16. is not eligible for getting processed by all BeanPostProcessors 导致找不到路径报404
  17. nobup 与 后台运行命令
  18. ESP32 ADF windows开发环境搭建 适配ADF到ESP32A1S
  19. 内存数据库应用之NBA篮球图文直播室存储设计
  20. java编程思想学习笔记(第七章:复用类)

热门文章

  1. CODE[VS]2996 Comrade 同志
  2. 定时使用Tushare下载日线交易数据到Sqlite3数据库
  3. 520特辑 有一个IDC运维工程师的女朋友是什么体验
  4. Xcode8配置支持10.1的系统
  5. yt88加密狗不识别_YT88 是天域一个很不错的加密狗工具,可以源码 ,还 外壳 ,带DLK开发包。 Windows Develop 256万源代码下载- www.pudn.com...
  6. 汽车外形设计对曲面的评定标准
  7. 响应式布局-bootstap-阿里百秀案例
  8. android盒子应用程序未安装,Android应用程序未安装怎么办 APK应用未安装解决办法...
  9. 蜻蜓FM下载文件名还原
  10. LICEcap – 一个简单支持Windows和Mac的Gif录屏工具