Registriert seit: 27.03.2019
Version(en): 2016
Hallo zusammen, wie ich Anfangs schon geschrieben habe, hatte ich einige Modelle im Internet gefunden, an denen ich mich orientiert habe. Das Bewertungsmodell welches ich verwende ist jedoch deutlich komplexer. Ich habe aber einen R-Code gefunden der ziemlich ähnlich mit meinem Model in der Thesis ist und habe versucht das soweit nachzubauen.
R-Code.xlsx (Größe: 100,39 KB / Downloads: 2)
Das ist der R-Code. Da er wie gesagt sehr Ähnlich ist, ist mein primäres Ziel wenigstens diesen erstmal zu haben und dann so anzupassen, dass es wie in meiner Thesis ist. Viele Grüße Maxel
Registriert seit: 06.12.2015
Version(en): 2016
Hallo, hier eine TEILWEISE Anpassung an VBA: Prüfe alle "End If". Dass sollte mithilfe des R-Editors relativ einfach sein. CValue ist ein Array, auch das konnte ich nicht anpassen. 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 '>>>>>>>>>>>> n = cieling (n) n = Round(n + 1, 0) '????????? '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 = 2 To n For i = 1 To j
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 End If Next i 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 j = n To 1 Step -1 For i = 1 To j
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
mfg
Registriert seit: 27.03.2019
Version(en): 2016
Vielen Dank!
Das hilft mir wirklich weiter.
Der CCValue soll auch eigentlich kein Array sein, sondern es soll in jedem Knoten verglichen werden was größer ist. Also der Nennwert (FV) oder der Aktienkurs (s) mal Wandelverhältnis (k). Der größere soll dann in jedem Knoten jeweils in die Formel eingesetzt werden.
Und der Wert CCValue (1, 1) ist dann der Wert der Wandelanleihe zum jetzigen Zeitpunkt.
Beste Grüße Maxel
|