Tínhamos uma estratégia de momentum de BTC de 1 minuto que parecia honesta na Binance. Taxas taker, funding, um termo de impacto de raiz quadrada que já tínhamos deixado um pouco pessimista demais. Walk-forward que não nos envergonhava. A conta paper vivia na Bybit, porque era lá que estavam as chaves. Disse para mim mesmo que BTC é BTC. Na sexta-feira eu tinha uma estratégia que vinha negociando um lead-lag que não conseguíamos preencher, e um Sharpe que pertencia a uma exchange na qual não tínhamos conta.
Segunda-feira: um backtest limpo na Binance
O agente tinha cuspido algo quase entediante: retorno de 15 barras contra uma média lenta, long ou short no open da barra seguinte, zerar no stop ou depois de doze minutos. Forçamos isso na Binance USD-M BTCUSDT, de 2023 até o início de 2026, e recusamos olhar qualquer coisa bruta de custos.
Depois de 4.0 bps taker, funding horário e impacto, o Sharpe walk-forward ficou em 1.6. A vantagem líquida média por fill era 3.4 bps. A contagem de trades era alta o bastante para eu parar de cutucar o bootstrap. O colchão de latência que já adicionamos para a nossa própria stack (sinal até ordem, 40 milissegundos num bom dia) mal mexeu nisso. Lembro de ter ficado levemente irritado por não ser mais frágil.
Terça-feira: a conta paper começa a "escorregar"
O paper entrou no ar às 09:12 UTC. Mesmo código, mesmos parâmetros, mesma regra de "próximo open", apontado para o BTCUSDT linear da Bybit. A primeira tarde parecia uma sequência de azar. Estávamos preenchendo 2–8 bps pior do que o replay da Binance dos mesmos minutos, sempre na direção do trade. O blotter dizia slippage. Acreditei no blotter até os misses se agruparem nos minutos em que a Binance já tinha começado a correr.
Durante a noite o gap não reverteu à média do jeito que um modelo de fill ruidoso reverte à média. Ficou parado ali. Um buy na Bybit imprimiu a um preço que a Binance tinha mostrado um beat antes, depois a Bybit chegou, depois nós pagamos. E os minutos que a estratégia queria eram os minutos em que os dois tapes discordavam. Nos minutos quietos, os closes ficavam um em cima do outro e a estratégia não ligava. Estava selecionando divergência e chamando isso de alpha.
Quarta-feira: dois tapes, um relógio
Puxamos os dois feeds de last-trade, alinhamos pelos timestamps da exchange e fizemos uma pergunta indelicada: quando o BTC se movia pelo menos dois ticks, qual venue imprimia primeiro? Nas horas calmas a Binance liderava a Bybit em cerca de dois terços desses bursts, com lead mediano em torno de 40 milissegundos, o que cabe em muita conversa de "adicionamos latência" e fica fora de uma barra de 1 minuto. Durante o print de CPI da terça o lead se estendeu para centenas de milissegundos, e por alguns segundos feios os dois last prices estavam $80 de distância. Eu fiquei ali com as duas ladders abertas, vendo a Bybit perseguir um filme que a Binance já tinha exibido.
Esse foi o clima da semana, e isso não está no Sharpe. Você pode saber, intelectualmente, que last prices de cripto são locais à venue. É diferente ver a mesma moeda em duas janelas e perceber que uma delas está vivendo no passado.
Então fizemos o teste que eu deveria ter exigido na segunda-feira. Manter o sinal da Binance. Preencher no próximo open da Bybit. Esse é o conjunto de informação real da conta paper se você espiar o tape líquido e negociar em outro lugar, e também é uma forma de lookahead que você nunca vai ter em size: você está usando um preço que a venue de execução ainda não imprimiu. A vantagem foi para 0.6 bps. Inverta (sinal Bybit, fill Binance) e você fabrica uma fantasia. Binance na mesma venue ficou em 3.4. A "estratégia" era, em grande parte, estar no book mais rápido.
O gap de close de 1 minuto nos minutos em que negociamos tinha mediana de 4.1 bps. Incondicional, em todos os minutos, era cerca de 1.5. Claro. O sinal dispara quando alguém já começou a se mover. Tínhamos medido a vantagem na amostra selecionada, que é exatamente onde mora a discordância entre venues.
Eu costumava achar que o pior bug de venue era mapeamento de símbolo, BTCUSDT versus BTC-PERP, um join que duplica uma posição em silêncio. Isso é contabilidade. Isto foi assistir a dois books durante o CPI e perceber que eu tinha pesquisado um mercado que eu não opero.
Quinta-feira: funding, marks e taxas também não eram o mesmo mercado
Quando você admite que os last prices são diferentes, tem que admitir que o resto do contrato de market data também é. Tínhamos copiado a tabela de taxas da Binance para uma conta paper da Bybit e depois nos perguntávamos por que a linha de custo descolava.
| Entrada | Backtest Binance | Paper Bybit, aquela semana |
|---|---|---|
| Last price | Binance USD-M | Bybit linear |
| Taxa taker | 4.0 bps | 5.5 bps |
| Intervalo de funding | horário | 00 / 08 / 16 UTC |
| Mark / index | cesta Binance | cesta Bybit |
| Qtd mín / tick | 0.001 / 0.10 | 0.001 / 0.10 |
| Matemática de liquidação | nunca atingiu, BTC | mark diferente, ainda assim nunca atingiu |
Tick e lote coincidiram no BTC. Eu não generalizaria isso. No book de SOL que espiamos na noite de quinta, tick size e notional mínimo ambos diferiam, e o gap de close nos minutos de trade era 11 bps. O funding era o vazamento mais lento. A Binance estava pagando de hora em hora. A Bybit ainda estava no relógio de oito horas naquele linear. Uma posição mantida através das 01:00 UTC levava uma cobrança da Binance no ledger de pesquisa e silêncio no paper, depois um bolo às 08:00 que o backtest já tinha gotejado. O carry batia ao longo de uma semana e discordava ao longo de uma tarde, que é exatamente o horizonte em que essa estratégia vivia.
As taxas eram quase entediantes, e ainda assim comeram 1.5 bps de uma história de 3.4 bps. As pessoas tratam 4.0 versus 5.5 como nota de rodapé porque parece pequeno ao lado de um movimento diário de 2%. Não é pequeno ao lado de uma vantagem de 3.4 bps. Já sabíamos disso. Só tínhamos aplicado o conhecimento à tabela da venue errada.
Sexta-feira: um rerun nativo da Bybit
Reconstruímos o negócio inteiro em OHLCV da Bybit, stamps de funding da Bybit, 5.5 bps da Bybit. Mesmo caminho de código, mesmos cortes de walk-forward, mesma função de impacto. Sharpe 0.4. Vantagem líquida média 0.9 bps, que está dentro do ruído de uma estratégia taker de 1 minuto quando você para de presentear ela com o first look da Binance.
Era um mercado diferente, não um mais ruidoso. O paper não tinha rejeitado o backtest porque paper é "mais realista" no abstrato. O paper estava executando num book que a pesquisa nunca viu. O 1.6 era internamente consistente. Era consistente sobre a exchange errada.
Deixamos a versão Binance no arquivo com uma nota no relatório: não faça paper desta conta contra este tape. A versão Bybit é a que continua rodando, num número sobre o qual ninguém escreveria um thread. Esse é o resultado correto. Eu ainda sinto um pouco de falta do 1.6, que é como você sabe que ele estava fazendo um trabalho que não tinha merecido.
O que pularíamos da próxima vez
O atalho era sociológico. A Binance é o tape que todo vendor, todo notebook de pesquisa, todo default de agente quer te entregar. A conta fica onde você realmente conseguiu abri-la. Esses dois fatos parecem um detalhe de operações. Eles são o backtest.
- Escolha a venue de execução primeiro. Construa o tape de pesquisa a partir dos last prices, stamps de funding, marks, ticks e faixa de taxa dessa venue. Se o default do vendor é a Binance, isso não é um default. É uma estratégia diferente.
- Se você não consegue histórico da venue em que vai fazer paper, não substitua por um tape líder e chame o gap de slippage. Ou espere, ou trate o tape estrangeiro como um sinal atrasado e dê lag até que pudesse ter sido visto no book de execução.
- Quando comparar paper com backtest, separe o drift: gap de last-price nos minutos de trade, linha de taxas, timestamps de funding, mark usado nos stops. O blotter de terça misturou os quatro e rotulou tudo como slippage.
- Rode o teste cruzado de propósito. Sinal em A, fill em B. Se é aí que mora a vantagem inteira, você não tem uma estratégia. Você tem um lead-lag no qual não vai receber fill em size.
Eu ainda espiaria a Binance quando estiver operando na Bybit? Para um sanity check discricionário, claro. Para um fill, não. A conta paper já nos disse o que essa espiada vale. Vale os 4.1 bps que a outra sala imprimiu primeiro, e esses a gente não leva.
← Todos os artigos


