Ich möchte mithilfe des Merton-Modells die Ausfallswahrscheinlichkeit eines Unternehmens bestimmen. Das Merton-Modell ist eine auf Unternehmen als Ganzes umgemünzte Version des Black-Scholes(-Merton)-Modells zur Bewertung von Kaufoptionen.
Das Verfahren an sich ist denke ich zu speziell und würde den Rahmen sprengen, deshalb versuche ich das Problem einzugrenzen:
Es geht um 2 nicht beobachtbare Variablen, nämlich:
1. Den Assetwert des Unternehmens, A
2. Die Volatilität dieses Assetwertes, sigma
Dieses Problem ist aufgrund einer unzureichenden Anzahl an Gleichungen nicht analytisch lösbar, deswegen muss es numerisch gelöst werden.
Im ersten Schritt schafft man sich Schätzwerte für A und sigma. A wird dabei durch Addition der Aktien-Marktkapitalisierung und der Schulden des Unternehmens approximiert, sigma entspricht der annualisierten logarithmierten Rendite über das erste Jahr.
Nun folgt ein iteratives Verfahren um den Modell-Assetwert zu bestimmen, und eben dort liegt bei mir der Hase im Pfeffer.
Kurz gesagt berechnet man mit einer Formel die - extrem vereinfacht - A mit einigen anderen Variablen und eben sigma in Verbindung bringt auf Basis der ersten Schätzwerte die erste Runde Modell-Assetwerte.
von diesen ersten Assetwerten bestimmt man wieder sigma, und setzt dieses sowie die berechneten Assetwerte wieder in die genannte Gleichung ein. Dies tut man solange bis die Prozedur konvergiert, ergo der quadrierte Unterschied zweier aufeinanderfolgender Durchläufe nahe genug an Null ist.
So sieht mein Code bisher aus:
Code:
%%Merton-Modell
load 'MertonDaten'
%% Daten
E = MertonDaten(1:500, 1);
D = MertonDaten(1:500, 3);
A_start = E+D;
r = MertonDaten(251:500,2);
y_A = r;
for t = 1:250 % Black-Scholes-Formeln
d1_start(t,1) = (log(A_start(t+250)/D(t+250))+(r(t)+sigma_start^2/2)*(T-t))/(sigma_start*sqrt(T-t));
d2_start(t,1) = d1_start(t)-sigma_start*sqrt(T-t);
% Erste Berechnung der Modellwerte auf Basis der Schätzwerte
A(t,1) = (E(t+250)+D(t+250)*exp(-r(t))*normcdf(d2_start(t)))/normcdf(d1_start(t));
% Berechnete Assetwerte als neue Startwerte
A_start(t+250) = A(t,1);
end % Berechnung der Vola der berechneten Assetwerte
sigma_A = std(diff(log(A)))*sqrt(250);
% Berechnete Vola als neue Startvola
sigma_start = sigma_A;
Ich habe einiges versucht, zB einfach mittels einer for-Schleife das Ganze noch 100x berechnen zu lassen und dann zu gucken ab wann sich sigma nicht mehr ändert, aber erstens kamen komische Assetwerte heraus, zweitens ist das natürlich nicht allgemein anwendbar im Anschluss.
Ich wäre sehr sehr dankbar wenn mir jemand hier einen Tipp geben könnte wie ich das hinkriege!
ich möchte über A und Sigma_A F=0 lösen, ja. Glaube ich zumindest. Ich werde aus der Dokumentation leider nicht sonderlich schlau, meine Probleme sind:
1. wie übergebe ich die Variablen in die Funktion
2. wie weiß ich hernach bei der kryptischen Ausgabe was A und Sigma _A ist?
Aber vor allem 1., muss ich alles in x(1) etc umbenennen?
Die Variablen einfach mit ihrem Namen zu übergeben klappt nicht.
Grüße
% sigma_A(1) kann hier aber nicht gemeint sein, oder?
Das liegt daran dass ich durch einiges Rumprobieren dass Problem hatte dass Sigma plötzlich statt Format 1x1 1x250 hatte, ohne dass eine entsprechende Definition irgendwo gewesen wäre. Selbst nach PC-Neustart bliebt das so
sigma_A = sigma_E(1)*E_t(1)/A(1); did the trick. Analog wohl beim Rest..
P.S.: Wäre supernett wenn du mir noch die Definition der Variablen erklären könnte, ich habe Funktionen bisher nie so wirklich verwendet und bekomme nur Fehlermeldungen dass Variable so und so unbekannt ist wenn ich deinen Code ausführe
Kann ich die Parameter denn so definieren dass sie sich ihre Werte jeweils aus dem Hauptfile holen? Hintergrund ist dass das ganze keine statische Sache ist, sondern im Hauptfile noch in eine for-Schleife gepackt wird später, da ich ein rolling window brauche.
Grüße
Edith sagt: Meine natürlich die "bekannten" Werte, nicht die Startwerte für Sigma_A und A.
Du kannst x_s=fsolve(@(x) nonlinSystem(x,sigma_E,sigma_E_t,E_t,d1),x_0) natürlich innerhalb einer Schleife aufrufen und die Parameter sigma_E,sigma_E_t,E_t,d1 variieren.
Zum Thema "sigma_A = sigma_E(1)*E_t(1)/A(1)". Ein Skalar sollte eine Skalar bleiben. Mit solchen "Tricks" würde ich nicht arbeiten, eher die Ursache dafür beseitigen.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.