Monte Carlo Permutation Tests: ist Ihre Strategie besser als Zufall?
Ein Sharpe von 1,4 sieht beeindruckend aus — bis Sie testen, ob 1.000 zufällig permutierte Versionen derselben Returns nicht denselben Sharpe produzieren. Permutation Tests sind der härteste, ehrlichste Realitätscheck für jede Strategie. Wenn sie ihn nicht besteht, ist sie Glück.
Die klassische Frage: „Ist meine Strategie wirklich besser als zufälliges Handeln?“ Frequentistische Antworten via t-Test setzen Normalverteilung voraus — die Returns von Trading-Strategien sind alles, nur nicht normal. Permutation Tests umgehen das Problem komplett: sie konstruieren die Null-Verteilung empirisch.
Das Grundprinzip.
Sie haben eine Strategie, die auf einer Return-Reihe einen Sharpe von 1,4 erzeugt. Die Null-Hypothese lautet: das Signal Ihrer Strategie ist statistisch ununterscheidbar von einer zufälligen Re-Anordnung der gleichen Returns. Anders ausgedrückt: Sie haben keine Edge.
Vorgehen:
- Originale Returns-Serie der Strategie: berechnen Sie die Statistik, z. B. Sharpe = 1,4.
- Permutieren Sie die Returns 1.000-mal (oder mehr) zufällig.
- Für jede Permutation berechnen Sie die gleiche Statistik.
- Ergebnis: eine Null-Verteilung von 1.000 Sharpes unter zufälliger Anordnung.
- P-Value: Anteil der permutierten Sharpes, die ≥ Ihrem echten Sharpe sind.
Ist der P-Value < 0,05, ist Ihre Strategie auf dem 5 %-Niveau signifikant. Wichtig: das ist kein Beweis der Profitabilität — es ist ein Ausschluss-Test gegen reinen Zufall.
Block-Permutation: warum Sie nicht naiv shuffeln dürfen.
Tägliche Returns sind autokorreliert. Volatilitäts-Cluster, GARCH-Effekte, Mean-Reversion in kurzen Horizonten — all das bricht zusammen, wenn Sie Tag für Tag mischen. Eine einfache Permutation zerstört die Time-Series-Struktur und unterschätzt damit die Schwierigkeit, einen guten Sharpe zufällig zu erzeugen. P-Values werden zu klein.
Lösung: Block-Permutation. Statt einzelne Tage zu mischen, mischen Sie zusammenhängende Blöcke — typisch 5 bis 20 Handelstage. Innerhalb der Blöcke bleibt die Korrelations-Struktur erhalten, zwischen den Blöcken wird randomisiert.
Python-Implementation.
# Block-Permutation Sharpe Test import numpy as np def sharpe(r, periods=252): if r.std() == 0: return 0.0 return r.mean() / r.std() * np.sqrt(periods) def block_permutation_test(strategy_returns, block_size=10, n_perm=1000, seed=42): rng = np.random.default_rng(seed) r = np.asarray(strategy_returns) n = len(r) observed = sharpe(r) # In Blöcke aufteilen n_blocks = n // block_size blocks = [r[i*block_size:(i+1)*block_size] for i in range(n_blocks)] null_sharpes = np.empty(n_perm) for i in range(n_perm): perm_idx = rng.permutation(n_blocks) permuted = np.concatenate([blocks[j] for j in perm_idx]) null_sharpes[i] = sharpe(permuted) p_value = (null_sharpes >= observed).mean() return observed, null_sharpes, p_value obs, null, p = block_permutation_test(returns, block_size=10, n_perm=2000) print(f"Observed Sharpe: {obs:.2f}") print(f"Null mean: {null.mean():.2f}, std: {null.std():.2f}") print(f"P-value: {p:.4f}")
Anwendung auf eine typische Trendfolge-Strategie.
Konkret aus einem Mandanten-Projekt: eine Trendfolge auf 12 Futures (Indizes, Bonds, FX, Commodities), 200-Tage-Breakout, ATR-basiertes Position-Sizing, Equal-Risk-Allocation. Backtest 2015–2032, Sharpe 0,93.
Block-Permutation, Block-Größe 20 Tage, 5.000 Permutationen, separat pro Asset:
- Bonds: P-Value 0,003 — klar signifikant
- Aktien-Indizes: P-Value 0,041 — gerade so signifikant
- FX: P-Value 0,18 — nicht signifikant
- Commodities: P-Value 0,002 — klar signifikant
Auf Portfolio-Ebene P-Value 0,012. Die Strategie als Ganzes bestand — aber FX trug nichts Echtes bei. Das hat die Allokation verändert: FX-Sleeve raus, Risikobudget auf die anderen drei Buckets umverteilt. Der Portfolio-Sharpe stieg auf 1,04 ohne neuen Code, nur durch ehrliches Reporting.
Bootstrap vs. Permutation: der Unterschied.
Beides sind Resampling-Verfahren, aber für unterschiedliche Fragen:
- Bootstrap (Ziehen mit Zurücklegen aus den eigenen Daten): liefert Konfidenzintervalle um die beobachtete Statistik. Beantwortet: „Wie unsicher bin ich über den wahren Sharpe?“
- Permutation (Umordnen ohne Zurücklegen unter der Null-Hypothese): liefert P-Values gegen eine spezifizierte Null. Beantwortet: „Ist der Effekt signifikant größer als Null?“
Für die Frage „funktioniert meine Strategie überhaupt?“ ist Permutation der bessere Test. Für die Frage „wie breit ist mein Sharpe-Konfidenzintervall?“ ist Bootstrap das Mittel. In meinen Reports nutze ich beides.
Caveat: Multiple Testing.
Permutation Tests beantworten eine Hypothese. Wenn Sie aber 500 Strategie-Varianten testen und die beste herauspicken, sagt der Permutation Test dieser einen Variante nichts darüber, ob die Selection-Bias bereits den P-Value vernichtet hat. Für Multiple Testing braucht es White's Reality Check oder Hansen's SPA — dazu kommt der nächste Artikel.
Praktisch heißt das: einen Permutation Test wende ich am Ende eines Strategie-Entwicklungsprozesses an, nicht während der Suche. Wer iterativ optimiert, muss korrekt korrigieren — sonst feiert er Zufallstreffer.
P-Value-Interpretation: Vorsicht ist Pflicht.
Drei häufige Fehler:
- P = 0,04 bedeutet nicht: Wahrscheinlichkeit 96 %, dass Strategie funktioniert. Es bedeutet: wenn die Strategie keine Edge hätte, würden 4 % der Zufallsversionen denselben oder besseren Sharpe erreichen.
- P = 0,06 ist nicht „fast signifikant“. Es ist „bestätigt nicht signifikant“. P-Values sind binär, nicht graduell.
- Niedriger P-Value ≠ profitabel live. Transaktionskosten, Slippage, Regime-Wechsel werden vom Test nicht abgedeckt.
Meine Praxis.
Jede Strategie mit Sharpe > 0,8 muss bei mir einen Block-Permutation-Test mit mindestens 2.000 Permutationen und Block-Größe ≥ 10 bestehen, P-Value < 0,05. Ohne das geht keine Strategie in Paper-Trading. Strategien mit Sharpe > 1,5 prüfe ich zusätzlich pro Asset und pro Marktregime (Vol-Hoch, Vol-Tief). Wenn der P-Value in einzelnen Segmenten kippt, fliegen die Segmente raus.
Permutation Tests fühlen sich technisch trivial an — sie sind aber das schärfste Filter, das ich kenne. Ehrlich angewandt eliminieren sie 60–70 % der Strategien, die ich zur Validierung bekomme. Das ist nicht traurig. Das ist der Test, der seinen Job macht.
Sie wollen wissen, ob Ihre Strategie statistisch signifikant ist — oder bloß ein hübscher Backtest? Erstgespräch buchen — wir prüfen es gemeinsam.