5 de Setembro de 2026 · risco

Seu backtest nunca foi liquidado: margem, preço de marcação e o nível de alavancagem que você ignorou

Seu backtest nunca foi liquidado: margem, preço de marcação e o nível de alavancagem que você ignorou

No mês passado, uma estratégia gerada produziu uma curva de patrimônio com um drawdown de 63%. Profundo, feio e, depois, uma recuperação limpa nas 6 semanas seguintes — o tipo de formato que faz um pesquisador olhar com atenção e concluir que dá para suportar reduzindo o tamanho das posições. Rodei a estratégia novamente em um motor de margem que conhece os níveis de margem de manutenção. A conta foi liquidada no dia 41, no meio daquele drawdown, e tudo à direita do dia 41 era ficção.

Essa é a classe de erro de backtest mais cara que conheço, porque não distorce seus retornos em alguns pontos-base. Ela remove da simulação um estado absorvente. Uma estratégia que pode chegar a zero e uma que não pode são estratégias diferentes, e um backtest que nunca verifica a margem não consegue dizer qual delas você tem.

Vejo 3 maneiras de fazer isso errado.

Erro 1: tratar a alavancagem como um número pelo qual multiplicar os retornos

O formato mais comum. Você calcula uma série de retornos a partir dos sinais, decide operar com alavancagem de 10x e multiplica. Às vezes é um pouco mais sofisticado — o tamanho da posição é equity * leverage / price —, mas o estado da conta continua sendo apenas um escalar que sobe e desce. Sem saldo de margem, sem limite de valor nocional, sem condição de falha.

O estrago é sutil, por isso passa pelas revisões. O Sharpe é invariante à escala, então seu número principal não muda quando você altera a alavancagem de 3x para 30x, e o pesquisador conclui que a alavancagem é um controle gratuito para trocar volatilidade por retorno. O drawdown máximo escala linearmente e fica abaixo de 100% por acidente aritmético, porque uma série de retornos multiplicados se aproxima de zero assintoticamente e nunca o ultrapassa. Multiplique um dia de -9% por 12 e, na versão correta, você tem -108%; na ingênua, tem "-108%, mas a curva de patrimônio continua positiva", dependendo de ter composto ou somado os retornos. Já vi os dois casos.

O que falta é entender que a alavancagem não é aplicada aos seus retornos. Ela é aplicada à sua garantia, e a garantia é uma quantidade finita que a corretora monitora a cada segundo. Quando ela cai abaixo do requisito de manutenção, a posição deixa de ser sua.

O sinal: se sua simulação não consegue produzir uma perda total em nenhum nível de alavancagem, ela não está modelando alavancagem.

Erro 2: calcular o preço de liquidação apenas com base na alavancagem

O segundo nível de sofisticação acrescenta uma verificação de liquidação, geralmente assim: com alavancagem de 20x, um movimento adverso de 5% elimina a margem; então, liquide em preço de entrada × 0.95 para uma posição comprada. Simples, intuitivo e errado em 4 aspectos diferentes ao mesmo tempo.

As corretoras de perpétuos não usam sua configuração de alavancagem para decidir quando a posição será encerrada. Elas usam uma taxa de margem de manutenção que aumenta conforme o valor nocional da posição, seguindo uma tabela por níveis. Formato aproximado para BTCUSDT USDⓈ-M, sujeito a alterações conforme as corretoras revisam os níveis:

Valor nocional da posição (USDT)Taxa de margem de manutençãoAlavancagem máxima
0 – 50,0000.40%125x
50,000 – 600,0000.50%100x
600,000 – 3,000,0001.00%50x
3,000,000 – 12,000,0002.50%20x
12,000,000 – 70,000,0005.00%10x

Assim, o movimento adverso que você consegue absorver em uma posição comprada isolada é aproximadamente 1/L − MMR, e não 1/L. Com alavancagem de 20x no segundo nível, são 5% − 0.5% = 4.5%. Meio por cento parece arredondamento. Com BTC a 84,000, são 420 dólares de variação no preço; em uma hora volátil, 420 dólares fazem a diferença entre ser tirado por um pavio e continuar na posição. Cada pavio vira cara ou coroa, e você enviesou todos a seu favor.

Depois vêm as taxas. A taxa taker de entrada é descontada da sua margem no instante em que sua ordem é executada: 0.045% sobre um valor nocional de 500,000 são 225 USDT debitados de um saldo de margem de 25,000, o que desloca o preço de liquidação antes que a posição sequer tenha feito qualquer coisa. O funding faz o mesmo continuamente e, sobre o valor nocional alavancado, pesa muito mais do que os pesquisadores esperam:

4.55%movimento adverso efetivo para liquidar com alavancagem de 20x, incluindo a taxa de entrada
0.60%custo diário do funding sobre a margem com alavancagem de 20x, a 0.01%/8h
18%da margem consumida em um mês sem variação

Uma posição que fica parada por 30 dias — sem movimento adverso, sem operações — consumiu quase um quinto da garantia e deixou seu preço de liquidação consideravelmente mais perto. O terceiro e o quarto aspectos do erro: os níveis mudam conforme você aumenta a posição, então uma posição que começa no nível de 0.5% e é aumentada com novas entradas até chegar ao nível de 1.0% tem um preço de liquidação pior que o calculado na entrada; e a margem cruzada agrupa as garantias entre posições, então a sobrevivência da sua posição comprada em BTC depende do que sua posição vendida em ETH está fazendo. Se você simula margem cruzada como um conjunto de posições isoladas e independentes, está modelando ao contrário a estrutura de correlação da sua própria conta.

