Zum Inhalt springen
Schinzilord

Rendite Risiko Simulations Tool

Empfohlene Beiträge

Schinzilord
· bearbeitet von Schinzilord

Hallo!

 

Edit: 29.11.2009, Version 3.1

 

Hier also die neueste Version meines Simulationsprogrammes.

 

Nun hat man die Möglichkeit, sich eine täglichen fiktiven Wertpapierverlauf zu simulieren.

Es stehen hierzu erstmal die Normal und Poissonverteilung zur Verfügung.

Aber wie mittlerweile jeder wissen sollte, sind Wertpapierverläufe eben nicht normalverteilt. (Danke nochmal an Stairway für seinen eindringlichen Hinweis :))

 

Dieser Tatsache wird mittels der Multifraktalen Simulation Rechnung getragen:

der sog. Erweiterung mittels des GARCH Modells.

Dies bedeutet, dass die Varianz nicht konstant bleibt, sondern um einen Mittelwert schwankt.

Die Schwankung der Varianz wird mittels eines multifraktalen Modells zufallsgeneriert. Dies hat den Vorteil, dass man sowohl eine veränderliche Varianz als auch eine sog.

Clusterbildung simulieren kann, was bedeutet, dass bestimmte Ereignisse, welche den Kurs stark von der Normalverteilung abweichen lassen und gehäuft auftreten, berücksichtigen kann.

 

Freie Parameter sind:

Startwert: 1 default

Anzahl der Tage (für Normal und Poissonverteilung) frei wählbar

Anzahl der Tage für Multifraktales Modell: Schritte von 2 hoch X Tage (also 128, 256, 512 etc.)

Rendite: in % p.a.

Varianz: in % p.a.

 

Beim Multifraktalmodell werden noch ein paar meiner selbstentwickelten Risikokennzahlen berechnet:

1. Die tatsächliche Standardabweichung (natürlich nicht von mir entwickelt :))

 

2. Die Wilderness: Gibt die Häufigkeit der "Black Swan" Ereignisse an relativ zu einer Normalverteilung.

Beispiel: Normalverteilung hat 90% innerhalb 2 mal sigma. Also theoretisch liegen nur 5% aller Kursänderungen außerhalb 2 mal der Standardabweichung.

Die Wilderness gibt an, um wie viel mal mehr die Kursänderungen diese Barriere überschreiten.

(also Wilderness = 6 bedeutet 6 mal so viele Änderungen außerhalb 2 mal sigma). Somit ist die ein relativer Parameter.

 

3. Clustering: Damit werden eben diese Ausreißer in Verhältnis zu ihrem Auftreten gesetzt. Ein Wert >1 bedeutet starke Schwankungen in einer kurzen Zeit.

Der Wert wird relativ zu einer Gleichverteilung der Ausreißer über den gesamten Zeitraum gesetzt.

Beispiel: 128 Schlusskurse, 8 Ausreißer: Im Mittel 128 / 8 = 16 Tage liegen zwischen Ausreißer. Wenn jetzt aber im Mittel nur 10 Tage zwischen den Ausreißern liegen, so beträgt der

Clusterparameter 16/10 = 1.6.

 

Der Wertpapierverlauf wird sowohl angezeigt als auch automatisch abgespeichert im Format: Tag / Kurs / Gerade / Änderung.

 

 

Ebenso lässt sich noch eine (großspurig genannte) Monte-Carlo Simulation durchführen.

Hier kann man x Schritte von Multifraktalen Berechnungen hintereinander durchführen lassen.

Dabei wird jeweils der Minimum, Maximum, StdDev und Endwert gespeichert und dann noch der Mittelwert über alle Simulationen berechnet.

 

Wichtig:

Aufgrund meiner geringen Programmierskills muss man noch Handarbeit vor dem ersten Start anlegen:

Bevor man das Programm startet, bitte den link zum Filename editieren oder einen Ordner "Download" auf d:\ anlegen.

