13 de Setembro de 2026 · execução

Quanta latência você deve adicionar a um backtest? Medimos cada milissegundo do nosso

Quanta latência você deve adicionar a um backtest? Medimos cada milissegundo do nosso

Quatro números, todos medidos na nossa própria estrutura de paper trading: uma estratégia, sinais de perpétuos BTCUSDT em candles de 1 minuto, 31 dias e 1,418 ordens. Tempo mediano entre o fechamento do candle e a confirmação da ordem pela exchange: 195 ms. Percentil 99: 2,970 ms. Mediana no 1% dos minutos com maior volatilidade realizada: 840 ms. E a constante de latência que ficou na configuração do backtest durante a maior parte do ano anterior: 0.

195 msmediana do fechamento do candle à confirmação da ordem
2,970 msp99, mesmo percurso
840 msmediana nos minutos do 1% de maior volatilidade

Três desses números são entediantes. Todo mundo sabe que zero está errado, todo mundo acaba substituindo esse valor por algum outro, e esse outro quase sempre é uma constante escolhida no feeling. 100 ms, 250 ms, “vamos ser conservadores: 500”. O número que realmente importa é 840, porque ele mostra que sua latência depende do estado do mercado, e os estados em que ela dispara são os mesmos em que seu sinal acha que encontrou uma oportunidade.

Para onde vão os 195 milissegundos

Aqui está o orçamento completo, medido etapa por etapa, com timestamps de relógio monotônico registrados a cada salto. A máquina é uma instância AWS em ap-northeast-1, na mesma região dos endpoints da plataforma, o melhor que dá para conseguir em uma configuração de varejo sem colocation.

Etapa p50 p95 p99
Fechamento do candle → recebimento do evento kline-closed via WS 128 ms 402 ms 1,940 ms
Parse + atualização do estado das features 3 ms 9 ms 28 ms
Decisão: avaliação do modelo + verificações de risco 11 ms 22 ms 60 ms
Envio da ordem → confirmação da exchange 47 ms 180 ms 1,100 ms
Ponta a ponta (medido, não somado) 195 ms 690 ms 2,970 ms

Duas observações antes de chegar ao ponto interessante. Primeiro, as medianas não se somam: 128 + 3 + 11 + 47 = 189, e a mediana ponta a ponta medida é 195. Percentis não são aditivos. Se você estimar a latência somando os p99 de cada etapa, vai chegar a 3,128 ms, quando o p99 real é 2,970. Aqui, a diferença é pequena; quando as etapas têm correlação na direção oposta, o erro pode ser enorme. Meça o percurso inteiro.

Segundo, olhe a primeira linha. Dois terços do orçamento mediano são gastos esperando a exchange avisar que o candle fechou. Não é a rede, não é seu código, não é o roteamento da ordem. A plataforma agrega as negociações em um kline, decide que o minuto acabou e envia o evento. Esse envio passa por uma fila, compartilhada com todos os outros assinantes daquele stream.

Os 840

Agrupe cada uma das 1,418 ordens pela volatilidade realizada do minuto que gerou o sinal, e a distribuição se desmancha.

Faixa de volatilidade do candle do sinal Ordens p50 ponta a ponta p99 ponta a ponta
Quartil inferior 201 141 ms 488 ms
Dois quartis centrais 796 183 ms 1,210 ms
Quartil superior 407 312 ms 2,880 ms
1% de maior volatilidade entre todos os minutos 14 840 ms 4,100 ms

Todas as etapas pioram ao mesmo tempo, e por isso o efeito se acumula. A fila de agregação e transmissão da plataforma é afetada pela carga do matching engine: um minuto com 11,000 negociações é transmitido mais tarde que um minuto com 600. Seu próprio processo também está lidando com mais atualizações de profundidade e mais registros de negócios na mesma janela, então a atualização de features que costuma levar 3 ms passa a levar 28. O caminho de ordens REST disputa recursos com o pânico de todo mundo, e começam a aparecer erros 503 ocasionais com novas tentativas, que por si só custam um segundo inteiro. O coeficiente de correlação entre a contagem de negociações no candle do sinal e a latência ponta a ponta foi 0.41 na nossa amostra. Não é enorme. Mas basta para acabar com uma constante.

E as estratégias que passam por uma triagem inicial são, em sua maioria, as que operam rompimentos, reversões, descolamentos e cascatas de liquidação. Elas disparam exatamente na faixa em que a latência é pior. Um sinal de momentum que só dispara quando o minuto se move 40 bps foi estruturado para sempre ser atendido pela versão mais lenta da sua stack.

