Quinta-feira, 2 de abril, 16:02 Eastern. O livro paper estava exatamente como o tínhamos desenhado: longos cerca de $240,000 do perpétuo BTCUSDT, curtos numa cesta ponderada por beta de COIN, MSTR, MARA e RIOT, residual abaixo de $500. O job de cobertura de sexta-feira tinha corrido às 15:45 na semana anterior. O funding das 16:00 UTC tinha sido um erro de arredondamento. Desliguei-me a pensar que finalmente tínhamos uma componente cripto que não se limitava a recriar o beta da Nasdaq.
Sexta-feira era Sexta-Feira Santa. Só dei por isso porque o chat de cripto ainda publicava capturas de ecrã de liquidações e o chat de ações tinha ficado calado daquela maneira específica que significa que ninguém está numa cadeira. A NYSE e a Nasdaq estavam fechadas. A Binance não. Do fecho à vista de quinta-feira até às 16:00 Eastern de sexta-feira o perp desceu 4.8%. Os shorts de ações não existiam enquanto mercado naquele dia. Eram uma linha de preços de quinta-feira num painel de risco.
O bot de risco publicou na mesma.
beta para a cesta de cobertura: 0.04. residual 1d: −$11,184. status: NEUTRAL
Ainda tenho essa captura de ecrã. Um colega imprimiu-a e colou-a no frigorífico do escritório que quase não usamos. O NEUTRAL verde estava a fazer muito trabalho. O bot calculou o beta a partir dos últimos prints de ações que tinha, que eram o leilão de fecho de quinta-feira, contra um mark de BTC que se movia há vinte e quatro horas. Um mark congelado é uma fotografia de quinta-feira. Tratar a fotografia como uma cobertura é assim que se entra no fim de semana da Páscoa com uma posição de cripto a descoberto e um relatório que nos felicita por isso.
Na segunda-feira o mercado à vista abriu. A cesta abriu em gap descendente, mas não 4.8%, e não em conjunto. A COIN abriu −2.1%. A MSTR fez mais. A MARA fez menos. Passámos a manhã a negociar para um livro que tinha vivido uma sessão extra inteira que não podíamos cobrir, depois fomos buscar o backtest que tinha abençoado este desenho e fizemos-lhe uma pergunta grosseira. O que fizeste na última Sexta-Feira Santa, e na anterior, e em todos os dias de semana em que o mercado de ações ficou de fora enquanto o BTC negociava ao longo do feriado?
O agente de investigação que programou a primeira versão tinha reamostrado tudo para barras de 15 minutos e feito forward-fill. Pandas freq='B' estava no notebook, o que parece uma escolha de adulto até nos lembrarmos do que realmente faz. 'B' significa de segunda a sexta-feira. A Sexta-Feira Santa é uma sexta-feira. O Juneteenth de 2026 foi uma sexta-feira. A observância do Dia da Independência foi uma sexta-feira. A função de calendário não tinha um calendário. Tinha um filtro de dia da semana.
O job de cobertura corre às sextas-feiras às 15:45 Eastern, o que é uma hora razoável para negociar em direção ao fecho à vista numa semana normal. A Sexta-Feira Santa é sempre uma sexta-feira. Na janela 2023–2026 esse job coincidiu com quatro Sextas-Feiras Santas, o Juneteenth, o fecho completo de 3 de julho, e quatro sessões do dia a seguir ao Dia de Ação de Graças que já tinham tocado o sino à 1:00 PM. Dez sessões de sexta-feira. Em cada uma delas o simulador tinha aceite ordens de ações. Os fills eram o fecho de quinta-feira, ou o último print regular de sexta-feira prolongado para a frente, disfarçados de negócios em direto no blotter. Os marks de cripto corriam em direto. A série residual recebia crédito por movimentos de cobertura a que uma das pernas nunca teve hipótese de responder.
Os fins de semana eram o mesmo bug num horário sobre o qual pelo menos já tínhamos brincado à cerveja. Os feriados eram a versão de que ninguém brincava, porque o notebook dizia dias úteis e a Sexta-Feira Santa ainda parece, visceralmente, um dia em que o sistema financeiro adulto está a trabalhar. Os bancos estão abertos. O Fedwire está no ar. Uma API de broker pode parecer acordada e mesmo assim não ter para onde enviar uma ordem de COIN.
Os fechos antecipados eram mais silenciosos e, no blotter, mais rudes. A 28 de novembro de 2025, o dia a seguir ao Dia de Ação de Graças, a NYSE fechou à 1:00 PM. O nosso job mesmo assim acordou às 15:45, olhou para uma série de 15 minutos que carregava o último print das 12:59 há quase três horas, e «negociou o fecho». O modelo de fills até nos cobrou slippage de leilão de fecho. Não houve leilão às 16:00. O leilão tinha acontecido às 13:00, sem nós. O paper, nessa tarde, teve a falha mais honesta: novas ordens rejeitadas, ordens em curso canceladas no fecho antecipado, uma taxa de fill de zero.
| Sessão | Mercado à vista | Fill do backtest | Paper |
|---|---|---|---|
| Sexta-Feira Santa 2026 | Fechado o dia inteiro | Cesta executada no fecho de quinta-feira | Rejeições; marks obsoletos desde quinta-feira |
| Juneteenth 2026 | Fechado o dia inteiro | O mesmo job de sexta, os mesmos fills fantasma | Apanhado mais tarde, no replay |
| 3 de julho de 2026 | Fechado (4 de julho observado) | Sexta-feira 15:45 contra um print de quinta-feira | Sem sessão à vista a que juntar-se |
| 28 nov 2025 | Fecho à 1:00 PM | Rebalanceamento às 15:45, último print às 12:59, slippage de leilão | Rejeições depois das 13:00 |
| Sábado normal | Fechado | Barras de ações com forward-fill, perp em direto | Nomes congelados, perp em direto |
Voltámos a correr o livro com um ficheiro de sessões por venue: horário regular, feriados, fechos antecipados, o fecho das 16:00 vs 13:00, e um contador de horas obsoletas em cada mark. Ordens contra uma sessão à vista fechada não executam no último preço. Rejeitam. O painel de risco não pode imprimir NEUTRAL se alguma perna da cobertura estiver obsoleta há mais de algumas horas. O teste unitário é feio e eu gosto dele: pegar numa sexta-feira normal, pintá-la como fechada, fazer assert de zero fills de COIN e de uma flag de obsoleto na cesta. E depois pintar as 13:00 como o fecho e fazer assert de que o job das 15:45 nem sequer olha para o modelo de leilão.
O Sharpe residual passou de 1.14 para 0.61. Não trato nenhum dos dois números como razão para negociar. Trato o fosso como uma confissão. Grande parte do que tínhamos chamado residual de cobertura era volatilidade de feriado da cripto, colhida em dias em que a perna curta de ações era um souvenir da sessão anterior. Os fins de semana faziam parte desse trabalho também, o que já descontávamos na conversa. Os feriados escondiam-se na reamostragem de dias úteis, que é um sítio bem mais embaraçoso para se esconder.
Ainda corremos o job de sexta-feira das 15:45. Agora lê um ficheiro com doze linhas para 2026, duas das quais ainda não aconteceram. O Dia de Ação de Graças é dia 26. No dia seguinte, o mercado à vista morre às 13:00. Pus esse fecho da 1:00 PM no calendário duas vezes, com dois nomes diferentes, porque não confio em mim próprio em novembro, e porque o pandas ainda chama alegremente a essa sexta-feira um dia útil se eu o deixar.
← Todos os artigos


