7 de Novembro de 2026 · microestrutura

O backtest encontrou o preço certo no mercado errado

O backtest encontrou o preço certo no mercado errado

Às 10:14 UTC, uma estratégia simples de rompimento comprou um perpétuo de cripto depois que o preço superou a máxima dos últimos 20 minutos. O backtest mostrou uma execução a $64,210. Esse número aparecia nos dados, o sinal tinha o horário correto e a ordem simulada chegou na barra seguinte. Quase chamamos o resultado de confiável.

Então alinhamos os IDs dos instrumentos. O sinal vinha do perpétuo BTCUSDT. A execução vinha de um contrato inverso BTCUSD. Ambos eram negociados perto de $64,210, e ambos eram mercados líquidos. Ainda assim, eram livros de ofertas diferentes, com preços, tamanhos de tick, profundidade e tabelas de taxas distintos. O backtest havia costurado um mercado ao qual nenhum trader poderia ter acesso.

A estratégia em si não tinha nada de especial: entrar no fechamento acima da máxima móvel, sair no fechamento abaixo da mínima móvel e dimensionar cada posição para um risco fixo em dólares. O problema só apareceu quando fizemos uma pergunta mais precisa do que “quanto valia o BTC?”. Perguntamos: “o que esta ordem poderia ter comprado neste contrato específico naquele momento?”

O gráfico já era um composto antes mesmo de a estratégia rodar

Nosso feed de pesquisa facilitava a comparação entre plataformas. Ele normalizava os símbolos e exibia uma série de preços consolidada. Isso era prático para observar o mercado, mas servia mal como referência de execução. Um composto pode mostrar o melhor preço entre várias exchanges, embora a estratégia só possa enviar uma ordem para uma delas.

No rompimento, a máxima da barra consolidada era $64,205. A última negociação do próprio contrato selecionado já havia chegado a $64,218. Enquanto isso, uma cotação em cache do contrato inverso ainda mostrava uma oferta de venda a $64,210. O simulador usou o rompimento de uma série e a oferta atraente de outra. Cada valor era real. A combinação dos dois era fictícia.

EntradaO que o backtest usouO que a ordem exigia
Máxima do rompimentoPreço consolidado do BTCHistórico de preços do contrato selecionado
Referência de entradaOferta de venda em cache do contrato inversoOferta de venda atualizada do instrumento negociado
Quantidade executadaTamanho solicitado da posiçãoQuantidade disponível em cada nível de preço

Uma linha numa tabela de dados de mercado pode parecer completa, embora seus campos descrevam mercados diferentes. Um alias de símbolo não prova que dois instrumentos compartilham o mesmo livro. O ID do contrato, a plataforma, a moeda de cotação e o horário precisam acompanhar o sinal durante a geração e a execução.

Reproduzimos a ordem contra o livro de ofertas

Reexecutamos a entrada usando a melhor oferta de venda do perpétuo selecionado e as atualizações do livro de ofertas disponíveis no momento da decisão. A cotação estava atualizada, mas havia apenas 0.18 BTC no melhor nível. Nossa ordem simulada era de 0.50 BTC. Os 0.32 BTC restantes teriam consumido ofertas de venda mais altas.

$64,218melhor oferta de venda quando a ordem chegou
0.18 BTCdisponível naquela oferta
$64,231preço médio ponderado por volume na reprodução

A entrada ajustada ficou $21 pior por BTC do que o preço registrado, antes das taxas. Essa é uma diferença pequena em uma única operação. No teste todo, porém, a estratégia obteve a maior parte do lucro bruto em alguns poucos rompimentos rápidos. Reproduzir essas entradas contra os livros corretos reduziu o resultado bruto em 31%; as taxas taker e o impacto no mercado reduziram ainda mais o resultado.

Também encontramos dois casos em que a cotação do melhor nível chegou depois do momento de decisão do sinal. Um backtest que faz a junção pelo horário mais próximo pode selecionar silenciosamente uma atualização futura. Agora fazemos a junção para trás: a cotação precisa ter sido observada até o envio da ordem, e registramos sua idade. Se a cotação utilizável mais recente estiver velha demais, o simulador marca a ordem como não executável ou aplica uma regra explícita para dados desatualizados.

O que é preciso para um preço ser negociável

O fechamento de uma barra é útil para calcular um sinal. Ele não comprova que uma ordem específica poderia ter sido executada naquele preço. Para isso, o preço precisa corresponder exatamente ao instrumento e à plataforma, estar disponível no momento em que a ordem chega e ter quantidade suficiente no lado oposto para o tamanho solicitado. Quando os dados não permitem responder a essas perguntas, o resultado honesto é uma faixa ou uma execução ausente, não um preço exato inventado.

Mantivemos a série consolidada para dar contexto ao mercado e a removemos do fluxo de execução. Agora os sinais usam o histórico do próprio contrato selecionado; as ordens são reproduzidas contra o livro desse contrato, com as taxas e o tamanho aplicados depois do cálculo da execução. Um pouco mais de infraestrutura e uma curva de patrimônio bem menos bonita.

Aquele rompimento aconteceu. O backtest simplesmente deu à estratégia um mercado melhor do que aquele que ela havia selecionado.

futuros de criptolivros de ofertasdados de mercadobacktestingexecução
← Todos os artigos