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

Simulation eines CEV-Pfades mit stochastischer Volatilität

 

Slater87
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 20.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2013, 10:57     Titel: Simulation eines CEV-Pfades mit stochastischer Volatilität
  Antworten mit Zitat      
Hi Leute,

ich habe vor kurzem angefangen mit MATLAB zu arbeiten und will jetzt einen CEV-Prozess mit stochastischer Volatilität simulieren. Mein Code ist soweit auch fertig, aber ich bekomme immer dieselben Fehlermeldungen, obwohl ich beim Schreiben des Codes darauf geachtet habe, dass diese Fehler nicht auftreten. Hier ist mein Code:
Code:
%Unbiased Simulation Scheme Erwartungswert und Plot

T=1;                        %Endzeitpunkt
N=100;                     %Anzahl Stützstellen
delta=T/N;                     %Schrittweite
M=1000;                     %Anzahl Wiederholungen
alpha=0.3;                     %Koeffizient GBM
sigma0   =0.2;                     %Startwert GBM
Beta=0.25;                     %Exponent CEV
S0=0.04;                        %Startwert CEV
rho= -0.5;                     %Korrelation
k=(1-2*Beta-rho.^2*(1-Beta))/((1-Beta)*(1-rho.^2));
b=2-k;
Psi_thres=2;            
expo1=2*(1-Beta);
expo2= 0.5*expo1;
expo3=1/(expo1);

sigma=sigma0*[ones(1,M); zeros(N,M)];
S=S0*[ones(1,M); zeros(N,M)];
dW=sqrt(delta)*randn(N,M);
W2=cumsum(dW);
W2=[zeros(1,M);W2];

for j=1:M
for i=2:N+1

   %Simulation Pfad GBM
   sigma(i,j) = sigma0.*exp(-0.5*alpha.^2*delta*(i-1)+alpha*W2(i,j));  
   
   %Simulation bedingter EW und bedingte Var der asymptotischen integrierten Varianz
   m=sigma(i-1,j).^2*delta*(1+alpha*W2(i,j)+1/3*alpha.^2*(2*W2(i,j).^2-0.5*delta)             +1/3*alpha.^3*(W2(i,j).^3-delta*W2(i,j))+1/5*alpha.^4*(2/3*W2(i,j).^4 -                    3/2*delta*W2(i,j).^2 +1/3*delta.^2));
   v=1/3*sigma(i-1,j).^4*alpha.^2*delta.^3;
   
   %Berechne die Parameter der moment-matched lognormal-Verteilung
   sigma2=log(1+v/m.^2);
   mu=log(m)-1/2*sigma2;

   A_delta=exp(sqrt(sigma2)*randn+mu);

   %Berechne Parameter der nicht-zentralen Chi-Quadrat-Verteilung
   nu=(1-rho.^2)*A_delta;
   a=1/nu*((S(i-1,j).^(expo2))/(expo2)+rho/alpha*(sigma(i,j)-sigma(i-1,j))).^2;
   
   u=rand;
   B = 1-ncx2cdf(a,b,0)-u;
   Z=(S(i-1,j).^(expo1))/(2*nu*(1-Beta).^2);
   P=1-gammainc(Z,1/(expo1));
   if (S(i-1,j) == 0)
      S(i,j)=0;
   elseif (u<P)
      S(i,j)=0;
   else
      ew=k+a;
                 if ew==0
                       disp(0);
                 end
      var=2*(k+2*a);
      Psi=var/(ew.^2);
     
      if ((0<Psi<=Psi_thres) && (ew >= 0))
         e=2/Psi-1+sqrt(2/Psi)*sqrt(2/Psi-1);
         d=ew/(1+e);
         S(i,j)=((1-Beta).^2*nu*d*(sqrt(e)+randn).^2).^(expo3);
     
      elseif ((Psi >Psi_thres) || (ew<0 && 0<Psi<=Psi_thres))
         if B<0
            l=0;
            r=10;
            fl=1-ncx2cdf(a,b,l)-u;
            fr=1-ncx2cdf(a,b,r)-u;
           
            while (fl.*fr>0)      %Lokalisierung Nullstelle
            l=l+10;
            r=r+10;
            fl=1-ncx2cdf(a,b,l)-u;
            fr=1-ncx2cdf(a,b,r)-u;
            end
           
            %Bisektions-Verfahren
            for n=0:25
            c=0.5*(l+r);
            Hl=1-ncx2cdf(a,b,l)-u;
            Hc=1-ncx2cdf(a,b,c)-u;
                     if Hl*Hc==0
                           break
                     end
                      if Hl*Hc<0  
                           r=c;
                        else
                  l=c;
                     end
                end
            S(i,j)=(c*nu*(1-Beta).^2).^(expo3);
         elseif B>=0
            S(i,j)=0;
         end
      end
   end
end

plot([0:delta:T],S(:,j))
hold on

end
   
Endwerte=S(N+1,:)
mittelwert = mean(Endwerte)
standabw=std(Endwerte)
 

Ich bekomme entweder die Fehlermeldung, dass gammainc keine komplexen Zahlen verarbeiten kann oder es erscheint
"Error using gamcdf (line 63)
Non-scalar arguments must match in size.

Error in chi2cdf (line 35)
p = gamcdf(x,v/2,2);

Error in ncx2cdf (line 59)
p(k) = chi2cdf(x(k),v(k));"
womit ich noch weniger anfangen kann. Um das Problem mit den komplexen Zahlen zu umgehen, habe ich extra die Abfrage nach dem Wert von B gemacht und die if-Bedingungen in Abhängigkeit von B eingeführt. Aber aus irgendeinem Grund scheint MATLAB damit Probleme zu haben, denn wenn ich die Berechnungen "per Hand" in MATLAB mache, läuft alles.

Wäre wirklich super, wenn jemand einen Tipp hätte, denn ich sitze schon seit 2 Wochen davor und überlege woran es liegt.

mfg Slater
Private Nachricht senden Benutzer-Profile anzeigen


Slater87
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 20.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2013, 19:01     Titel:
  Antworten mit Zitat      
Hi,

hat sich erledigt.

mfg Slater
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 20.08.2013, 20:11     Titel:
  Antworten mit Zitat      
wenn du selber eine lösung für das problem gefunden hast wäre es nett den spätern lesern gegenüber wenn du sie vieleicht postest Smile
grüße winkow
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Slater87
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 20.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2013, 10:22     Titel:
  Antworten mit Zitat      
Hi,

das Problem lag wohl an der if-Bedingung
Code:
if ((0<Psi<=Psi_thres) && (ew >= 0))

Ich habe das zu
Code:
if ((0<Psi) && (Psi<=Psi_thres) && (ew >= 0))

geändert und seit dem läuft alles ohne Probleme.

mfg Slater
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 - 2024 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.