Max-Drawdown via Monte-Carlo: was Sie wirklich aushalten müssen.
Wer auf einen historischen Maximum-Drawdown von 18 % blickt und denkt „das halte ich aus", übersieht den entscheidenden Punkt: dieser Wert ist ein einziger Pfad. Monte-Carlo zeigt die Verteilung möglicher Verläufe — und das 95 %-Perzentil liegt fast immer doppelt so tief.
Der klassische Fehler.
Ein Trader testet seine Trendfolge-Strategie über 15 Jahre. Backtest-Output: Sharpe 0,9, CAGR 11 %, Max-Drawdown 18 %. Position-Size wird so kalibriert, dass der Trader „mit 20 % Drawdown leben kann". Strategie geht live. Im dritten Jahr kommt ein 26 %-Drawdown. Der Trader steigt aus.
Das Problem liegt nicht in der Strategie. Es liegt in der Interpretation des Backtest-Drawdowns. Die 18 % sind eine Realisation einer Zufallsvariable. Andere Verläufe derselben Renditen-Generierungsmechanik hätten leicht 25, 30 oder 35 % Drawdown produzieren können. Der Backtest zeigt einen Pfad. Wir müssen die Verteilung kennen, nicht den Pfad.
Was Monte-Carlo wirklich liefert.
Monte-Carlo-Simulation generiert hunderte oder tausende synthetische Pfade mit denselben statistischen Eigenschaften wie die historische Strategie — gleiche Erwartungsrendite, gleiche Volatilität, gleiche Autokorrelation, idealerweise gleiche Verteilungsform inklusive Fat Tails. Für jeden Pfad rechne ich den Max-Drawdown. Das Ergebnis ist eine empirische Verteilung der Max-Drawdowns, nicht ein Punktwert.
Aus dieser Verteilung lese ich vier Kennzahlen ab: Median (der „typische" Max-DD), Erwartungswert (im Schnitt), 95 %-Perzentil (in einem von zwanzig möglichen Verläufen tritt mindestens dieser DD auf) und 99 %-Perzentil (Worst-Case für Risk-Budgeting). In aller Regel:
- Median-Max-DD: ähnlich dem Backtest-Max-DD
- 95 %-Perzentil: 1,5 bis 2,5-fach des Backtest-Werts
- 99 %-Perzentil: 2 bis 3,5-fach des Backtest-Werts
Konkretes Beispiel — Trendfolge.
Eine Trendfolge-Strategie, die ich für einen Mandanten betreute, zeigt im Backtest 18 % Max-DD über 18 Jahre. Die Monte-Carlo-Analyse mit 10.000 Pfaden, kalibriert auf die historischen Tagesrenditen mit empirischer Verteilung (kein Normalitäts-Bootstrap), liefert:
- Median-Max-DD: 17,4 % (Backtest plausibel)
- Erwartungswert Max-DD: 19,1 %
- 95 %-Perzentil: 31,8 %
- 99 %-Perzentil: 38,4 %
Anders formuliert: in einem von zwanzig 18-Jahres-Verläufen sieht der Mandant einen Drawdown von mindestens 32 %. In einem von hundert sogar 38 %. Wer Position-Sizing auf den Backtest-DD kalibriert, riskiert mit hoher Wahrscheinlichkeit einen Drawdown, der die persönliche Schmerzgrenze überschreitet.
Recovery-Time — die zweite Verteilung.
Die Drawdown-Tiefe ist nur die halbe Wahrheit. Die Recovery-Time — wie lange es dauert, das vorherige Hoch wiederzuerreichen — ist mindestens so wichtig für die Frage, ob ein Drawdown psychologisch überlebbar ist. Auch hier liefert MC eine Verteilung, nicht eine Zahl.
Typischer Befund für Trendfolge mit Sharpe-Range 0,7–1,0: Median-Recovery 12–18 Monate, 95 %-Perzentil 30–48 Monate, 99 %-Perzentil über 60 Monate. Wer mit der Vorstellung „Drawdowns sind in zwölf Monaten weg" startet, wird mit hoher Wahrscheinlichkeit irgendwann mit einem Verlust leben, der zwei bis vier Jahre anhält.
Monte-Carlo in Python.
Die Implementierung ist überschaubar. Wichtig ist, nicht aus einer Normalverteilung zu samplen — Trading-Renditen sind dazu zu fat-tailed. Stattdessen arbeite ich mit Block-Bootstrap aus den historischen Tagesrenditen. Dadurch bleiben Volatilitätscluster und Autokorrelationsstrukturen erhalten:
import numpy as np
import pandas as pd
returns = pd.read_parquet("strategy_daily_returns.parquet")["pnl"]
n_days = len(returns)
n_paths = 10_000
block = 20 # ~ ein Handelsmonat, hält Vola-Cluster zusammen
rng = np.random.default_rng(42)
max_dds = np.empty(n_paths)
recovery_times = np.empty(n_paths)
for i in range(n_paths):
# Block-Bootstrap
n_blocks = n_days // block + 1
starts = rng.integers(0, n_days - block, n_blocks)
sampled = np.concatenate([returns.values[s:s+block] for s in starts])[:n_days]
equity = (1 + sampled).cumprod()
peak = np.maximum.accumulate(equity)
dd = equity / peak - 1
max_dds[i] = dd.min()
# Recovery-Time bis nächstes Hoch nach max-dd
trough_idx = dd.argmin()
peak_val = peak[trough_idx]
recov = np.where(equity[trough_idx:] >= peak_val)[0]
recovery_times[i] = recov[0] if len(recov) else n_days - trough_idx
print(f"Median Max-DD: {np.median(max_dds):.1%}")
print(f"Erwartungswert: {np.mean(max_dds):.1%}")
print(f"95%-Perzentil DD: {np.percentile(max_dds, 5):.1%}")
print(f"99%-Perzentil DD: {np.percentile(max_dds, 1):.1%}")
print(f"Median Recovery: {np.median(recovery_times):.0f} Tage")
print(f"95% Recovery (lang):{np.percentile(recovery_times, 95):.0f} Tage")
Die Blocklänge ist ein bewusster Parameter: zu klein und Cluster werden zerstört, zu groß und die Bootstrap-Vielfalt sinkt. 15–25 Handelstage funktionieren für die meisten Trendfolge-, Mean-Reversion- und Carry-Strategien gut.
Psychologische Implikationen.
Die wichtigste Konsequenz aus der MC-Drawdown-Analyse ist nicht statistisch, sondern mental. Ein Trader, der vorher weiß: „mein Worst-Case ist eher 30 % als 18 %, und Recovery kann über zwei Jahre dauern", reagiert in der Realität anders als jemand, der sich an den Backtest-DD klammert.
Die meisten Strategien sterben nicht, weil sie versagen — sie sterben, weil der Trader im realisierten Tail-Pfad aussteigt. Wer den realistischen Worst-Case antizipiert hat, hält durch. Wer den optimistischsten Pfad als Erwartung ansetzt, kapituliert beim ersten echten Stress.
Risk-Budget-Setting auf MC-Basis.
Die praktische Umsetzung in der Position-Sizing-Logik: ich definiere zuerst eine persönliche Drawdown-Toleranz — den Wert, bei dem der Mandant ehrlich nicht mehr aussteigt. Sagen wir 20 %. Dann skaliere ich die Strategie so, dass das 95 %-Perzentil des MC-Max-DDs bei diesen 20 % landet, nicht der Backtest-DD.
Praktisch heißt das: wenn der Backtest 18 % zeigt und MC-95 % 32 %, dann ist die Strategie für 20 %-DD-Toleranz um den Faktor 32/20 = 1,6 zu groß dimensioniert. Position-Sizes müssen entsprechend auf etwa 62,5 % der naiven Größe reduziert werden. Das wirkt zunächst konservativ, ist aber statistisch ehrlich.
Grenzen der Methode.
- Stationarität: MC unterstellt, dass die Zukunft denselben statistischen Eigenschaften folgt wie die Vergangenheit. Regimewechsel (Vola-Schub, Korrelations-Bruch) werden nicht abgebildet.
- Fat-Tail-Risiko: selbst mit Block-Bootstrap unterschätzt MC echte Tails, weil die zugrundeliegende Historie selten genug extreme Events enthält. Ein 1987-artiger Tag, der in der Trainingsperiode fehlt, taucht im Bootstrap nie auf.
- Verhaltens-Feedback: in der Realität reagiert der Trader auf den Drawdown. MC unterstellt mechanisches Festhalten an der Strategie.
Meine Praxis.
Bei jedem neuen Mandantenstrategie-Setup laufen 10.000 MC-Pfade mit Block-Bootstrap. Die Position-Sizing-Empfehlung basiert immer auf MC-95 %-DD, niemals auf Backtest-DD. Das senkt die nominellen Renditeerwartungen, aber es schützt vor dem häufigsten Strategie-Tod: dem Aussteigen im 95 %-Perzentil-Drawdown, der „nicht hätte sein dürfen", weil der Backtest harmloser aussah.
Zusätzlich präsentiere ich nicht eine Zahl, sondern eine Tabelle: Median, Erwartungswert, 90 %, 95 %, 99 %-Perzentil für Max-DD und Recovery-Time. Der Mandant muss diese Tabelle mental durchgehen, bevor wir live schalten. Nur dann ist die nachfolgende Reise mental kalibriert.
Sie wollen wissen, welcher Drawdown bei Ihrer Strategie realistisch im Tail möglich ist? Erstgespräch buchen — wir rechnen die MC-Verteilung für Ihre konkrete Strategie.