Den officiella stängningen i en aktiefil ser ut som vilket annat pris som helst. Tidsstämpel 16:00:00 Eastern, ett tal, redo att fyllas. Dagliga signaler markerar den. Ombalanseringar träffar den. En researchagent behandlar den som en notering som låg i orderboken och väntade på dig.
Stängningen är en auktion, inte en notering. Det är uncross-priset från on-close-ordrar som måste ha accepterats före en cutoff. Om backtesten fylldes där utan att delta i den batchen tog den ett print du inte skulle ha ingått i.
Att fylla 16:00 som om uncross vore en market order
Den vanliga genvägen är: beräkna signalen vid eller strax före stängning, fyll till den officiella stängningen, stämpla 16:00. På en stilla tisdag i AAPL är lögnen några cent. På de dagar som dominerar en bok med daglig ombalansering är det hela traden.
Klockan 16:00:00.000 pågår closing cross, eller har just körts. En marketable order du skickar då går inte in i det crossen. Den landar i det som finns kvar: kvarvarande visad volym, en odd lot, extended hours på ARCA eller Nasdaq. Det printet kan ligga två cent från den officiella stängningen, eller fyrtio baspunkter, och det är en annan likviditetspool. Vid en Russell reconstitution, ett månadsslut eller en triple-witching-fredag är stängningen ofta en tvåsiffrig andel av dagens volym. Det var likviditeten. Du var inte med i den.
Vi paper-tradade det här av misstag. En parametertweak landade klockan 15:48. Backtesten fyllde fortfarande varje namn till den officiella stängningen. OMS skickade vanliga market orders klockan 16:00:03 eftersom ingen hade kopplat in MOC. After-hours-print, en handfull rejects och ett underskott på 19 baspunkter mot filen, en dag då filen sa att vi var flat till stängningen. Strategin hade inte gått sönder. Fill-regeln hade.
Jag tänker fortfarande på 15:49 som en fysisk plats. Någon ändrar en vikt. Någon annan tittar på klockan. Cutoffen bryr sig inte om vem av er som har rätt.
MOC är ordern som faktiskt begär det uncross, och inte ens MOC är ett löfte. Ett halt, en LULD-paus, en inställd auktion, ett namn som aldrig öppnade: du kan vara flat klockan 16:00 med en working on-close som dör. LOC får missa helt. Om uncross är $40.12 och din limit är $40.00, äger du ingenting. Många backtester bokar ändå stängningen.
Värre är att vissa vendor-filer lagrar en composite-stängning som aldrig printades på någon enskild venue. Du kan inte gå med i en composite. Om strategin skulle ha skickat NYSE MOC är den fill som spelar roll NYSE-uncross, i den storlek auktionen skulle ha absorberat.
Att kalla sista regular-hours-printen för stängning
Vissa pipelines vägrar den officiella stängningen av princip och tar sista SIP-printen före 16:00, eftersom den printen åtminstone "hände." På en mega-cap ligger last och official ofta en eller två cent isär och du märker det inte. På en mid-cap kan sista printen vara 200 aktier klockan 15:59:51, signerad av den som lyfte en kvarvarande display. Den officiella stängningen två sekunder senare är ett uncross på en miljon aktier till ett annat pris.
Indexet, ETF-creation-korgen och varje MOC-ombalansering handlade uncross. Din backtest handlade resterna. Och en sista print kommer inte med din storlek bifogad. Om den printen är 400 aktier och ditt clip är 5,000 fick du inte det priset. Du fick en tidsstämpel som råkade vara sist.
Jag har sett en mid-cap-fil där last-print mot officiell stängning rörde sig 28 cent en ombalanseringstorsdag. Backtesten som använde last såg mer "mikrostrukturmedveten" ut. Det var bara en annan, tunnare marknad, och den antog fortfarande att vi kunde ha varit de 200 aktierna.
Att skjuta fillen till morgondagens öppning för att vara konservativ
Den tredje undanflykten dyker upp i kodgranskning som en kommentar: anta inte att vi kan handla stängningen, så fyll nästa öppning. Det låter vuxet. Det bygger en annan strategi.
En close-to-close-signal som exekveras till nästa öppning har ätit overnight-gapet. För många aktiefaktorer är det gapet en stor del av rörelsen du trodde att du ägde. Att fylla öppningen gör inte backtesten försiktig. Det flyttar P&L till en session du inte tänkte handla, och det släpper ner dig i en öppningsauktion som du inte heller modellerade.
På papperet är vraket lätt att feltolka. Backtestens dagliga P&L stämmer fortfarande med signalen. Pappersboken bär en natt av indexgap och en morgon av opening-cross-slippage. Sedan argumenterar folk om implementation shortfall när den ärliga beskrivningen är att de två systemen inte gör samma trade.
Men öppningen är också en auktion. Om du missade gårdagens cutoff får du inte automatiskt en ren 9:30-last. Du får MOO/LOO-mekanik, en imbalance och ett gap. Att kalla det en konservativ stängningsfill döljer bara ett andra omodellerat cross under en dygdig kommentar.
| Fillen du bokade | Vad venue faktiskt krävde | Hur vraket ser ut |
|---|---|---|
| Officiell stängning, ingen ordertyp | MOC eller LOC accepterad före den venues cutoff | After-hours-print, en reject eller ett composite-pris som ingen hostade |
| Sista SIP-print före 16:00 | En trade du kunde ha varit, i din storlek | En rest på 200 aktier behandlad som en clip-fill |
| Nästa öppning som en "säkrare" stängning | En opening-cross-modell, plus overnight-gapet | En annan strategi, fortfarande en auktion, fortfarande missad |
Den ärliga uppdelningen är liten. Antingen säger research-kontraktet att vi är i stängningen, och då är ordern on-close, tidsstämplad före 15:50 på NYSE eller 15:55 på Nasdaq, dimensionerad mot förväntad stängningsvolym, och tillåten att förfalla ofylld om det är en LOC. Eller så är vi inte i stängningen, och då är after-hours eller next-open en namngiven policy med sin egen auktion, och equity-kurvan slutar bära en 16:00-etikett.
Vi underkänner nu en backtest som bokar den officiella stängningen utan en on-close-order som sitter inom cutoff för den venue. Det har dödat en del snygga dagliga signalkurvor. De kurvorna var aldrig exekverbara till det pris de påstod.
← Alla inlägg


