WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Iteratives Verfahren (Merton-Modell)

 

matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 11:52     Titel:
  Antworten mit Zitat      
So:

>> size(sigma_E)

ans =

1 1

>> size(d1)

ans =

250 1

>> Hier nehme ich nur d1(1), da ich das Ganze erst testweise für Tag 1 hinkriegen will --> Rest später über die for-Schleife

>> size(E_t)

ans =

250 1

Auch hier nur E_t(1), aus dem selben Grund wie bei d1.

>> size(A)

ans =

1 1

Die Dimension hiervon ergibt sich daraus dass ich nur den ersten Tag überhaupt berechnen ließ, selbe Begründung wie oben.

Hier der Code:

Code:
%%Merton-Modell

clear all
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;

sigma_A   = std(diff(log(A_start(1:250,1))))*sqrt(250);
sigma_E = std(diff(log(E(1:250,1))))*sqrt(250);



T         = 250;
d1        = zeros(250,1);
d2        = zeros(250,1);
d1_start  = zeros(250,1);
d2_start  = zeros(250,1);
PD        = zeros(250,1);
DD        = zeros(250,1);
A         = zeros(250,1);

%%
%%Berechnung

%Start mit erster Schätzung



 
%for t = 1:250
    % Black-Scholes-Formeln
    d1_start = (log(A_start(251)/D(251))+(r(1)+sigma_A^2/2)*(T-1))/(sigma_A*sqrt(T-1));
    d2_start = d1_start -sigma_A*sqrt(T-1);
   
    % Erste Berechnung der Modellwerte auf Basis der Schätzwerte
    A = (E(251)+D(251)*exp(-r(1))*normcdf(d2_start(1)))/normcdf(d1_start(1));
    E_t = A*normcdf(d1)-D(1)*exp(-r(T-1))*normcdf(d2);
    % Berechnete Assetwerte als neue Startwerte
    %A_start(t+250) = A(t,1);

   
%end
   % Berechnung der Vola der berechneten Assetwerte
    sigma_A = sigma_E*E_t(1)/A;
    sigma_E_t= sigma_A*normcdf(d1(1))*A/E_t(1);
   
 
   
 

x_0(1)=rand;
x_0(2)=rand;

x_s=fsolve(@mertonfunktion,x_0) ;
   
   

   
 


   
% noch irrelevant

%PD(t,1) = normcdf((log(D(t+250)/A_t_start(t)-(y_A(t-1)-sigma_A^2/2)*(T-t)))/(sigma_A*sqrt(T-t)));
%DD(t,1) = (log(A_t_start(t))+(y_A(t-1)-sigma_A^2/2)*(T-t)-log(D(t+250)))/(sigma_A*sqrt(T-t));


 


fsolve ist hier noch nicht vollständig implementiert. Mit d1(1) und E_t(1) stimmen aber immerhin die Dimensionen der diversen sigmas, sind also 1x1.
Bei den Black-Scholes-Formeln werden später die Indizes "1" durch "t" ersetzt und die for-Schleife wieder eingebaut.
Private Nachricht senden Benutzer-Profile anzeigen


MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 02.11.2012, 12:03     Titel:
  Antworten mit Zitat      
Gut, dann müsste das doch eigentlich soweit alles stimmen. mertonfunktion musst du natürlich noch die Parameter übergeben. Diesbzgl. kannst du dich an die von mir vorgeschlagene Definition halten.
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 12:12     Titel:
  Antworten mit Zitat      
Zielfunktion:

Code:
function [y]=mertonfunktion(x,sigma_E,sigma_E_t,E_t,d1)

   y(1)=x(1)- sigma_E*E_t/x(2);
   y(2)=sigma_E_t - x(1)*normcdf(d1)*x(2)/E_t;
end
 



Aufruf:

Code:
% [y]=nonlinSystem(x,sigma_E,sigma_E_t,E_t,d1)

% Startwerte
x_0(1)=sigma_A;
x_0(2)=A;

% Parameter
sigma_E=rand;
sigma_E_t=rand;
E_t=rand;
d1=rand;

x_s=fsolve(@(x) mertonfunktion(x,sigma_E,sigma_E_t,E_t,d1),x_0)



Ergebnis:

Code:
Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.

<stopping criteria details>


x_s =

  1.0e+005 *

   0.000000000004237   4.213933438864154


Unterscheidet sich von den Startwerten, in genau der Größenordnung wie in diesem Fall zu erwarten.

Arrow Mir bleibt nur noch Dir recht herzlich zu danken, ohne Dich säße ich wahrscheinlich nächste Woche noch daran! Embarassed Idea


Danke! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 02.11.2012, 12:25     Titel:
  Antworten mit Zitat      
Gern geschehen! Eine Volatilität in der Größenordnung ist zwar gering, scheint aber zu passen?! Hast du tageweise betrachtet?
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 12:31     Titel:
  Antworten mit Zitat      
Wenn ich den ganzen Spaß richtig verstanden habe ist die Vola die dabei herauskommt nur ein Nebenprodukt, die eigentliche wird dann schlussendlich wieder berechnet wenn ich erstmal wieder meine 250 Tage beisammen habe.
Außerdem kommt bei dem Zweigleichungsverfahren laut Literatur bei gesunden Unternehmen tendenziell eine niedrigere Vola raus als beim iterativen Verfahren.
Grundsätzlich schwurbelt mir aber dermaßen der Kopf davon... Shocked Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 02.11.2012, 12:44     Titel:
  Antworten mit Zitat      
