楼主: yscapital
4759 8

[期权交易] MATLAB无法计算期权隐含波动率 [推广有奖]

  • 0关注
  • 0粉丝

大专生

25%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
9237 点
帖子
25
精华
0
在线时间
57 小时
注册时间
2012-10-25
最后登录
2021-8-18

楼主
yscapital 发表于 2016-12-14 10:14:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
大虾们,最近遇到一个问题很奇怪。
我需要用MATLAB里面的blsimpv函数计算期权的隐含波动率,在MATLAB中输入了相应的代码如下:

  1. Price=2.45;
  2. Strike=2.2;
  3. Rate=0.000134376;
  4. Time=20;
  5. CallPrice=0.253;
  6. CallVolatility = blsimpv(Price, Strike, Rate, Time, CallPrice,10,0,[],true)
复制代码


但它给出的结果是:
  1. CallVolatility =

  2.    NaN
复制代码

难道说该期权的隐含波动率不存在?请大虾们指点一下这种情况该怎么解决。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB matla atlab 无法计算 Mat MATLAB 期权 隐含波动率 blsimpv

沙发
cooper56 在职认证  发表于 2016-12-15 09:24:53
time要年化,20代表20年

藤椅
Chemist_MZ 在职认证  发表于 2016-12-15 18:16:03
一个20年的option,time value只有0.003,那volatility得多小,估计solver很难converge,因为有好多值都符合误差精度。
已有 1 人评分经验 收起 理由
chengzhifu2013 + 40 精彩帖子

总评分: 经验 + 40   查看全部评分

板凳
yscapital 发表于 2016-12-18 20:10:09
cooper56 发表于 2016-12-15 09:24
time要年化,20代表20年
数据是日数据,time20表示到期时间还有20天,无风险利率是日利率。

报纸
yscapital 发表于 2016-12-18 20:10:35
Chemist_MZ 发表于 2016-12-15 18:16
一个20年的option,time value只有0.003,那volatility得多小,估计solver很难converge,因为有好多值都符合 ...
数据是日数据,time20表示到期时间还有20天,无风险利率是日利率。

地板
yscapital 发表于 2016-12-18 20:14:58
非常感谢楼上两位大侠,我按照你们的思路把代码换成年化数据,还是不能求出来:

  1. Price=2.45;
  2. Strike=2.2;
  3. Rate=0.0342;
  4. Time=0.08;
  5. CallPrice=0.253;
  6. CallVolatility = blsimpv(Price, Strike, Rate, Time, CallPrice,10,0,[],true)
复制代码


输出仍然是NaN

  1. CallVolatility =

  2.    NaN
复制代码

7
Chemist_MZ 在职认证  发表于 2016-12-19 06:21:36
yscapital 发表于 2016-12-18 20:14
非常感谢楼上两位大侠,我按照你们的思路把代码换成年化数据,还是不能求出来:
call 的下界是S-Kexp(-rT)=0.256,  你的input price0.253已经低于下界了,所以算不出来,看我下面不断减小波动率得到的结果。如果你是用的实际data,一般很少有人用价内的期权去算隐含波动率,如果你有同样strike的价外put option可以试试。
>> blsprice(Price, Strike, Rate, Time, 0.3, 0)

ans =

    0.2649

>> blsprice(Price, Strike, Rate, Time, 0.2, 0)

ans =

    0.2573

>> blsprice(Price, Strike, Rate, Time, 0.1, 0)

ans =

    0.2560

>> blsprice(Price, Strike, Rate, Time, 0.01, 0)

ans =

    0.2560

>> blsprice(Price, Strike, Rate, Time, 0.001, 0)

ans =

    0.2560

>> blsprice(Price, Strike, Rate, Time, 0.0001, 0)

ans =

    0.2560
已有 1 人评分经验 收起 理由
chengzhifu2013 + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

8
yscapital 发表于 2016-12-20 20:56:26
Chemist_MZ 发表于 2016-12-19 06:21
call 的下界是S-Kexp(-rT)=0.256,  你的input price0.253已经低于下界了,所以算不出来,看我下面不断减小 ...
大侠一语点醒,非常感谢您的指点。

9
change1210 发表于 2018-9-28 12:43:08
请问最后是怎么解决的啊

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2026-1-4 02:45