← Alle Insights

Bootstrap-Resampling: die ehrlichere Alternative zu Monte-Carlo?

Bootstrap braucht keine Verteilungsannahme. Es sampelt aus dem, was tatsächlich passiert ist. Das macht es in vielen Trading-Anwendungen sauberer als Monte-Carlo — wenn man die Stolperfallen kennt.

Bradley Efron hat 1979 ein Verfahren vorgeschlagen, das damals als „statistisches Münchhausen-Verfahren" verspottet wurde: aus der eigenen Stichprobe ziehen, um sich selbst an den Haaren aus dem statistischen Sumpf zu ziehen. Heute ist Bootstrap eine der wichtigsten Methoden in der angewandten Statistik — und im Quant-Trading oft die ehrlichere Wahl gegenüber klassischem Monte-Carlo.

Das Prinzip.

Bootstrap macht etwas konzeptionell Einfaches: aus den beobachteten Daten wird mit Replacement neu gesampelt. Aus n Beobachtungen werden n neue Beobachtungen gezogen, einzelne Werte dürfen mehrfach vorkommen, andere fehlen. Wiederholt man das B-mal (B = 1 000 bis 10 000), erhält man B Bootstrap-Stichproben, auf denen man die interessierende Kennzahl jeweils neu berechnet.

Aus dieser Verteilung der Kennzahlen folgen Konfidenzintervalle, Standardfehler, p-Werte — ohne dass man eine theoretische Verteilung unterstellt hat. Das ist der zentrale Unterschied zu parametrischem Monte-Carlo: Bootstrap ist verteilungsfrei.

Warum das im Trading ein Vorteil ist.

Returns von Trading-Strategien sind selten normalverteilt. Sie haben Fat Tails, oft Schiefe, manchmal multimodale Strukturen (Trend- und Range-Tage gemischt). Eine parametrische Monte-Carlo mit Normalverteilung unterschätzt systematisch das Tail-Risiko. Bootstrap arbeitet direkt auf den realen Daten — inklusive aller tatsächlich aufgetretenen Schiefen und Ausreißer.

Das ist gleichzeitig die Schwäche: Was nie passiert ist, taucht im Bootstrap auch nicht auf. Wer 2008 nicht im Sample hat, wird im Bootstrap keinen 2008er-Drawdown sehen.

Stationary Bootstrap für serielle Korrelation.

Klassischer Bootstrap (i. i. d.-Bootstrap) sampelt einzelne Werte unabhängig. Für Trading-Returns ist das oft problematisch: Returns sind nicht unabhängig. Volatilitäts-Cluster, Trend-Persistenz, Mean-Reversion — alles erzeugt Autokorrelation, die durch i. i. d.-Bootstrap zerstört wird.

Die Lösung kommt von Politis und Romano (1994): Stationary Bootstrap. Statt einzelner Werte werden zusammenhängende Blöcke gesampelt. Die Blocklänge ist geometrisch verteilt mit Mittelwert 1/p — das macht den Prozess stationär (im Gegensatz zum Block-Bootstrap fixer Länge).

Block-Bootstrap mit fester Länge ist die einfachere Variante: Sie wählen z. B. 20er-Blöcke und sampeln daraus. Funktioniert solide, ist aber an den Rändern leicht verzerrt.

Python-Implementation.

Mit dem arch-Paket oder kompakt selbst geschrieben:

# Stationary Bootstrap für Return-Serien
import numpy as np

def stationary_bootstrap(x, n_samples, mean_block_len=20, rng=None):
    rng = rng or np.random.default_rng()
    n = len(x)
    p = 1.0 / mean_block_len
    out = np.empty(n_samples)
    i = rng.integers(0, n)
    for k in range(n_samples):
        out[k] = x[i]
        if rng.random() < p:
            i = rng.integers(0, n)
        else:
            i = (i + 1) % n
    return out

# Bootstrap-Verteilung des Sharpe-Ratios
def bootstrap_sharpe(returns, n_boot=10_000, mean_block_len=20):
    rng = np.random.default_rng(42)
    sharpes = np.empty(n_boot)
    n = len(returns)
    for b in range(n_boot):
        sample = stationary_bootstrap(returns, n, mean_block_len, rng)
        sharpes[b] = sample.mean() / sample.std(ddof=1) * np.sqrt(252)
    return sharpes

sh = bootstrap_sharpe(strategy_returns)
print(f"Sharpe 95%-CI: [{np.quantile(sh, 0.025):.2f}, "
      f"{np.quantile(sh, 0.975):.2f}]")

Für ernsthafte Anwendungen lohnt sich arch.bootstrap aus Kevin Sheppards arch-Paket — fertige Implementierungen für IID, Circular Block, Stationary und Moving Block Bootstrap, inkl. paralleler Ausführung.

Anwendungen, die ich täglich nutze.

Konfidenzintervall für Sharpe-Ratio

Der berichtete Sharpe einer Strategie ist eine Punktschätzung. Mit Bootstrap bekommen Sie ein ehrliches 95-%-Konfidenzintervall. In der Praxis: Strategien mit Punkt-Sharpe 1,3 zeigen oft Bootstrap-Intervalle wie [0,4 – 2,1]. Das ist eine ganz andere Aussage als „Sharpe = 1,3".

Strategie-Vergleich

Sie haben Strategie A mit Return 14 % und Strategie B mit 16 %. Ist B wirklich besser? Bootstrap-p-Werte für die Differenz beantworten das — meistens lautet die Antwort: „nicht signifikant, beides ist im Rauschbereich".

Out-of-Sample-Tests

Für Walk-Forward-Ergebnisse berechne ich Bootstrap-Konfidenzintervalle der OOS-Equity. Eine OOS-Kurve, deren 5-%-Bootstrap-Pfad negativ wird, ist mir zu riskant — egal, wie schön der Mittelwert aussieht.

Wann Monte-Carlo trotzdem besser ist.

Bootstrap ist nicht universell überlegen. Drei Situationen, in denen ich parametrisches Monte-Carlo bevorzuge:

Stats- vs. ML-Sicht.

Bootstrap stammt aus der klassischen Statistik. In der ML-Welt taucht dasselbe Prinzip unter anderen Namen auf: Bagging, Out-of-Bag-Estimate, Random Forests. Was im Trading-Kontext oft übersehen wird: jede ML-Strategie, die Bagging nutzt, hat im Inneren bereits ein Bootstrap-Verfahren — die Validierung mit zusätzlichem externem Bootstrap würde das Konfidenzintervall korrekt einrahmen, wird aber selten sauber durchgezogen.

Meine Praxis.

Faustregel, die ich jedem Mandanten weitergebe:

Wer beides kombiniert — Bootstrap für die Diagnose, Monte-Carlo für die Prognose — hat ein robustes Risiko-Framework. Wer nur eines nutzt, hat eine halbe Geschichte.

Sie wollen Bootstrap und Monte-Carlo sauber für Ihre Strategie aufsetzen? Erstgespräch buchen — wir bauen das gemeinsam.