加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

B-S模型用excel计算

(2018-03-10 17:47:34)

方法一:

借助强大的Excel平台,B-S算法可以轻松解决,具体步骤如下:

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”单元格中试试看。

数据

说明

3.30

stock-正股现价(3.30元)

3.50

exercise-权证行权价(3.50元)

0.50

maturity-权证剩余期限(0.5年)

0.04

rate-无风险利率(4%)

0.30

volatility-波动率(30%)

公式

说明(结果)

=CallOpt(A2,A3,A4,A5,A6)

上述条件下认购权证的理论价格(0.224元)

=PutOpt(A2,A3,A4,A5,A6)

上述条件下认沽权证的理论价格(0.354元)

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



方法二:包含分红的模型

EXCEL中BS模型的VBA代码如下
Function BSOptionPrice(S, K, T, R, Div, Vol, Call_Put)
    d1 = (Log(S / K) + (R - Div + Vol ^ 2 / 2) * T) / (Vol * Sqrt(T))
    d2 = d1 - Vol * Sqrt(T)
    If Call_Put <> 1 Then Call_Put = -1
    x = Call_Put
    Nd1 = Application.NormSDist(x * d1)
    Nd2 = Application.NormSDist(x * d2)
    BSOptionPrice = (S * Exp(-Div * T) * Nd1 - K * Exp(-R * T) * Nd2) * x
End Function


S股价, K行权价, T时间, R利率, Div分红, Vol波动率, Call_Put逻辑值、1为call、-1为put


注:VBA的函数log等于excel工作表函数ln

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有