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 des Aktienkurses

 

sgadzhie
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2013, 18:02     Titel: Simulation des Aktienkurses
  Antworten mit Zitat      
Hallo zusammen!

ich programmiere in Matlab erst seit 2 Tagen und habe ein Problemchen. Hoffe sehr, dass Ihr mir helfen könnt.

Also, ich muss einen Aktienkurs nach folgender Formel simulieren.

S_t = (S_t-1)^(1-k) * exp (mu*k + sigma*E)

Parameter sind:

Code:
mu = 0;
k= 0.9;
sigma = 0.5;
S_0=1;
 

E soll eine standardnormalverteilte Zufallsvariable sein.

Das ganze muss über 100 Tage und jeweils 2000 Pfade simuliert werden. (also so dass man 2000 Aktienkurse hat, die in 1 starten).

Ich habe folgendes Programm geschrieben und wollte wissen, ob die richtig ist, ich habe da so meine zweifel.


Code:
S0 = 1;
mu = 0;
sigma = 0.5;
k = 0.9;
n = 100;           % Anzahl der Knicke/Tage

T = [0:n];          
M = 2000;          % Anzahl der Pfade

E = sigma * randn(M,n+1);
S = S0 * ones(M,n+1);

for i=1:M
    for j=2:n+1
        S(i,j) = ((S(i,j-1))^(1-k))*exp(k*mu + E(i,j-1));
    end;
end;


plot (T,S);


Was meint Ihr? Sabina

edit by denny: bitte die Codeformatierung verwenden. Danke!
Private Nachricht senden Benutzer-Profile anzeigen


Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 16.02.2013, 18:52     Titel:
  Antworten mit Zitat      
Hallo Sabina,

Ich hab den Code mal laufen lassen und er scheint das zu tun was du beschrieben hast (Angaben ohne Gewähr Very Happy ). Woran zweifelst du denn?

Grüße,
Seban


http://www.mathworks.de/de/help/mat.....process-and-features.html
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
sgadzhie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.02.2013, 01:37     Titel:
  Antworten mit Zitat      
Hallo Sebastian!

ja, ich wollte nur sicher gehen Smile ich denke auch, dass ich es so lasse. Es geht um eine Teilaufgabe in meier Bachelorarbeit. Vielen Dank, dass Du es Dir angeschaut hast!

Schöne Grüße!
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: 17.02.2013, 10:35     Titel:
  Antworten mit Zitat      
Hallo,

Fehler sehe ich auch keine. Man könnte höchstens versuchen, eine der for-Schleifen zu entfernen, um das ganze auch für große M effizienter zu bekommen.

Nur aus Neugierde: mich verwundert der Exponent bei S. Hat diese Art Modell einen bestimmten Namen?

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2013, 13:45     Titel:
  Antworten mit Zitat      
Das ist eine diskrete Version des Ornstein-Uhlenbeck-Modells für Stockpreise. Es lautet eigentlich

log(S_t+1) = (1-k)(log(S_t) -mu) +mu + sigma*E,

wobei E eine standardnormal-verteilte Zufallsvariable ist, mu, sigma und k sind konstant. Exponent bekomme ich, wenn ich die obige Formel nach S_t+1 auflöse.

Also das ganze muss ich eigentlich über n= 999 und M=20.000 simulieren, also eine (Mxn+1)-Matrix soll das Ergebnis sein.

Ich brauche es eigentlich für sehr große M, also M=20.000..... und wenn ich es so simuliere, dauert es ewig... also meinst du ich soll die for-Schleife entfernen?
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: 18.02.2013, 13:57     Titel:
  Antworten mit Zitat      
Hallo,

ja, das kann das ganze locker 10 Mal so schnell machen.

Ich würde zunächst die Schleifen vertauschen (dann kann man sich das besser vorstellen), und dann die innere for-Schleife mit Hilfe von .* und .^ vektorisieren.
Probier es sicherheitshalber dann für "normale" M und schau, ob du vergleichbare Ergebnisse bekommst.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2013, 14:27     Titel:
  Antworten mit Zitat      
Also ich habe es ausprobiert, hoffentlich habe ich Deine Idee, Harald, richtig verstanden:

Code:
S0 = 1;
mu = 0;
sigma = 0.5;
k = 0.9;
n = 10;           % Anzahl der Knicke/Tage

         
M = 20;          % Anzahl der Pfade

E = sigma * randn(M,n+1);
S = S0 * ones(M,n+1);


for j=2:n+1

    for i=1:M
   
        S(i,j) = ((S(i,j-1)).^(1-k)).*exp(k*mu + E(i,j-1)');
    end;
end;


plot (S');


und es geht tatsächlich viel schneller! Ist das so, wie Du es gemeint hast??

Schöne Grüße Smile

edit by denny: Bitte die Codeformatierung verwenden
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: 18.02.2013, 15:00     Titel:
  Antworten mit Zitat      
Hallo,

dass das so schon viel schneller geht, wundert mich ein wenig.

Ich meinte aber, dass du die innere for-Schleife auch weglassen und dann mit Zeilen-Operationen arbeiten kannst. Das sollte dann nochmal deutlich schneller sein.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2013, 15:21     Titel:
  Antworten mit Zitat      
ich habe jetzt auch nur eine Schleife benutzt und es geht prima Smile

Code:
for j=2:n+1
   S(:,j) = ((S(:,j-1)).^(1-k)).*exp(k*mu + E(:,j-1));
end

Vielen Dank, für Hilfe! Very Happy

[EDITED, Jan, Bitte Code-Umgebung verwenden - 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: 18.02.2013, 16:55     Titel:
  Antworten mit Zitat      
Hallo,

genau so war es gedacht. Es sollte jetzt deutlich schneller sein, insbesondere für große M.

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.