if (c-cest>0.00001) {low<-sigmasigma<-(sigma+up)/2
考虑另一种相反情形,如果差小于0.0001,那就说明估计量太大了,此时先把上界移下来至中位数0.5,那么此时的IV就是之前(sigma+low)/2,比如(0.5+0)/2=0.25,就从刚开始的0 ~1区间缩小到了0.25 ~0.5,此时再把0.25这个估计值代入BSM函数算出新的期权价格,再次比较,循环往复 。
else {up<-sigmasigma<-(sigma+low)/2}
那么通过while语句整个逻辑就走通了,从结构上来说可以把这个函数看做一个while语句包住一个if判断语句,之前的BSM函数是为了验证估计的波动率是否够精确,这篇教程仅使用了看涨期权的IV推算,大家可以再增加一个参数并再嵌套利一个if语句实现同时包含看跌和看涨的IV计算,这个内容就当做学习后的练手了,相信做完看涨+看跌的组合函数,对这类没有解析式的倒退运算就都能有思路了,以下是完整代码,仅供参考,谢谢!
option<-function(n,s,k,r,sig){d<-(log(s/k)+(r+sig^2/2)*n)/(sig*sqrt(n))d2<-d-sig*sqrt(n)c<-s*pnorm(d)-k*exp(-r*n)*pnorm(d2)return(c)}implied<-function(n,s,k,r,c){ ##c为实际看涨期权价格##sigma<-0.5cest<-0up<-1low<-0while (abs(c-cest)>0.00001) {cest<-option(n,s,k,rf,sigma)if (c-cest>0.00001) {low<-sigmasigma<-(sigma+up)/2} else {up<-sigmasigma<-(sigma+low)/2}}return(sigma)}implied(0.25,28,30,0.02,1.5) ##试验结果##
- 【帅琪达】电脑锁屏再重新打开后无网络 三步搞定
- 企业应用技术篇 【方向盘】Java EE几十种技术,“活着的”还剩几何
- 屈原之前有没有端午节
- 【直播系列之二】快速接入PC端直播功能
- 50道 【朝夕教育】2023年03月 其他-上位机通信面试题
- 【十二、wordpress优化之七:搜索推送
- ascll码 — c语言转换
- X64-R3层通过PEB获取进程命令行参数
- 纯CSS仿iOS开关按钮
- 【文献分析入门】【1】citespace安装与使用笔记