Às 08:00 UTC de uma terça-feira, uma plataforma de cripto mudou o tick size de um contrato perpétuo de preço intermediário. Nossa estratégia de basis não percebeu. O sinal continuou vendo o mesmo spread entre spot e futuros, os limites de risco não mudaram e o backtest continuou apresentando os mesmos resultados.
O paper trading percebeu. O adaptador de ordens arredondou para baixo uma ordem limite de compra, até o preço permitido mais próximo. Com isso, a ordem ficou um tick abaixo do nível modelado pelo backtest. O mercado tocou o preço antigo, a ordem simulada foi executada e a ordem no paper trading ficou sem execução. Na hora do almoço, o inventário da estratégia estava desequilibrado.
O incidente parecia um pequeno erro de arredondamento. Na verdade, era um problema na fronteira do modelo: a estratégia conhecia os preços, mas o backtest não conhecia a grade de preços da plataforma.
Operávamos com um sinal simples de basis: comprávamos spot e vendíamos um perpétuo quando o prêmio dos futuros ultrapassava um limite. As ordens eram passivas porque a vantagem esperada de basis era pequena. Bastavam alguns ticks para determinar se a entrada renderia o suficiente para cobrir as taxas e a saída posterior.
O que mudou com a mudança no tick size?
Antes da atualização, o perpétuo aceitava preços em incrementos de 0.01. Depois, passou a aceitar incrementos de 0.05 na faixa de preço relevante. O sinal calculou um preço-alvo de venda de 42,318.03, válido pela regra antiga. Pela nova regra, esse preço era inválido.
A corretora rejeitava preços inválidos, mas nosso adaptador tinha um mecanismo alternativo: arredondava a venda para baixo, até 42,318.00. Esse preço também era inválido. Um segundo mecanismo arredondava novamente, dessa vez para 42,318.05, que era válido, mas menos agressivo para quem vende. A ordem já não podia ser vendida pelo preço modelado. O caminho do código havia sido escrito para outro mercado e, sem alarde, transformava uma rejeição em uma ordem com preço reajustado.
Essa única ordem envolvia duas questões distintas. Primeiro, que preço a plataforma pode aceitar? Segundo, como a estratégia deve reagir quando o preço desejado não está na grade? A corretora responde à primeira. A estratégia ou a política de execução precisa responder à segunda.
| Intenção da ordem | Regra da grade | Direção típica do arredondamento | O que pode mudar |
|---|---|---|---|
| Ordem limite de compra | O preço deve ser múltiplo do tick | Para baixo, para ficar no limite ou abaixo dele | Menor probabilidade de execução |
| Ordem limite de venda | O preço deve ser múltiplo do tick | Para cima, para ficar no limite ou acima dele | Menor probabilidade de execução |
| Ordem limite executável | Também deve respeitar os limites de preço | Depende do preço máximo aceitável | Se cruza o spread |
Não existe uma regra de arredondamento correta para todos os casos. Arredondar uma compra para baixo preserva o limite de preço do comprador, mas pode reduzir a chance de execução. Arredondar para cima pode tornar a ordem executável no mercado, alterando as taxas e o impacto. Para nossa entrada passiva de basis, mudar o preço da ordem sem avisar foi o comportamento errado. A estratégia havia escolhido um alvo; o adaptador mudou sua economia.
Por que o backtest ainda parecia saudável?
Nosso simulador histórico de ordens tratava os preços limite como números contínuos. Se a mínima do candle atingia o preço de compra, ou a máxima atingia o preço de venda, contabilizava uma execução. Essa já é uma aproximação generosa para uma ordem passiva, pois um negócio no preço limite não diz nada sobre a posição na fila. Mas a mudança de tick tornou o problema ainda mais básico: aquela ordem não poderia ter existido naquele preço.
Reproduzimos as mesmas decisões aplicando a nova grade a partir do horário em que entrou em vigor. Algumas execuções desapareceram. Algumas ordens foram arredondadas para preços que cruzavam o spread e passaram a pagar taxas de taker em vez de maker. Como resultado, a trajetória da posição divergiu, e as proteções e saídas posteriores também mudaram. Uma regra que parecia metadado havia alterado toda a sequência de operações.
E a atualização não foi uma surpresa escondida no gráfico. A plataforma havia publicado uma mudança nas regras do instrumento com um horário de vigência. Armazenávamos os dados de mercado com cuidado, mas os metadados dos instrumentos ficavam em um cache atualizado na inicialização. O backtest usava as regras de hoje para todas as datas históricas; o paper trading usava regras desatualizadas até o processo ser reiniciado. Nenhum dos ambientes representava o que a plataforma permitia em cada momento.
Como um backtest deve modelar mudanças no tick size?
Versione as regras dos instrumentos com intervalos de validade, como qualquer outro dado disponível em determinado momento. No mínimo, mantenha o horário de vigência e os valores necessários para validar uma ordem: tick size, incremento de quantidade, quantidade mínima e quaisquer faixas de preço. O simulador deve carregar o conjunto de regras disponível no momento da decisão simulada.
Depois, deixe explícito o tratamento das ordens. Se um preço-alvo for inválido, rejeite-o, arredonde-o de acordo com uma política documentada ou recalcule o alvo na grade. Registre o que aconteceu. Um backtest que corrige automaticamente todas as ordens pode ser útil para estimar uma política de execução específica, mas não deve disfarçar essa política como uma execução na corretora.
Para ordens passivas, um preço válido na grade é apenas a primeira condição para uma execução. Ainda é preciso modelar se o mercado negociou além do seu preço, a fila à sua frente, os cancelamentos e a faixa de taxas que você teria obtido.
Adicionamos duas verificações. Uma aplica as regras do instrumento vigentes naquele momento a cada ordem gerada e falha de forma explícita se encontrar preços ou quantidades inválidos. A outra compara a ordem final normalizada do adaptador de backtest com a do adaptador de paper trading: lado, preço, quantidade, validade da ordem e intenção de taxa. Se houver divergência, a execução não é considerada comparável.
Depois disso, reproduzimos a mudança de terça-feira. O backtest deixou de contabilizar execuções a 42,318.03 depois da atualização da grade. O paper trading e a simulação passaram a tomar a mesma decisão para cada preço-alvo inválido, mesmo quando a decisão era não enviar a ordem.
O sinal não havia falhado. Suas premissas sobre o instrumento que podia negociar estavam desatualizadas. Uma estratégia pode sobreviver a um novo tick size, desde que o sistema de pesquisa trate as regras da plataforma como parte do mercado que está simulando.
← Todos os artigos


