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

2023-10-27

隐含波动率的计算

  通过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.2
	while abs(bscall(S,K,r,sigma,t)-P)>0.0001:
		if bscall(S,K,r,sigma,t)>P:
			sigma-=0.0001
		else:
			sigma+=0.0001
	return sigma
def newton_put(P,S,K,r,t):
	sigma=0.2
	while abs(bsput(S,K,r,sigma,t)-P)>0.0001:
		if bsput(S,K,r,sigma,t)>P:
			sigma-=0.0001
		else:
			sigma+=0.0001
	return 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=1
	sigma_down=0.001
	sigma_mid=(sigma_up+sigma_down)/2
	while 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_mid
			sigma_mid=(sigma_mid+sigma_down)/2
		elif bscall(S,K,r,sigma_up,t)>P>bscall(S,K,r,sigma_mid,t):
			sigma_down=sigma_mid
			sigma_mid=(sigma_up+sigma_down)/2
		else:
			print('error!')
			break
	return sigma_mid
def binary_put(P,S,K,r,t):
	sigma_up=1
	sigma_down=0.001
	sigma_mid=(sigma_up+sigma_down)/2
	while 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_mid
			sigma_mid=(sigma_mid+sigma_down)/2
		elif bsput(S,K,r,sigma_up,t)>P>bsput(S,K,r,sigma_mid,t):
			sigma_down=sigma_mid
			sigma_mid=(sigma_up+sigma_down)/2
		else:
			print('error!')
			break
	return 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模型定价很低,但是实际上没这么低(股灾不少见),导致市面上定价有溢价,因此高的价格形成了高的σ。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 后台的BigDecimal字段,传到前端丢失精度问题

    后台的BigDecimal字段 传到前端丢失精度问题 后台的BigDecimal类型的字段 传到前端丢失精度 相关字段 private BigDecimal acreage 例如 该字段的值为 100 00 到前端就变成了 100 前端要求
  • HCNP路由交换学习指南--- 路由的基本概念

    文章目录 HCNP路由交换学习指南 路由的基本概念 交换机路由表学习 路由信息来源 路由的优先级 路由的度量值 HCNP路由交换学习指南 路由的基本概念 交换机路由表学习 路由是一种逐跳 HopByHop 的行为 也就是说 数据从源被发出直
  • 量化投资策略回测框架(一):胜率的估算

    上次简单介绍了回测之前的一些准备工作 这里 将进一步介绍如何对一个投资策略就行完整的回测 杂言 人啊 还是要做自己喜欢做的事情 勇于尝试 是非常好的 当感觉不合适的时候 要尽早跳出 年轻人 还是不要太安逸 所以从财富跳到了私募 事情也是自己
  • JWT解析库-nimbus-jose-jwt

    07 JWT解析库 nimbus jose jwt JWT解析库 nimbus jose jwt 是最受欢迎的JWT开源库 基于Apache2 0开源协议 支持所有标准的签名JWS和加密JWE算法 1 JWT JWS JWE是什么 1 1
  • Mac使用Appium连接真机与appium-inspector配置

    文章目录 1 配置Java SDK与Android SDK 2 连接真机 3 配置Appium与appium inspector安装 4 配置appium inspector 5 尝试连接 6 报错解决 gt No route found
  • 定时器控制数码管扫描显示

    功能 定时器控制两位数码管扫描显示 器件 STC12C5A32S2 两个数码管 include config h define uint unsigned int define uchar unsigned char define ulon
  • 一步步学习k8s(三)

    一步步学习k8s 三 将apollo交付到K8S中 apollp是携程公司开源的软件 apollp官网 https github com ctripcorp apollo 安装数据库 Mariadb 版本要高于10 1 对应mysql版本要
  • TrafficMonitor之Windows10监控小工具

    TrafficMonitor之Windows10监控小工具 安装 基本设置 软件下载地址 https gitee com xiaoha1234 soft ware blob master TrafficMonitor zip 1 基本设置
  • Swift学习笔记之---使用if和let处理空变量

    在Swift程序中 结合if和let 可以方便地处理空变量 nullable variable 使用可选绑定 optional binding 来判断可选类型是否包含值 如果包含就把值赋给一个临时常量或者变量 可选绑定可以用在if和whil
  • HashMap的get、put、resize过程

    get 1 先计算出key对应的hash值 2 对超出数组范围的hash值进行处理 3 根据正确的hash值 下标值 找到所在的链表的头结点 4 遍历链表 如果key值相等 返回对应的value值 否则返回null put 1 先计算出ke
  • 关于网络问题:WARNING: ROS_MASTER_URI [http://EPRobot:11311] host is not set to this machine

    关于网络问题 WARNING ROS MASTER URI http EPRobot 11311 host is not set to this machine 如果需要远程链接 需要在远程服务器将ROS MASTER URI变为启动ros
  • assimp批量转模型,[OpenGL] 使用Assimp导入模型(Qt)

    最近终于决定要在本身的demo中加入模型了 本次选择的是开源库Assimp 以前一直嫌麻烦没有去落实这件事 但实际上 assimp的配置意外的没有我想象中的那么麻烦 html 下载源码后 须要使用cmake进行编译 在上方选择源码位置 和b
  • RouterOS 动态IP接入上网设置教程(超详细)

    根据动态IP接入拓扑图对RouterOS做如下设置 首先启动RouterOS软路由 并且连接电脑 然后打开winbox登录ROS 1 正取区分内 外网 目的是为了方便记忆和区分 2 建立DHCP Client 客户端 进行自动获取外网IP地
  • 数据结构单链表之合并两个有序链表笔记。

    1 0题目描述 将两个升序链表合并为一个新的 升序 链表并返回 新链表是通过拼接给定的两个链表的所有节点组成的 2 0例子演示 输入 l1 1 2 4 l2 1 3 4 输出 1 1 2 3 4 4 示例 2 输入 l1 l2 输出 示例
  • react 之 umi(乌米)--入门介绍

    介绍 umi 中文可发音为乌米 是一个可插拔的企业级 react 应用框架 umi 以路由为基础的 支持类 next js 的约定式路由 以及各种进阶的路由功能 并以此进行功能扩展 比如支持路由级的按需加载 然后配以完善的插件体系 覆盖从源
  • games101,作业2

    需要补充的函数 rasterize triangle 执行三角形栅格化算法 static bool insideTriangle 测试点是否在三角形内 你可以修改此函 数的定义 这意味着 你可以按照自己的方式更新返回类型或函数参数 判断点是
  • ssl工作流程

    1 ssl工作流程 SSL位于应用层和传输层之间 它能够为基于TCP等可靠连接的应用层协议提供安全性保证 SSL协议本身分为两层 上层为SSL握手协议 SSL handshake protocol SSLpassword变化协议 SSL c
  • 【flutter】完美解决导入 dart.ui 中缺少 platformViewRegistry.registerViewFactory 方法

    邂逅 很多情景需要使用 package flutter web ui ui dart 或者 dart ui 比如显示一个网页 import package flutter web ui ui dart as ui 或者 import dar
  • Debian11 修改IP地址和DNS

    修改IP vim etc network interfaces 内容如下 auto ens33 iface ens33 inet static address 192 168 1 200 netmask 255 255 255 0 gate
  • (三十七)期权的隐含波动率计算与图形

    隐含波动率的计算 通过BS公式无法反解出隐含波动率 常用的求解方法有牛顿迭代法和二分法 牛顿迭代法 主要思路是 先设定一个初始波动率值 比如20 然后建立一种迭代关系 如果由初始波动率值得到的期权价格高于市场价格 那么初始波动率减少一定的量