14. November 2026 · Forschung

Ihr Backtest hat am Karfreitag gehandelt. Der Aktienmarkt nicht.

Ihr Backtest hat am Karfreitag gehandelt. Der Aktienmarkt nicht.

Donnerstag, 2. April, 16:02 Eastern. Das Paper-Buch sah aus, wie wir es entworfen hatten: long rund $240,000 im BTCUSDT-Perpetual, short ein beta-gewichteter Korb aus COIN, MSTR, MARA und RIOT, Residual unter $500. Der Freitags-Hedge-Job war in der Vorwoche um 15:45 gelaufen. Das Funding um 16:00 UTC war ein Rundungsfehler gewesen. Ich habe mich ausgeloggt in dem Glauben, wir hätten endlich eine Krypto-Sleeve, die nicht bloß Nasdaq-Beta nachbildet.

Freitag war Karfreitag. Das ist mir erst aufgefallen, weil der Krypto-Chat weiter Liquidations-Screenshots gepostet hat und der Aktien-Chat auf die ganz bestimmte Weise verstummt war, die bedeutet, dass niemand auf seinem Stuhl sitzt. NYSE und Nasdaq waren geschlossen. Binance nicht. Vom Kassaschluss am Donnerstag bis Freitag 16:00 Eastern war der Perp 4.8% im Minus. Die Aktien-Shorts existierten an diesem Tag nicht als Markt. Sie waren eine Zeile mit Preisen vom Donnerstag in einem Risiko-Pane.

Der Risiko-Bot hat trotzdem gepostet.

Beta zum Hedge-Korb: 0.04. Residual 1d: −$11,184. Status: NEUTRAL

Diesen Screenshot habe ich immer noch. Ein Kollege hat ihn ausgedruckt und an den Kühlschrank in dem Büro geklebt, das wir kaum nutzen. Das grüne NEUTRAL hat Schwerstarbeit geleistet. Der Bot hat das Beta aus den letzten Aktien-Prints berechnet, die er hatte – das war die Schlussauktion vom Donnerstag – gegen einen BTC-Mark, der sich vierundzwanzig Stunden lang bewegt hatte. Ein eingefrorener Mark ist ein Foto von Donnerstag. Das Foto einen Hedge zu nennen ist, wie man ins Osterwochenende läuft: mit einer nackten Kryptoposition und einem Report, der einem dazu gratuliert.

Am Montag öffnete der Kassamarkt. Der Korb ist nach unten gegappt, aber nicht 4.8%, und nicht gemeinsam. COIN eröffnete mit −2.1%. MSTR hat mehr gemacht. MARA weniger. Wir haben den Vormittag damit verbracht, in ein Buch hineinzutraden, das eine ganze Extra-Session gelebt hatte, die wir nicht hedgten konnten, und dann den Backtest hervorgeholt, der dieses Design gesegnet hatte, und ihm eine unverschämte Frage gestellt. Was hast du letzten Karfreitag gemacht, und den davor, und an jedem Wochentag, an dem der Aktienmarkt pausiert hat, während BTC durch den Feiertag gehandelt hat?

Der Research-Agent, der die erste Version geschrieben hatte, hatte alles auf 15-Minuten-Bars resampled und forward-filled. Pandas freq='B' stand im Notebook, was nach einer erwachsenen Entscheidung aussieht, bis man sich erinnert, was es tatsächlich tut. 'B' bedeutet Montag bis Freitag. Karfreitag ist ein Freitag. Juneteenth 2026 war ein Freitag. Der Ersatzfeiertag zum Independence Day war ein Freitag. Die Kalenderfunktion hatte keinen Kalender. Sie hatte einen Wochentagsfilter.

Der Hedge-Job läuft freitags um 15:45 Eastern, ein vernünftiger Zeitpunkt, um in einer normalen Woche auf den Kassaschluss hin zu handeln. Karfreitag ist immer ein Freitag. Im Fenster 2023–2026 fiel dieser Job auf vier Karfreitage, Juneteenth, den ganztägigen Schluss am 3. Juli und vier Sessions am Tag nach Thanksgiving, die bereits um 1:00 PM die Glocke geläutet hatten. Zehn Freitags-Sessions. An jeder einzelnen davon hatte der Simulator Aktienorders angenommen. Die Fills waren der Schluss vom Donnerstag oder der letzte reguläre Print vom Freitag, fortgeschrieben, verkleidet als Live-Trades im Blotter. Die Krypto-Marks liefen live. Die Residual-Serie bekam die Gutschrift für Hedge-Bewegungen, auf die ein Leg nie die Chance hatte zu antworten.

10Freitags-Sessions, an denen der Kassamarkt für das Rebalancing nicht geöffnet war
4.8%Perp-Bewegung, während der Aktien-Hedge auf dem Print vom Donnerstag saß
1.14 → 0.61Residual-Sharpe, nachdem der Session-Kalender echt war

