맨 아랫부분에 next j, i 부분이 for 가 없는 next 구문이라고 뜹니다.
어떻게 해결할 수 있나요?
그리고.. 혹시 가능하다면 또 오류날만한것이 있는지 봐주셨으면 합니다.
부탁드립니다!
Function SnRnd()
SnRnd = Rnd() + Rnd() + Rnd() + Rnd() + Rnd() + Rnd() + Rnd() + Rnd() + Rnd() + Rnd() + Rnd() + Rnd() - 6
End Function
Function MonteCarlo(MCflag As String, X As Double, S As Double, StartDate As Date, EndDate As Date, r As Double, q As Double, H As Double, sigma As Double, K As Double, Nsimul As Long)
Dim payoff As Double
Dim sum As Double
Dim Npaths As Double
Dim hit As Double
Dim i As Double, j As Long
Dim T As Double
Dim dt As Double
Dim drift As Double
Dim vsqrt As Double
Dim dr As Double
Npaths = (EndDate - StartDate)
T = Npaths / 365
dt = T / Npaths
drift = (r - q - (sigma ^ 2) / 2) * dt
vsqrt = sigma * Sqr(dt)
sum = 0
CallPutFlag = Mid(MCflag, 1, 1)
UpDownFlag = Mid(MCflag, 2, 1)
InOutFlag = Mid(MCflag, 3, 1)
For i = 1 To Nsimul
payoff = 0
hit = 0
For j = 1 To Npaths
If UpDownFlag = "u" Then
If S >= H Then
hit = 1
If idd = 0 Then
idd = 1
dr = j
End If
ElseIf UpDownFlag = "d" Then
If S < H Then
hit = 1
If idd = 0 Then
idd = 1
dr = j
End If
End If
If UpDownFlag = "u" Then
If CallPutFlag = "c" Then
If InOutFlag = "i" Then
If hit = 1 Then
payoff = Application.Max(0, S - X) * Exp(-r * T)
Else
payoff = K * Exp(-r * T)
End If
ElseIf InOutFlag = "o" Then
If hit = 1 Then
payoff = K * Exp(-r * T)
Else
payoff = Application.Max(0, S - X) * Exp(-r * T)
End If
ElseIf CallPutFlag = "p" Then
If InOutFlag = "i" Then
If hit = 1 Then
payoff = Application.Max(0, X - S) * Exp(-r * T)
Else
payoff = K * Exp(-r * T)
End If
ElseIf InOutFlag = "o" Then
If hit = 1 Then
payoff = K * Exp(-r * (dr / 365))
Else
payoff = Application.Max(0, X - S) * Exp(-r * T)
End If
End If
ElseIf UpDownFlag = "d" Then
If CallPutFlag = "c" Then
If InOutFlag = "i" Then
If hit = 1 Then
payoff = Application.Max(0, S - X) * Exp(-r * T)
Else
payoff = rebate * Exp(-r * T)
End If
ElseIf InOutFlag = "o" Then
If hit = 1 Then
payoff = K * Exp(-r * T)
Else
payoff = Application.Max(0, S - X) * Exp(-r * T)
End If
End If
If CallPutFlag = "p" Then
If InOutFlag = "i" Then
payoff = Application.Max(0, X - S) * Exp(-r * T)
Else
payoff = K * Exp(-r * T)
End If
ElseIf InOutFlag = "o" Then
If hit = 1 Then
payoff = K * Exp(-r * T)
Else
payoff = Application.Max(0, X - S) * Exp(-r * T)
End If
End If
End If
S = S * Exp(drift + vsqrt * Application.NormSInv(Rnd()))
Next j
sum = sum + payoff
Next i
MonteCarlo = sum / Nsimul
End Function