【问题标题】:Binomial European Options Pricing Model二项式欧式期权定价模型
【发布时间】:2015-06-03 12:48:33
【问题描述】:

我使用 VBA 创建了一个程序来计算欧式看涨期权价格,如下所示:

Private Sub CallPrice_Click()
Dim K As Single
Dim So As Single
Dim r As Single
Dim T As Single
Dim sigma As Single
Dim u As Single
Dim d As Single
Dim p As Single
Dim CP As Single
Dim M As Single
Dim S As Single
Dim CB As Double
Dim n As Integer
Dim i As Integer

K = Cells(2, 2)
So = Cells(3, 2)
r = Cells(4, 2)
T = Cells(5, 2)
sigma = Cells(6, 2)
n = Cells(7, 2)
u = Exp(sigma * Sqr(T / n))
d = 1 / u
p = (Exp(r * T / n) - d) / (u - d)
CP = 0
For i = 0 To n Step 1
    M = WorksheetFunction.Max(So * (u ^ i) * d ^ (n - i) - K, 0)
    CB = WorksheetFunction.Combin(n, i)
    S = M * CB * (p ^ n) * (1 - p) ^ (n - i)
    CP = CP + S
Next i
Cells(9, 2) = CP / (1 + r) ^ n
End Sub

这是电子表格的布局:

当我运行程序时,出现了错误。

有人能解释一下我的程序有什么问题以及如何解决吗?

【问题讨论】:

  • 出错时ni的值是多少?
  • @Rory 我不知道如何检查这些值:'(
  • 查看 --> 立即窗口;然后在即时窗口类型中? 例如? i 然后点击进入。我能猜出 i 中的数字是 162 吗?
  • @99moorem 谢谢。这真的很有帮助:)
  • 快速搜索发现了这个网站上的答案:stackoverflow.com/questions/24875432/…

标签: vba excel


【解决方案1】:

你的 S 方程正确吗?好像应该是这样的:

S = M * CB * (p ^ i) ...

而不是

S = M * CB * (p ^ n) ...

如果您的方程式确实是错误的,那么您可以使用 BINOMDIST 而不是 COMBIN,因为根据定义:

Binom_Dist(i, n, p, False) = (p ^ i) * (1 - p) ^ (n - i) * Combin(n, i)

所以你的代码是:

S = M * WorksheetFunction.Binom_Dist(i, n, p, False)

而不是

CB = WorksheetFunction.Combin(n, i)
S = M * CB * (p ^ n) * (1 - p) ^ (n - i)

BINOMDIST 对大的 n, i 没有那么敏感。

【讨论】:

    【解决方案2】:

    您遇到了溢出错误。如果您检查工作表:

    COMBIN(5000, 161) = 3.3E+307
    COMBIN(5000, 162) = #NUM!
    
    COMBIN(5000, 4838) = #NUM!
    COMBIN(5000, 4839) = 3.3E+307
    

    请记住,组合的数量呈指数增长,直到它开始以相反的速度下降的中点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      相关资源
      最近更新 更多