Exercise policy for optioner i VBA
Det er sikkert et ret basic spørgsmål, men here goes:Jeg er i gang med at udarbejde et ark for finansielle optioner i excel og skal i den forbindelse lave en kode i VBA der automatisk kan vise om optionen skal indløses eller om den skal beholdes. Jeg har udarbejdet, hvordan stockprice og optionprice bevæger sig vha VBA, men jeg kan ikke få koden der skal vise om optionen skal "Keep" eller "Exercise" til at fungere. Jeg har c/p de to første koder som fungerer ind herunder og nederst har jeg indsat den kode som jeg ikke kan få til at virke lige nu:
Module1:
Option Base 1
Function stockgridVarPeriod(S, X, T, rf, sigma, n)
Dim delta_t, u, d
delta_t = T / n
u = Exp(sigma * Sqr(delta_t))
d = Exp(-sigma * Sqr(delta_t))
Dim stockgrid()
ReDim stockgrid(n + 1, n + 1)
stockgrid(1, 1) = S
Dim time, i
For time = 2 To n + 1
i = time
stockgrid(i, time) = d * stockgrid(i - 1, time - 1)
Next time
For time = 2 To n + 1
For i = 1 To time - 1
stockgrid(i, time) = u * stockgrid(i, time - 1)
Next i
Next time
stockgridVarPeriod = stockgrid
End Function
Module2:
Option Base 1
Function optiongridVarPeriodAmrPut(S, X, T, rf, sigma, n)
Dim delta_t, u, d, R, qu, qd, time, i
Dim stockgrid()
ReDim stockgrid(n + 1, n + 1)
stockgrid = stockgridVarPeriod(S, X, T, rf, sigma, n)
delta_t = T / n
u = Exp(sigma * Sqr(delta_t))
d = Exp(-sigma * Sqr(delta_t))
R = Exp(rf * delta_t)
qu = (R - d) / (R * (u - d))
qd = (u - R) / (R * (u - d))
Dim optiongrid()
ReDim optiongrid(n + 1, n + 1)
For i = 1 To n + 1
time = n + 1
optiongrid(i, time) = Application.Max(X - stockgrid(i, time), 0)
Next i
For time = n To 1 Step -1
For i = 1 To time
optiongrid(i, time) = Application.Max(X - stockgrid(i, time), qu * optiongrid(i, time + 1) + qd * optiongrid(i + 1, time + 1))
Next i
Next time
optiongridVarPeriodAmrPut = optiongrid
End Function
Function gridAmrPutPrice(S, X, T, rf, sigma, n)
Dim delta_t, u, d, R, qu, qd, time, i
Dim stockgrid()
ReDim stockgrid(n + 1, n + 1)
stockgrid = stockgridVarPeriod(S, X, T, rf, sigma, n)
delta_t = T / n
u = Exp(sigma * Sqr(delta_t))
d = Exp(-sigma * Sqr(delta_t))
R = Exp(rf * delta_t)
qu = (R - d) / (R * (u - d))
qd = (u - R) / (R * (u - d))
Dim optiongrid()
ReDim optiongrid(n + 1, n + 1)
For i = 1 To n + 1
time = n + 1
optiongrid(i, time) = Application.Max(X - stockgrid(i, time), 0)
Next i
For time = n To 1 Step -1
For i = 1 To time
optiongrid(i, time) = Application.Max(X - stockgrid(i, time), qu * optiongrid(i, time + 1) + qd * optiongrid(i + 1, time + 1))
Next i
Next time
gridAmrPutPrice = optiongrid(1, 1)
End Function
Module3:
Option Base 1
Function PolicyAmrPut(S, X, T, rf, sigma, n)
Dim delta_t, u, d, R, qu, qd, time, i
delta_t = T / n
u = Exp(sigma * Sqr(delta_t))
d = Exp(-sigma * Sqr(delta_t))
R = Exp(rf * delta_t)
qu = (R - d) / (R * (u - d))
qd = (u - R) / (R * (u - d))
Dim stockgrid()
ReDim stockgrid(n + 1, n + 1)
stockgrid = stockgridVarPeriod(S, X, T, rf, sigma, n)
Dim optiongrid()
ReDim optiongrid(n + 1, n + 1)
optiongrid = optiongridVarPeriodAmrPut(S, X, T, rf, sigma, n)
Dim Policygrid()
ReDim Policygrid(n + 1, n + 1)
For time = 1 To n + 1 Step 1
For i = 1 To time
Policygrid(i, time) = Application.if(X - stockgrid(i, time) > qu * optiongrid(i, time + 1) + qd * optiongrid(i + 1, time + 1), "Exercise", "Keep")
Next i
Next time
PolicyAmrPut = Policygrid
End Function
Det er som nævnt ovenfor Module3 jeg ikke kan få til at virke, hvor modulet trækker data fra både module1 og module2 og skal skrive enten "Exercise" eller "Keep" alt efter om ligningen for Policygrid(i, time) er opfyldt.
Jeg håber der er en der kan gennemskue det :)