如何用excel计算bs模型中的波动率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用excel计算bs模型中的波动率相关的知识,希望对你有一定的参考价值。

具体操作步骤如下:

1、首先,打开excel表格,输入增长率数据。需要根据增长率计算波动率,如下图所示,然后进入下一步。

     

2、其次,单击“
 fx”以插入函数,选择stdev函数,然后选择number1中的单元格范围。如下图所示,然后进入下一步。

     

3、接着,完成上述步骤后,可以在单元格中看到选定的单元格区域,如下图所示,然后进入下一步。

     

4、然后,单击Enter以查看计算结果已生成。选择数据单元,然后在【数字】选项卡中单击“%”图标,如下图所示,然后进入下一步。

     

5、最后,设置小数点后两位,就以百分比的形式生成波动率计算结果了,如下图所示。这样,问题就解决了。

     

参考技术A

1、打开一个空白Excel工作表,打开VBA编辑器(点击菜单:工具 -> 宏 -> Visual Basic编辑器):

2、插入模块(点击VBA编辑器菜单:插入 -> 模块):

3、将以下代码复制/粘贴到代码窗口中:

Function CallOpt(stock, exercise, maturity, rate, volatility) As Double

    D1 = (Log(stock / exercise) + (rate + (volatility ^ 2) / 2) * maturity) / (volatility * Sqr(maturity))

    D2 = D1 - volatility * Sqr(maturity)

    CallOpt = stock * Application.NormSDist(D1) - exercise * Exp(-rate * maturity) * Application.NormSDist(D2)

End Function

Function PutOpt(stock, exercise, maturity, rate, volatility) As Double

    D1 = (Log(stock / exercise) + (rate + (volatility ^ 2) / 2) * maturity) / (volatility * Sqr(maturity))

    D2 = D1 - volatility * Sqr(maturity)

    PutOpt = exercise * Exp(-rate * maturity) * Application.NormSDist(-D2) - stock * Application.NormSDist(-D1)

End Function


粘贴完成后如下图:

3、关闭“Visual Basic 编辑器”窗口,回到工作表。此时若查看函数列表,可看到在“用户定义”类别中增加了两个函数,CallOpt和PutOpt:

=CallOpt(stock,exercise,maturity,rate,volatility) 用于计算认购权证的理论价格;

=PutOpt(stock,exercise,maturity,rate,volatility) 用于计算认沽权证的理论价格。

两个函数都是需要5个变量,依次为:

stock-正股现价;

exercise-权证行权价;

maturity-权证剩余期限(折算成年,在Excel中=(到期日-当前日)/365);

rate-无风险利率(一般取国债的年收益率);

volatility-波动率(一般取正股最近3个月的历史波动率);

现在只需要在单元格中输入函数名并依顺序输入各变量,就可轻而易举的算出权证理论价格了。若还有不明白的,请将下表复制/粘贴到工作表“A1”单元格中试试看。

最后将该Excel文件保存起来。记住,以后每次打开该文件,都会出现以下的安全警告,记得一定要点选“启用宏”,否则自定义函数将不能使用。

如何用excel计算年龄,要具体到年月日

给出生日和一个日期,算出当天年龄,结果能显示年龄是几岁几月几天这样的

=IF(F3="","",DATEDIF(F3,NOW(),"y")&"岁零"&DATEDIF(F3,NOW(),"ym")&"个月零"&DATEDIF(F3,NOW(),"md")&"天")
公式中的F3是“出生日期”,格式如“2001-2-2”
如果你想计算你指定现在的日期到出生日期之间的数据,请把公式中的NOW()变为一个日期即可,如“2009-2-2”追问

后面我懂,公式前面这里=IF(F3="",""是什么意思?

追答

哎呀,就是如果数据源(F3)中什么都没有(空值)的时候,那个写有公式的单元格就也为空值(什么都没有)嘛,是为了页面好看做的处理方法。不然显示乱七八糟的东西,看不顺眼啦。
"" 表示空值

追问

那Y,YM,MD是什么意思?为什么不是直接Y,M,D这样呢?

追答

我只大概知道那是年月日的意思,具体的我也不十分清楚呵,你改变参数,多试一下,自己领会吧?

参考技术A 2007版本的excel为:
设A1=出生日期 B1=指定的日期
计算出生日期 至 指定日期的年龄
=YEAR(A1)-YEAR(B1)&"年"& MONTH(A1)-MONTH(B2)&"个月零"&DAY(A1)-DAY(B1)&"天"
2003版本的excel参照其它答案。
参考技术B a1 生日,b1给定日期
年龄 =DATEDIF(A1,B1,"Y")&"岁"&TEXT(B1-A1,"m个月零d天")
参考技术C 几岁几月几天?太难了
计算年龄倒方便:例如:A1单元格是日期型的,1990/3/3,在其他单元格输入=DATEDIF(A1,TODAY(),"y")
参考技术D =CONCATENATE(DATEDIF(G4,NOW(),"Y"),"岁",DATEDIF(G4,NOW(),"yM"),"月",DATEDIF(G4,NOW(),"md"),"天")
在G4里面输入出生年月日

以上是关于如何用excel计算bs模型中的波动率的主要内容,如果未能解决你的问题,请参考以下文章

如何用excel计算两个日期之间相差的年数和月数

如何用excel计算标准差的方法

如何用excel计算出年龄?

如何用excel

如何用excel计算年龄,要具体到年月日

如何用Excel计算P值?