Gut, solch eine geringe Volatilität spricht für eine lineares Wachstumsverhalten. Das musst du beurteilen, ob das passt. Das mit dem Kopfschwurbeln kenne ich. Ich hatte Finanz-Mathe im Studium. Sto. Prozesse, sto. Integrale... das ist nicht ohne.
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 12:46     Titel:
  Antworten mit Zitat      
Mich wundert es auch noch etwas, zumal mal den Asset Values in diesem Modell eine Lognormalverteilung unterstellt.

Im ersten Durchlauf kam auch mal 0.1912 als Vola heraus sehe ich gerade, hmmmm Question

Insgesamt kann man nur sagen: Ein Modell welches einen Nobelpreis erhielt kann nicht total easy sein Wink


Edit: Bin vor lauter Gehirnschwurbel mit nem Buchstaben verrutscht, 0.1912 war der Startwert *Hand an Hirn*
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 13:19     Titel:
  Antworten mit Zitat      
Und jetzt kommt auf einmal das hier, bei unverändertem Code:

Code:
??? Output argument "F" (and maybe others) not assigned during call to
"C:\Users\XXX\Documents\MATLAB\mertonfunktion.m>mertonfunktion".

Error in ==> @(x)mertonfunktion(x,sigma_E,sigma_E_t,E_t,d1)


Error in ==> fsolve at 254
            fuser = feval(funfcn{3},x,varargin{:});

Error in ==> Merton2GLTEST at 74
F=fsolve(@(x) mertonfunktion(x,sigma_E,sigma_E_t,E_t,d1),x_0)

Caused by:
    Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.


Was ist denn nun los? Shocked Shocked Shocked
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 02.11.2012, 14:06     Titel:
  Antworten mit Zitat      
Bitte einmal den Code angeben, mitsamt des Aufrufs von fsolve und der Funktionsdefinition.
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 14:08     Titel:
  Antworten mit Zitat      
Code:
%%Merton-Modell

clear all
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;

sigma_A   = std(diff(log(A_start(1:250,1))))*sqrt(250);
sigma_E = std(diff(log(E(1:250,1))))*sqrt(250);



T         = 250;
d1        = zeros(250,1);
d2        = zeros(250,1);
d1_start  = zeros(250,1);
d2_start  = zeros(250,1);
PD        = zeros(250,1);
DD        = zeros(250,1);
A         = zeros(250,1);

%%
%%Berechnung

%Start mit erster Schätzung



 
%for t = 1:250
    % Black-Scholes-Formeln
    d1_start = (log(A_start(251)/D(251))+(r(1)+sigma_A^2/2)*(T-1))/(sigma_A*sqrt(T-1));
    d2_start = d1_start -sigma_A*sqrt(T-1);
   
    % Erste Berechnung der Modellwerte auf Basis der Schätzwerte
    A = (E(251)+D(251)*exp(-r(1))*normcdf(d2_start(1)))/normcdf(d1_start(1));
    E_t = A*normcdf(d1)-D(1)*exp(-r(T-1))*normcdf(d2);
   

   
%end
   % Berechnung der Vola der berechneten Assetwerte
    sigma_A = sigma_E*E_t(1)/A;
    sigma_E_t= sigma_A*normcdf(d1(1))*A/E_t(1);
   
 
   
 



% Lösen des Zwei-Gleichungs-Systems

% Startwerte
x_0(1)=sigma_A;
x_0(2)=A;

% Parameter
sigma_E=rand;
sigma_E_t=rand;
E_t=rand;
d1=rand;

F=fsolve(@(x) mertonfunktion(x,sigma_E,sigma_E_t,E_t,d1),x_0)


Code:
function [F]=mertonfunktion(x,sigma_E,sigma_E_t,E_t,d1)

   y(1)=x(1)- sigma_E*E_t/x(2);
   y(2)=sigma_E_t - x(1)*normcdf(d1)*x(2)/E_t;
end
 


Ich habe nichts davon bewusst verändert. Shocked
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 02.11.2012, 14:23     Titel:
  Antworten mit Zitat      
Hast du bestimmt... Wink

Richtig wäre
Code:

function [F]=mertonfunktion(x,sigma_E,sigma_E_t,E_t,d1)

   F(1)=x(1)- sigma_E*E_t/x(2);
   F(2)=sigma_E_t - x(1)*normcdf(d1)*x(2)/E_t;
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 14:26     Titel:
  Antworten mit Zitat      
Oh Mann Shocked Shocked Embarassed Und dann liegt es auch noch so auf der Hand^^ Aber ehrlich, nachdem es funktioniert hatte habe ich nichts verändert, evtl. ist mit dem Abspeichern was schiefgegangen...
Bei Matlab weiß man ja nie, mir ist es schon mal bei einer sehr langen Monte-Carlo-Simulation passiert dass plötzlich mein Code weg war und durch die Protokollierung des Starts des Apple Mobile Device-Dienstes ersetzt war, kein Witz Rolling Eyes

Anyway, danke! Glaube ich muss mal an die frische Luft Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.