Sonst findet das Programm den Pfad nicht und startet nicht.

 

Eine mögliche Anwendung:

Keine Ahnung!

Ich programmiere gern und sehe sowas als Herausforderung. Programmieren ist mit Selbstzweck genug.

 

Die technischen Analysten könnten ja den zukünftigen Kursverlauf prognostizieren, wenn man ihn die ersten 512 Tage von 1025 Kursen vorlegt.

 

Der DAX wird am besten mit einer StdDev von 25% simuliert.

 

Viel Spaß!

 

Ich freue mich über jegliche comments.

Sourcecode kann bei mir über PN angefragt werden.

 

Edit Version 3.1:

Überprüft: Normalverteilung geht mindestens bis 1000000 Datensätze (1min @ Core 2 Duo 2.2GHz, 3GB Ram)

Multifraktal: 2^14=32768 Kurse (entspricht mehr als 100 Jahre) (30min @ Core 2 Duo 2.2GHz, 3GB Ram)

 

Also hier der Link:

simulationrendite31.zip

 

 

 

Hier ein Screenshot:

 

 

Und hier ein Kursverlauf inklusive Tagesänderungen mit dem GARCH Modell (man sieht schön das Clusterung und den Fat Tail:

post-9048-1259413746,23.png

Diesen Beitrag teilen


Link zum Beitrag
saibottina

Hi Schinzi,

 

schöne Idee :thumbsup:

Eine Frage und einen Vorschlag:

Frage: Was genau bedeutet das setzbare Häkchen bei two-side?

Vorschlag: Noch ein Kästchen mit einer Wiederholungszahl hinzufügen. Wenn man darin dann beispielsweise "5" eingibt, könnten 5 getrennte Simulationen erzeugt werden mit den gleichen Rendite-Risiko-Parameter. Wenn alle Kurven in die Graphik gemalt werden, am besten mit verschiedenen Farben, dann kann man ganz gut "intuitiv erkennen" welche Auswirkung die Variabilität als Risikomaß auf den Verlauf hat. Im Sinne von: "Was hätte noch passieren können?" Sinnvoll wäre dann möglicherweise, die Wiederholungsanzahl zu beschränken auf max. so ca. n=10, weil mal bei zu vielen Graphiken in einem Plot ja irgendwann gar nix mehr erkennen kann.

Oder man könnte bei größeren Wiederholungen (z.B. n=100) die Extremwerte plotten, also das beste und schlechteste Ergebnis.

Guts Nächtle und Gruß,

saibottina

Diesen Beitrag teilen


Link zum Beitrag
Emilian

Super Idee! Warum vervollkommnest Du Dein Tool nicht weiter?

 

GRuß Emilian.

 

 

Diesen Beitrag teilen


Link zum Beitrag
Schinzilord
· bearbeitet von Schinzilord

Hallo Ihr beiden!

 

Vielen Dank für euer Feedback!

Danke für die Anregungen Saibottina, ich werds implementieren.

Two-Side bedeutet, dass bei der Poissonverteilung die Schwankungen sowohl im Kurs nach oben als auch nach unten vorkommen können.

One-Side bedeutet demnach, dass die Schwankungen nur nach unten stattfinden (eigentlich unnötig).

 

Ich habe es bis jetzt schon weiterentwickelt, die neueste Version aber noch ned upgeloadet.

Es enthält jetzt schon eine Monte-Carlo-Funktion, wo man sich Maxima und Minima von n Wiederholungen anzeigen lassen kann.

 

Da der Thread schon fast 1 Jahr alt ist, aber ihr beiden bis jetzt die einzigen wart, die mir Feedback gegeben haben, habe ich das Projekt "ruhen" lassen.

Aber so erhalte ich wieder neuen Auftrieb daran rumzubasteln!

 

Ich denke, am Wochenende komme ich wieder dazu.

Diesen Beitrag teilen


Link zum Beitrag
Emilian

Sehr gut, Schinzi. Mach unbedingt weiter so. Monte-Carlo-Simulation klingt schonmal sehr gut!

 

Gruß Emilian.

 

 

Diesen Beitrag teilen


Link zum Beitrag
saibottina

Sehr gut, Schinzi. Mach unbedingt weiter so. Monte-Carlo-Simulation klingt schonmal sehr gut!

 

Gruß Emilian.

Dem schließ ich mich an. Bin auch gespannt. Was man in den Ecken dieses Forum so alles findet... ;)

