Jeudi 2 avril, 16:02 heure de l'Est. Le book papier avait l'allure que nous lui avions conçue : long d'environ $240,000 sur le perpetual BTCUSDT, short d'un panier pondéré au bêta de COIN, MSTR, MARA et RIOT, résiduel sous $500. Le job de hedge du vendredi avait tourné à 15:45 la semaine précédente. Le funding à 16:00 UTC n'avait été qu'une erreur d'arrondi. Je me suis déconnecté en pensant que nous avions enfin un sleeve crypto qui ne se contentait pas de recréer le bêta Nasdaq.
Vendredi, c'était le Vendredi saint. Je ne l'ai réalisé que parce que le chat crypto continuait de poster des captures d'écran de liquidations et que le chat actions s'était tu de cette façon précise qui veut dire que personne n'est à sa chaise. Le NYSE et le Nasdaq étaient fermés. Binance, non. Du close cash du jeudi jusqu'à vendredi 16:00 heure de l'Est, le perp était en baisse de 4.8%. Les shorts actions n'existaient pas en tant que marché ce jour-là. C'était une rangée de prix du jeudi dans un volet de risque.
Le bot de risque a posté quand même.
bêta au panier de hedge: 0.04. résiduel 1d: −$11,184. statut: NEUTRAL
J'ai encore cette capture d'écran. Un collègue l'a imprimée et collée sur le frigo du bureau dont on ne se sert presque pas. Le NEUTRAL vert en faisait beaucoup. Le bot calculait le bêta à partir des derniers prints actions qu'il avait, ceux de l'auction de clôture du jeudi, contre un mark BTC qui bougeait depuis vingt-quatre heures. Un mark gelé, c'est une photographie du jeudi. Appeler la photographie un hedge, c'est comme ça qu'on entre dans le week-end de Pâques avec une position crypto nue et un rapport qui vous félicite.
Lundi, le marché cash a ouvert. Le panier a gappé à la baisse, mais pas de 4.8%, et pas ensemble. COIN a ouvert à −2.1%. MSTR a fait plus. MARA a fait moins. Nous avons passé la matinée à trader dans un book qui avait vécu toute une séance de plus, que nous n'avions pas pu hedger, puis nous avons ressorti le backtest qui avait béni ce design et lui avons posé une question impolie. Qu'est-ce que tu as fait le Vendredi saint dernier, et celui d'avant, et chaque jour de semaine où le marché actions s'était mis en retrait pendant que BTC tradait pendant le jour férié ?
L'agent de recherche qui avait codé la première version avait tout resamplé en barres de 15 minutes et avait forward-fill. Pandas freq='B' était dans le notebook, ce qui a l'air d'un choix d'adulte jusqu'à ce qu'on se souvienne de ce que ça fait vraiment. 'B' veut dire du lundi au vendredi. Le Vendredi saint est un vendredi. Juneteenth 2026 tombait un vendredi. L'observance du Jour de l'Indépendance tombait un vendredi. La fonction de calendrier n'avait pas de calendrier. Elle avait un filtre de jours de semaine.
Le job de hedge tourne les vendredis à 15:45 heure de l'Est, un horaire raisonnable pour trader vers le close cash d'une semaine normale. Le Vendredi saint tombe toujours un vendredi. Dans la fenêtre 2023–2026, ce job s'est aligné sur quatre Vendredis saints, Juneteenth, la clôture complète du 3 juillet, et quatre séances du lendemain de Thanksgiving qui avaient déjà sonné une cloche à 1:00 PM. Dix séances du vendredi. À chacune d'elles, le simulateur avait accepté des ordres actions. Les fills étaient le close du jeudi, ou le dernier print régulier du vendredi reporté, habillés en trades live dans le blotter. Les marks crypto tournaient en live. La série de résiduel recevait le crédit de mouvements de hedge auxquels une jambe n'avait jamais eu l'occasion de répondre.
Les week-ends, c'était le même bug sur un calendrier dont on avait au moins plaisanté autour d'une bière. Les jours fériés, c'était la version dont personne ne plaisantait, parce que le notebook disait jours ouvrés et que le Vendredi saint donne encore, viscéralement, l'impression d'un jour où le système financier adulte est au travail. Les banques sont ouvertes. Fedwire est up. Une API broker peut avoir l'air éveillée et n'avoir nulle part où envoyer un ordre COIN.
Les early closes étaient plus calmes et, dans le blotter, plus rudes. Le 28 novembre 2025, le lendemain de Thanksgiving, le NYSE a fermé à 1:00 PM. Notre job s'est quand même réveillé à 15:45, a regardé une série en 15 minutes qui portait le dernier print de 12:59 depuis presque trois heures, et a « tradé le close ». Le modèle de fill nous a même facturé le slippage d'auction de clôture. Il n'y avait pas d'auction à 16:00. L'auction avait eu lieu à 13:00, sans nous. Le paper, cet après-midi-là, a eu l'échec plus honnête : nouveaux ordres rejetés, ordres working annulés dans l'early close, un fill rate de zéro.
| Séance | Marché cash | Fill du backtest | Paper |
|---|---|---|---|
| Vendredi saint 2026 | Fermé toute la journée | Panier fillé au close du jeudi | Rejets ; marks stale depuis le jeudi |
| Juneteenth 2026 | Fermé toute la journée | Même job du vendredi, mêmes fills fantômes | Repéré plus tard, dans le replay |
| 3 juillet 2026 | Fermé (4 juillet observé) | Vendredi 15:45 contre un print du jeudi | Pas de séance cash à rejoindre |
| 28 nov. 2025 | Clôture 1:00 PM | Rebalance 15:45, dernier print 12:59, slippage d'auction | Rejets après 13:00 |
| Samedi ordinaire | Fermé | Barres actions en forward-fill, perp live | Noms gelés, perp live |
Nous avons relancé le book avec un fichier de séance par venue : horaires réguliers, jours fériés, early closes, le close 16:00 vs 13:00, et un compteur d'heures stale sur chaque mark. Les ordres dans une séance cash fermée ne fillent pas au last. Ils sont rejetés. Le volet de risque n'a pas le droit d'afficher NEUTRAL si une jambe de hedge est stale depuis plus de quelques heures. Le test unitaire est moche et j'aime ça : prendre un vendredi normal, le peindre en fermé, assert zéro fills COIN et un flag stale sur le panier. Puis peindre 13:00 comme close et assert que le job de 15:45 ne jette même pas un œil au modèle d'auction.
Le Sharpe du résiduel est passé de 1.14 à 0.61. Je ne traite ni l'un ni l'autre de ces chiffres comme une raison de trader. Je traite l'écart comme un aveu. Une bonne partie de ce que nous appelions résiduel de hedge était de la volatilité crypto des jours fériés, collectée les jours où la jambe short actions n'était qu'un souvenir de la séance précédente. Les week-ends ont fait une partie de ce travail aussi, ce que nous minorions déjà en conversation. Les jours fériés se cachaient dans le resample en jours ouvrés, un endroit bien plus embarrassant pour se cacher.
Nous faisons toujours tourner le job du vendredi 15:45. Il lit maintenant un fichier de douze lignes pour 2026, dont deux n'ont pas encore eu lieu. Thanksgiving tombe le 26. Le lendemain, le marché cash meurt à 13:00. J'ai mis cette clôture 1:00 PM dans le calendrier deux fois, sous deux noms différents, parce que je ne me fais pas confiance en novembre, et parce que pandas appellera encore joyeusement ce vendredi un jour ouvré si je le laisse faire.
← Tous les articles


