28. Oktober 2026 · Optionen

Das Signal lag richtig. Unser Options-Backtest kaufte den falschen Verfall.

Das Signal lag richtig. Unser Options-Backtest kaufte den falschen Verfall.

An einem Dienstag um 10:07 meldete unser Research-Agent ein kurzfristig bullishes Setup in einem Index-ETF. Das zugrunde liegende Signal war gewöhnlich: Der Kurs hatte seinen 20-Bar-Durchschnitt zurückerobert, die realisierte Volatilität ließ nach, und für die nächste Sitzung war eine Makroveröffentlichung angesetzt. Der vorgeschlagene Trade war ein Call-Spread mit ungefähr zwei Wochen bis zum Verfall.

Der Backtest fand ihn gut. Die Paper-Strategie platzierte ihn nicht. Als wir die Orders verglichen, stimmten die Signalzeitstempel überein und die Kurse des Basiswerts lagen nur wenige Cent auseinander. Die Kontrakte waren verschieden: Der Backtest hatte den Freitagsverfall gekauft, der in der historischen Optionskette am besten aussah; der Paper-Prozess wählte den nächsten gelisteten Verfall, eine Woche später.

Die Abweichung ging auf einen Kalender-Join zurück. Wir hatten „Tage bis zum Verfall“ als Eigenschaft eines Datums behandelt und dann den Kontrakt ausgewählt, dessen Verfall dem Zieltermin am nächsten lag. Im historischen Datenbestand enthielt der Verfallskalender einen wöchentlichen Verfall, der erst nach dem getesteten Datum hinzugefügt worden war. Der Backtest hatte einen Kontrakt aus der Zukunft verwendet, und das sah nach einer harmlosen Vereinfachung aus.

Zuerst vermuteten wir einen Zeitzonenfehler. Optionsverfälle sind dafür besonders anfällig: Die Handelssitzung endet in New York, Börsenzeitstempel können in UTC gespeichert sein, und ein Datum um Mitternacht kann sich verschieben, wenn eine Pipeline es unachtsam umwandelt. Wir prüften es. Die Zeitstempel waren korrekt. Der Kontrakt existierte an jenem Dienstag schlicht nicht im historischen Universum.

Das war die erste Erkenntnis: Eine historische Optionskette braucht ein Point-in-Time-Universum der gelisteten Kontrakte. Das Verfallsdatum eines Kontrakts sagt dir, wann er ausläuft. Es sagt dir nicht, wann er gelistet wurde, ab wann er handelbar war oder ob dein System ihn zu diesem Zeitpunkt hätte auswählen können.

Wir bauten den Auswahlschritt anhand der Informationen um, die zum Entscheidungszeitpunkt verfügbar waren. Für jeden infrage kommenden Kontrakt verlangten wir einen Listing-Zeitstempel, der nicht nach der Entscheidung lag, einen gültigen Kurs, der nicht älter als unser Aktualitätslimit war, und eine Handelssitzung, in der die Strategie eine Order hätte aufgeben können. Außerdem hielten wir die Kandidatenmenge vor dem Ranking fest. Dieser letzte Schritt war wichtig, denn der alte Backtest speicherte nur den Gewinner; wir konnten nicht erkennen, ob er fünf zulässige Kontrakte verglichen oder stillschweigend aus einem noch nicht verfügbaren Kalender ausgewählt hatte.

10:07Entscheidungszeitpunkt des Signals
1 WocheAbweichung beim Verfall
0historische Listings für den gewählten Kontrakt, die infrage kamen

Als Nächstes untersuchten wir den zur Preisermittlung des Spreads verwendeten Kurs. Der Backtest hatte für jedes Bein unabhängig den jeweils letzten Kurs herangezogen. Der Ask des Calls stammte von 10:06:58; der Bid des Short-Calls von 10:04:11. Nach der großzügigen Datenrichtlinie waren beide noch aktuell, aber der Markt hatte sich dazwischen bewegt. Ein aus asynchronen Beinen gebildeter Spread-Mid kann einen Markt beschreiben, den es nie gegeben hat.

Wir änderten die Kursregel so, dass die Zeitstempel beider Beine höchstens zwei Sekunden auseinanderliegen dürfen und gekreuzte Märkte oder Märkte mit Größe 0 verworfen werden. Dadurch sank die Zahl der nutzbaren historischen Beobachtungen. Die verbleibenden Bewertungen waren dafür plausibler. Wenn kein synchronisierter Kurs vorlag, markierten wir den Kandidaten als nicht verfügbar, statt die Lücke mit einem veralteten Preis zu füllen.

Dann kam die Ranking-Regel. Der Agent hatte den Verfall mit den niedrigsten notierten Spread-Kosten gewählt. Das klingt sinnvoll, bis der Spread nur einen Kontrakt breit und der Kurs veraltet ist. Wir formulierten das Ziel eindeutig: den erwarteten Ertrag pro Einheit des definierten Risikos unter den Kontrakten maximieren, die die Mindestanforderungen an Kursgröße, Aktualität und Listing erfüllen. In diesem Beispiel hatte der nächstgelegene zulässige Verfall über beide Beine eine notierte Geld-Brief-Spanne von $0.42, während die spätere Fälligkeit eine Spanne von $0.31 aufwies. Bei der günstiger wirkenden Wahl war auf dem Short-Bein allerdings nur ein Kontrakt angezeigt.

KandidatZu diesem Zeitpunkt verfügbarer Verfall?KursalterAngezeigte Größe des Short-BeinsEntscheidung
Wöchentlicher FreitagsverfallNeinNicht anwendbarNicht anwendbarAusschließen
Darauffolgender FreitagJa1.4 Sekunden18 KontrakteZulässig
Dritter FreitagJa9.8 Sekunden1 KontraktAls veraltet und illiquide ausschließen

Wir spielten den Vorfall mit diesen Regeln erneut durch. Der Backtest wählte nun denselben Verfall wie der Paper-Prozess und hielt fest, warum die anderen Kontrakte abgelehnt wurden. Der resultierende Spread-Einstieg war um $0.11 schlechter als der ursprüngliche historische Fill. Das bedeutete nicht, dass die Strategie keinen Wert hatte; es bedeutete, dass die alte Performance-Zahl eine Trade-Auswahl enthielt, die der Live-Prozess nicht reproduzieren konnte.

Eine kleine Unannehmlichkeit: Börsensymbolformate lassen Fehler beim Verfall wie Datenqualitätsprobleme aussehen. Wir fanden einen wöchentlichen Code eines Datenanbieters, der sich um ein Zeichen vom monatlichen Code unterschied. In den Audit-Logs speichere ich weiterhin das Rohsymbol neben dem normalisierten Kontraktschlüssel. Das ist nicht elegant, hat uns aber davor bewahrt, einem sauberen Join zu schnell zu vertrauen.

Wenn du einen Options-Backtest baust, speichere bei jeder Entscheidung die vollständige Kandidatenmenge samt Listing-Status, Kurszeitstempeln, Größen und Ablehnungsgrund jedes Kontrakts. Gestalte die Kontraktauswahl anschließend als deterministische Funktion dieses Snapshots. Die Wahl des Verfalls ist Teil der Strategie. Wenn der Backtest einen Kontrakt sehen kann, den der Paper-Prozess nicht sehen konnte, beginnt der Signalvergleich erst, nachdem sich die Antwort bereits geändert hat.

Options-BacktestingVerfallsauswahlPoint-in-Time-DatenAusführungsmodellierung
← Alle Beiträge