14 de Novembro de 2026 · pesquisa

Seu backtest operou na Sexta-feira Santa. O mercado de ações, não.

Seu backtest operou na Sexta-feira Santa. O mercado de ações, não.

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.

10Sessões de sexta-feira em que o mercado à vista não estava aberto para o rebalanceamento
4.8%movimento do perp enquanto o hedge de ações ficou no print de quinta-feira
1.14 → 0.61Sharpe do residual depois que o calendário de sessões passou a ser real

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.

Sexta-feira Santa não é feriado federal. Se a sua checagem de sessão for "o calendário bancário está fechado," você vai operar um mercado de ações fechado. Columbus Day é a imagem no espelho: ações à vista abertas, mercado de bonds fechado. Horários de venue são uma chave de join, não uma vibe.

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ãoMercado à vistaFill do backtestPaper
Sexta-feira Santa 2026Fechado o dia inteiroCesta preenchida no fechamento de quinta-feiraRejeições; marks stale de quinta-feira
Juneteenth 2026Fechado o dia inteiroO mesmo job de sexta, os mesmos fills fantasmaPego depois, no replay
3 de julho de 2026Fechado (observância de 4 de julho)Sexta 15:45 contra um print de quinta-feiraSem sessão à vista para entrar
28 de nov. de 2025fechamento 1:00 PMrebalanceamento 15:45, último print 12:59, slippage de leilãoRejeições depois das 13:00
Sábado comumFechadoBarras de ações com forward-fill, perp ao vivoNomes 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.

feriadosmultiativoscriptoaçõesbacktesting
← Todos os artigos