Monte-Carlo-Simulation einer Strategie — das Risiko, das ein einzelner Backtest verbirgt
Ein Leser schickte mir einmal den Backtest einer Strategie, auf die er stolz war: Trefferquote 55 Prozent, durchschnittlicher Gewinn 100 Euro, durchschnittlicher Verlust 80 Euro — auf dem Papier rund 3.800 Euro Gewinnerwartung pro Jahr. Solide Zahlen, dachte er, eröffnete ein Livekonto, riskierte fünf Prozent Kapital je Trade und blies das Konto in sechs Monaten durch. Er wollte wissen, wo er sich geirrt hatte. Der Irrtum lag nicht in der Strategie. Er hatte einen einzigen Backtest als die eine Wahrheit genommen — dabei hätte eine Monte-Carlo-Simulation gezeigt, dass diese Strategie bei dieser Positionsgröße eine Ruinwahrscheinlichkeit von rund 25 Prozent hatte. Diesen Artikel habe ich genau deswegen geschrieben.
Was eine Monte-Carlo-Simulation einer Strategie eigentlich ist
Monte Carlo ist eine probabilistische Methode, benannt nach dem Kasino in Monaco. Im Trading ist die Grundidee denkbar einfach: Statt sich die eine Kapitalkurve anzusehen, die die Geschichte deiner Trades zufällig produziert hat, erzeugst du tausend neue Sequenzen mit denselben Statistiken, aber in einer anderen Reihenfolge. Jede Sequenz ist eine andere Realisierung, jede zeichnet ein anderes Kontobild — und zusammen bilden sie die Wolke der Möglichkeiten, die ein einzelner Backtest der Strategie niemals zeigen kann.
Ein einzelner Backtest ist eine Realisierung eines stochastischen Prozesses. Die Varianz um diesen einen Pfad herum kann gewaltig sein — das ist keine Pathologie, sondern das normale Verhalten eines Spiels mit Vorteil, das viele Male wiederholt wird. Die Monte-Carlo-Simulation übersetzt diese Varianz in konkrete Zahlen, mit denen du tatsächlich arbeiten kannst.
Welche Fragen Monte Carlo wirklich beantwortet
Die Simulation liefert drei Dinge, die ein einzelner Backtest nicht direkt sagt. Erstens ein realistisches Drawdown-Niveau auf 95-Prozent-Konfidenzniveau — also jene Tiefe, die du in 95 von 100 Simulationsdurchläufen nicht überschreitest. Zweitens die Wahrscheinlichkeit, einen erheblichen Teil des Kontos zu verlieren, etwa unter 50 Prozent des Kapitals zu fallen. Drittens die Bandbreite plausibler Jahresergebnisse bei gleichbleibendem Vorteil (Edge).
In meinem Beispielszenario — rein hypothetisch, zur Veranschaulichung — hat eine Strategie mit 55 Prozent Trefferquote, 100 Euro durchschnittlichem Gewinner, 80 Euro durchschnittlichem Verlierer und 200 Trades im Jahr einen Erwartungswert von rund 19 Euro je Trade, also 3.800 Euro auf dem Papier. Ein Durchlauf mit 1.000 Simulationen ergab einen Median nahe 3.750 Euro. Die schlechtesten fünf Prozent der Durchläufe endeten bei etwa 500 Euro Gewinn, das schlechteste Prozent bei einem Verlust von 800 Euro, die besten fünf Prozent bei 7.500 Euro. Gleicher Edge — fünffacher Unterschied zwischen den Szenarien.
Simulation in Excel — so funktioniert es ohne Makros
Die einfachste Version braucht weder Makros noch VBA. In den Zellen A1 bis A5 trägst du die Parameter ein: Trefferquote 0,55, durchschnittlicher Gewinner 100, durchschnittlicher Verlierer -80, Anzahl der Trades 200 und Startkapital 10.000. In Zelle B1 gibst du die Formel =WENN(ZUFALLSZAHL()<A1; A2; A3) ein — die ZUFALLSZAHL-Funktion liefert einen Wert zwischen null und eins, und wenn er unter der Trefferquote liegt, bekommst du einen Gewinner, sonst einen Verlierer.
In Zelle C1 addierst du das Startkapital zum Ergebnis von B1 — das ist der erste Punkt der Kapitalkurve. B2 verwendet dieselbe Formel wie B1, C2 addiert den Wert aus C1 zu B2. Beide Spalten nach unten bis Zeile 200 ziehen. Das ergibt eine vollständige Jahressequenz.
Die beiden Spalten 1.000 Mal seitwärts duplizieren (B–C, D–E, F–G usw.) und du hast tausend unabhängige Kapitalkurven. Aus den Endwerten liest du mit =QUANTIL.EINSCHL(Bereich; 0,5) den Median ab, mit 0,05 und 0,01 die schlechtesten fünf und ein Prozent. F9 rechnet alle Zufallswerte neu, jedes Drücken liefert eine frische Tausender-Studie. Das reicht wirklich.
Dieselbe Aufgabe in Python — mit Bootstrap aus echter Handelshistorie
Python macht dasselbe schneller und erlaubt dabei Bootstrap: Du ziehst nicht aus angenommenen Parametern, sondern aus deiner echten Liste historischer Trades.
Du importierst NumPy, lädst 100 oder mehr reale P/L-Werte aus deinem Handelsjournal und schreibst neue_sequenz = np.random.choice(historie, size=200, replace=True). Die Funktion np.cumsum verwandelt die Liste der einzelnen P/L-Zahlen in eine Kapitalkurve, eine Schleife darum erzeugt tausend unabhängige Durchläufe. Percentile berechnest du mit np.percentile, Matplotlib lässt dich einen Spaghetti-Plot zeichnen — alle tausend Kurven übereinander mit dem Median und dem Band von Percentil 5 bis 95 hervorgehoben.
Bootstrap erhält die echten Verteilungsränder deiner Trades: dicke Verluste, geclusterte Bewegungen, den gelegentlichen Ausreißergewinn in einer volatilen Woche. Parametrische Annahmen können das nicht nachbilden, weil sie nicht davon ausgehen, dass deine Trades genau die Verteilung haben, die sie tatsächlich haben. Das ist besonders wichtig für das Risikomanagement auf dem Livehandel.
„Reward-to-risk ratios make almost no sense without including position sizing in the equation. Through position sizing, you can achieve almost any objective you'd like." — Van K. Tharp, 2007
Ehrliche Grenzen — was Monte Carlo nicht leistet
Eine parametrische Simulation steht auf zwei Annahmen: Die Trades sind unabhängig, und die Ergebnisverteilung ist stationär. Im echten Markt brechen beide Bedingungen gleichzeitig zusammen. Verluste tendieren dazu, sich zu häufen — wenn sich das Marktregime ändert, bewegen sich mehrere Trades hintereinander in dieselbe Richtung, und ein Modell, das unabhängig aus derselben Verteilung zieht, kann das nicht reproduzieren.
Das zweite Problem: Die Simulation verwendet genau die Geschichte, die du ihr gegeben hast. Wenn deine 100 Trades ausschließlich einen Aufwärtstrend in EUR/USD abdecken, sagt dir Monte Carlo nichts darüber, wie die Strategie in einer langen Konsolidierung oder nach einem heftigen 200-Pip-Zug nach US-Datenpublikationen funktioniert. Daher lohnt es sich, die Simulation mit der weiteren Analyse von Handelsstrategien zu kombinieren, um zu verstehen, ob der Edge auch über verschiedene Marktphasen stabil bleibt.
Die schwärzesten Drawdowns im realen Handel sehen häufig schlimmer aus als das 1-Prozent-Percentil aus einer sauberen Monte-Carlo-Studie — nicht besser. Behandle die Simulation als probabilistischen Boden, nicht als Decke.
Was jetzt zu tun ist
- Ziehe eine Handelshistorie von mindestens 100 abgeschlossenen Trades aus deinem Journal oder dem Plattform-Export. Weniger als 100 Trades lassen die Statistik zu verrauscht werden, als dass Monte Carlo noch etwas Sinnvolles über die Verteilungsränder aussagen könnte. Hast du weniger, handle weitere sechs bis zwölf Wochen und kehre dann mit einer größeren Stichprobe zu dieser Übung zurück.
- Öffne ein leeres Excel-Arbeitsblatt und baue die oben beschriebene parametrische Version nach. Trag deine eigene Trefferquote, den durchschnittlichen Gewinner, den durchschnittlichen Verlierer und dein Kapital ein, dupliziere die Spalten tausend Mal, drücke F9 und studiere die Streuung der Endwerte. Diese Stunde Arbeit zeigt dir, wie breit der Möglichkeitenfächer hinter deinem „Durchschnittsjahr" wirklich ist.
- Lies das 5-Prozent-Percentil des maximalen Drawdowns aus den tausend Simulationen ab. Wenn es auf einen Rückgang von 30 Prozent hinweist, du aber weißt, dass deine psychologische Schmerzgrenze bei 15 Prozent liegt, liegt das Problem nicht in der Strategie, sondern in der Positionsgröße. Halbiere das Risiko je Trade und rechne neu, bis der 5-Prozent-Boden in deine Toleranz passt.
- Führe nach einem Jahr Livehandel die Simulation erneut mit der neuen Handelshistorie durch und vergleiche die Verteilung mit der des Vorjahres. Wenn der Median gesunken und die Ränder breiter geworden sind, degradiert dein Edge — das ist der Moment, ernsthaft zu fragen, ob die Strategie noch funktioniert, bevor du sie blind weiter pflegst.
- Ergänze die Monte-Carlo-Analyse durch einen Vergleich mit anderen Risikomaßen aus dem praktischen Traderwerkzeug. Kennzahlen wie Calmar Ratio oder Sharpe Ratio messen ähnliche Dimensionen, setzen aber andere Annahmen voraus. Wer mehrere Messgrößen gemeinsam liest, bekommt ein vollständigeres Bild davon, wie belastbar sein Edge wirklich ist — und wann es Zeit ist, die Strategie zu überdenken statt sie blind weiterzuführen.
Quellen und Literatur
-
Bank for International Settlements Minimum capital requirements for market risk (d457) · Bazylejski standard pokazujący, jak instytucje liczą ryzyko rynkowe za pomocą expected shortfall i historycznej symulacji — analog Monte Carlo dla portfela. www.bis.org ↗
-
Van Tharp Institute About Van K. Tharp · Strona biograficzna potwierdzająca autorstwo książki „Trade Your Way to Financial Freedom" (McGraw-Hill) i jego pracę nad position sizingiem oraz symulacją Monte Carlo dla traderów detalicznych. www.vantharp.com ↗
-
NumPy Developers numpy.random.choice — Random sampling · Oficjalna dokumentacja funkcji losowania z powtórzeniami; podstawowe narzędzie do bootstrap resampling listy transakcji w Pythonie. numpy.org ↗
-
Python Software Foundation random — Generate pseudo-random numbers · Oficjalna dokumentacja biblioteki standardowej Pythona z funkcjami random.choices i random.sample, używanymi do prostych symulacji Monte Carlo bez NumPy. docs.python.org ↗
Häufig gestellte Fragen
Was ist eine Monte-Carlo-Simulation einer Trading-Strategie?
Monte Carlo ist eine probabilistische Methode, die nach dem Kasino in Monaco benannt wurde. Im Trading nimmst du eine Liste deiner historischen Trades oder die Statistiken der Strategie — Trefferquote, durchschnittlicher Gewinner, durchschnittlicher Verlierer — und erzeugst anstelle der einen Kapitalkurve, die die Geschichte produziert hat, tausend neue Sequenzen in zufälliger Reihenfolge. Jede hat dieselben Parameter, aber eine andere Abfolge von Gewinnern und Verlierern und zeichnet daher ein anderes Kontobild. Warum der Aufwand?: Ein einzelner Backtest ist eine Realisierung. Die Varianz darum herum kann enorm sein. Dieselbe Strategie mit einem Erwartungswert von rund 19 Euro je Trade und 200 Trades im Jahr kann in Monte-Carlo-Simulationen einen Median nahe 3.750 Euro liefern, aber das schlechteste 5-Prozent-Percentil fällt auf 500 Euro und das beste 5-Prozent-Percentil schießt auf 7.500 Euro. Die Bandbreite ist groß, selbst wenn der Edge konstant bleibt. Das häufigste Missverständnis: „Letztes Jahr hat die Strategie 5.000 Euro gebracht, also wird sie dieses Jahr ähnlich abschneiden." Monte Carlo zeigt, dass der realistische Bereich bei konstantem Edge von 1.000 bis 10.000 Euro reichen kann — und daran ist nichts Pathologisches. Das ist schlicht Varianz.
Wie führst du eine Monte-Carlo-Simulation in Excel durch?
Die einfachste Version braucht weder Makros noch VBA. In den Zellen A1 bis A5 gibst du die Parameter ein: Trefferquote 0,55, durchschnittlicher Gewinner 100, durchschnittlicher Verlierer -80, Anzahl der Trades 200, Startkapital 10.000. In B1 trägst du =WENN(ZUFALLSZAHL()<A1; A2; A3) ein — die ZUFALLSZAHL-Funktion liefert einen Wert zwischen null und eins, und wenn er unter der Trefferquote liegt, bekommst du einen Gewinner, sonst einen Verlierer. In C1 addierst du das Startkapital zum B1-Ergebnis: erster Punkt der Kapitalkurve. B2 und C2 folgen demselben Muster, aber C2 referenziert C1. Beide Spalten bis Zeile 200 nach unten ziehen. Das ergibt eine vollständige Jahressequenz. Die beiden Spalten 1.000 Mal seitwärts duplizieren und du hast tausend unabhängige Kapitalkurven. Aus den Endwerten liest du mit =QUANTIL.EINSCHL(Bereich; 0,5) den Median ab, mit 0,05 und 0,01 die schlechtesten fünf und ein Prozent. F9 rechnet alle Zufallswerte neu — jedes Drücken liefert eine frische Tausender-Studie. Das reicht vollkommen.
Wie implementierst du Monte Carlo in Python?
Python macht dieselbe Aufgabe schneller und erlaubt Bootstrap: Du ziehst nicht aus angenommenen Parametern, sondern aus deiner echten Handelsliste. Du importierst NumPy, lädst 100 oder mehr reale P/L-Werte aus dem Journal und schreibst neue_seq = np.random.choice(historie, size=200, replace=True). np.cumsum verwandelt die P/L-Liste in eine Kapitalkurve, eine Schleife darum erzeugt tausend unabhängige Durchläufe. Percentile liest du mit np.percentile, und Matplotlib lässt dich einen Spaghetti-Plot zeichnen — alle tausend Kurven übereinander mit Median und dem Band von Percentil 5 bis 95. Bootstrap erhält die echten Verteilungsränder: dicke Verluste, geclusterte Bewegungen, den gelegentlichen Ausreißergewinn in einer volatilen Woche. Parametrische Annahmen können das nicht nachbilden. Ein einziges Bild sagt mehr über das Risiko einer Strategie als zehn Tabellen.
Was sind die Grenzen von Monte Carlo im Trading?
Monte Carlo ist keine Wahrsagerei — das sollte man klar sagen. Eine parametrische Simulation setzt voraus, dass Trades unabhängig sind und die Ergebnisverteilung stationär ist. In echten Märkten brechen beide Bedingungen gleichzeitig zusammen. Verluste häufen sich: Wenn das Marktregime wechselt, bewegen sich mehrere Trades hintereinander in dieselbe Richtung, und ein Modell, das unabhängig aus derselben Verteilung zieht, kann das nicht reproduzieren. Deshalb sehen die schwärzesten Drawdowns im realen Handel häufig schlimmer aus als das 1-Prozent-Percentil aus Monte Carlo, nicht besser. Das zweite Problem: Die Simulation verwendet genau die Statistik, die du aus der Geschichte gewonnen hast. Wenn deine 100 Trades ausschließlich einen Aufwärtstrend in EUR/USD abdecken, sagt dir Monte Carlo nichts darüber, wie die Strategie in einer langen Konsolidierung funktioniert. Die praktische Konsequenz: Behandle das Monte-Carlo-Ergebnis als probabilistischen Boden, nicht als Decke. Wenn das schlechteste 5-Prozent-Szenario auf einen Drawdown von 30 Prozent hinweist, rechne damit, dass der reale Handel tiefer geht. Richte die Positionsgröße an diesem Boden aus, nicht am Median — dann bringt dich ein realer Rückschlag nicht aus dem Spiel.