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

Ausgabematrix A in Excel

 

Pythagoras79
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2010, 15:51     Titel: Ausgabematrix A in Excel
  Antworten mit Zitat      
Hi, hab folgendes Programm für die Preisberechnung einer Option. Für die verschiedenen Werte von lambda sollen die resultierenden Preise angegeben werden. Wenn ich es aber so laufen lasse, werden immer nur die berechneten Werte ausgegeben und wieder überschrieben. Die Endamtrix A ist also nur mit den letzten Werten gefüllt. Ziel ist aber eine Excel Tabelle mit Splate 1 lamda Werte und Spalte 2 mit den entsprechenden Preisen.
Wenn ich eine weitere Hilfsvariable z hinzufüge meckert das Hintergrundprogramm SET mit Dimension dismatch!
Hat jemand eine Idee?
Hier die beiden Programme...
Code:

%Data Boyle and Lau:
% S=95;X=100;H=90;T=1;t=0;n=100;r=0.1;q=0;sigma=0.25;k=2;

function european_call_trin_ritch = European_call_trin_ritch_bsp(S,X,T,t,n,r,q,sigma,k)
 format short
 
for lambda=1:0.01:k;

%Parameterberechnung
delta_t = (T-t)./n;
mu=r-((sigma.^2)./2);

%Wahrscheinlichkeiten nach Ritchken
p_up=((1./(2.*(lambda.^2)))+((mu.*(sqrt(delta_t)))./(2.*lambda.*sigma)));
p_middle=(1-(1./(lambda.^2)));
p_down=((1./(2.*(lambda.^2)))-((mu.*(sqrt(delta_t)))./(2.*lambda.*sigma)));
check=p_up+p_middle+p_down;

%Zugrundeliegender Trinomialbaum
SET_Strech=Stock_Evolution_Trinomial_Strech(S,T,t,n,sigma,lambda);
payoff=zeros(size(SET_Strech));

for i=1:(2*n+1)
payoff(i,n+1)=max(SET_Strech(i,n+1)-X,0);
end
erg=payoff;

for j=n:-1:1
    for i=(2*n-1):-1:1
        if i<=(2*j-1)
          payoff(i,j)=(exp(-r.*delta_t)).*((p_up.*payoff(i,j+1))+(p_middle.*payoff(i+1,j+1))+(p_down.*payoff(i+2,j+1)));
        else payoff(i,j)=0;
        end
    end
end
european_call_trin_ritch=payoff(1,1);
[lambda,european_call_trin_ritch]
A=[lambda,european_call_trin_ritch]
end
 


Und

Code:
function Trinomial_Tree_Strech = Stock_Evolution_Trinomial_Strech(S,T,t,n,sigma,lambda)
 
%Vordefinieren der Matrix für Kursverläufe und der Zeitintervalle
A = zeros((2*n+1),n+1);
delta_t = (T-t)./n;

%Ritchken 1995 S.20, Einfluss auf die Kursentwicklung
u = exp(lambda.*sigma.*(sqrt(delta_t)));
d = exp(-lambda.*sigma*(sqrt(delta_t)));

for i=1:(2*n+1);
 for    j=1:n+1;
    if i<=(2*j)-1
        A(i,j)=u^(max((j-i),0))*d^(max((i-j),0))*S;
    else A(i,j)=0;
    end
 end

end
Trinomial_Tree_Strech=A;
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.05.2010, 23:15     Titel:
  Antworten mit Zitat      
Hallo,

dazu brauchst du die gewünschten Ergebnisse eigentlich nur in einen Vektor zu schreiben. Etwa so:

Code:
lambda = ...
Ergebnis = zeros(size(lambda));
for I=1:length(lambda)
Ergebnis(I) = ... % Berechnung mit lambda(I)
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.05.2010, 11:39     Titel:
  Antworten mit Zitat      
Hallo Harald,
hab das jetzt so probiert...
Code:
function european_call_trin_ritch = European_call_trin_ritch_bsp(S,X,T,t,n,r,q,sigma,k)
 format short
 
lambda = 1:0.1:k;
Ergebnis = zeros(size(lambda));
for z=1:length(lambda)

%Parameterberechnung
delta_t = (T-t)./n;
mu=r-((sigma.^2)./2);

%Wahrscheinlichkeiten nach Ritchken
p_up=((1./(2.*(lambda.^2)))+((mu.*(sqrt(delta_t)))./(2.*lambda.*sigma)));
p_middle=(1-(1./(lambda.^2)));
p_down=((1./(2.*(lambda.^2)))-((mu.*(sqrt(delta_t)))./(2.*lambda.*sigma)));
check=p_up+p_middle+p_down;

%Zugrundeliegender Trinomialbaum
SET_Strech=Stock_Evolution_Trinomial_Strech(S,T,t,n,sigma,lambda(z));
payoff=zeros(size(SET_Strech));

for i=1:(2*n+1)
payoff(i,n+1)=max(SET_Strech(i,n+1)-X,0);
end
erg=payoff;

for j=n:-1:1
    for i=(2*n-1):-1:1
        if i<=(2*j-1)
          payoff(i,j)=(exp(-r.*delta_t)).*((p_up.*payoff(i,j+1))+(p_middle.*payoff(i+1,j+1))+(p_down.*payoff(i+2,j+1)));
        else payoff(i,j)=0;
        end
    end
end
european_call_trin_ritch(z)=payoff(1,1);

end


Es kommt aber folgende Fehlermeldung Sad
>> european_call_trin_ritch = European_call_trin_ritch_bsp(S,X,T,t,n,r,q,sigma,k)
??? Subscripted assignment dimension mismatch.

Error in ==> European_call_trin_ritch_bsp at 40
payoff(i,j)=(exp(-r.*delta_t)).*((p_up.*payoff(i,j+1))+(p_middle.*payoff(i+1,j+1))+(p_down.*payoff(i+2,j+1)));

Was läuft schief?
Danke, Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.05.2010, 11:52     Titel: Lösung gefunden
  Antworten mit Zitat      
Hi,

sorry hab die Lösung selbst gefunden. Muss ja alle lambdas als lambda(z) deklarieren...
Scheint jetzt zu funktionieren!
Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.05.2010, 13:08     Titel:
  Antworten mit Zitat      
Hallo,

schau dir das doch am besten im Debugger an. Mich wundert allerdings, dass du plötzlich in einer Zeile einen Fehler bekommst, die auf den ersten Blick vor der Zeile liegt, die du geändert hast.
Da du z verwendest, ohne es vorher gesetzt zu haben, wird das auch nicht funktionieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.