31. August 2026 · Prognosemärkte

Was beim Backtest von Prognosemärkten schiefgeht: ein Tagebuch aus 8 Tagen

Was beim Backtest von Prognosemärkten schiefgeht: ein Tagebuch aus 8 Tagen

Prognosemärkte sehen aus wie das Einfachste, was man überhaupt backtesten kann. Der Preis liegt zwischen [0, 1]. Die Auszahlung beträgt einen Dollar oder nichts. Kein Hebel, keine Funding-Kosten, keine Basis, keine Eigenheiten von Perpetual Swaps um 00:00 UTC. Wir hatten bereits einen Backtester, der Krypto-Perpetuals mit Gebühren, Funding-Kosten und Markteinfluss abbildete. Der Plan war, zwei Tage in die Anpassung zu stecken und dann mit der Entwicklung von Strategien loszulegen.

Es dauerte 8 Tage. Hier ist das Protokoll, ungefähr in der Reihenfolge, in der es passiert ist — einschließlich des Tages, an dem die Equity-Kurve unglaublich aussah und es auch war.

Tag 1: Der Adapter, der trivial sein sollte

Die erste Zuordnung war 1:1 und wirkte sauber. Ein Markt ist ein Instrument. Der YES-Preis ist der Preis. YES zu kaufen ist eine Long-Position, NO zu kaufen eine Short-Position. Bei der Auflösung wird die Position zwangsweise zu 1.00 oder 0.00 geschlossen. Die stündliche Preisreihe in dieselbe Ereignisschleife einspeisen, fertig.

Diese Zuordnung überstand etwa 90 Minuten mit echten Daten. Als Erstes fiel die Renditereihe auseinander. Unsere gesamte Risikoebene — Positionsgröße, Volatilitätssteuerung und Sharpe-Berichte — setzte Log-Renditen eines fortlaufenden Instruments voraus. Ein Markt, der von 0.04 auf 0.00 fällt, hat eine undefinierte Log-Rendite und einen eindeutigen Totalverlust. Und ein Markt, der 3 Tage vor der Auflösung bei 0.04 steht, ist grundlegend etwas anderes als einer, der 4 Minuten davor bei 0.04 steht, obwohl in beiden Zeilen 0.04 steht.

Am Ende parametrisierten wir die gesamte Reihe anhand der Zeit bis zur Auflösung statt nach der Uhrzeit und behandelten den PnL als endgültig statt zu Marktpreisen bewertet. Das war die richtige Entscheidung — und machte jeden nachgelagerten Teil des Berichtscodes unbrauchbar.

Tag 2: Die Gebührenformel ist die Strategie

Bei Kalshi sind die Handelsgebühren kein Abschlag in Basispunkten. Sie steigen quadratisch mit dem Preis: ungefähr 0.07 × contracts × P × (1−P), aufgerundet auf den nächsten Cent pro Order. Das bedeutet: Die Gebühr ist genau dort am höchsten, wo ein Markt mit 50:50-Chance am interessantesten ist, und an den Rändern fast kostenlos.

PreisGebühr pro KontraktErforderlicher Edge (Wahrscheinlichkeitspunkte)Gebühr als % des Einsatzes
5¢0.33¢0.336.7%
10¢0.63¢0.636.3%
25¢1.31¢1.315.3%
50¢1.75¢1.753.5%
75¢1.31¢1.311.8%
90¢0.63¢0.630.7%
95¢0.33¢0.330.35%

Die dritte Spalte zeigt, worauf es ankommt: Um beim Kauf zu 50¢ und Halten bis zur Auflösung die Gewinnschwelle zu erreichen, muss deine Wahrscheinlichkeitsschätzung 1.75 Punkte über der des Marktes liegen. Nicht relativ 1.75 Prozent, sondern absolut. Wenn du vor der Auflösung aussteigst, zahlst du die Gebühr zweimal, zusätzlich zum Spread.

3.5%Gebühr pro Richtung bei 50¢, bezogen auf den Einsatz
1.75ppWahrscheinlichkeits-Edge, um dort die Gewinnschwelle zu erreichen
1Auflösung pro Instrument, insgesamt

Der CLOB von Polymarket hatte historisch gesehen ein ganz anderes Gebührenprofil: Die Handelsgebühr selbst lag näher bei null, sodass die gesamten Kosten im Spread und in der Markttiefe stecken. Dieselbe Strategielogik hat also je nach Handelsplatz eine völlig andere Kostenstruktur. Jeder Vergleich zwischen Handelsplätzen, der ein einziges Gebührenmodell verwendet, ist daher Fiktion. Wir verwenden jetzt eine aufrufbare Gebührenfunktion pro Handelsplatz statt eines einzelnen Werts.

