Ehrliches Backtesting: Overfitting, Lookahead, Survivorship
Du hast eine Kapitalkurve, die nach oben rechts läuft. Sharpe über 2, ein maximaler Drawdown, mit dem du leben könntest, ein paar hundert Trades. Es hat ein Wochenende Feintuning gekostet, und das Ergebnis fühlt sich verdient an.
Es ist vermutlich wertlos, aus mechanischen Gründen und nicht wegen mangelnden Könnens. Ein Backtest testet keine Strategie. Er misst, wie gut eine Regel einen Datensatz beschreibt, den du bereits gesehen hast. Das sind verschiedene Aussagen, und die zweite stützt keine Schlussfolgerung über Geld. Wenn du eine Strategie hast, auf die du stolz bist, lies den Rest mit dieser Strategie im Kopf.
Overfitting ist keine Schlamperei, es ist ein Zählproblem
Die übliche Darstellung lautet, Overfitting entstehe durch zu viele Parameter. Das ist ein Teil davon. Der größere Teil ist, wie oft du hingesehen hast.
Jeder Test, den du gegen denselben Datensatz laufen lässt, ist ein Versuch. Rückblick ändern und neu laufen lassen: Versuch. Filter hinzufügen und neu laufen lassen: Versuch. Einen anderen Wert probieren, weil der erste enttäuschend war: Versuch. Nach 200 Versuchen auf derselben Historie ist das bestaussehende Ergebnis genau das, was du allein aus Rauschen erwarten würdest, ob nun ein Vorteil existiert oder nicht.
Bei einer Signifikanzschwelle von 5 % erzeugen 200 unabhängige Versuche rein zufällig etwa 10 scheinbar „signifikante“ Ergebnisse. Du wählst dann das beste aus, und genau dieses Auswahlverfahren garantiert, dass du einen falsch positiven Treffer erwischst.
Die Zahl der Versuche taucht in kaum einer Auswertung auf, und sie sollte die erste berichtete Zahl sein. Protokolliere jede Konfiguration, die du testest, auch die verworfenen, und behandle das Endergebnis als eine Ziehung aus dieser gesamten Suche.
Und die Zahl ist größer als deine eigenen Experimente. Wenn du ein Crossover gleitender Durchschnitte auf dem S&P testest, bist du nicht der Erste. Tausende haben Varianten dieser Idee auf derselben Historie getestet, und die, die scheiterten, wurden nie veröffentlicht. Du hast eine Suche geerbt, die du nicht selbst durchgeführt hast.
Lookahead-Bias versteckt sich in ganz gewöhnlichem Code
Lookahead heißt, Informationen zum Zeitpunkt t zu verwenden, die zum Zeitpunkt t nicht verfügbar waren. Leicht gesagt und ständig verletzt.
Den Schlusskurs zugleich als Signal und als Ausführung verwenden. Deine Regel löst auf dem heutigen Schlusskurs aus und du wirst zum heutigen Schlusskurs gefüllt. Im Livehandel kennst du den Schlusskurs erst, wenn er zustande gekommen ist. Die Lücke ist bei liquiden Tages-Bars klein und bei allem Intraday oder Dünnen gewaltig.
Revidierte Daten. Wirtschaftszahlen werden nachträglich korrigiert. Eine Datenbank, die den endgültigen revidierten Wert am ursprünglichen Datum zeigt, lässt deine Regel eine Zahl benutzen, die es wochenlang nicht gab.
Indikatoren, die über die gesamte Reihe gerechnet werden. Jede Normierung, Rangbildung oder Z-Wert-Berechnung über die vollständige Historie hinweg spritzt Zukunftsinformation in jede frühe Bar.
Das Symptom ist eine verdächtig glatte Kapitalkurve mit hoher Trefferquote und flachen Drawdowns. Diese Form heißt meist, dass dem System Antworten zugesteckt werden, statt dass es Prognosen macht.
Survivorship ist eine Eigenschaft deiner Daten, nicht deines Codes
Wenn dein Universum die heutige Liste von Werten ist, hast du bereits alles ausgeschlossen, was gestorben ist. Delistete Aktien, gescheiterte Token, kollabierte Börsen, Paare, die nicht mehr handeln. Jedes davon war zu seiner Zeit im investierbaren Universum und fehlt in deinem Test.
Bei Krypto ist das gravierend. Die Menge der Token mit vollständiger mehrjähriger Kurshistorie ist eine stark selektierte Stichprobe: die Überlebenden. Eine Strategie, die nur an Überlebenden getestet wird, sieht robust aus, weil die Pleite aus der Stichprobe entfernt wurde.
Kosten sind kein Rundungsfehler
Reibungsverluste werden zuletzt hinzugefügt, wenn überhaupt, und sie verändern Schlussfolgerungen stärker als jeder Parameter. Nimm den Spread, den du tatsächlich zahlst, statt der notierten Mitte, dazu Slippage, die mit Volatilität und Größe skaliert, sowie Kommissionen, Funding oder Swap auf gehaltene Positionen.
Ein System, das bei null Kosten überlebt und bei realistischen Kosten stirbt, war nie ein System. Es war eine Beschreibung des Mittelkurses. Verdopple deine angenommenen Reibungsverluste und sieh, was übrig bleibt. Verschwindet der Vorteil, saß er im Spread.
Wie ein ehrlicher Test aussieht
Teile die Daten, bevor du anfängst, und fass den Holdout nicht an. Entwickle auf einem Abschnitt, lass dann einmal auf Daten laufen, die du nie angesehen hast. Einmal. Wenn du danach zurückgehst und nachjustierst, ist der Holdout kontaminiert und du hast keinen mehr.
Bevorzuge Walk-Forward. Auf einem Fenster anpassen, im nächsten Fenster handeln, weiterrollen. Das nähert sich dem an, wie du tatsächlich operiert hättest, und es entlarvt Strategien, die nur in einem Regime funktionierten.
Berichte die Zahl der Versuche, die Reibungsverluste und die Parametersensitivität. Ein Ergebnis, das eine Änderung von 10 % in jedem Parameter überlebt, ist mehr wert als ein besseres, das das nicht tut.
Und rechne dann trotzdem damit, dass die Live-Performance schlechter ausfällt. Eine gewisse Verschlechterung ist selbst bei sauberer Methodik normal, weil Märkte sich verändern und weil du deine eigene Selektion nicht vollständig ausschalten kannst.
Deshalb zählen Vorwärts-Aufzeichnungen mehr als Backtests. Indikora hasht jedes veröffentlichte Signal per SHA-256 und kettet es an das vorherige, sodass die öffentliche Erfolgsbilanz nicht editiert oder rückdatiert werden kann, und es veröffentlicht eine Wahrscheinlichkeitskalibrierung: Wenn dort 60 % steht, kannst du nachprüfen, wie oft das zutraf. Beides ist mit einem Backtest unmöglich, der per Definition hinterher geschrieben wird.
Die Strategie, die du über ein Wochenende getunt hast, kann trotzdem in Ordnung sein. Aber du weißt das noch nicht, und die ehrliche Haltung ist, das laut zu sagen, bevor du irgendetwas darauf dimensionierst.
Ein Backtest misst, wie gut eine Regel die Vergangenheit beschreibt, und nur Out-of-Sample-Ergebnisse auf Daten, die du nie angefasst hast, sagen etwas über die Zukunft.
Selbsttest
Notiere die Anzahl der Konfigurationen, die du getestet hast, bevor du dich auf deine aktuellen Regeln festgelegt hast, dazu die angenommenen Reibungsverluste, und hänge diesen Eintrag an die Strategie, damit künftige Ergebnisse daran gemessen werden.
Trading-JournalIndikora bietet einen kostenlosen Simulator, Bar-Replay und einen Verhaltens-Coach, der Ihre eigenen Trades liest.
App öffnen