Diesen Beitrag teilen


Link zum Beitrag
Stairway
· bearbeitet von Stairway

Gang, ganz wichtig: Aktienrenditen sind nicht normalverteilt, ich weiss, die Finanzlehrstühle und Herr Meriweather wollen das nicht glauben, aber das ist auch der Grund warum besagter Herr schon zum 2. Mal pleite ist.

Diesen Beitrag teilen


Link zum Beitrag
Sladdi

Da ich mich in nächster Zeit mit der technischen Anwendung von Sparplänen und Rebalancen beschäftigen möchte, habe ich mir hier ein kleines Tool gemacht, mit dem man tägliche Kursverläufe für X Jahre bei gegebener Rendite und Varianz auswürfeln kann.

 

Hi,

ich verstehe nicht, was der Erkenntnisgewinn dieser Simulation ist. Kannst Du mir das bitte erklären.

 

Gruß

Sladdi

Diesen Beitrag teilen


Link zum Beitrag
Emilian

Gang, ganz wichtig: Aktienrenditen sind nicht normalverteilt...

Soviel ist mal wahr! Aber er entwickelt es jetzt auch erstmal. Ich denke etwas später werden wir sicher noch zu etwas realistischeren Verteilungen kommen, jene die uns das Blut in den Adern gefrieren lassen werden.

 

Gruß Emilian.

 

 

 

Diesen Beitrag teilen


Link zum Beitrag
Stairway

Soviel ist mal wahr! Aber er entwickelt es jetzt auch erstmal. Ich denke etwas später werden wir sicher noch zu etwas realistischeren Verteilungen kommen, jene die uns das Blut in den Adern gefrieren lassen werden.

 

Gruß Emilian.

 

Eine Normalverteilung mit fetten Rändern bildet ja die Realität ganz gut ab, die frage ist, wie fett müssen die Ränder sein.

Diesen Beitrag teilen


Link zum Beitrag
Emilian

Ich wünschte, ich hätt ne Antwort auf diese Frage!!!

 

Gruß Emilian.

 

 

Diesen Beitrag teilen


Link zum Beitrag
supertobs

Wäre es nicht möglich das Tool in Excel zu implementieren? Dann könnte man auch leichter auf Mac nutzen bzw. die Daten weiterverarbeiten.

Diesen Beitrag teilen


Link zum Beitrag
Schinzilord

Wäre es nicht möglich das Tool in Excel zu implementieren? Dann könnte man auch leichter auf Mac nutzen bzw. die Daten weiterverarbeiten.

Hallo Supertobs!

 

Da ich das Programm in VB6 geschrieben habe, sollte es mit nicht allzuviel Aufwand möglich seinn, es in VBA umzuschreiben.

Jedoch habe ich kein Excel.

Aber ich stelle dir sehr gerne den Quellcode zur Verfügung (inklusive der Kommentare etc.).

Diesen Beitrag teilen


Link zum Beitrag
Stairway

Hallo!

 

Edit: 28.11.2009

 

Hier also die neueste Version meines Simulationsprogrammes.

 

Nun hat man die Möglichkeit, sich eine täglichen fiktiven Wertpapierverlauf zu simulieren.

Es stehen hierzu erstmal die Normal und Poissonverteilung zur Verfügung.