Erro 3: resolver a liquidação usando o preço errado, no momento errado e com a execução errada

Digamos que você acertou o nível de disparo. Agora: qual preço cruza esse nível, quando você verifica e a que preço sua posição é executada?

A liquidação é acionada pelo preço de marcação, um índice de vários mercados à vista com um componente de base suavizado, projetado deliberadamente para resistir a um pavio em uma única corretora. Seu stop-loss, dependendo de como foi configurado, provavelmente é acionado pelo último preço negociado. Esses 2 valores divergem exatamente quando isso mais importa. Durante uma cascata, o último preço do perpétuo pode se descolar do preço de marcação em 1–2% por dezenas de segundos. Um backtest que calcula tanto o stop quanto a liquidação usando a mínima da mesma OHLCV está modelando uma corretora que não existe.

Os 2 erros aparecem aqui, e um não anula o outro. Usando o último preço, você liquida em pavios que a corretora ignorou. Usando o preço de marcação, você deixa passar o caso em que o próprio preço de marcação se moveu — uma descolagem do índice em uma corretora à vista é uma forma real de ser liquidado a um preço que nunca foi registrado no perpétuo em que você operava.

Depois vem a execução. Motores ingênuos encerram a posição no preço de liquidação e contabilizam a perda como se fosse um stop. O que realmente acontece: o motor de liquidação assume a posição pelo preço de falência — o nível em que sua margem é exatamente zero, pior que o nível de disparo — e cobra também uma taxa de compensação da liquidação, que varia conforme o nível e fica perto de 1% do valor nocional nos níveis inferiores. Com alavancagem de 20x, 1% do valor nocional equivale a 20% da margem restante. Se o motor executar abaixo do preço de falência, o fundo de seguro cobre a diferença; em algumas corretoras, se o fundo se esgotar, as perdas socializadas atingem o lado lucrativo do livro. Sua perda realizada não é o drawdown até o preço de liquidação. É maior, e o excedente é máximo justamente nos dias em que o livro estava raso o suficiente para piorar a execução.

E a questão do momento, que surge com a mecânica intrabar, importa aqui mais do que nunca. Se uma barra de 1-minute inclui tanto seu take-profit quanto seu nível de liquidação, um backtest que verifica as saídas antes da margem vai contabilizar o lucro sem hesitar. A corretora verifica a margem a cada atualização do preço de marcação, aproximadamente uma vez por segundo, antes de qualquer outra coisa que você quisesse que acontecesse.

O que o motor precisa acompanhar

Nada disso precisa ser exótico. Precisa manter estado. A conta é um objeto com saldo, não uma série de retornos, e a cada barra ela é atualizada na ordem em que a corretora faria isso:

  1. Saldo da carteira e PnL não realizado, separadamente. A razão de margem é a margem de manutenção dividida pelo saldo de margem, que inclui o PnL não realizado. Confundir os dois faz uma posição perdedora parecer ter mais garantia do que realmente tem.
  2. A tabela de níveis de cada símbolo, com versões por data. Os níveis são revisados. Um backtest de 2023 executado com os níveis de 2026 tem um viés de antecipação sutil — geralmente favorável, já que as corretoras em geral flexibilizaram os requisitos para os principais ativos ao longo do tempo.
  3. Uma série de preços de marcação, não apenas klines. Se você não consegue obter o histórico de preços de marcação, informe isso nos resultados e use uma estimativa conservadora. Nunca substitua silenciosamente pelo último preço.
  4. A verificação de margem vem primeiro na ordem de eventos da barra, antes de stops, alvos, sinais ou rebalanceamentos.
  5. Execuções pelo preço de falência mais a taxa de compensação, usando a taxa da mesma linha da tabela de níveis que contém a MMR.
  6. Um estado terminal absorvente. Quando o patrimônio chega a zero, a execução termina. Sem redefinir a base, sem "presumir que o operador faz um aporte", sem continuar a série com um novo valor nocional.

Esse último ponto é o que mais gera discussão. Sempre tem alguém que observa que uma mesa de verdade depositaria mais garantia, então encerrar a simulação é rigoroso demais. Talvez. Mas "essa estratégia funciona se você continuar colocando dinheiro depois que ela quebra" é uma afirmação que merece ser apresentada com essas palavras e testada de propósito, com os aportes como entrada explícita, em vez de ser embutida como padrão. Quando você a escreve com clareza, a maioria das pessoas percebe que não era isso que queria dizer.

O resultado prático de tudo isso: ao executar a mesma estratégia no papel contra a corretora ao vivo, a razão de margem informada pela corretora e a calculada pelo seu simulador devem acompanhar uma à outra com diferença de 1 ou 2 pontos-base ao longo do dia. Dá para verificar essa concordância a cada minuto, em todas as posições abertas, sem custo. É o teste de paridade mais barato de toda a pilha, e quase ninguém o executa — e, quando os 2 valores divergem, a corretora está certa e você tem um erro que vale a pena encontrar antes que o drawdown o encontre.

futuros perpétuosalavancagemliquidaçãomotor de margembacktesting
← Todos os artigos