最近实习开始算期权隐含波动率。期权隐含波动率的算法写的人不多,分享几种计算方法。

1. 根据BS公式用二分法计算

从WIND里面取数之后算会出现的实际问题是有些价格的期权并没有价格(没人买),所以显示p=0。

def BSM(F0,k,T,r,sigma):d1=(np.log(F0/k)+(r+0.5*sigma**2)*T)/sigma/np.sqrt(T)d2=d1-sigma*np.sqrt(T)c=F0*norm.cdf(d1)-k*np.exp(-r*T)*norm.cdf(d2)p=k*np.exp(-r*T)*norm.cdf(-d2)-F0*norm.cdf(-d1)return c,p#二分法求隐含波动率
def bisection(P,F0,k,r,T,c):  #c=0,call;c=1,put.value0=0#迭代初始值top=100floor=0sigma=(floor+top)/2i=0while abs(P-value0)>1e-2:value0=BSM(F0,k,T,r,sigma)[c]if (P-value0)>0:floor=sigmasigma=(sigma+top)/2else:top=sigmasigma=(sigma+floor)/2#print(sigma)i+=1if i>100:sigma=''print('Too many iterations')breakreturn sigma
def bisection_sigma(P,F0,k,r,T,c):if P==0:return 0else:return bisection(P,F0,k,r,T,c)

2. 用vega算

在stackflow上看到有人是用vega算,缺点用vega算需要符合一些条件,优点是不需要迭代,可以直接计算。附上一段代码。

N = norm.cdfdef bs_call(S, K, T, r, vol):d1 = (np.log(S/K) + (r + 0.5*vol**2)*T) / (vol*np.sqrt(T))d2 = d1 - vol * np.sqrt(T)return S * norm.cdf(d1) - np.exp(-r * T) * K * norm.cdf(d2)def bs_vega(S, K, T, r, sigma):d1 = (np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))return S * norm.pdf(d1) * np.sqrt(T)def find_vol(target_value, S, K, T, r, *args):MAX_ITERATIONS = 200PRECISION = 1.0e-5sigma = 0.5for i in range(0, MAX_ITERATIONS):price = bs_call(S, K, T, r, sigma)vega = bs_vega(S, K, T, r, sigma)diff = target_value - price  # our rootif (abs(diff) < PRECISION):return sigmasigma = sigma + diff/vega # f(x) / f'(x)return sigma # value wasn't found, return best guess so far

3. 很多金融界人士其实是用excel(VBA)算的,这里推荐用Hull大神的DerivaGem,人大经济论坛上有各种版本的这个软件。优点是简单容易用,缺点的话,主要就是不适合需要算很多数据,拿来练练教材的课后习题还是好的。

求期权隐含波动率的几种方法相关推荐

  1. c语言数组最大可定义多少位_C语言求数组的最大值三种方法

    /* 黄哥Python培训 黄哥所写*/#include int maxValue(int* arr, int n);int maxRecursionValue(int* arr, int n);in ...

  2. c语言实现求最大公约数的三种方法

    一.最大公约数 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也 ...

  3. matlab求pi值的三种方法

    https://www.icourse163.org/learn/CSU-1002475002?tid=1450231442#/learn/content?type=detail&id=121 ...

  4. matlab 求矩阵秩,求矩阵秩的两种方法及MATLAB的应用

    摘    要: 高等代数是一门逻辑思维比较强和理论知识比较深的学科, 它具有丰富的数学知识, 涉及许多重要的数学思想, 其在数学领域的应用很广泛, 如行列式.矩阵的相关计算和求解线性方程组的解方面的应 ...

  5. 求伪逆的五种方法比较

    A*x=y当A不可逆如何解x 求伪逆有五种方法,左右同时乘以A','chol()分解,qr() 分解,svd()分解和pinv()求伪逆,下面来比较一下哪个最优秀. 如果A是个355行3列的矩阵,经过 ...

  6. 用C语言求最大公约数的4种方法

    C语言求最大公约数的四种方法如下: 辗转相除法:通过不断地交换两个数,使较大的数除以较小的数,最后得到的余数即为最大公约数. 更相减损术:通过不断地让两个数减去较小的数,最后得到的结果即为最大公约数. ...

  7. 求最大公约数的4种方法

    一.最大公约数与最小公倍数 最大公约数,属于数论所探究的内容. 最大公约数可以通过下面的三种方法求出来. 最小公倍数呢,它与最大公约数的乘机为所求数之积. 比如求 x,y的最大公约数和最小公倍数 记住 ...

  8. Matlab求矩阵的逆(三种方法)

    Matlab求矩阵的逆(三种方法) 说明:若所求矩阵为非奇异矩阵(可逆矩阵),则可以精确求得其逆矩阵:若所求矩阵为奇异矩阵,则所求出的逆矩阵是近似的(不精确). 下面以矩阵A为例. inv()方法 A ...

  9. C语言求最大公约数的三种方法

    最大公约数是两个数可以同时整除的数中最大的那个 这里用三种方法来解决 穷举法求最大公约数 判断x和y的最大公约数,x和y其中一定有一个相对较小的数,然后从这个较小数开始遍历,不断地用x和y去除这个数, ...

最新文章

  1. Python进阶09 动态类型
  2. 未能加载文件或程序集 ICSharpCode.SharpZipLib
  3. NASA WorldWind1.4.0源代码调试总结
  4. 操作系统:分享Win11几个实用小技巧,赶快收藏吧!
  5. python实现简单算法
  6. 不来看看这些 VUE 的生命周期钩子函数? | 原力计划
  7. 88. cdata , dtd
  8. 【电路仿真】基于simulink模拟锁相环设计【含Matlab源码 339期】
  9. 设置vim默认显示行号
  10. vim编辑器删除空行
  11. 一阶倒立摆的起摆与稳摆simulink仿真
  12. python切片详解_python切片及sys.argv[]用法详解
  13. 金蝶kis专业版公网访问_金蝶KIS系统专业版客户端连接不上服务器处理方法
  14. Rax.js基础学习
  15. Blender 字幕编辑器插件(SimpleSubtitleEditor)改良版
  16. Gos —— 显示器控制
  17. UML建模与软件开发设计(六)——类图设计与类之间的关系
  18. 超算平台安装Anaconda和Tensorflow
  19. 如何构建大规模数据中心网络?智邦科技高密交换机给你答案
  20. feed流和瀑布流_推荐系统之Feed流UI交互设计

热门文章

  1. 【intel IPP库历史版本下载】
  2. 熟悉 Spring boot 的 Actuator 的使用方法(四)
  3. git cherry-pick的注意事项
  4. 3d轮播图(另一种方式,可以实现的功能更为强大也更为灵活,简单一句话,比酷狗优酷的炫)...
  5. Win10蓝牙开关突然消失不见 已经解决方法2023.2.11
  6. python给图片打马赛克
  7. 温度测量解决方案——红外测温仪设计方案开发
  8. Mac——技巧:用“提醒事项”将任务分配给其他人
  9. kiel4.7下载_使用Kiel构建更好,干净的RecyclerView.Adapter
  10. 计算机常发故障英语,电脑打字一直是英文怎么办