Aber wie mittlerweile jeder wissen sollte, sind Wertpapierverläufe eben nicht normalverteilt. (Danke nochmal an Stairway für seinen eindringlichen Hinweis :))

 

Dieser Tatsache wird mittels der Multifraktalen Simulation Rechnung getragen:

der sog. Erweiterung mittels des GARCH Modells.

Dies bedeutet, dass die Varianz nicht konstant bleibt, sondern um einen Mittelwert schwankt.

Die Schwankung der Varianz wird mittels eines multifraktalen Modells zufallsgeneriert. Dies hat den Vorteil, dass man sowohl eine veränderliche Varianz als auch eine sog.

Clusterbildung simulieren kann, was bedeutet, dass bestimmte Ereignisse, welche den Kurs stark von der Normalverteilung abweichen lassen und gehäuft auftreten, berücksichtigen kann.

 

Freie Parameter sind:

Startwert: 1 default

Anzahl der Tage (für Normal und Poissonverteilung) frei wählbar

Anzahl der Tage für Multifraktales Modell: Schritte von 2 hoch X Tage (also 128, 256, 512 etc.)

Rendite: in % p.a.

Varianz: in % p.a.

 

Beim Multifraktalmodell werden noch ein paar meiner selbstentwickelten Risikokennzahlen berechnet:

1. Die tatsächliche Standardabweichung (natürlich nicht von mir entwickelt :))

 

2. Die Wilderness: Gibt die Häufigkeit der "Black Swan" Ereignisse an relativ zu einer Normalverteilung.

Beispiel: Normalverteilung hat 90% innerhalb 2 mal sigma. Also theoretisch liegen nur 5% aller Kursänderungen außerhalb 2 mal der Standardabweichung.

Die Wilderness gibt an, um wie viel mal mehr die Kursänderungen diese Barriere überschreiten.

(also Wilderness = 6 bedeutet 6 mal so viele Änderungen außerhalb 2 mal sigma). Somit ist die ein relativer Parameter.

 

3. Clustering: Damit werden eben diese Ausreißer in Verhältnis zu ihrem Auftreten gesetzt. Ein Wert >1 bedeutet starke Schwankungen in einer kurzen Zeit.

Der Wert wird relativ zu einer Gleichverteilung der Ausreißer über den gesamten Zeitraum gesetzt.

Beispiel: 128 Schlusskurse, 8 Ausreißer: Im Mittel 128 / 8 = 16 Tage liegen zwischen Ausreißer. Wenn jetzt aber im Mittel nur 10 Tage zwischen den Ausreißern liegen, so beträgt der

Clusterparameter 16/10 = 1.6.

 

Der Wertpapierverlauf wird sowohl angezeigt als auch automatisch abgespeichert im Format: Tag / Kurs / Gerade / Änderung.

 

 

Ebenso lässt sich noch eine (großspurig genannte) Monte-Carlo Simulation durchführen.

Hier kann man x Schritte von Multifraktalen Berechnungen hintereinander durchführen lassen.

Dabei wird jeweils der Minimum, Maximum, StdDev und Endwert gespeichert und dann noch der Mittelwert über alle Simulationen berechnet.

 

Wichtig:

Aufgrund meiner geringen Programmierskills muss man noch Handarbeit vor dem ersten Start anlegen:

Bevor man das Programm startet, bitte den link zum Filename editieren oder einen Ordner "Download" auf d:\ anlegen.

Sonst findet das Programm den Pfad nicht und startet nicht.

 

Eine mögliche Anwendung:

Keine Ahnung!

Ich programmiere gern und sehe sowas als Herausforderung. Programmieren ist mit Selbstzweck genug.

 

Die technischen Analysten könnten ja den zukünftigen Kursverlauf prognostizieren, wenn man ihn die ersten 512 Tage von 1025 Kursen vorlegt.

 

Der DAX wird am besten mit einer StdDev von 25% simuliert.

 

Viel Spaß!

 

Ich freue mich über jegliche comments.

