zentrader
Mitglied seit 10 Jahre 8 Monate

Monte Carlo Simulation für Handelssysteme

Kennt Ihr das auch, die Unzuverlässigkeit von vermeintlich sehr guten Handelssystemen, die aufgrund von Backtest und "out-of-sample"-Tests eigentlich den Weg zum "schnellen Erfolg" vorgezeichnet hatten?

Mich hat es jedenfalls bewogen, mich mehr auch mit Simulationen des zukünftigen Systemverhaltens zu beschäftigen und so bin ich auf die Methode der Monte Carlo Simulation gestoßen, um mögliche Profits und Drawdowns der Handelsansätze besser einschätzen zu können.

Auf meiner Website http://www.zentrader.de habe ich Freeware in Form einer Excel-Simulation und eines schnelles Windowsprogramms, welches i.e.Linie für EOD-Daten einsetzbar ist, per Download zur Verfügung gestellt:
http://www.zentrader.de/download.html

Wer die Software brauchbar findet, aber mehr Funktionalität benötigt, kann auf der Website auch die professionellen Versionen günstig erwerben.

Feedback insb. auch konstruktive Kritik sind immer willkommen!

ciao,
zentrader

Peter S
Mitglied seit 10 Jahre 8 Monate

hallo zentrader,

interessanter beitrag!

mein feedback: ich bin mir (allerdings) nicht sicher, ob du bei deinem excel-sheet mit der funktion zufallszahl arbeiten kannst, da diese funktion eine gleichverteilte zufallszahl erzeugt. deine gewinne (62) und verluste (51) scheinen aber nicht gleichverteilt zu sein. mit hilfe eines bestimmten algorithmus kannst du jedoch aus dieser zufallszahl eine normalverteilte zufallszahl erzeugen. wenn du interesse hast suche ich dir den algorithmus raus. vorher solltest du aber die frage klären ob deine gewinne bzw. verluste überhaupt normalverteilt sind bzw. welche verteilung denn grundsätzlich vorliegt und ob eine stichprobe von 113 signalen überhaupt aussagekräftig ist. (bedenke 113 signale bei 200 börsentagen oder bei 3000 börsentagen ist schon ein nicht unerheblicher unterschied bzw. wie sehen die entsprechenden kennzahlen bei anderen underlyings aus)

mfg oliver

zentrader
Mitglied seit 10 Jahre 8 Monate

@Oliver,

im Excel-Beispiel wird diese "Ungleich-Verteilung", durch die "wenn-Bedingung" in Spalte B ausgeglichen:

Zufallszahl < (Gewinner/Gesamtzahl der Trades/100)

D.h. Spalte A erzeugt zwar eine gleichverteilte Zufallszahl, durch den Bezug in Spalte B werden jedoch als Folge bei diesen beispielhaften Inputdaten (Gewinner 62, Verlierer 51) über die Zeit auch diese Gewinner-/Verlierer-Verhältnise im Excelsheet erzeugt.

Auch in der Programmversion werden die "zufälligen" Trades in Abhängigkeit von diesen Systemtest-Input-Daten erzeugt. Sicherlich könnte man die Erzeugung selbst innerhalb des Programms über Timer etc. nochmals "zufälliger gestalten, erreicht jedoch m.E. damit keine höhere Aussagekraft.

Die Aussage bzgl. der Schwankungsbreite von in der Simulation erzielten Profit-und Drawdownbeträgen, sowie bzgl. eines Schätzwertes der mit der entspr. stat. Sicherheit nicht unterschritten würde, ist durch diesen Ansatz schon gewährleistet.

Egal wie man's macht, bleibt immer die Problematik von "niemals simulierten" Ausreißerwerten - eine 100%-ige Sicherheit gibt's nunmal nicht...

Der große Vorteil der MCS als Ergänzung zu Metastock oder ähnlichen Tools besteht eben darin, daß man sich nicht auf die tolle Entwicklung einer vorhandenen Zeitreihe von Daten und daraus generierten Trades verläßt, sondern daß man abhängig von der gefunden Profitabilität des Systems zufällige Konstellationen simulieren kann, die Chance und Risiko des Systems besser verständlich machen.

ciao,
zentrader

SwingMan
Mitglied seit 10 Jahre 8 Monate

