投资小课堂由开课啦????本篇是最后一章

1、期权类型与到期盈亏

2、定价模型与平价关系式

3、期权价格和相关变量的关系

4、期权的希腊字母(上)

5、期权的希腊字母(下)

在布B-S模型中,可以直接观察到基础资产的当前价格S、期权的执行价格K、期权合约期限T以及无风险收益率r,唯一不能直接观察到的变量就是基础资产的波动率σ。当然,可以通过基础资产的历史价格来估计波动率。

但在实践中,通常会使用所谓的隐含波动率( implied volatility),该波动率是指通过期权的市场价格、运用B-S模型计算得到的波动率。但比较棘手的问题是,无法直接通过反解看涨期权定价式子或看跌期权定价式子将σ表示为变量c(或p)、S、K、r、T的函数,只能运用迭代方法求解出隐含的σ值。常用的迭代方法包括牛顿迭代法和二分查找法。

牛顿迭代法计算隐含波动率

牛顿迭代法( Newton' s Method),也称为牛顿拉弗森方法,在利用该方法计算期权的隐含波动率时,需要做好以下3个方面的工作:一是需要输入一个初始的隐含波动率;二是建立一种迭代关系式,如果由初始的隐含波动率得到的期权价格高于市场价格,则需要减去一个标量(比如0.0001),相反则加上一个标量;三是需要对迭代过程进行控制,也就是针对隐含波动率得到的期权价格与期权的市场价格之间的差额设置一个可接受的临界值。

利用牛顿迭代法并运用 Python自定义分别计算欧式看涨、看跌期权隐含波动率的函数用python实现代码如下:

import numpy as np
from scipy.stats import norm
# 首先要先定义好 BS 模型计算期权价格的函数公式
def call_BS(S,K,sigma,r,T):'''用bs模型计算欧式看涨期权价格S 期权基础资产价格K 期权执行价格sigma 基础资产价格百分比变化(收益率)的年化波动率r 无风险收益率T 期权合约剩余年限'''d1 = (np.log(S/K) + (r + pow(sigma,2)/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 put_BS(S,K,sigma,r,T):'''用bs模型计算欧式看跌期权价格S 期权基础资产价格K 期权执行价格sigma 基础资产价格百分比变化(收益率)的年化波动率r 无风险收益率T 期权合约剩余年限'''d1 = (np.log(S/K) + (r + pow(sigma,2)/2)*T) / (sigma*np.sqrt(T))d2 = d1 - sigma*np.sqrt(T)return K*np.exp(-r*T)*norm.cdf(-d2) - S*norm.cdf(-d1)

牛顿迭代法计算隐含波动率

# BS 模型计算期权价格
def call_BS(S,K,sigma,r,T):'''用bs模型计算欧式看涨期权价格S 期权基础资产价格K 期权执行价格sigma 基础资产价格百分比变化(收益率)的年化波动率r 无风险收益率T 期权合约剩余年限'''d1 = (np.log(S/K) + (r + pow(sigma,2)/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 put_BS(S,K,sigma,r,T):'''用bs模型计算欧式看跌期权价格S 期权基础资产价格K 期权执行价格sigma 基础资产价格百分比变化(收益率)的年化波动率r 无风险收益率T 期权合约剩余年限'''d1 = (np.log(S/K) + (r + pow(sigma,2)/2)*T) / (sigma*np.sqrt(T))d2 = d1 - sigma*np.sqrt(T)return K*np.exp(-r*T)*norm.cdf(-d2) - S*norm.cdf(-d1)
def impvol_call_Newton(C,S,K,r,T):            # 初始sigma是0.2'''运用BS模型计算看涨期权的隐含波动率,使用的是牛顿迭代法。C 看涨期权市场价格S 基础资产价格K 行权价格r 无风险收益率T 期权剩余时间(年)'''sigma0 = 0.2     #设置一个初始波动率diff = C - call_BS(S,K,sigma0,r,T)i = 0.0001       #设置一个标量while abs(diff) > 0.0001:diff = C - call_BS(S,K,sigma0,r,T)if diff > 0:sigma0 = sigma0 + ielse:sigma0 = sigma0 - ireturn sigma0def impvol_put_Newton(P,S,K,r,T):            # 初始sigma是0.2'''运用BS模型计算看跌期权的隐含波动率,使用的是牛顿迭代法。P 看跌期权市场价格S 基础资产价格K 行权价格r 无风险收益率T 期权剩余时间(年)'''sigma0 = 0.2     #设置一个初始波动率diff = P - put_BS(S,K,sigma0,r,T)i = 0.0001       #设置一个标量while abs(diff) > 0.0001:diff = P - put_BS(S,K,sigma0,r,T)if diff > 0:sigma0 = sigma0 + ielse:sigma0 = sigma0 - ireturn sigma0

仍然以某股票作为例子,设置看涨期权市场价格为0.1566元,看跌期权的市场价格为0.7503,元,其他参数市场价格5.29,执行价格6,无风险收益率4%,剩余期限6个月

impvol_call_Newton(C=0.1566, S=5.29, K=6, r=0.04, T=0.5)
# 输出
>>> 0.2426999999999953impvol_put_Newton(P=0.7503, S=5.29, K=6, r=0.04, T=0.5)
# 输出
>>> 0.24450000000006122

通过以上的计算结果可以得到看涨期权的隐含波动率是24.27%,看跌期权的隐含波动率是24.45%。需要注意的是,由于计算的步骤会比较多,因此牛顿迭代法的效率往往是比较低的,如 果将结果的精确度进一步提高,则需要花费比较长的时间进行运算。

二分查找法计算隐含波动率

为了提高运算速度,可以采用二分查找法( binary search,也称“折半查找法”) 作为迭代的方法。

可以通过举一个简单的例子更好地理解这种方法。用前面牛顿迭代的股票的例子,初始猜测的波动率是20%,对应该波动率数值估计得到的欧式看涨期权价格是0.1035元,显然,比市场价格0.1566元更小。由于期权价格是波动率的增函数,因此合理地估计正确的波动率应该会比20%更大。然后假定波动率是30%,对应的期权价格0.2336元,这个结果又比0.1566元高,则可以肯定波动率是介于20%~30%的区间中。接下来,取上两次波动率值的均值,也就是波动率25%,对应的期权价格为0.1662元,这个值又比0.1566元高,但是合理的波动率所处的区间范围收窄至20%与25%之间,然后取均值22.5%继续计算,每次迭代都使波动率所处的区间减半,最终就可以计算出满足较高精确度的隐含波动率近似值。

利用二分查找法并运用 Python构建分别计算欧式看涨、看跌期权隐含波动率的python实现函数,具体的代码如下:(同样也是需要先定义期权的计算公式函数)

def impvol_call_Binary(C,S,K,r,T):      #从0.001 - 1.000进行二分查找'''运用BS模型计算看涨期权的隐含波动率,使用的迭代方法是二分查找法。C 看跌期权市场价格S 基础资产价格K 行权价格r 无风险收益率T 期权剩余时间(年)'''sigma_min = 0.001           # 设定波动率初始最小值sigma_max = 1.000           # 设定波动率初始最大值sigma_mid = (sigma_min + sigma_max) / 2call_min = call_BS(S,K,sigma_min,r,T)call_max = call_BS(S,K,sigma_max,r,T)call_mid = call_BS(S,K,sigma_mid,r,T)diff = C - call_midif C < call_min or C > call_max:print('Error')while abs(diff) > 0.000001:diff = C - call_BS(S,K,sigma_mid,r,T)sigma_mid = (sigma_min + sigma_max) / 2call_mid = call_BS(S,K,sigma_mid,r,T)if C > call_mid:sigma_min = sigma_midelse:sigma_max = sigma_midreturn sigma_middef impvol_put_Binary(P,S,K,r,T):      #从0.001 - 1.000进行二分查找'''运用BS模型计算看跌期权的隐含波动率,使用的迭代方法是二分查找法。P 看跌期权市场价格S 基础资产价格K 行权价格r 无风险收益率T 期权剩余时间(年)'''sigma_min = 0.001           # 设定波动率初始最小值sigma_max = 1.000           # 设定波动率初始最大值sigma_mid = (sigma_min + sigma_max) / 2put_min = put_BS(S,K,sigma_min,r,T)put_max = put_BS(S,K,sigma_max,r,T)put_mid = put_BS(S,K,sigma_mid,r,T)diff = P - put_midif P < put_min or P > put_max:print('Error')while abs(diff) > 0.000001:diff = P - put_BS(S,K,sigma_mid,r,T)sigma_mid = (sigma_min + sigma_max) / 2put_mid = put_BS(S,K,sigma_mid,r,T)if P > put_mid:sigma_min = sigma_midelse:sigma_max = sigma_midreturn sigma_mid

沿用牛顿迭代的例子,设置看涨期权市场价格为0.1566元,看跌期权的市场价格为0.7503,元,其他参数市场价格5.29,执行价格6,无风险收益率4%,剩余期限6个月。

impvol_call_Binary(C=0.1566, S=5.29, K=6, r=0.04, T=0.5)
# 输出
>>> 0.2426642599105835impvol_put_Binary(P=0.7503, S=5.29, K=6, r=0.04, T=0.5)
# 输出
>>> 0.2445982828140259

两种方法计算的结果是一样的,但是二分法的运算效率会更高一些。

End!期权系列文章最后一篇结束了。

前文链接????

1、期权类型与到期盈亏

2、定价模型与平价关系式

3、期权价格和相关变量的关系

4、期权的希腊字母(上)

5、期权的希腊字母(下)

数据科普:期权的隐含波动率(投资必知必会)相关推荐

  1. 数据科普:期权的希腊字母 | 上(投资必知必会)

    投资小课堂由开课啦???? 1.期权类型与到期盈亏 2.定价模型与平价关系式 3.期权价格和相关变量的关系 期权的希腊字母主要包括 Delta. Gamma. Theta.Vega 和 Rho,每个希 ...

  2. 数据科普:期权的希腊字母 | 下(投资必知必会)

    投资小课堂由开课啦???? 1.期权类型与到期盈亏 2.定价模型与平价关系式 3.期权价格和相关变量的关系 4.期权的希腊字母(上) 期权的希腊字母主要包括 Delta. Gamma. Theta.V ...

  3. 数据科普:定价模型与平价关系式(投资必知必会)

    hi,凹凸们???? 今天给大家介绍一下定价模型与平价关系式.前文链接:期权类型与到期盈亏(投资必知必会) 一.布莱克-斯科尔斯-默顿模型 在20世纪70年代初,费希尔·布莱克( Fisher bla ...

  4. 数据科普:期权价格和相关变量的关系(投资必知必会)

    通过布莱克-斯科尔斯-默顿模型,不难发现有5个变量会影响期权的价格:一是当前基础资产价格S,二是期权的执行价格K,三是期权期限T,四是基础资产的波动率:五是无风险收益率r.下面主要针对当其中一个变量发 ...

  5. gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_关于TCP/IP,必知必会的十个问题!...

    本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. TCP/IP十个问题 TCP/IP十个问题 一.TCP/IP模型 TCP/IP协议模型(Trans ...

  6. mysql第四章分页显示查询出租房屋信息_MYSQL必知必会读书笔记第四章之检索数据...

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 使用Select语句返回的数据,可能会发现显 ...

  7. sql必知必会的数据初始化

    之前已经配置好mysql的工作环境,但是还缺少可以进行操作的文件,即缺少对应的一个数据库和其中的5个表. 下载相关代码 在网址http://www.forta.com/books/0672325675 ...

  8. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

  9. mysql必知必会的数据_MySQL必知必会--汇 总 数 据

    聚集函数 我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提 供了专门的函数.使用这些函数,MySQL查询可用于检索数据,以便分 析和报表生成.这种类型的检索例子有以下几种. 确定表中行数 ...

  10. 《MySQL必知必会学习笔记》:更新和删除数据

    更新和删除数据 上篇博文介绍了下插入数据的几种方式.这篇博文就来讲述下更新和删除数据. 更新数据 更新(修改)表中的数据,使用update语句. 更新数据一般采用如下两种方式: 更新表中特定行的数据. ...

最新文章

  1. JqueryMobile Demo
  2. 【探路者】贪吃蛇β发布展示(视频展示)
  3. Redis性能监控指标汇总
  4. 简单Nlp分析套路,获取数据(爬虫),数据处理(分词,词频,命名实体识别与关键词抽取),结果展现
  5. mysql子查询_笔记之MySQL子查询
  6. 第九周-每周例行报告
  7. pdf怎么解除限制打印
  8. 白帽子黑客:手把手教你如何在Kali使用ibus拼音输入法?
  9. 字节跳动实习生转正工资_字节跳动西瓜视频招聘 | 新媒体运营实习生
  10. 计算机内存错误 要降频,电脑出现内存自动降频的问题该怎么办?
  11. 怎么调整图片的尺寸大小?
  12. opencv立方体的画法_美术生干货,最详细的立方体透视变化及画法讲解,不看后悔!...
  13. TM4C1294使用
  14. 2021充电必备:推荐一些免费的电子书网站及EPUB阅读器
  15. CSS基础:CSS的上下文之层叠上下文
  16. Vue-Element-admin 框架上使用 Hiprint 打印插件 一、项目介绍
  17. HTML5代码学习:值得收藏的HTML5代码段
  18. 192.168.49.1登录_192.168.1.1登陆页面
  19. Hive转换常用函数
  20. [Python3] Matplotlib.pyplot.plot图形符号、风格及颜色缩写速查表

热门文章

  1. 相机姿态估计(四)--AP3P
  2. 无线网络渗透2:WPA/WPA2-PSK AP-Station 关联和认证过程
  3. 中农考研计算机机考,中国农业大学2020年考研873计算机基础考试大纲
  4. VR医疗更进一步:VR技术融入内窥镜模拟器
  5. #特辑# 统计字符串中出现次数最多的字符是哪个,并且出现了出现了几次 。
  6. C语言设计第七章答案,c语言程序设计第七章答案
  7. 安卓错误: 找不到R符号_铜丝氧化却找不到原因?你可能忽视了这几个常见错误!【辽宁津达线缆】...
  8. “脚本错误”到底意味着什么?
  9. 计算机助学教学软件cai是,CAI与课堂教学
  10. minSdkVersion、API level 以及兼容包appcompat三者之间的关系