Wochenenden waren derselbe Bug auf einem Zeitplan, über den wir wenigstens beim Bier Witze gemacht hatten. Feiertage waren die Version, über die niemand Witze machte, weil das Notebook Business Days gesagt hat und sich Karfreitag immer noch, ganz körperlich, wie ein Tag anfühlt, an dem das erwachsene Finanzsystem bei der Arbeit ist. Banken haben geöffnet. Fedwire ist online. Eine Broker-API kann wach wirken und trotzdem nirgendwohin eine COIN-Order schicken.

Karfreitag ist kein US-Bundesfeiertag. Wenn euer Session-Check lautet „ist der Bankenkalender zu?“, handelt ihr einen geschlossenen Aktienmarkt. Columbus Day ist das Spiegelbild: Kassa-Aktien offen, der Bondmarkt geschlossen. Venue-Stunden sind ein Join-Key, keine Stimmungssache.

Frühschlüsse waren leiser und, im Blotter, unverschämter. Am 28. November 2025, dem Tag nach Thanksgiving, schloss die NYSE um 1:00 PM. Unser Job ist trotzdem um 15:45 aufgewacht, hat auf eine 15-Minuten-Serie geschaut, die den letzten Print von 12:59 seit fast drei Stunden mitgeschleppt hatte, und „den Close gehandelt“. Das Fill-Modell hat uns sogar Closing-Auction-Slippage berechnet. Es gab keine Auktion um 16:00. Die Auktion hatte um 13:00 stattgefunden, ohne uns. Paper hatte an diesem Nachmittag den ehrlicheren Fehler: neue Orders abgelehnt, Working Orders in den Frühschluss storniert, eine Fill-Rate von null.

SessionKassamarktBacktest-FillPaper
Karfreitag 2026Ganztägig geschlossenKorb zum Schluss vom Donnerstag gefülltAblehnungen; Marks veraltet seit Donnerstag
Juneteenth 2026Ganztägig geschlossenDerselbe Freitags-Job, dieselben Phantom-FillsSpäter erwischt, im Replay
3. Juli 2026Geschlossen (4. Juli beobachtet)Freitag 15:45 gegen einen Print vom DonnerstagKeine Kassa-Session zum Beitreten
28. Nov. 2025Schluss um 1:00 PMRebalance um 15:45, letzter Print 12:59, Auktions-SlippageAblehnungen nach 13:00
Gewöhnlicher SamstagGeschlossenForward-gefüllte Aktien-Bars, live PerpEingefrorene Namen, live Perp

Wir haben das Buch mit einer Session-Datei pro Venue neu gerechnet: reguläre Handelszeiten, Feiertage, Frühschlüsse, der 16:00 vs 13:00 Schluss und ein Stale-Hours-Zähler auf jedem Mark. Orders in eine geschlossene Kassa-Session werden nicht zum letzten Kurs gefüllt. Sie werden abgelehnt. Das Risiko-Pane darf kein NEUTRAL drucken, wenn irgendein Hedge-Leg länger als ein paar Stunden stale war. Der Unit-Test ist hässlich, und ich mag ihn: nimm einen normalen Freitag, male ihn geschlossen, assert null COIN-Fills und ein Stale-Flag auf dem Korb. Und dann male 13:00 als Schluss und assert, dass der 15:45-Job nicht einmal das Auktionsmodell anschaut.

Der Residual-Sharpe ging von 1.14 auf 0.61. Ich behandle keine der beiden Zahlen als Grund zu handeln. Ich behandle die Lücke als Geständnis. Ein Großteil dessen, was wir Hedge-Residual genannt hatten, war Krypto-Feiertagsvolatilität, eingesammelt an Tagen, an denen das Short-Aktien-Leg ein Souvenir der vorherigen Session war. Wochenenden haben einen Teil dieser Arbeit ebenfalls erledigt, den wir im Gespräch bereits abgezogen haben. Die Feiertage haben sich im Business-Day-Resample versteckt, und das ist ein deutlich peinlicherer Ort zum Verstecken.

Wir lassen den Freitags-Job um 15:45 immer noch laufen. Er liest jetzt eine Datei mit zwölf Zeilen für 2026, von denen zwei noch nicht passiert sind. Thanksgiving ist der 26. Am Tag danach stirbt der Kassamarkt um 13:00. Ich habe diesen 1:00-PM-Schluss zweimal in den Kalender gesetzt, unter zwei verschiedenen Namen, weil ich mir selbst im November nicht traue und weil pandas diesen Freitag immer noch fröhlich einen Business Day nennen wird, wenn ich es zulasse.

FeiertageMulti-AssetKryptoAktienBacktesting
← Alle Beiträge