@zentrader

"...abhängig von der gefunden Profitabilität des Systems zufällige Konstellationen simulieren kann"

Und ich glaubte immer daß man zunächst Monte Carlo Simulationen machen muß, und dann wird die Profitabilität ermittelt. Scheinbar funktioniert es auch umgekehrt!

- Eine rein technische Frage: laut vielen Auswertungen sind die Aktienkurse lognormal verteilt.
Werden in dem Generator Kurse oder Logarithmen der Kurse generiert?

Peter S
Mitglied seit 10 Jahre 8 Monate

@zentrader,

ich hatte mir "nur" die erste Lasche (Monte Carlo Simulation 500) näher angeschaut. Dort wurde mit einer TradeRatio von 0,5 gearbeitet (Was ich nicht verstanden hatte vgl. Anzahl Gewinner und Verlierer bzw. s.o.). Habe mir aber (jetzt) die zweite Lasche näher angeschaut und dort arbeitest du ja mit der tatsächlich beobachten TradeRatio (von 0,55).

Um Ausreißerwerte zu simulieren, könntest du einfach welche fiktiv aufnehmen. Kannst dich dabei z.B. an den 10 größten Tagesverlusten orientieren etc.

D.h. du bildest in einem ersten Schritt Klassen aus deinen historischen Beobachtungen und korrigierst dann deren tatsächliche Wahrscheinlichkeit um einen bestimmten Prozentsatz um so dein Worst-Case-Szenario implementieren zu können.

1. Klasse - Wahrscheinlichkeit 5% - Gewinn 150 Punkte
2. Klasse - Wahrscheinlichkeit 7% - Gewinn 75 Punkte
3. Klasse - Wahrscheinlichkeit 15% - Gewinn 45 Punkte
4. Klasse - ...
5. Klasse - ...
...
7. Klasse - Wahrscheinlichkeit 15% - Verlust 100 Punkte
8. Klasse - Wahrscheinlichkeit 10% - Verlust 200 Punkte
9. Klasse (WorsteCase) - Wahrscheinlichkeit 1% - Verlust 600 Punkte

In einem zweiten Schritt ermittelst du dann über 500 Ziehungen die jeweiligen Klassen und aggregierst die Teilergebnisse zu einem Endwert. Wenn du diesen Prozess z.B. 1000 mal durchläufst erhälst du eine "eigene" Verteilung aus der du dann Wahrscheinlichkeiten über den Ereignisraum des Endwertes ableiten kannst.

zentrader
Mitglied seit 10 Jahre 8 Monate

@swingman,

meine Software generiert keine Kurse (dies könnte man natürlich auch simulieren), die Software simuliert Trades und berechnet aufgrund der bekannten Systemtest-Eckdaten (z.B. aus dem System Test Report von Metastock) alternative Simulationen des Tradingverlaufs.

Als Ergebnis erhält man von-/bis-Ranges von Profit und Drawdown und einen Erwartungswert für diese Größen gemäß des Levels der statistischen Sicherheit, grob gesprochen eine Einschätzung von Chance und Risiko.

Wenn man ein wenig damit experimentiert, erkennt man recht schnell ab welchem Trade-Ratio (Verhältnis Gewinner-Trades zu allen Trades) und ab welchem pay-off-Ratio (Verhältnis Durchschnittsgewinn zu Durchschnittsverlust) ein System in der Simulation "ruhiger" wird, m.E. eine unabdingbare Voraussetzung, um zu entscheiden, ob ein z.B. per Metastock-Backtest ermitteltes System überhaupt real zu handeln wäre...

@compu_o,

natürlich sind alternative Ansätze denkbar,ich bin jedoch nachwievor der Meinung, daß der implementierte Ansatz mit den Durchschnittsgewinnen- bzw. Verlusten vollkommen ausreicht, z.B. per zufallserzeugten Tradeserien Gewinne und Drawdowns realistisch zu simulieren.

Grund: über das vorgegebene Trade-Ratio und das pay-off-Ratio weren die Simulationen statistich "reguliert".

ciao,
zentrader

ciao,
zentrader

zentrader
Mitglied seit 10 Jahre 8 Monate

@swingman,

