【问题标题】:Negative option prices for certain input values in MATLAB?MATLAB中某些输入值的负期权价格?
【发布时间】:2017-02-17 00:37:45
【问题描述】:

在测试算法的过程中,我使用 MATLAB 的金融工具箱中实现的标准定价函数 blsprice 计算了随机输入值的期权价格。

出人意料(至少对我来说),
对于某些输入值组合,该函数似乎返回负的期权价格。

举个例子:

> [Call,Put]=blsprice(67.6201,170.3190,0.0129,0.80,0.1277)

Call =-7.2942e-15
Put = 100.9502

如果我将到期时间更改为 0.790.81,则该值将变为非负值,正如我所期望的那样。

你们有没有人遇到过类似的事情,并能想出一个简短的解释为什么会发生这种情况?

【问题讨论】:

  • 这个问题可能更适合Quantitative Finance?但是,由于该值非常小,我怀疑它只是一个floating point error,因为在内部计算的某个时刻被截断了。也许考虑四舍五入到一个合适的精度,比如 4 个小数点?然后Call 价格变为0
  • 通过提交service request 请求 MathWorks 支持可能也是一个好问题。这可能是一个错误,或者他们可能只是没有强制执行边界条件。您还可以查看底层代码(如果它未编译或pcodeed)以了解发生了什么:在命令行窗口中输入edit blsprice

标签: matlab quantitative-finance


【解决方案1】:

我不知道您使用的是哪个版本的 Financial Toolbox,但对我来说 (TB 2007b) 可以正常工作。

运行时:

[Call,Put]=blsprice(67.6201,170.3190,0.0129,0.80,0.1277)

我得到以下信息:

Call = 9.3930e-016
Put = 100.9502

这确实是积极的

【讨论】:

    【解决方案2】:

    有点晚了,但我以前遇到过这样的事情。较小的负值可归因于用于计算累积正态分布的例程中的数值舍入误差和/或截断误差。

    正如您所知,计算机并不完美,所有计算中始终存在小的数值误差,因此我认为应该提出的问题是 - 所使用的输入参数的准确性是多少,因此误差容限是多少用于输出。

    我之前遇到它时的想法是,在金融领域,典型的年度股票价格回报方差约为 30%,这意味着平均回报通常以大约 30%/sqrt 的标准误差进行抽样(N) 大约是 +/- 1% 的数量级,假设有 2 年的数据(所以 N = 260 x 2 = 520,任何更多的数据,你还有其他的平稳性假设问题)。因此,在此基础上,鉴于容错,您在上面得到的答案可能被解释为零。

    此外,我们通常会努力达到美分/美分的准确性,并且在此基础上,您的答案可能会被解释为零。

    只是想我会给我的 2c 希望这在某些方面会有所帮助,如果您仍在检查答案!

    【讨论】:

    • 确实很高兴您迈出了一步,+ 对模型假设(平稳性)的弱点和展示“残差的非随机过程分布特征所需的观察规模有一个可爱的看法".在这个意义上,几乎所有金融科技模型都存在缺陷 - 使用裸数学,与问题域的离散性质的现实脱节(除非主要使用自下而上的离散(量子步进)值和计算工具,完全尊重这种主要的值不连续性并在内部保持“步进”(即使在梯度等中)。很有趣!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2022-06-23
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    相关资源
    最近更新 更多