À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.
| Entrada | O que o backtest usou | O que a ordem exigia |
|---|---|---|
| Máxima do rompimento | Preço consolidado do BTC | Histórico de preços do contrato selecionado |
| Referência de entrada | Oferta de venda em cache do contrato inverso | Oferta de venda atualizada do instrumento negociado |
| Quantidade executada | Tamanho solicitado da posição | Quantidade 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.
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.
← Todos os artigos


