12 noiembrie 2026 · execuție

Backtestul tău a luat fill la închiderea oficială. N-ai intrat niciodată în licitație.

Backtestul tău a luat fill la închiderea oficială. N-ai intrat niciodată în licitație.

Închiderea oficială dintr-un fișier de acțiuni arată ca orice alt preț. Timestamp 16:00:00 Eastern, un număr, gata de fill. Semnalele zilnice îl marchează. Rebalansările trag în el. Un agent de research îl va trata ca pe o cotație care stătea în carnetul de ordine, așteptându-te.

Close-ul e o licitație, nu o cotație. E prețul de uncross al ordinelor on-close care trebuiau acceptate înainte de un cutoff. Dacă backtestul a luat fill acolo fără să intre în acel batch, a luat un print din care n-ai fi făcut parte.

Să iei fill la 16:00 ca și cum uncross-ul ar fi un ordin la piață

Scurtătura obișnuită e: calculezi semnalul la close sau imediat înainte, execuți la închiderea oficială, pui stampila 16:00. Într-o marți liniștită pe AAPL, minciuna e de câțiva cenți. În zilele care domină un book de rebalansare zilnică, e tot trade-ul.

La 16:00:00.000, closing cross-ul rulează sau tocmai a rulat. Un ordin marketable pe care îl trimiți atunci nu intră în acel cross. Aterizează în ce-a mai rămas: size afișat rămas, un odd lot, after-hours pe ARCA sau Nasdaq. Printul ăla poate fi la 2 cenți distanță de închiderea oficială, sau la 40 de puncte de bază, și e un alt pool de lichiditate. La o reconstituire Russell, la un sfârșit de lună sau într-o vineri de triple-witching, close-ul e adesea o pondere cu două cifre din volumul zilei. Aia a fost lichiditatea. Tu n-ai fost în ea.

3:50cutoff on-close NYSE (ET)
3:55cutoff closing-cross Nasdaq (ET)
~10%volum tipic large-cap în close

Am făcut paper trading pe asta din greșeală. Un tweak de parametru a aterizat la 15:48. Backtestul tot a executat fiecare nume la închiderea oficială. OMS-ul a trimis ordine obișnuite la piață la 16:00:03 pentru că nimeni nu cablase MOC. Printuri after-hours, o mână de reject-uri și un shortfall de 19 puncte de bază față de fișier, într-o zi în care fișierul spunea că eram flat până la close. Strategia nu se stricase. Regula de fill da.

Încă mă gândesc la 15:49 ca la un loc fizic. Cineva schimbă o pondere. Altcineva se uită la ceas. Cutoff-ului nu-i pasă care dintre voi are dreptate.

MOC e ordinul care cere de fapt acel uncross, și nici măcar MOC nu e o promisiune. Un halt, o pauză LULD, o licitație anulată, un nume care n-a deschis niciodată: poți fi flat la 16:00 cu un on-close activ care moare. LOC are voie să rateze complet. Dacă uncross-ul e $40.12 și limita ta e $40.00, nu deții nimic. O grămadă de backtesturi tot înscriu close-ul.

Mai rău, unele fișiere de vendor stochează un close compozit care n-a printat niciodată pe niciun venue. Nu poți intra într-un composite. Dacă strategia ar fi trimis NYSE MOC, fill-ul care contează e uncross-ul NYSE, în size-ul pe care licitația l-ar fi absorbit.

Să numești ultimul print din programul regular drept close

Unele pipeline-uri refuză din principiu închiderea oficială și iau ultimul print SIP înainte de 16:00, pentru că măcar printul ăla "s-a întâmplat." Pe un mega-cap, last și official stau adesea la un cent sau doi distanță și nu observi. Pe un mid-cap, ultimul print poate fi 200 de acțiuni la 15:59:51, semnat de cine a ridicat un display rămas. Închiderea oficială 2 secunde mai târziu e un uncross de 1 milion de acțiuni la un preț diferit.

Indexul, coșul de creare ETF și fiecare rebalansare MOC au tranzacționat uncross-ul. Backtestul tău a tranzacționat restul. Iar un last print nu vine cu size-ul tău atașat. Dacă printul ăla e 400 de acțiuni și clip-ul tău e 5,000, n-ai luat prețul ăla. Ai luat un timestamp care s-a nimerit să fie last.

Am văzut un fișier mid-cap în care last-print versus închiderea oficială s-a mișcat 28 de cenți într-o joi de rebalansare. Backtestul care folosea last arăta mai "conștient de microstructură." Era doar o piață diferită, mai subțire, și tot presupunea că am fi putut fi acele 200 de acțiuni.

Să muți fill-ul la open-ul de mâine ca să fii conservator

A treia eschivă apare la code review ca un comentariu: nu presupune că putem tranzacționa close-ul, deci execută la următorul open. Sună matur. Construiește altă strategie.

Un semnal close-to-close executat la următorul open a mâncat gap-ul overnight. Pentru o mulțime de factori pe acțiuni, gap-ul ăla e o bucată mare din mișcarea pe care credeai că o deții. A executa la open nu face backtestul prudent. Asta relochează P&L-ul într-o sesiune pe care n-ai pornit s-o tranzacționezi și te aruncă într-o licitație de deschidere pe care tot n-ai modelat-o.

Pe hârtie, dezastrul e ușor de citit greșit. P&L-ul zilnic al backtestului tot se aliniază cu semnalul. Book-ul paper ține o noapte de gap de index și o dimineață de slippage pe opening-cross. Apoi lumea se ceartă despre implementation shortfall când descrierea onestă e că cele două sisteme nu fac același trade.

Dar și open-ul e o licitație. Dacă ai ratat cutoff-ul de ieri, nu primești automat un last curat de 9:30. Primești mecanică MOO/LOO, un imbalance și un gap. Să numești asta un fill conservator la close doar ascunde un al doilea cross nemodelat sub un comentariu virtuos.

Fill-ul pe care l-ai înscrisCe cerea de fapt venue-ulCum arată dezastrul
Închidere oficială, fără tip de ordinMOC sau LOC acceptat înainte de cutoff-ul acelui venuePrint after-hours, un reject sau un preț compozit pe care nimeni nu l-a găzduit
Ultimul print SIP înainte de 16:00Un trade din care ai fi putut face parte, în size-ul tăuUn rest de 200 de acțiuni tratat ca fill de clip
Următorul open ca un close "mai sigur"Un model de opening-cross, plus gap-ul overnightAltă strategie, tot o licitație, tot ratată
Dacă contul paper nu poate trimite MOC sau LOC, backtestul nu primește închiderea oficială. Schimbă fill-ul. Nu aproxima uncross-ul cu un ordin la piață de 16:00.

Distincția onestă e mică. Fie contractul de research spune că suntem în close, caz în care ordinul e on-close, cu timestamp înainte de 15:50 pe NYSE sau 15:55 pe Nasdaq, dimensionat față de volumul așteptat de close, și lăsat să expire neexecutat dacă e un LOC. Fie nu suntem în close, caz în care after-hours sau next-open e o politică numită, cu propria ei licitație, și curba de equity nu mai poartă o etichetă 16:00.

Acum picăm un backtest care înscrie închiderea oficială fără un ordin on-close așezat în interiorul cutoff-ului pentru acel venue. A omorât câteva curbe frumoase de semnal zilnic. Curbele alea n-au fost niciodată executabile la prețul pe care îl pretindeau.

backtestingmicrostructură de piațăacțiunilicitație de închidereexecuție
← Toate articolele