0
我希望此過程在多個單元格中生成相同的數字。我希望錯誤條款保持不變。我是VBA新手,但我假設有一行代碼會告訴它不要使用一組新的隨機值運行公式。基於隨機分佈樣本生成相同數字的VBA函數
Option Base 1
Function EuropeanOptionMonteCarlo(c_ As String, s As Double, x As Double, t As Double, z As Double, r_ As Double, q As Double, n As Double, nIter As Double) As Variant
Dim dt, e, dlns, price, SimVar(), PayVar() As Double
ReDim SimVar(nIter, n + 1)
ReDim PayVar(nIter)
dt = t/n
a = 0
For i = 1 To nIter
SimVar(i + a, 1) = s
Randomize
p = 0
For j = 1 To n
If (j - 1)/365 - Int((j - 1)/365) = 0 And j > 1 Then p = p + 1
e = WorksheetFunction.NormSInv(Rnd())
dlns = (r_ - q - z^2/2) * dt + z * e * dt^0.5
If j - 365 * p = 1 And p > 0 Then
SimVar(i + p + a, 2) = SimVar(i + p - 1 + a, 366) * Exp(dlns)
Else
SimVar(i + p + a, j - 365 * p + 1) = SimVar(i + p + a, j - 365 * p) * Exp(dlns)
End If
Next j
If c_ = "C" Then
PayVar(i) = WorksheetFunction.Max(SimVar(i + p + a, j - 365 * p) - x, 0) * Exp(-r_ * t)
ElseIf c_ = "P" Then
PayVar(i) = WorksheetFunction.Max(x - SimVar(i + p + a, j - 365 * p), 0) * Exp(-r_ * t)
End If
a = a + p
Next i
price = 0
temp = 0
For i = 1 To nIter
price = price + PayVar(i)
Next i
price = price/nIter
EuropeanOptionMonteCarlo = price
End Function
哦!我已被提升! ;-)(會編輯你的答案,以擺脫不正確的狀態ugrade。) – YowE3K