White's Reality Check & Hansen's SPA: Multiple-Testing-Korrektur für Strategien.
Wer 500 Strategien testet und die beste live schickt, hat statistisch fast garantiert einen Zufallstreffer erzeugt. Bonferroni ist zu hart, einzelne P-Values zu lasch. White's Reality Check und Hansen's SPA sind der saubere Kompromiss — und in Strategie-Selektion das, was den Unterschied macht.
Multiple Testing ist das wahrscheinlich am stärksten unterschätzte Problem im Quant-Trading. Wer einzelne Strategien sauber prüft, aber 1.000 davon getestet hat und nur die beste meldet, betreibt versteckten P-Hacking-Ablauf. Man sieht das in Strategie-Präsentationen ständig: „diese Strategie hat einen P-Value von 0,01“ — aber sie ist die Beste aus 200 Varianten, also ist der wahre P-Value näher an 0,87.
Das Multiple-Testing-Problem konkret.
Wenn Sie unter der Null-Hypothese (keine Strategie funktioniert) 100 unabhängige Tests laufen lassen, jeweils mit α = 0,05, erwarten Sie 5 falsche Positive. Wenn Sie 1.000 Strategien testen, 50. Nehmen Sie die scheinbar beste, ist die Chance, dass sie reines Rauschen ist, dramatisch erhöht.
Family-Wise Error Rate (FWER): die Wahrscheinlichkeit, mindestens eine falsche Entdeckung zu machen. Bei 100 Tests und α = 0,05 ist FWER ≈ 1 − (1 − 0,05)^100 ≈ 99,4 %. Praktisch garantierter falscher Treffer.
Warum Bonferroni nicht reicht.
Bonferroni-Korrektur: α durch Anzahl der Tests teilen. Bei 1.000 Strategien also α = 0,00005. Sauber, einfach, aber: in der Praxis tötet Bonferroni jede realistische Strategie. Trading-Returns sind hochgradig korreliert — 100 Variationen eines Moving-Average-Crossover sind keine 100 unabhängigen Tests. Bonferroni ignoriert das und ist deshalb chronisch zu konservativ.
Konkret: zwei Strategien mit Korrelation 0,9 liefern faktisch eine Information. Bonferroni straft sie wie zwei unabhängige. Ergebnis: echte Edges fallen durchs Raster.
White's Reality Check (2000).
Halbert White hat in „A Reality Check for Data Snooping“ einen Bootstrap-Test vorgeschlagen, der die echte Korrelations-Struktur der Strategien berücksichtigt. Idee:
- Berechnen Sie für jede der k Strategien die durchschnittliche Outperformance gegenüber einer Benchmark.
- Die Test-Statistik ist die maximale Outperformance über alle Strategien.
- Bootstrap (mit Stationary Bootstrap, der Time-Series-Korrelation respektiert) liefert die Null-Verteilung dieser Maximum-Statistik.
- Der P-Value ist der Anteil der Bootstrap-Maxima, die größer sind als die beobachtete Maximum-Outperformance.
Wichtig: weil das Maximum bootstrappt wird, ist die FWER automatisch kontrolliert. Korrelation zwischen Strategien ist eingebaut — keine zusätzliche Korrektur nötig.
Hansen's Superior Predictive Ability (2005).
Peter Hansen hat einen Schwachpunkt von White's Reality Check identifiziert: er ist anfällig für „schlechte“ Strategien im Pool. Wenn Sie 999 schlechte Strategien und 1 echte mit Edge testen, ziehen die schlechten die Null-Verteilung so, dass der Test zu konservativ wird — echte Edges werden übersehen.
Hansen's SPA-Test gewichtet schlechte Strategien aus der Null-Verteilung raus. Das macht den Test deutlich mächtiger (höhere Power bei gleicher Fehlerrate). In der Praxis: SPA findet echte Edges, wo Reality Check nichts sieht.
Model Confidence Set (Hansen, Lunde, Nason 2011).
Manchmal will man nicht die eine beste Strategie, sondern eine Menge aller Strategien, die nicht signifikant schlechter sind als die beste. Das ist der Model Confidence Set. Praktisch nützlich, wenn Sie ein Ensemble bauen wollen oder mehrere Strategien parallel laufen lassen.
Vorgehen: iterativ wird die schwächste Strategie aus dem Pool entfernt, bis keine mehr signifikant unter der besten liegt. Was übrig bleibt, ist das MCS.
Python-Implementation.
Die Bibliothek arch implementiert SPA und MCS robust. Reality Check baut man oft selbst.
# Hansen's SPA mit arch.bootstrap import numpy as np import pandas as pd from arch.bootstrap import SPA # losses: DataFrame mit shape (T, k) # Zeilen = Tage, Spalten = Strategien # Werte = negative Returns (kleiner = besser) # benchmark_loss: Vektor (T,) der Benchmark-Verluste spa = SPA(benchmark_loss, losses, reps=10000, block_size=10, studentize=True, bootstrap='stationary') spa.compute() print(f"P-value (consistent): {spa.pvalues['consistent']:.4f}") print(f"P-value (lower): {spa.pvalues['lower']:.4f}") print(f"P-value (upper): {spa.pvalues['upper']:.4f}") # Drei P-Values: # consistent = Hansen's empfohlener Test # lower = liberal # upper = konservativ (entspricht White's Reality Check)
Rechenbeispiel: 50 Strategien zur Auswahl.
Angenommen, ein Family Office hat 50 systematische Strategien zur Auswahl — von Trendfolge über Mean-Reversion bis zu Carry-Strukturen, getestet auf einem 10-Jahres-Universum. Naive Auswahl: Top 5 nach Sharpe, jede mit P-Value < 0,05 im Einzeltest. Klingt gut.
SPA-Test mit 10.000 Bootstrap-Samples, Block-Größe 10:
- SPA P-Value (consistent): 0,032 — Pool hat insgesamt eine echte Strategie
- Model Confidence Set bei α = 0,1: nur 3 Strategien (nicht 5)
- Zwei der Top-5 fallen aus dem MCS — sie sind Glück über Korrelation mit dem Markt-Sleeve
Konsequenz für die Allokation: das MCS-Triple gleichgewichten, die zwei rausgefallenen Strategien auf die Watchlist setzen. Die Live-Performance sollte danach im erwarteten SPA-Konfidenzintervall liegen.
FWER vs. FDR.
Family-Wise Error Rate (FWER): Wahrscheinlichkeit für mindestens einen falschen Treffer. Hart.
False Discovery Rate (FDR, Benjamini-Hochberg): erwarteter Anteil falscher Treffer unter den positiven. Weicher.
Für Allokationsentscheidungen mit echtem Kapital favorisiere ich FWER (Reality Check, SPA). Für explorative Strategie-Pipelines, wo Sie mit einigen falschen Positiven leben können, ist FDR sinnvoller. Mischformen existieren — etwa Romano-Wolf-Stepwise-Procedures, die FWER liefern aber mit höherer Power.
Caveats.
- Bootstrap-Samples: 10.000 sind Mindeststandard. Bei kleinen P-Values (< 0,01) eher 50.000. Sonst wird die Schätzung des P-Values selbst zu rauschig.
- Block-Größe: zu klein → Korrelation unterschätzt → P-Values zu klein. Zu groß → Verteilung zu unrobust. 5–20 Tage sind in den meisten Fällen ein guter Bereich.
- Definition des Strategy-Pools: SPA gilt nur für den Pool, den Sie wirklich getestet haben. Wenn Sie offline 100 weitere Varianten ausprobiert und verworfen haben, sind die im Pool nicht drin und Sie unterschätzen die Korrektur erneut.
Meine Praxis.
Bei Strategie-Selektion ist SPA für mich Pflicht, bevor Kapital allokiert wird. Reality Check nutze ich als zusätzlichen Sanity-Check — wenn beide übereinstimmen, ist die Entscheidung robust. MCS verwende ich, wenn ein Ensemble gefahren werden soll. Die Korrektur ist methodisch teuer und politisch unbeliebt („Sie killen meine Top-Strategien“) — aber sie ist das ehrlichste Filter gegen Selection-Bias, das ich kenne.
Ein nüchterner Satz zum Schluss: wer 50 Strategien testet und 0 SPA-signifikante findet, hat keine Trading-Strategien — er hat eine Sammlung von Glück und Rauschen. Das ist eine teure Erkenntnis. Aber besser jetzt als nach Live-Allokation.
Stand: Mai 2026, überarbeitet Oktober 2026. Angaben zu Produkten, Preisen, Gesetzen und Fristen können sich seitdem geändert haben; maßgeblich sind die aktuellen Angaben der Anbieter und Behörden.
Sie wollen Ihre Strategie-Pipeline gegen Multiple Testing absichern? Unverbindlich anfragen — wir setzen SPA und MCS in Ihrer Codebase auf. Mehr zu meinem Angebot: Trading-Systeme entwickeln lassen.