É provável que o sinal de entrada seja o elemento menos importante do seu backtest. Posso pegar uma regra de momentum medíocre, deixar todos os horários de entrada e saída intactos, mudar apenas a função que decide quantos contratos manter e levar o Sharpe líquido de 0.41 para 0.71 e o drawdown máximo de 31% para 13%. Mesmas operações. Mesmas execuções. Estratégia diferente.
Essa afirmação incomoda as pessoas, e deveria mesmo, porque sugere que a maior parte do tempo gasto ajustando períodos de lookback e limites de filtros é dedicada ao fator menos importante. Então vou mostrar os resultados reais e, depois, dar razão aos críticos, porque existe uma versão errada desse argumento e vale saber qual versão estou defendendo.
1 sinal, 6 maneiras de manter a posição
O sinal: contrato perpétuo ETHUSDT na Binance USDⓈ-M, candles de 1 hora, comprado quando a EMA de 12 horas está acima da EMA de 96 horas, zerado nos demais casos, sem posições vendidas. De julho de 2022 a junho de 2026. 431 operações completas. Taxas taker nos dois lados a 5.0 bps, funding pago ou recebido a cada 8 horas sobre a posição real, slippage modelado com base na profundidade do topo do livro. É um sinal deliberadamente sem graça — escolhi esse porque ninguém o defenderia, o que torna o teste bem limpo.
Todas as linhas abaixo usam horários de candle de entrada e saída idênticos. A única diferença é a função de dimensionamento.
| Regra de dimensionamento | Sharpe líquido | DD máx. | Notional negociado/ano (× posição média) | Custos como % do PnL bruto | Alavancagem máxima |
|---|---|---|---|---|---|
| Notional fixo de $10k | 0.41 | 18.2% | 246× | 14% | 1.0× |
| Fração fixa, 100% do patrimônio | 0.44 | 30.8% | 251× | 15% | 1.0× |
| Volatilidade realizada inversa de 20 dias | 0.68 | 14.1% | 690× | 29% | 4.4× |
| Meta de volatilidade anualizada de 20%, rebalanceamento por hora, sem limite | 0.71 | 12.9% | 1,180× | 41% | 6.3× |
| Meta de volatilidade de 20%, faixa de não negociação de 20%, limite de alavancagem de 3× | 0.66 | 15.3% | 402× | 19% | 3.0× |
| Meio Kelly com média/variância móvel de 60 dias | 0.52 | 24.6% | 830× | 33% | 8.1× |
Observe a diferença. Entre as linhas de pior e melhor resultado, há uma diferença relativa de 73% no Sharpe e um fator de 2.4 no drawdown. Agora encontre um parâmetro de sinal de entrada neste conjunto de dados que mova o Sharpe em 0.30 sem também indicar um overfitting óbvio. Eu procurei. O período do par de EMA muda o valor em cerca de 0.12 em toda a grade plausível, e a maior parte desse movimento é ruído que não se sustenta fora da amostra.
Por que o ajuste inverso à volatilidade parece tão bom, e quanto disso é real
O mecanismo não é misterioso. Com notional fixo, o tamanho da posição não tem correlação com a volatilidade realizada, o que significa que o risco em dólares por operação é proporcional à volatilidade daquela semana. No ETH, durante esse período, a volatilidade realizada de 20 dias variou de 31% a 118% anualizada. A estratégia com notional fixo assumiu 3.8× mais risco em dólares em março de 2024 do que em julho de 2023, não porque o sinal estivesse mais confiante, mas porque o mercado estava mais agitado. Quase todo o drawdown se concentra no quintil de maior volatilidade. O dimensionamento inverso à volatilidade elimina essa relação, e eliminá-la é uma melhora real no perfil da série de retornos.
Mas parte do ganho de Sharpe é um artefato de medição, e, se você não separar as duas coisas, tomará decisões ruins depois. O Sharpe divide pelo desvio padrão dos retornos. O ajuste à volatilidade é, por definição, uma operação que estabiliza o desvio padrão dos retornos. Você está otimizando diretamente o denominador. Uma regra que ajusta as posições para atingir uma volatilidade ex ante constante melhora o Sharpe em quase qualquer série de retornos com agrupamento de volatilidade, inclusive séries sem vantagem alguma. Verifiquei isso com sinais embaralhados: randomizar os horários de entrada, manter o ajuste à meta de volatilidade, e o Sharpe ainda melhora cerca de 0.06 em relação ao notional fixo sobre uma base de média zero. É pouco, mas diferente de zero, e decorre puramente da mecânica.
Por isso, quando comparo regras de dimensionamento internamente, Sharpe nunca é o único número na planilha. Quero Calmar, quero PnL líquido por unidade de notional médio alocado e quero a decomposição do bruto ao líquido, porque esses 3 fatores juntos são muito mais difíceis de manipular com um truque no denominador.
A estimativa de volatilidade é um modelo e vaza dados como um
A causa mais comum de um bom resultado de dimensionamento ser falso: a estimativa de volatilidade usa informações do candle cujo tamanho de posição está calculando. Se sua série de volatilidade for calculada com uma janela centralizada, com o `rolling().std()` padrão do pandas aplicado após uma reamostragem que inclui o candle parcial atual, ou com uma padronização da amostra inteira, há vazamento de dados. É sutil porque a volatilidade é persistente, então o vazamento é pequeno em cada linha e a curva de patrimônio ainda parece plausível. Só fica um pouco suave demais justamente nas semanas que importam.
Nossos agentes verificam 4 aspectos de cada regra de dimensionamento antes de promover um resultado para a fila de paper trading:
- Disponibilidade no momento da decisão. O tamanho usado no candle que abre às 14:00 precisa ser calculável com dados cujo horário de fechamento seja ≤ 13:59:59.999. Verificamos isso recalculando a série de tamanhos com um frame truncado em uma amostra aleatória de 200 pontos de decisão e comparando os resultados.
- O período de lookback do estimador é um parâmetro real. Uma janela de volatilidade de 20 dias e uma de 60 dias são duas estratégias diferentes. O lookback entra na grade walk-forward junto com todo o resto; se o resultado só funciona com um período específico, isso revela fragilidade.
- Trajetória da alavancagem, não apenas o pico. Exiba a distribuição completa da alavancagem bruta. O resultado sem limite com ajuste à volatilidade acima passou 4% das horas acima de 5×, algo que nunca aparece numa tabela-resumo e determina completamente se a estratégia pode ser implementada.
- Sensibilidade do dimensionamento como teste de robustez. Se o Sharpe desaba quando você muda a meta de volatilidade de 20% para 25%, a estratégia não está ajustada à volatilidade; ela está ajustada à alavancagem, e você encontrou sua vantagem escolhendo um número.
O limite de alavancagem não é um enfeite de gestão de risco, faz parte da definição da estratégia. Os níveis da Binance para ETHUSDT reduzem a alavancagem máxima conforme o notional da posição cresce, e a taxa de margem de manutenção também aumenta. Um backtest que deixa a regra de ajuste à volatilidade chegar a 6.3× com notional de $400k está descrevendo uma posição que a plataforma não permitirá manter com essa margem. A linha com limite na tabela custa 0.05 de Sharpe e é a única das duas que descreve algo real.
É no rebalanceamento que o dinheiro vai embora
Repare na coluna de custos. O rebalanceamento por hora para atingir a meta de volatilidade trouxe o melhor Sharpe de manchete e também entregou 41% do PnL bruto à corretora. Isso equivale a negociar por ano 1,180× o notional médio da posição, com 5 bps por lado, além do spread e do impacto. A solução ingênua é rebalancear menos vezes, seguindo um calendário. A solução melhor é uma faixa de não negociação: só redimensionar quando a posição atual se desviar da meta além de certo limite.
Uma faixa de 20% reduziu o notional negociado anual de 1,180× para 402× — uma redução de 66% — e custou 0.05 de Sharpe. Já testei isso em 8 sinais e o padrão se repete: faixas entre 15% e 25% recuperam a maior parte do benefício de controle de risco com um terço do giro, e qualquer valor abaixo de 10% significa pagar taxas por uma precisão cosmética numa quantidade que, de todo modo, você estima com uma janela de 20 dias. Não dá para rebalancear com 3 casas decimais usando um número com erro padrão de 15%.
Em fevereiro, tivemos uma execução em que o relatório escrito por um agente atribuiu uma melhora de 0.22 no Sharpe ao "filtro de entrada aprimorado". A diferença era uma linha no módulo de dimensionamento. O filtro não havia mudado. Agora faço o relatório exibir no topo o hash da configuração de dimensionamento, porque atribuir corretamente os resultados exige disciplina e os modelos gostam tanto quanto qualquer pessoa de contar uma história bem arrumada.
O que o paper trading faz com sua regra de dimensionamento
É aqui que a diferença entre backtest e paper trading fica maior, e o motivo é basicamente aritmético. O dimensionamento que responde à volatilidade faz o tamanho da posição oscilar por um fator de 4 a 8 ao longo da amostra. As duas pontas desse intervalo esbarram em restrições da plataforma que o backtest nunca modelou.
Na ponta menor: incremento de quantidade e notional mínimo. O contrato perpétuo ETHUSDT tem incremento de quantidade de 0.001 e mínimo de $5. Se o tamanho da posição no regime de baixa volatilidade for 0.0004 ETH, o backtest mantém a posição e o paper trading não mantém nada. Parece um caso extremo, até você perceber que uma regra de ajuste à volatilidade coloca seus tamanhos menores nos mercados mais calmos, que, para um sinal de tendência, frequentemente são justamente onde estão as boas entradas. Na ponta maior: limites de posição, níveis de margem e o fato de que uma posição de 6× exige disciplina de margem isolada para a qual você não fez backtest com um modelo de liquidação.
Detectamos um caso em que a curva de patrimônio do paper trading acompanhou o backtest com diferença de até 3% durante 6 semanas e depois divergiu bastante. A causa foi o arredondamento: truncamento com `int()` em vez de arredondar para o incremento, no dimensionador de ordens, aplicado a posições com média de 1.4 incrementos. O backtest dimensionava em espaço contínuo, e o dimensionador em produção perdia 20-30% da posição pretendida em cada operação pequena. Nada de modelo de execução exótico, nenhuma história sobre latência. Truncamento.
Onde os críticos têm razão
3 objeções procedem, e não quero ignorá-las.
Primeiro, e mais importante: o dimensionamento aloca a vantagem, não consegue criá-la. Se a expectativa bruta do seu sinal for zero ou negativa após taxas e funding realistas, todas as regras da tabela perdem dinheiro — as sofisticadas só perdem com um perfil de variância mais bonito. Escolhi um sinal com uma vantagem líquida pequena, mas positiva, nesse período. Aplique as mesmas 6 regras a um sinal com −1.2 bps líquidos por operação e a classificação se mantém, mas o patrimônio final fica abaixo do inicial em todos os casos. O dimensionamento é um multiplicador de alguma coisa. Você ainda precisa ter essa coisa.
Segundo, o ajuste à volatilidade tem um modo de falha real e bem documentado: reduz a alavancagem no fundo de uma liquidação rápida e volta a aumentá-la depois da recuperação brusca. Numa reversão acentuada em V, o notional fixo vence, às vezes com folga. A queda das ações em março de 2020 e a liquidação do mercado cripto em agosto de 2024 penalizaram o dimensionamento responsivo à volatilidade na perna de recuperação. Meu período de 4 anos de ETH contém, por acaso, mais períodos de volatilidade agrupada e movimento gradual do que reversões bruscas em V, o que favorece as linhas de ajuste inverso à volatilidade. Um período diferente inverte parte da ordem, e, se eu tivesse começado com uma tabela de 2020, estaria defendendo uma versão mais fraca desse argumento.
Terceiro, a regra de dimensionamento está tão sujeita a overfitting quanto qualquer outra coisa. O meio Kelly com estimativas móveis é o sinal de alerta na minha tabela: parece sofisticado, tem fundamento teórico e produziu o segundo pior drawdown, porque a estimativa móvel da média de uma série de retornos ruidosa é lixo, e Kelly é extremamente sensível a ela. Qualquer regra de dimensionamento que use uma estimativa de retorno esperado como entrada herda o erro dessa estimativa, amplificado. Regras que usam apenas uma estimativa de variância se comportam muito melhor, porque a variância é o único momento estatístico que você consegue estimar de fato com 4 anos de dados por hora.
O que eu levaria disso tudo: quando um resultado de backtest surpreender você, confira o módulo de dimensionamento antes de procurar alguma sacada no sinal. E, ao reportar um Sharpe, informe junto a trajetória da alavancagem e a decomposição dos custos, porque um número tão dependente de uma decisão de dimensionamento não é uma propriedade do sinal.
← Todos os artigos
