27.03.2019, 10:23
Hallo zusammen,
ich bin blutiger Anfänger was VBA bzw. Programmieren an sich angeht. Ich muss jedoch in 2 Wochen meine Thesis abgeben und bin langsam sehr verzweifelt, da ich dafür einen Binomial Baum zur Bewertung von Wandelanleihen schreiben muss. Ich hoffe daher, dass ihr mir helfen könnt.
Kurz worum es geht. Im ersten Schritt sollen Aktienkure simuliert werden. Es geht in jedem Punkt einmal hoch (u) und runter (d) unter Berücksichtigung des Risikos (Lambda).
Im zweiten Schritt soll entschieden werden was am Ende am größten ist. Der Wert der Wandelanleihe oder der Aktienkurs multipliziert mit dem Wandelverhältnis der Anleihe und entsprechend wird nun Schritt für Schritt mit den größeren Wert von beidem zurück gerechnet.
Beispielsweise zeigt er mir bei (1) Next J und (1) Next I „Fehler beim Kompilieren: next ohne for“ obwohl ich das vorher gemacht habe.
Bei der Rückwärtsschleife zeigt er mir bei „For I = n To step – 1“ und „For J = 1 To I“ zeigt er mir als Fehler " For-Steuervariable wird bereits verwendet" an.
Am Ende könnt ihr sehen, dass ich Call mit Call2 und in der letzten Formel mit Call22 beschrieben habe, weil er mir sonst immer "Fehler beim kompilieren: Erwartet: Ausdruck" angezeigt hat, was für mich überhaupt kein Sinn macht und ich dadurch auch nicht die Funktion nutzen kann, da Call22 nicht definiert ist.
Mit sicherheit fällt euch bestimmt noch so einiges auf.
Schonmal vielen vielen Dank im Voraus!!!!!
Ich hab das Sheet auch angehangen.[attachment=23297]
Der Komplette Code lautet:
ich bin blutiger Anfänger was VBA bzw. Programmieren an sich angeht. Ich muss jedoch in 2 Wochen meine Thesis abgeben und bin langsam sehr verzweifelt, da ich dafür einen Binomial Baum zur Bewertung von Wandelanleihen schreiben muss. Ich hoffe daher, dass ihr mir helfen könnt.
Kurz worum es geht. Im ersten Schritt sollen Aktienkure simuliert werden. Es geht in jedem Punkt einmal hoch (u) und runter (d) unter Berücksichtigung des Risikos (Lambda).
Im zweiten Schritt soll entschieden werden was am Ende am größten ist. Der Wert der Wandelanleihe oder der Aktienkurs multipliziert mit dem Wandelverhältnis der Anleihe und entsprechend wird nun Schritt für Schritt mit den größeren Wert von beidem zurück gerechnet.
Beispielsweise zeigt er mir bei (1) Next J und (1) Next I „Fehler beim Kompilieren: next ohne for“ obwohl ich das vorher gemacht habe.
Bei der Rückwärtsschleife zeigt er mir bei „For I = n To step – 1“ und „For J = 1 To I“ zeigt er mir als Fehler " For-Steuervariable wird bereits verwendet" an.
Am Ende könnt ihr sehen, dass ich Call mit Call2 und in der letzten Formel mit Call22 beschrieben habe, weil er mir sonst immer "Fehler beim kompilieren: Erwartet: Ausdruck" angezeigt hat, was für mich überhaupt kein Sinn macht und ich dadurch auch nicht die Funktion nutzen kann, da Call22 nicht definiert ist.
Mit sicherheit fällt euch bestimmt noch so einiges auf.
Schonmal vielen vielen Dank im Voraus!!!!!
Ich hab das Sheet auch angehangen.[attachment=23297]
Der Komplette Code lautet:
Code:
Function CRRCBV(S0 As Double, FV As Double, ttm As Double, r As Double, sigma As Double, L As Double, k As Double, Callprice As Double, rho As Double, C As Double, PD As Double, CallNY As Double) As Double
' Definieren der Variablen
Dim dt, n, u, d, p, gamma As Double
dt = 1 / 12
n = ttm / dt + 1
'Definieren der Parameter
u = Exp((r - (sigma ^ 2) / 2) * dt + sigma * Sqr(dt))
d = Exp((r - (sigma ^ 2) / 2) * dt - sigma * Sqr(dt))
p = 1 / 2
gamma = -Log(1 - PD) * S0
'Definieren der Aktie und Aktienkurse, sowie die Ausfallwahrscheinlichkeit
Dim lambda() As Integer
Dim S() As Double
ReDim S(n + 1, n + 1) As Double
S(1, 1) = S0
lambda(1, 1) = gamma / S(1, 1)
For J = 1 To step + 1
For I = 1 To step + 1
If I = J Then
S(I, J) = S(I - 1, J - 1) * d * Exp(lambda(I - 1, J - 1) * dt)
Else
If I < J Then
S(I, J) = S(I, J - 1) * u * Exp(lambda(I, J - 1) * dt)
lambda(I, J) = gamma / S(I, J)
Else
S(I, J) = 0
lambda(I, J) = 0
End If
(1) Next I
(1) Next J
'Wert der Anleihe Berechnen (Rückwärtsschleife):
Dim CCValue As Double
Dim NoCall As Double
Dim Y As Double
Dim Call2 As Double
For I = n To step - 1
For J = 1 To I
If J = n Then
CCValue = WorksheetFunction.Max(FV, k * S(I, J))
Else
NoCall(I, J) = Exp(-r * dt) * (Exp(-lambda(I, J) * dt) * (p * CCValue(I, J + 1) + (1 - p) * CCValue(I + 1, J + 1)) + (1 - Exp(-lambda(I, J) * dt)) * (1 - L) * FV)
Coupon = Exp(-(r + lambda(I, J)) * dt) * C * FV * (ttm / n)
If CALLYN = 1 Then
Call2(I, J) = Max(k * S(I, J), Callprice)
Y(I, J) = (NoCall(I, J) / Call2(I, J) - 1)
Else
If Y(I, J) < 0 Then
Y(I, J) = 0
Else
If Call2(I, J) = 0 Then
Y(I, J) = 0
End If
CCValue(I, J) = Coupon + Exp(-(rho * Y(I, J) * dt) * NoCall(I, J) + (1 - Exp(-rho * Y(I, J) * dt))) * Call22(I, J)
CCValue = CCValue(1, 1)
End Function