在测试算法的过程中,我使用在MATLAB的金融工具箱中实现的标准定价函数 blsprice
计算随机输入值的期权价格。
令人惊讶的是(至少对我而言),
对于某些输入值组合,该函数似乎返回负选项价格。
作为一个例子,请采取以下措施:
> [Call,Put]=blsprice(67.6201,170.3190,0.0129,0.80,0.1277)
Call =-7.2942e-15
Put = 100.9502
如果我将到期时间更改为0.79
或0.81
,则该值会像我预期的那样变为非负数。
你们有没有人经历过类似的事情,并且可以提出一个简短的解释为什么会发生这种情况?
答案 0 :(得分:2)
我不知道您使用的是哪个版本的金融工具箱,但对我来说(TB 2007b)它运行良好。
运行时:
[Call,Put]=blsprice(67.6201,170.3190,0.0129,0.80,0.1277)
我得到以下内容:
Call = 9.3930e-016
Put = 100.9502
这确实是积极的
答案 1 :(得分:1)
有点晚了,但我之前遇到过这样的事情。小负值可归因于用于计算累积正态分布的例程中的数字舍入误差和/或截断误差。
如您所知,计算机并不完美,并且在所有计算中始终存在小的数值误差,因此在我看来,应该问的问题是 - 使用的输入参数的准确性是多少,因此误差容限是多少?输出。
我之前遇到的方式是,在金融方面,典型的年度股票价格回报差异大约为30%,这意味着平均回报通常采用大约30%/ sqrt的标准误差进行抽样(N)假设2年的数据大约约为+/- 1%(因此N = 260 x 2 = 520,您有另一个数据存在平稳假设的问题)。因此,在此基础上,鉴于误差容限,上面得到的答案可能被解释为零。
此外,我们通常会以精确/分精度工作,并且在此基础上,您的答案可能会被解释为零。
以为我会给我的2c希望如果你还在检查答案,这在某些方面会有所帮助!