meine Software generiert keine Kurse (dies könnte man natürlich auch simulieren), die Software simuliert Trades und berechnet aufgrund der bekannten Systemtest-Eckdaten (z.B. aus dem System Test Report von Metastock) alternative Simulationen des Tradingverlaufs.

Als Ergebnis erhält man von-/bis-Ranges von Profit und Drawdown und einen Erwartungswert für diese Größen gemäß des Levels der statistischen Sicherheit, grob gesprochen eine Einschätzung von Chance und Risiko.

Wenn man ein wenig damit experimentiert, erkennt man recht schnell ab welchem Trade-Ratio (Verhältnis Gewinner-Trades zu allen Trades) und ab welchem pay-off-Ratio (Verhältnis Durchschnittsgewinn zu Durchschnittsverlust) ein System in der Simulation "ruhiger" wird, m.E. eine unabdingbare Voraussetzung, um zu entscheiden, ob ein z.B. per Metastock-Backtest ermitteltes System überhaupt real zu handeln wäre...

@compu_o,

natürlich sind alternative Ansätze denkbar,ich bin jedoch nachwievor der Meinung, daß der implementierte Ansatz mit Anzahl der gewinner- und Verlierertrades sowie mit den Durchschnittsgewinnen- bzw. Verlusten vollkommen ausreicht, z.B. per zufallserzeugten Tradeserien Gewinne und Drawdowns realistisch zu simulieren.

Grund: über das vorgegebene Trade-Ratio und das pay-off-Ratio weren die Simulationen statistich "reguliert".

ciao,
zentrader

he96
Mitglied seit 10 Jahre 8 Monate

@zentrader

""die Software simuliert Trades und berechnet aufgrund der bekannten Systemtest-Eckdaten (z.B. aus dem System Test Report von Metastock) alternative Simulationen des Tradingverlaufs.""

Ich nehme an Du meinst es so: Du nimmst von einem bestehenden System die backtest ERGEBNISSE (closed trades) in Punkten oder Währung und bringst diese in eine andere Reihenfolge:

BSP originaloutput backtest:
+500
+1000
-400
+300
-2000

und nimmst diese ERGEBNISSE dann und mischst diese dann mit der Monte Carlo Mischmaschine richtig durcheinander, d.h. erzeugst XXX verschiedene Equity curves - ja ?

Da die Anzahl der "closes trades" von der Zeitaches abhängen (5min, 60min, EOD)kann man über den Backtestzeitrum wenig Aufschlüsse ziehen. Welche Mengen an Ergebnissen nimmst Du ? und wieviele sims. dann damit ?

""Wenn man ein wenig damit experimentiert, ........ ein System in der Simulation "ruhiger" wird""

Ich würde sagen wo die Performance mit vergleichbaren Parametern ein Plattform bildet und nicht mit einem Wert eine super Perfomance = PEAK hat und mit kleinsten Parameterabweichungen sehr viel schlechter ist.

gruss hans

zentrader
Mitglied seit 10 Jahre 8 Monate

@hans,

ich nehme nicht die einzelnen Trade-Ergebnisse eines Backtests, sondern die Auswertung des Systemreports:

- Anzahl der Gewinnertrades z.B. 75
- Anzahl der Verlierertrades z.B. 50
- durchschn. Gewinn je Gewinnertrade z.B. 100 Punkte
- durchschn. Verlust je Verlierertrade z.B. 80 Punkte
- Währungsbetrag je Punkt (z.B. beim Dax = 25)
- Anzahl der Kurse, die diesem Backtest-Ergebnis zugrunde lagen z.B. 500

So - dies alles bekomme ich von der Tradestation, von Metastock, Amibroker oder auch aus einem selbstgestrickten Excel-Backtest geliefert.

Die Daten bedeuten für eine MCS-Simulation mit meiner Freewareversion, daß ich Kurse für 500 Tage hatte (also ca. 2 Jahre EOD-Daten) und in diesen 2 Jahren 125 Trades stattfanden.

Die Monte Carlo Simulation ist nun zweistufig einzustellen:

1. simuliere ich den Betrachtungszeitraum. Mache ich das 1:1 zu den vorliegenden Backtest-Daten, trage ich bei Anzahl der Trades/je MCS-Sim.Lauf z.B. 125 ein, d.h. ein Lauf simuliert mir wieder die o.g. 2 Jahre (ich kann hier natürlich auch weniger oder mehr Trades eintragen - ich muß mir halt nur immer bewußt sein, welchen Zeitraum dies aufgrund der o.g. Inputparameter meines Systems abdeckt)

