Le cours de clôture officiel dans un fichier actions ressemble à n'importe quel autre prix. Horodatage 16:00:00 Eastern, un nombre, prêt à servir. Les signaux quotidiens le marquent. Les rebalancements le visent. Un agent de recherche le traitera comme une cotation posée sur le carnet, qui n'attendait que vous.
La clôture est une enchère, pas une cotation. C'est le prix d'uncross des ordres on-close qui devaient être acceptés avant un cut-off. Si le backtest s'y est exécuté sans rejoindre ce batch, il a pris un print auquel vous n'auriez pas participé.
Exécuter 16:00 comme si l'uncross était un ordre au marché
Le raccourci habituel : calculer le signal à la clôture ou juste avant, exécuter au cours de clôture officiel, horodater 16:00. Un mardi calme sur AAPL, le mensonge vaut quelques cents. Les jours qui dominent un book de rebalancement quotidien, c'est tout le trade.
À 16:00:00.000, le closing cross est en cours, ou vient de s'exécuter. Un ordre exécutable que vous envoyez alors n'entre pas dans ce cross. Il atterrit dans ce qui reste : taille affichée résiduelle, un odd lot, extended hours sur ARCA ou Nasdaq. Ce print peut être à deux cents du cours de clôture officiel, ou à quarante points de base, et c'est un autre pool de liquidité. Lors d'une reconstitution Russell, d'une fin de mois ou d'un vendredi de triple witching, la clôture représente souvent une part à deux chiffres du volume de la journée. C'était la liquidité. Vous n'y étiez pas.
Nous l'avons paper-tradé par accident. Un ajustement de paramètre est arrivé à 15:48. Le backtest a quand même exécuté chaque nom au cours de clôture officiel. L'OMS a envoyé des ordres au marché ordinaires à 16:00:03 parce que personne n'avait câblé le MOC. Des prints after-hours, une poignée de rejets, et un shortfall de 19 points de base par rapport au fichier, un jour où le fichier disait que nous étions flat jusqu'à la clôture. La stratégie n'avait pas cassé. La règle d'exécution, si.
Je pense encore à 15:49 comme à un lieu physique. Quelqu'un change un poids. Quelqu'un d'autre surveille l'horloge. Le cut-off se fiche de savoir lequel de vous a raison.
Le MOC est l'ordre qui demande réellement cet uncross, et même le MOC n'est pas une promesse. Un halt, une pause LULD, une enchère annulée, un nom qui n'a jamais ouvert : vous pouvez être flat à 16:00 avec un on-close en cours qui meurt. Le LOC a le droit de rater entièrement. Si l'uncross est à $40.12 et que votre limite est à $40.00, vous ne possédez rien. Plein de backtests comptabilisent quand même la clôture.
Pire, certains fichiers de vendors stockent une clôture composite qui n'a jamais été imprimée sur aucune place. On ne rejoint pas un composite. Si la stratégie avait envoyé un MOC NYSE, l'exécution qui compte est l'uncross NYSE, dans la taille que l'enchère aurait absorbée.
Appeler le dernier print des heures régulières la clôture
Certains pipelines refusent par principe le cours de clôture officiel et prennent le dernier print SIP avant 16:00, parce que ce print au moins « s'est produit ». Sur un mega-cap, last et officiel sont souvent à un ou deux cents d'écart et vous ne le remarquerez pas. Sur un mid-cap, le dernier print peut faire 200 actions à 15:59:51, signé par quiconque a levé un reliquat affiché. Le cours de clôture officiel deux secondes plus tard est un uncross d'un million d'actions à un prix différent.
L'indice, le panier de création ETF et chaque rebalancement MOC ont tradé l'uncross. Votre backtest a tradé le reliquat. Et un dernier print n'arrive pas avec votre taille attachée. Si ce print fait 400 actions et que votre clip est de 5,000, vous n'avez pas eu ce prix. Vous avez eu un horodatage qui se trouvait être le dernier.
J'ai vu un fichier mid-cap où last-print versus cours de clôture officiel a bougé de 28 cents un jeudi de rebalancement. Le backtest qui utilisait last avait l'air plus « conscient de la microstructure ». C'était juste un marché différent, plus mince, et il supposait encore que nous aurions pu être ces 200 actions.
Glisser l'exécution à l'ouverture du lendemain pour être conservateur
Le troisième contournement apparaît en revue de code comme un commentaire : ne pas supposer qu'on peut trader la clôture, donc exécuter à l'ouverture suivante. Ça a l'air adulte. Ça construit une autre stratégie.
Un signal close-to-close exécuté à l'ouverture suivante a mangé le gap overnight. Pour beaucoup de facteurs actions, ce gap est une large part du mouvement que vous pensiez posséder. Exécuter à l'ouverture ne rend pas le backtest prudent. Ça déplace le P&L dans une séance que vous n'aviez pas prévu de trader, et ça vous jette dans une enchère d'ouverture que vous n'avez pas non plus modélisée.
Sur le papier, le carnage est facile à mal lire. Le P&L quotidien du backtest s'aligne encore avec le signal. Le book papier porte une nuit de gap d'indice et un matin de slippage d'opening-cross. On se dispute ensuite sur l'implementation shortfall alors que la description honnête est que les deux systèmes ne font pas le même trade.
Mais l'ouverture est une enchère aussi. Si vous avez raté le cut-off d'hier, vous n'obtenez pas automatiquement un last propre à 9:30. Vous obtenez la mécanique MOO/LOO, un imbalance, et un gap. Appeler ça une exécution de clôture conservatrice, c'est juste cacher un second cross non modélisé sous un commentaire vertueux.
| Exécution que vous avez comptabilisée | Ce dont la place avait réellement besoin | À quoi ressemble le carnage |
|---|---|---|
| Cours de clôture officiel, sans type d'ordre | MOC ou LOC accepté avant le cut-off de cette place | Print after-hours, un rejet, ou un prix composite que personne n'a hébergé |
| Dernier print SIP avant 16:00 | Un trade dont vous auriez pu faire partie, dans votre taille | Un reliquat de 200 actions traité comme une exécution de clip |
| Ouverture suivante comme une clôture « plus sûre » | Un modèle d'opening-cross, plus le gap overnight | Une autre stratégie, toujours une enchère, toujours ratée |
La distinction honnête est mince. Soit le contrat de recherche dit que nous sommes dans la clôture, auquel cas l'ordre est on-close, horodaté avant 15:50 sur NYSE ou 15:55 sur Nasdaq, dimensionné contre le volume de clôture attendu, et autorisé à expirer non exécuté s'il s'agit d'un LOC. Soit nous ne sommes pas dans la clôture, auquel cas after-hours ou next-open est une politique nommée avec sa propre enchère, et la courbe d'equity arrête de porter une étiquette 16:00.
Nous faisons maintenant échouer un backtest qui comptabilise le cours de clôture officiel sans un ordre on-close posé à l'intérieur du cut-off de cette place. Ça a tué de jolies courbes de signaux quotidiens. Ces courbes n'étaient jamais exécutables au prix qu'elles revendiquaient.
← Tous les articles