Sourcecode kann bei mir über PN angefragt werden.

 

 

Also hier der Link:

 

 

 

 

Hier ein Screenshot:

 

 

Und hier ein Kursverlauf inklusive Tagesänderungen mit dem GARCH Modell (man sieht schön das Clusterung und den Fat Tail:

post-9048-1259413746,23.png

 

Es kommt immer der Fehler "Ändern Sie bitte den Datenpfad" und wenn man dann auf "Normalverteilung" klickt, beendet es das Programm. Wo liegt der Fehler ?

Diesen Beitrag teilen


Link zum Beitrag
Chemstudent

Es kommt immer der Fehler "Ändern Sie bitte den Datenpfad" und wenn man dann auf "Normalverteilung" klickt, beendet es das Programm. Wo liegt der Fehler ?

Ändere den Dateipfad.

Unter "Filename" steht D:\Download\00test.dat

Da der Ordner "Download" bei dir (vermutlich) nicht existiert, kann er die Datei nciht erstellen. Also einfach einen gültigen Pfad angeben. (Bspw. D:\00test.dat)

Diesen Beitrag teilen


Link zum Beitrag
Stairway

Ändere den Dateipfad.

Unter "Filename" steht D:\Download\00test.dat

Da der Ordner "Download" bei dir (vermutlich) nicht existiert, kann er die Datei nciht erstellen. Also einfach einen gültigen Pfad angeben. (Bspw. D:\00test.dat)

 

:thumbsup:

Diesen Beitrag teilen


Link zum Beitrag
Schinzilord

Die Messagebox "Ändern Sie bitte den Dateipfad" ist kein Fehler, sondern ein von mir eingebautes Feature, welches den User hinweist, einen gültigen Dateipfad einzugeben :)

Diesen Beitrag teilen


Link zum Beitrag
Stairway

Lässt es sich noch machen, dass mehr als 100000 Tage berechnet werden können ? Ein Zeitraum von 100 Jahren wäre ideal - aber wenn man das eingibt stürzt es nach einer Weile ab.

Diesen Beitrag teilen


Link zum Beitrag
Schinzilord
· bearbeitet von Schinzilord

@Stairway:

Bei der Normalverteilung kann ich auch leicht 1000000 Tage eingeben, und es rechnet auf einem Core 2 Duo 2.2GHz ca. 30s. Die .dat Datei hat dann 38 MB.

Bei dem multifraktalen Modell geht die Rechenleistung exponentiell mit der Anzahl der Tage.

Bei 2^13=8192 Tagen rechnet es ca. 2 min, aber abstürzen tut es nicht.

Im Zweifelsfall einfach mal bisserl laufen lassen.

Edit: Im multifraktalmodell stürzt es bei 2^14 ab, weil wohl ein interner Speicher vollläuft.

Da muss ich noch die Definitionen von Integer auf Single ändern.

 

100 Jahre sind bei 250 Handelstagen im Jahr 25000 Kurse.

Ich werds noch abändern, danke für dein Feedback!

Diesen Beitrag teilen


Link zum Beitrag
Stairway

@Stairway:

Bei der Normalverteilung kann ich auch leicht 1000000 Tage eingeben, und es rechnet auf einem Core 2 Duo 2.2GHz ca. 30s. Die .dat Datei hat dann 38 MB.

Bei dem multifraktalen Modell geht die Rechenleistung exponentiell mit der Anzahl der Tage.

Bei 2^13=8192 Tagen rechnet es ca. 2 min, aber abstürzen tut es nicht.

Im Zweifelsfall einfach mal bisserl laufen lassen.

Edit: Im multifraktalmodell stürzt es bei 2^14 ab, weil wohl ein interner Speicher vollläuft.

Da muss ich noch die Definitionen von Integer auf Single ändern.

 

100 Jahre sind bei 250 Handelstagen im Jahr 25000 Kurse.

