Bias-Korrektur in Backtests: Survivorship, Look-Ahead, Selection systematisch eliminieren.

Ein Backtest sagt nur dann etwas Brauchbares aus, wenn er die vier großen Bias-Quellen kennt und korrigiert. Tut er es nicht, ist er Marketing — kein Test. Hier die Checkliste, mit der ich jeden Backtest abklopfe, bevor er produktiv geht.

Wenn ich einen Backtest sehe, der Sharpe 2.5 und 8 Prozent Max-Drawdown zeigt, ist meine erste Frage nicht „wie“, sondern „welche Bias-Quellen wurden korrigiert?“. Die ehrliche Antwort ist häufig: keine. Was zur Folge hat, dass die Performance live um 50 bis 80 Prozent einbricht — nicht wegen Slippage, sondern weil der Backtest auf einer geschönten Realität trainiert wurde.

Bias 1: Survivorship.

Sie testen eine Strategie auf den S&P-500-Aktien von heute. Problem: das sind die Überlebenden. Lehman Brothers, Enron, WorldCom — alles Firmen, die mal im Index waren, heute aber nicht mehr. Ihr Backtest sieht sie nie und unterstellt damit implizit, dass jede Strategie die Pleite­ kandidaten gemieden hätte.

Der Effekt: typischerweise 2 bis 4 Prozent zu hohe Jahres­performance. Bei Long-only-Equity-Strategien kann der Effekt noch größer sein, bei Long-Short kleiner.

Korrektur: nutzen Sie Datenquellen mit historischer Index-Mitgliedschaft. Kommerziell: Norgate, CRSP, Bloomberg PIT. Open-Source ist die Lage düster — Yahoo Finance liefert keine Delisting-Daten. Für Aktien-Universen ohne Norgate-Budget mische ich pragmatisch: ich nutze einen festen, breiten Universum-Snapshot (z. B. Russell 3000 vor 10 Jahren) plus manuelle Liste aller Delistings im Test-Zeitraum.

Bias 2: Look-Ahead.

Sie verwenden in Ihrer Backtest-Entscheidung am Tag t Informationen, die zum Zeitpunkt t real noch nicht verfügbar waren. Klassische Fallen:

Korrektur: T+1-Regel als Standard — jede Information, die zum Tagesende t publiziert wird, wird frühestens am nächsten Handelstag genutzt. Für Earnings: explizite Announcement-Time (vor oder nach Börsenschluss?) berücksichtigen. Für Fundamentaldaten: Point-in-Time-Datenbanken, die den damaligen Stand abbilden, nicht den heutigen.

Bias 3: Selection.

Selection-Bias ist subtiler als Survivorship. Sie wählen ein Universum, das schon gut performt hat — z. B. „die 100 größten Tech-Aktien“ als Backtest-Set. Das Universum selbst ist das Ergebnis einer historischen Selektion, die Sie zum damaligen Zeitpunkt nicht hätten machen können.

Korrektur: Point-in-Time-Universen. Wenn Sie heute eine „Top-100-Tech“-Strategie testen, dann muss „Top 100 Tech“ zu jedem historischen Datum mit den damaligen Marktcaps neu bestimmt werden — nicht mit den heutigen. Das schließt Firmen ein, die damals groß waren und heute klein sind (oder weg).

Bias 4: Data-Snooping.

Sie testen 1000 Strategie-Varianten auf demselben Datensatz und behalten die beste. Mit Wahrscheinlichkeit nahe 1 ist die „Beste“ reines Glück — selbst wenn keine einzelne Strategie echten Edge hätte. Lopez de Prado nennt das „Backtest Overfitting“, und es ist der häufigste Grund, warum Strategien live versagen.

Korrektur: drei Schichten.

Konkrete Checkliste, die ich vor jedem Live-Gang abhake.

[ ] Universum enthält historische Delistings / Bankruptcies
[ ] Index-Mitgliedschaft zum jeweiligen Datum, nicht heutige
[ ] Fundamentaldaten mit Announcement-Date, nicht Quartalsende
[ ] Preisdaten mit Split-/Dividenden-PIT-Adjustierung
[ ] Order-Execution mit realistischer T+0-Latenz
[ ] Slippage- und Kommissions-Modell explizit
[ ] OOS-Daten beim Design nicht angefasst
[ ] Walk-Forward über mindestens 5 Fenster
[ ] WFE > 0.5 in der Mehrzahl der Fenster
[ ] Sharpe um Hypothesen-Anzahl deflationiert
[ ] Parameter-Stabilität dokumentiert
[ ] Sensitivitätsanalyse (±20 % auf jeden Parameter)

Wenn auch nur ein Punkt nicht erfüllt ist, geht die Strategie nicht live. Punkt.

Code-Sketch: Look-Ahead-Check.

# Einfacher Look-Ahead-Detector: Permutations-Test
import numpy as np

def lookahead_check(signals, returns, n_perms=1000):
    """
    Permutiert die Signale zeitlich (Shuffle) — sollten Signal und Returns
    unabhängig sein, ist das Original-Sharpe nicht signifikant höher.
    Verdacht: das ist meist nicht der Fall, weil Returns autokorreliert sind.
    Echter Test: Signale um 1 Tag in die Zukunft schieben.
    """
    real_sr = np.mean(signals * returns) / np.std(signals * returns)
    shifted = signals.shift(-1).dropna()
    fwd_sr  = np.mean(shifted * returns.loc[shifted.index]) / np.std(shifted * returns.loc[shifted.index])
    if fwd_sr > real_sr * 1.2:
        print(f"WARN: Sharpe steigt bei Look-Ahead um {(fwd_sr/real_sr-1)*100:.1f}%")
        print("Vermutung: Signale enthalten bereits zukünftige Information.")
    return real_sr, fwd_sr

Wenn Sie das Signal um einen Tag in die Zukunft schieben und die Performance steigt deutlich, ist das Signal vermutlich nicht das Problem — die Look-Ahead-Komponente steckt im Feature-Engineering.

Meine Praxis.

Ich dokumentiere für jede Strategie, die ich für Kunden umsetze, alle vier Bias-Quellen explizit: wie wurde Survivorship behandelt, welche Look-Ahead-Risiken bestehen, wie wurde das Universum zeitlich konsistent gehalten, wie viele Hypothesen wurden getestet. Das ist Aufwand, aber es ist der einzige Weg, sich nach einem schlechten Live-Quartal nicht selbst zu belügen.

Das Schöne: wenn die Bias-Korrekturen sauber sind und die Strategie trotzdem profitable Walk-Forward- Ergebnisse liefert, dann haben Sie sehr wahrscheinlich echten Edge. Das ist selten. Aber wenn es passiert, ist es belastbar.

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 einen Backtest, der bei einem ernsthaften Audit nicht zerfällt? Unverbindlich anfragen — wir gehen die Checkliste gemeinsam durch. Mehr zu meinem Angebot: Trading-Systeme entwickeln lassen.