Wenn du in einem Backtest-Bericht für Prognosemärkte nur eine Zeile liest, dann die zu den Gebühren in Wahrscheinlichkeitspunkten. Eine Strategie mit einem behaupteten Prognose-Edge von 1.2 Punkten bei 50¢-Märkten ist auf Kalshi schon vor allen anderen Kosten eine Verluststrategie. Das muss auf Seite 1 stehen und darf nicht erst von den Lesenden hergeleitet werden.

Tag 3: Das Orderbuch ist treppenförmig und kurz

Unser Markteinflussmodell war eine Quadratwurzelfunktion, kalibriert auf BTC-Perpetual-Orderbücher. Hier hat sie die falsche Form. Bei einem Tick von 1¢ auf einem Instrument mit einem Wert von $1 gibt es im gesamten Orderbuch nur 99 mögliche Preisstufen. In einem Markt mittlerer Liquidität liegen vielleicht ein paar hundert Kontrakte auf der besten Preisstufe, danach klafft eine Lücke.

Hier ein Snapshot aus einem Markt zu Wirtschaftsdaten, den wir beobachtet haben: YES-Seite, etwa 30 Stunden vor der Auflösung:

StufeGröße (Kontrakte)Kumulierte Kaufkosten
42¢310310 @ Ø 42.0¢
43¢85395 @ Ø 42.2¢
45¢140535 @ Ø 42.9¢
49¢6001,135 @ Ø 46.1¢

Eine Order über 1,000 Kontrakte — ein Risiko von 500 Dollar, in der Kryptowelt ein Rundungsfehler — verschiebt den effektiven Preis um 4 Cent. Das ist mehr als das Doppelte der Gebühr. Hier lässt sich keine glatte Funktion anpassen: Entweder du gehst Stufe für Stufe durchs Orderbuch oder du denkst dir die Kosten aus. Wir haben das sqrt-Modell für diese Anlageklasse entfernt und einen direkten Orderbuch-Durchlauf geschrieben. Er ist langsamer, aber korrekt.

Irgendwann ertappte ich mich dabei, mich darüber zu ärgern, dass diese Märkte „zu klein sind, um eine Rolle zu spielen“. Sie sind klein, weil hier eine einzelne reale Frage mit einer Frist bepreist wird und es nur begrenzt viele Menschen gibt, die eine Meinung zu den Erstanträgen auf Arbeitslosenhilfe in den USA an einem Mittwoch haben. Die Größe ist der Markt. Sich darüber zu beschweren, ist, als würde man sich darüber ärgern, dass an einem Pokertisch nur 9 Plätze sind.

Tag 4: Der Tag, an dem die Equity-Kurve wunderschön war

Sharpe 4.1 bei 1,400 Märkten. Glatt. Allen Forschenden sollte dabei der Magen absacken — meiner tat es schließlich auch, etwa 40 Minuten nachdem ich bereits einen Screenshot davon gemacht hatte.

Der Fehler lag im Resampler. Die Preishistorie illiquider Märkte kommt mit unregelmäßigen Zeitstempeln zurück. Deshalb ordneten wir sie einem einheitlichen Stundengitter zu. Der letzte Punkt jeder archivierten Reihe ist der Abrechnungswert: 1.00 oder 0.00. Beim Reindexing verwendeten wir eine Auffüllung mit dem nächstgelegenen Nachbarn ohne Richtungsbeschränkung. Bei jedem Markt, dessen letzter Handel Stunden vor der Auflösung stattfand, breitete sich der Abrechnungswert dadurch über die Lücke rückwärts aus. Das Modell las die morgige Antwort in der heutigen Zeile — ausgerechnet bei den illiquiden Märkten, bei denen es seine Position vergrößern konnte, ohne an Tiefenlimits zu stoßen.

Eine Auffüllung mit dem nächstgelegenen Nachbarn ist bei einem fortlaufend gehandelten Instrument in Ordnung. Bei einem Instrument, dessen letzte Beobachtung die Wahrheit ist, wird sie zur Lookahead-Maschine. Wir prüfen jetzt per Assertion, dass jede Auffüllung nur vorwärts erfolgt, und kennzeichnen die Abrechnungszeile, damit sie bei der Berechnung von Features ausgeschlossen wird. Diese Assertion ist 9 Zeilen lang und der wertvollste Code, den wir diese Woche geschrieben haben.