Ich werds noch abändern, danke für dein Feedback!

 

Vielen Dank, da ist mein Laptop (siehe ettliche Threads hier) zu langsam.

 

Kannst du ggf. noch die einzelnen Felder unter "Normalverteilung" genauer erklären ?

 

Grüße

Diesen Beitrag teilen


Link zum Beitrag
Schinzilord

Einstellmöglichkeiten sind:

Startwert: 1 default (also wie der Startkurs sein soll)

Anzahl der Tage (für Normal und Poissonverteilung) frei wählbar, geht mindestens bis 1000000 Tage

Anzahl der Tage für Multifraktales Modell: Schritte von 2 hoch X Tage (also 128, 256, 512 etc.), geht bis 2^14=32768 Tage sicher (Rechenzeit 30 min @2.2GHz Core 2 Duo)

Rendite: in % p.a. entspricht der anvisierten Rendite p.a.

Varianz: in % p.a. entspricht der anvisierten Varianz

 

Bei der Normalverteilung sollten simulierte Rendite und Varianz ziemlich genau der tatsächlich geforderten entsprechen.

Beim Multifraktalmodell weichen die geforderten Rendite und Varianz leicht von der simulierten ab, da zu viele Zufallsparameter vorliegen.

Dafür wird im Nachhinein die Varianz neben den anderen Risikoparametern ausgegeben.

 

Twoside bezieht sich nur auf die Poissonverteilung.

Oneside würde bedeuten, dass man nur Rückschläge im Kurs berücksichtigt (also keine krassen Kursanstiege, sondern vermehrt Rückschläge.

Twoside steht für eine beierseitige Abweichung.

Diesen Beitrag teilen


Link zum Beitrag
Lars91

Hallo :)

 

auch wenn der Thread hier schon ein wenig älter ist stelle ich trotzdem mal meine Frage :P

 

Ich finde das Programm welches du gemacht hast echt super. Für meine Facharbeit muss ich mithilfe von drei Modellen (wie zB. AR(I)MA oder (G)ARCH) Kurse generieren um diese später auf Chartmuster zu untersuchen. Das möchte ich dann auch mit realen Kursen machen und die Ergebnisse schließlich auswerten. Leider bin ich was MATLAB angeht ein völliger Anfänger. Ich habe mich bereits durch das Hilfemenü, welches in MATLAB integriert ist, gelesen, aber ohne wirklich weiter zu kommen. Gibt es eine Möglichkeit die, durch das Programm generierten, Kursverläufe in MATLAB einzulesen?

Wäre über jeden Tipp dankbar :P

liebe Grüße,

Lars

Diesen Beitrag teilen


Link zum Beitrag
IRRer-Zins

Mein Matlab gehorcht auf den Befehl load().

Diesen Beitrag teilen


Link zum Beitrag
Schinzilord

Schau mal hier

http://www.mathworks.com/matlabcentral/fileexchange/29686-multifractal-model-of-asset-returns--mmar-/content/mmar.m

 

Dann brauchst du nur noch einen Wienerprozess und evtl. einen Poissonprozess.

Für Mean Reversion brauchst du einen Ornstein-Uhlenbeck Prozess.

 

Dann hast du eigentlich das nötigste erstmal zusammen.

Gibt es alles schon fertig für Matlab :)

Diesen Beitrag teilen


Link zum Beitrag
Lars91

Ah super vielen vielen Dank :)

 

Den Ornstein-Uhlenbeck Prozess habe ich bereits und als drittes nehme ich wohl einen ganz simplen Random Walk mit drift :P

Dann muss ich die drei Methoden noch beschreiben und erklären können warum ich welche Parameter gewählt habe und dann kann ich auch endlich zum nächsten Schritt übergehen :D

 

Nochmal danke für die schnelle Hilfe und liebe Grüße

Diesen Beitrag teilen


Link zum Beitrag

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

×
×
  • Neu erstellen...