2. ich stelle die Anzahl der Simulationsläufe ein.
z.B. 5000, ich hätte somit den oben gewählten "Zweijahreszeitraum" 5000 x simuliert, macht 10.000 Handelsjahre oder 125 x 5000 = 625.000 Trades...

Die min-, max- Werte werden für jeden Lauf berechnet und dann über alle Läufe gemittelt bzw. eingeschätzt (und in der Freewareversion fix auf ein Jahr bzw. 250 Kurse heruntergerrechnet dargestellt)

Man sieht so die mögl. Range der Systemergebnisse, welche Profits und Drawdowns simuliert werden bzw. welche mit der eingestellten Stat. Sicherheit zu erwarten sind.

Die Einstellungen diesbzgl. sind in der Freeware-Version natürlich nicht so flexibel wie in der kommerziellen Version (Unterschiede siehe hier, letzte Seite: http://www.zentrader.de/mcsquickref.pdf)...:-)

ciao,
zentrader

he96
Mitglied seit 10 Jahre 8 Monate

@ zentrader

Danke für die ausführliche Antwort, aber Du gibst mir Rätsel auf.

Ich kenne nur die Vorgehensweise mit "gehandelten" Ergebnissen je trade die Reihenfolge zu mischen, wie ich oben beschrieben habe. Was Du mischst versteh ich überhaupt nicht.

""1. simuliere ich den Betrachtungszeitraum. Mache ich das 1:1 zu den vorliegenden Backtest-Daten, trage ich bei Anzahl der Trades/je MCS-Sim.Lauf z.B. 125 ein, d.h. ein Lauf simuliert mir wieder die o.g. 2 Jahre (ich kann hier natürlich auch weniger oder mehr Trades eintragen - ich muß mir halt nur immer bewußt sein, welchen Zeitraum dies aufgrund der o.g. Inputparameter meines Systems abdeckt)""

Du hast KEINE Daten des underlyings in der Maschine - und Du gibst KEINE einzelnen Tradeergebnisse weiter ? Habe ich hier was verpasst ?

Zumindest ab 2. Punkt ist mir die Sache klar.

gruss hans

tradeyoungster
Mitglied seit 10 Jahre 8 Monate

Moin Hans,

ich glaube ich habe verstanden, wie zentrader simuliert.

Also:

Du hast ein Risk/Reward-Ratio von 1:2 und eine Erfolgswahrscheinlichkeit von 52/48 zu gewinnen.

Jetzt schreibst Du in Zelle A1 in Excel 1 und eine Formel wie =wenn(zufallszahl()>0,52;2;-1) in b1, in c1 =wenn(zufallszahl()>0,52;b1+2;b1-1). Jetzt kopierst Du die Formel aus C1 in d1 bis j1. Und kopierst die Zeile 1 und fügst sie in Zeile 2 bis zehn ein.

Jetzt hast Du die Daten von zehn Equity-Kurven mit zehn simulierten Trades.

Mit der Taste F9 kannst Du neue Equity-Kurven erzeugen.

Die Tabelle gibs hier:

http://s23.yousendit.com/d.aspx?id=3COL4PZXUPPES1ITEK4Z2R68I9

Gruss Tradey

Rückrufservice
Beschreiben Sie bitte Ihr Anliegen, damit wir uns auf den Rückruf vorbereiten können.
Ja, ich habe die Datenschutzerklärung zur Kenntnis genommen und willige ein, dass die von mir angegebenen Daten inklusive der Kontaktdaten zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen elektronisch erhoben und gespeichert werden. Meine Daten werden dabei nur streng zweckgebunden zur Bearbeitung meiner Anfrage genutzt und nicht ohne Einwilligung weitergegeben. Diese Einwilligung kann jederzeit mit Wirkung für die Zukunft widerrufen werden.

Jetzt registrieren

Jetzt registrieren und ZMP Live+ 14 Tage kostenlos testen!
  • Dauerhaft kostenfrei
  • Keine Zahlungsinformationen erforderlich