Der offizielle Schlusskurs in einer Aktiendatei sieht aus wie jeder andere Preis. Zeitstempel 16:00:00 Eastern, eine Zahl, bereit zum Fill. Tagessignale markieren ihn. Rebalances treffen ihn. Ein Research-Agent behandelt ihn als Quote, der im Orderbuch lag und auf dich wartete.
Der Close ist eine Auktion, kein Quote. Er ist der Uncrossing-Preis von On-Close-Orders, die vor einem Cutoff angenommen werden mussten. Wenn der Backtest dort gefüllt hat, ohne diesem Batch beizutreten, hat er einen Print genommen, an dem du nicht beteiligt gewesen wärst.
16:00 füllen, als wäre der Uncross eine Market Order
Der übliche Shortcut lautet: das Signal zum Close oder knapp davor berechnen, zum offiziellen Schlusskurs füllen, 16:00 stempeln. An einem ruhigen Dienstag in AAPL ist die Lüge ein paar Cents. An den Tagen, die ein Daily-Rebalance-Book dominieren, ist sie der ganze Trade.
Um 16:00:00.000 läuft der Closing Cross, oder er ist gerade gelaufen. Eine marketable Order, die du dann sendest, geht nicht in diesen Cross. Sie landet in dem, was übrig ist: restliche angezeigte Size, ein Odd Lot, Extended Hours an ARCA oder Nasdaq. Dieser Print kann zwei Cents vom offiziellen Schlusskurs entfernt sein, oder vierzig Basispunkte, und es ist ein anderer Liquiditätspool. Bei einer Russell-Reconstitution, einem Monatsende oder einem Triple-Witching-Freitag macht der Close oft einen zweistelligen Anteil am Tagesvolumen aus. Das war die Liquidität. Du warst nicht darin.
Wir haben das aus Versehen im Paper-Trading gemacht. Ein Parameter-Tweak landete um 15:48. Der Backtest hat trotzdem jeden Titel zum offiziellen Schlusskurs gefüllt. Das OMS hat um 16:00:03 ganz normale Market Orders geschickt, weil niemand MOC verdrahtet hatte. After-Hours-Prints, eine Handvoll Rejects und ein Shortfall von 19 Basispunkten gegenüber der Datei an einem Tag, an dem die Datei uns bis zum Close als flat auswies. Die Strategie war nicht kaputt. Die Fill-Regel war es.
Ich denke bei 15:49 immer noch an einen physischen Ort. Jemand ändert eine Gewichtung. Jemand anderes schaut auf die Uhr. Dem Cutoff ist egal, wer von euch recht hat.
MOC ist die Order, die diesen Uncross tatsächlich anfordert, und selbst MOC ist kein Versprechen. Ein Halt, eine LULD-Pause, eine abgesagte Auktion, ein Titel, der nie eröffnet hat: Du kannst um 16:00 flat sein, mit einer arbeitenden On-Close, die stirbt. LOC darf vollständig ungefüllt bleiben. Wenn der Uncross $40.12 ist und dein Limit $40.00, besitzt du nichts. Jede Menge Backtests buchen trotzdem den Close.
Schlimmer noch: Manche Vendor-Dateien speichern einen Composite-Close, der nie an einem einzelnen Venue gedruckt hat. Einem Composite kannst du nicht beitreten. Wenn die Strategie NYSE MOC geschickt hätte, ist der Fill, der zählt, der NYSE-Uncross, in der Größe, die die Auktion aufgenommen hätte.
Den letzten Print der Regular Hours als Close bezeichnen
Manche Pipelines lehnen den offiziellen Schlusskurs aus Prinzip ab und nehmen den letzten SIP-Print vor 16:00, weil dieser Print zumindest „passiert“ ist. Bei einem Mega-Cap liegen Last und Official oft ein oder zwei Cents auseinander, und du merkst es nicht. Bei einem Mid-Cap kann der letzte Print 200 Shares um 15:59:51 sein, signiert von dem, der eine restliche Display-Size gehoben hat. Der offizielle Schlusskurs zwei Sekunden später ist ein Uncross über eine Million Shares zu einem anderen Preis.
Der Index, der ETF-Creation-Basket und jedes MOC-Rebalancing haben den Uncross gehandelt. Dein Backtest hat den Rest gehandelt. Und ein Last Print kommt nicht mit deiner Size. Wenn dieser Print 400 Shares ist und dein Clip 5,000, hast du diesen Preis nicht bekommen. Du hast einen Zeitstempel bekommen, der zufällig der letzte war.
Ich habe eine Mid-Cap-Datei gesehen, in der Last Print versus offiziellem Schlusskurs an einem Rebalance-Donnerstag 28 Cents bewegt hat. Der Backtest, der Last verwendet hat, wirkte „mikrostrukturbewusster“. Es war nur ein anderer, dünnerer Markt, und er ging trotzdem davon aus, wir hätten diese 200 Shares sein können.
Den Fill auf den morgigen Open schieben, um konservativ zu sein
Der dritte Ausweg taucht im Code Review als Kommentar auf: nicht annehmen, dass wir den Close handeln können, also den nächsten Open füllen. Das klingt erwachsen. Es baut eine andere Strategie.
Ein Close-to-Close-Signal, das am nächsten Open ausgeführt wird, hat die Overnight-Gap gefressen. Für viele Equity-Faktoren ist diese Gap ein großer Teil der Bewegung, von der du dachtest, sie gehöre dir. Den Open zu füllen macht den Backtest nicht vorsichtig. Es verlagert den P&L in eine Session, die du gar nicht handeln wolltest, und wirft dich in eine Eröffnungsauktion, die du ebenfalls nicht modelliert hast.
Auf dem Papier ist das Wrack leicht falsch zu lesen. Der tägliche P&L des Backtests passt immer noch zum Signal. Das Paper-Book hält eine Nacht Index-Gap und einen Morgen Opening-Cross-Slippage. Dann wird über Implementation Shortfall gestritten, obwohl die ehrliche Beschreibung lautet, dass die beiden Systeme nicht denselben Trade machen.
Aber der Open ist ebenfalls eine Auktion. Wenn du den gestrigen Cutoff verpasst hast, bekommst du nicht automatisch einen sauberen 9:30-Last. Du bekommst MOO/LOO-Mechanik, ein Imbalance und eine Gap. Das als konservativen Close-Fill zu bezeichnen, versteckt nur einen zweiten unmodellierten Cross unter einem tugendhaften Kommentar.
| Der Fill, den du gebucht hast | Was der Venue tatsächlich brauchte | Wie das Wrack aussieht |
|---|---|---|
| Offizieller Schlusskurs, kein Ordertyp | MOC oder LOC, angenommen vor dem Cutoff dieses Venues | After-Hours-Print, ein Reject oder ein Composite-Preis, den niemand gehostet hat |
| Letzter SIP-Print vor 16:00 | Ein Trade, der du hättest sein können, in deiner Size | Ein Rest von 200 Shares, behandelt als Clip-Fill |
| Nächster Open als „sicherer“ Close | Ein Opening-Cross-Modell plus die Overnight-Gap | Eine andere Strategie, immer noch eine Auktion, immer noch verpasst |
Die ehrliche Trennung ist klein. Entweder sagt der Research-Vertrag, dass wir im Close sind, dann ist die Order On-Close, mit Zeitstempel vor 15:50 an der NYSE oder 15:55 an Nasdaq, dimensioniert gegen das erwartete Close-Volumen, und darf ungefüllt verfallen, wenn es ein LOC ist. Oder wir sind nicht im Close, dann sind After-Hours oder Next-Open eine benannte Policy mit eigener Auktion, und die Equity-Kurve hört auf, ein 16:00-Label zu tragen.
Wir lassen jetzt einen Backtest durchfallen, der den offiziellen Schlusskurs bucht, ohne dass eine On-Close-Order innerhalb des Cutoffs für diesen Venue sitzt. Das hat ein paar hübsche Tagessignal-Kurven gekillt. Diese Kurven waren zum behaupteten Preis nie ausführbar.
← Alle Beiträge