Certa vez, passamos um dia investigando um outlier de 3.6 segundos que aparecia mais ou menos no mesmo horário todas as noites. Era o logrotate, copiando e truncando um arquivo de 2 GB no mesmo volume EBS em que o processo gravava, o que travava o event loop. O mercado não tinha culpa. Meça primeiro; depois culpe a microestrutura.

O que isso faz com o preço de execução

O preço oscila enquanto você espera. Em um minuto aleatório, o movimento médio contra o sinal durante nossa mediana de 195 ms foi de cerca de 1.1 bps. Nos minutos do quartil superior, com 312 ms, foi de 5.8 bps. Nos minutos do 1% de maior volatilidade, com 840 ms, foram cerca de 14 bps de movimento adverso antes mesmo de a ordem chegar ao livro.

Nos perpétuos de BTC, o spread quase não pesa nisso: 1 tick em uma cotação de 84,000 equivale a 0.012 bps, então o prejuízo vem do movimento adverso, não do custo de cruzar o spread. Leve a mesma estratégia para um perpétuo de capitalização média e o segundo fator aparece: na nossa amostra, o spread no topo do livro passou de 1.4 bps em minutos tranquilos para 6.2 bps no quartil superior, e a profundidade naquele preço caiu mais da metade. Você paga pelo movimento, pelo spread mais amplo e pela menor profundidade, tudo de uma vez, tudo pela mesma causa.

Quando repetimos os mesmos 31 dias com latência condicional por candle, em vez de uma latência fixa de 200 ms, o preço médio de entrada do backtest ficou 3.1 bps pior, quase todo o efeito concentrado em 9% das operações. A divergência entre os preços de entrada do backtest e do paper trading caiu de 4.2 bps para 0.9 bps. O Sharpe in-sample dessa estratégia caiu de 1.7 para 1.1, que é o número honesto — e sempre foi.

Então, o que você coloca na configuração

Não um escalar. Hoje fazemos assim:

  1. Amostre, não defina. Sorteie a latência de cada ordem simulada a partir de uma distribuição empírica condicionada à atividade do próprio candle: contagem de negociações e retorno absoluto bastam, e ambos já estão em um kline padrão. Ajuste o modelo uma vez por exchange e tipo de ordem; atualize-o mensalmente.
  2. Preserve a cauda. Não ajuste uma lognormal e dê o trabalho por encerrado: o p99 aparece em ondas de novas tentativas e pausas de GC que nenhuma distribuição suave reproduz. Usamos os quantis empíricos com uma cauda reamostrada acima do p95.
  3. A latência também vale para cancelamentos. Uma substituição de stop ou um cancelamento de hedge está sujeito ao mesmo atraso e, em mercados rápidos, seu cancelamento disputa com uma execução. Se o simulador cancela na mesma hora, seu modelo de risco é ficção.
  4. Adicione uma proteção contra dados desatualizados e simule-a. O nosso descarta qualquer sinal cujo candle tenha mais de 1.5 segundos ao chegar. Esse comportamento é real e tem um custo real: ele remove operações sem alarde, e precisa remover as mesmas operações no backtest.
  5. Recalibre com base no paper trading. É no paper trading que você obtém a verdade de campo. Registre os timestamps dos quatro saltos em cada ordem e compare semanalmente as distribuições com as premissas do simulador.

Outras classes de ativos, o mesmo problema. Ações dos EUA: o consolidated tape adiciona seu próprio atraso de agregação ao do seu broker, e ele aumenta sob pressão de volume de mensagens pelo mesmo motivo estrutural. Mercados de previsão: entrada de ordens somente via REST na maioria das plataformas; medimos medianas abaixo de 100 ms que chegam a vários segundos quando ocorre um evento de resolução e todo mundo chega ao mesmo tempo. Opções de cripto: a cotação usada no seu preço pode estar 2 segundos desatualizada justamente no minuto em que o ativo subjacente se moveu.

O erro, em geral, é tratar um parâmetro de execução como uma constante independente, quando ele depende da mesma variável de estado que impulsiona seu sinal. As taxas se comportam; o funding se comporta; a latência, não. Se você guardar 1 número disso tudo, guarde esta proporção: nosso p99 é quinze vezes maior que a mediana, e nossos sinais chegam de forma desproporcional perto do p99.

Instrumente os quatro saltos. Dá uma tarde de trabalho e vai contar mais sobre sua estratégia do que mais uma semana buscando parâmetros.

latênciabacktestingpaper tradingexecuçãofuturos de cripto
← Todos os artigos