Tag 5–6: 1,412 Märkte, ungefähr 180 Wetten

Die Stichprobengröße bei Prognosemärkten ist eine Falle mit freundlichem Gesicht. Du löst 1,412 Märkte auf, glaubst, 1,412 Beobachtungen zu haben, und berechnest entsprechend einen t-Statistikwert. Aber 14 NFL-Spiele am selben Sonntag hängen vom selben Wettersystem, der Veröffentlichung derselben Verletzungsberichte und einem gemeinsamen Wettendenfluss ab. 51 Märkte auf Ebene einzelner US-Bundesstaaten teilen sich denselben nationalen Trend. „Wird X bis zum 31. März eintreten?“ und „Wird X bis zum 30. Juni eintreten?“ sind dieselbe Wette mit unterschiedlichen Laufzeiten und werden gemeinsam aufgelöst.

Wir gruppierten Märkte nach zugrunde liegender Ereignisquelle und Auflösungsdatum und kamen auf ungefähr 180 effektiv unabhängige Beobachtungen. Das reicht nicht, um bei den Effektgrößen, die wir untersuchten, einen echten Edge von Rauschen zu unterscheiden. Auch Bootstrapping pro Markt hilft nicht, denn dafür müssen die Gruppen statt der einzelnen Zeilen neu gezogen werden. Macht man das falsch, überschätzt man die Signifikanz still und leise um den Faktor 2 oder 3.

Tag 7: Auch die Auflösung ist eine Wahrscheinlichkeitsverteilung

Die Dinge, die wir überhaupt nicht modelliert hatten und erst auf die harte Tour entdeckten:

Wir haben einen Term für die Haltedauer-Kosten und eine zufällige Verschiebung des Auflösungsdatums in den Simulator aufgenommen. Beides ist nicht präzise. Beides ist besser als die stillschweigende Annahme, dass die Auflösung mit Sicherheit genau am angegebenen Datum stattfindet.

Tag 8: Was wir überspringen und womit wir anfangen würden

  1. Die renditebasierte Infrastruktur komplett überspringen. Keine Volatilitätssteuerung auf ein Instrument mit endgültiger Auszahlung übertragen. Stattdessen eine Ebene für die Einsatzgröße schreiben, die mit Wahrscheinlichkeiten und Einsätzen arbeitet. Wir haben 2 Tage verloren, als wir versuchten, die alte Ebene passend zu machen.
  2. Die Gebührenfunktion vor der Strategie entwickeln. Für jeden Handelsplatz, an dem du handeln willst, die Kurve des erforderlichen Edges zum Erreichen der Gewinnschwelle ausgeben und gut sichtbar am Desk aufhängen. So fallen etwa die Hälfte der Ideen weg, noch bevor sie einen Backtest-Lauf kosten.
  3. Vom ersten Tag an durchs Orderbuch gehen. Jedes parametrische Markteinflussmodell, das aus einem kontinuierlichen Markt übernommen wird, liegt falsch — und zwar auf eine Weise, die deine Ergebnisse besser aussehen lässt.
  4. Vor dem Zählen gruppieren. Den Schlüssel für die Gruppierung zur Berechnung der effektiven Stichprobengröße festlegen, sobald du das Universum bestimmst, nicht erst nachdem du einen Sharpe-Wert gefunden hast, der dir gefällt.
  5. Die Auffüllrichtung per Assertion prüfen. Eine Zeile pro Join. Endet eine Reihe mit der tatsächlichen Auflösung, muss eine rückwärts gerichtete Auffüllung grundsätzlich als Fehler gelten, statt auf etwas zu warten, das dir bei der Überprüfung auffällt.

Die 8 Tage haben sich gelohnt, vor allem weil Prognosemärkte die Mehrdeutigkeit ausräumen, mit der man sich bei Krypto-Backtests so leicht selbst täuschen kann. Keine Funding-Rate, die man wegwischen muss, keine Diskussion über Mark-Preis-Konventionen. Nur eine Frage, eine Frist und eine Antwort. Wenn der Backtest hier falsch ist, lässt sich genau zeigen, woran es liegt.

PrognosemärkteBacktestingGebührenMarkt-MikrostrukturData Engineering
← Alle Beiträge