Quinta-feira, 2 de abril, 16:02 Eastern. O book em paper estava do jeito que tínhamos desenhado: long cerca de $240,000 do perpetual BTCUSDT, short uma cesta ponderada por beta de COIN, MSTR, MARA e RIOT, residual abaixo de $500. O job de hedge da sexta-feira tinha rodado às 15:45 na semana anterior. O funding às 16:00 UTC tinha sido um erro de arredondamento. Desloguei achando que finalmente tínhamos uma sleeve de cripto que não só recriava o beta da Nasdaq.
Sexta-feira era Sexta-feira Santa. Só me dei conta disso porque o chat de cripto ainda postava prints de liquidação e o chat de ações tinha silenciado daquele jeito específico que significa que ninguém está na cadeira. NYSE e Nasdaq estavam fechadas. A Binance, não. Do fechamento à vista de quinta-feira até sexta 16:00 Eastern, o perp caiu 4.8%. As shorts de ações não existiam como mercado naquele dia. Eram uma linha de preços de quinta-feira num painel de risco.
O bot de risco postou mesmo assim.
beta para a cesta de hedge: 0.04. residual 1d: −$11,184. status: NEUTRAL
Ainda tenho esse print. Um colega imprimiu e colou na geladeira do escritório que quase não usamos. O NEUTRAL verde estava fazendo um trabalho enorme. O bot calculou o beta a partir dos últimos prints de ações que tinha, que eram o leilão de fechamento de quinta-feira, contra um mark de BTC que vinha se movendo há vinte e quatro horas. Um mark congelado é uma fotografia de quinta-feira. Chamar a fotografia de hedge é como entrar no fim de semana da Páscoa com uma posição de cripto descoberta e um relatório que te parabeniza por isso.
Na segunda-feira o mercado à vista abriu. A cesta abriu em gap de baixa, mas não 4.8%, e não em conjunto. COIN abriu −2.1%. MSTR fez mais. MARA fez menos. Passamos a manhã operando um book que tinha vivido uma sessão extra inteira que não pudemos hedgear, depois puxamos o backtest que tinha abençoado esse desenho e fizemos uma pergunta indelicada. O que você fez na última Sexta-feira Santa, e na anterior, e em todo dia da semana em que o mercado de ações ficou de fora enquanto o BTC negociava durante o feriado?
O agente de pesquisa que codou 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 gente grande até você lembrar o que isso realmente faz. 'B' significa segunda a sexta. Sexta-feira Santa é uma sexta-feira. O Juneteenth de 2026 caiu numa sexta-feira. A observância do Independence Day foi numa sexta-feira. A função de calendário não tinha um calendário. Tinha um filtro de dia da semana.
O job de hedge roda às sextas às 15:45 Eastern, que é um horário razoável para operar rumo ao fechamento à vista numa semana normal. Sexta-feira Santa é sempre uma sexta-feira. Na janela 2023–2026 esse job coincidiu com quatro Sextas-feiras Santas, o Juneteenth, o fechamento integral de 3 de julho e quatro sessões do dia seguinte ao Thanksgiving que já tinham tocado o sino às 1:00 PM. Dez sessões de sexta-feira. Em todas elas o simulador tinha aceitado ordens de ações. Os fills eram o fechamento de quinta-feira, ou o último print regular de sexta-feira carregado para frente, disfarçados de trades ao vivo no blotter. Os marks de cripto rodavam ao vivo. A série do residual ganhou crédito por movimentos de hedge que uma ponta nunca teve chance de responder.
Os fins de semana eram o mesmo bug com hora marcada, sobre o qual a gente pelo menos já tinha zoado tomando cerveja. Os feriados eram a versão sobre a qual ninguém zoava, porque o notebook dizia dias úteis e a Sexta-feira Santa ainda parece, visceralmente, um dia em que o sistema financeiro adulto está funcionando. Os bancos estão abertos. O Fedwire está no ar. Uma API de corretora pode parecer acordada e mesmo assim não ter para onde enviar uma ordem de COIN.
Os fechamentos antecipados foram mais silenciosos e, no blotter, mais grosseiros. Em 28 de novembro de 2025, o dia seguinte ao Thanksgiving, a NYSE fechou às 1:00 PM. Nosso job mesmo assim acordou às 15:45, olhou uma série de 15 minutos que vinha carregando o último print das 12:59 há quase três horas e "operou o fechamento." O modelo de fill ainda nos cobrou slippage de leilão de fechamento. Não houve leilão às 16:00. O leilão tinha acontecido às 13:00, sem a gente. O paper, naquela tarde, teve a falha mais honesta: ordens novas rejeitadas, ordens working canceladas no fechamento antecipado, taxa de fill zero.
| Sessão | Mercado à vista | Fill do backtest | Paper |
|---|---|---|---|
| Sexta-feira Santa 2026 | Fechado o dia inteiro | Cesta preenchida no fechamento de quinta-feira | Rejeições; marks stale de quinta-feira |
| Juneteenth 2026 | Fechado o dia inteiro | O mesmo job de sexta, os mesmos fills fantasma | Pego depois, no replay |
| 3 de julho de 2026 | Fechado (observância de 4 de julho) | Sexta 15:45 contra um print de quinta-feira | Sem sessão à vista para entrar |
| 28 de nov. de 2025 | fechamento 1:00 PM | rebalanceamento 15:45, último print 12:59, slippage de leilão | Rejeições depois das 13:00 |
| Sábado comum | Fechado | Barras de ações com forward-fill, perp ao vivo | Nomes congelados, perp ao vivo |
Rerodamos o book com um arquivo de sessão por venue: horário regular, feriados, fechamentos antecipados, o fechamento 16:00 vs 13:00, e um contador de horas stale em cada mark. Ordens numa sessão à vista fechada não fillam no last. Elas rejeitam. O painel de risco não pode imprimir NEUTRAL se qualquer ponta de hedge estiver stale há mais de algumas horas. O unit test é feio e eu gosto dele: pegue uma sexta-feira normal, pinte-a como fechada, faça assert de zero fills de COIN e uma flag stale na cesta. E então pinte 13:00 como o fechamento e faça assert de que o job das 15:45 nem sequer olha para o modelo de leilão.
O Sharpe do residual passou de 1.14 para 0.61. Não trato nenhum dos dois números como motivo para operar. Trato o gap como uma confissão. Boa parte do que vínhamos chamando de residual de hedge era volatilidade de feriado da cripto, coletada em dias em que a ponta short de ações era um souvenir da sessão anterior. Os fins de semana fizeram um pouco desse trabalho também, o que já descontávamos na conversa. Os feriados estavam escondidos no resample de dia útil, que é um lugar bem mais constrangedor para se esconder.
Ainda rodamos o job de sexta às 15:45. Agora ele lê um arquivo com doze linhas para 2026, duas das quais ainda não aconteceram. Thanksgiving é dia 26. No dia seguinte, o mercado à vista morre às 13:00. Coloquei esse fechamento das 1:00 PM no calendário duas vezes, com dois nomes diferentes, porque não confio em mim mesmo em novembro, e porque o pandas ainda vai alegremente chamar aquela sexta-feira de dia útil se eu deixar.
← Todos os artigos


