A Noite em que Meu Backtest Mentiu para Mim
Certa noite, um backtest me disse que eu havia transformado um saldo inicial modesto em 2.792 trilhões de wons — mais do que a produção anual da maioria das economias do planeta. Eu fiquei encarando aquilo. Por alguns minutos, alguma parte silenciosa e gananciosa de mim foi procurar razões pelas quais aquilo poderia ser real.
Não era real. Era um bug. E o bug acabou sendo mais instrutivo do que qualquer estratégia vencedora poderia ter sido, porque era um bug sobre a única coisa que um backtest existe para respeitar: a realidade.
O número que deveria ter me assustado
Eu estava rodando uma busca de parâmetros — milhares de configurações, cada uma reproduzida ao longo de dados históricos e ranqueada pelo resultado final. A maioria voltou comum. Uma voltou insana.
Insano-a-seu-favor é o resultado mais perigoso que um sistema pode produzir, porque ele chega usando a máscara do sucesso. Uma rodada perdedora faz você depurar. Uma rodada que “funciona” faz você comemorar. O escrutínio é assimétrico, e corre exatamente na direção errada: interrogamos os resultados de que não gostamos e deixamos passar aqueles que amamos. Eu quase deixei esse passar.
O instinto que tive que aprender — do jeito difícil — é o inverso. Quanto mais espetacular o resultado, mais certo é que algo está quebrado. Os mercados não entregam a um construtor de primeira viagem o PIB de um país pequeno. Se a sua simulação diz que entregam, a simulação está mentindo, e o seu único trabalho é descobrir como.
Erro um: apostar a conta inteira, toda vez
A primeira falha estava no dimensionamento de posição. Cada trade era dimensionado como essencialmente a conta inteira, e os lucros compunham diretamente de volta na aposta seguinte. No momento em que você faz isso, você para de modelar trading e começa a modelar uma série geométrica. Uma sequência longa o suficiente de resultados até levemente favoráveis — ou puro ruído que por acaso quebra do lado certo com frequência suficiente — não cresce, ela detona. A matemática foge da realidade e nunca olha para trás.
É isso que é sedutor num backtest que compõe totalmente: ele não precisa de uma boa estratégia para produzir um número excelente. Ele só precisa de trades suficientes e de um simulador generoso o bastante para deixar a aposta continuar correndo. A composição transforma uma inclinação estatística tênue e sem sentido numa curva exponencial, e uma curva exponencial ao longo de milhares de trades produz um número que parece destino e não significa nada. O saldo astronômico não era evidência de uma vantagem. Era evidência de exposição da conta inteira aplicada à aleatoriedade.
Erro dois: um simulador que não conseguia morrer
A segunda falha era pior, porque era filosófica. Meu backtester não tinha barreira absorvente — nenhum ponto no qual a conta estivesse simplesmente morta. Então, quando uma sequência de trades ruins derrubou o saldo em 99,99%, a simulação não parou. Ela manteve o cadáver na mesa e o deixou continuar fazendo trades. E a partir daquele saldo quase zero, uma sequência de sorte “ressuscitou” a conta e a carregou de volta a uma altura absurda.
Numa conta real, essa recuperação é impossível. Zero é zero. Um saldo liquidado não ganha um segundo ato — você está fora do jogo, permanentemente, e nenhuma sequência vencedora futura pode voltar no tempo para te salvar. Ao deixar uma conta falida continuar fazendo trades, meu código havia silenciosamente apagado a regra mais importante de todo o trading: que a ruína é definitiva. Tudo o que veio depois disso — toda a fantasia — seguiu logicamente de uma única restrição faltante. A simulação não estava modelando uma estratégia que sobreviveu. Estava modelando uma estratégia que havia recebido permissão para morrer e, então, fora proibida de permanecer morta.
O otimizador estava caçando o meu ponto cego
Aqui está a parte que levei mais tempo para entender: a busca de parâmetros não tropeçou naquela configuração absurda por acidente. Ela foi procurá-la.
Uma busca sobre milhares de configurações não é um observador neutro. É um adversário que otimiza para qualquer métrica que você lhe entregar. Se a sua métrica é “saldo final” e o seu simulador tem um ponto fraco — um lugar onde coisas irrealistas são silenciosamente permitidas de acontecer — a busca vai encontrar esse ponto fraco e se apoiar nele com todo o seu peso. Ela não recompensa a melhor estratégia. Ela recompensa a configuração que mais eficientemente explora a brecha entre a sua simulação e a realidade.
Então o resultado de trilhões de wons não foi um bug azarado surgindo ao acaso. Foi a consequência previsível de apontar um otimizador poderoso para um simulador que podia ser enganado. Toda fraqueza que você deixa num backtest se torna, sob busca, uma estratégia. O otimizador é uma máquina para descobrir precisamente as suposições que você esqueceu de impor.
O sinal revelador
Junte esses erros e você obtém uma máquina que fabrica milagres. Ela pode sobreviver a qualquer coisa, então sobrevive a tudo; ela aposta tudo, então quando sobrevive, sobrevive enormemente; e uma busca está silenciosamente ajustando-a para fazer ambos o mais intensamente possível. O resultado não é o desempenho de uma estratégia. É a forma do próprio bug, desenhada em números muito grandes.
É por isso que “sobrevivência primeiro” não é um slogan. Um backtest que não pode quebrar, dadas configurações suficientes para vasculhar, sempre acabará por fazer surgir uma que parece genial — não porque essa configuração seja boa, mas porque a busca está pacientemente minerando o ponto cego do seu simulador. O número impressionante é o sintoma. A falência ausente é a doença.
A correção sem graça
O reparo foi nada glamouroso. Os tamanhos de posição passaram a ser uma pequena fração fixa da conta em vez da conta inteira, de modo que uma vitória não pudesse virar uma bola de neve sem sentido e uma perda não pudesse ser tudo-ou-nada. O simulador ganhou uma condição de ruína de verdade: caia abaixo de um saldo mínimo de sobrevivência e a rodada acaba, marcada como morta, ponto final. E ganhou um tamanho mínimo de ordem, para que trades pequenos demais para existir no mercado real não pudessem silenciosamente manter uma conta moribunda em respiração artificial.
Nenhuma dessas é uma ideia inteligente. Não há insight nelas, nenhuma vantagem. Elas são a simulação finalmente concordando em obedecer às restrições que a realidade nunca afrouxa — custos que não te perdoam, liquidez que não é infinita e um zero do qual você não pode voltar. A maior parte do trabalho de construir um backtest honesto é exatamente isto: não torná-lo mais inteligente, mas recusar-se a deixá-lo trapacear. A primeira responsabilidade de um backtest honesto não é te mostrar lucro. É ser capaz de te mostrar a ruína.
Por que parei de confiar em boas notícias
Aqui está a parte desconfortável. O bug era fácil. O difícil era que eu quase não fui olhar — porque o número estava a meu favor, e eu queria que fosse verdade. Um resultado que te contradiz é interrogado. Um resultado que te lisonjeia é acreditado.
Essa assimetria é onde mora a maior parte do autoengano neste trabalho. Não é que as pessoas não consigam encontrar seus bugs; é que elas param de procurar no momento em que um bug começa a pagá-las. O mercado eventualmente cobrará o preço cheio por toda suposição confortável que você nunca verificou — mas um backtest deixará você manter essa suposição alegremente por meses, porque ele é, por construção, o único lugar onde estar errado é de graça.
O que de fato mudou
Então a disciplina que guardei de um trilhão de wons falso quase nada tem a ver com dimensionamento de posição. Ela mudou a ordem da minha confiança. Um resultado de boa aparência agora é culpado até que se prove inocente: antes de perguntar “como ele conseguiu isso?”, eu pergunto “o que está quebrado aqui?” — e tento, deliberadamente, quebrá-lo eu mesmo antes que o mercado tenha a chance. Os resultados que sobrevivem a esse tratamento hostil são os únicos em que me permito acreditar, e são bem menos do que eu gostaria.
Um backtester que não pode perder tudo não é otimista. Ele está mentindo. E a mentira mais perigosa que ele pode contar é exatamente aquela que você já estava esperando ouvir.
— Sem sinais, sem retornos, isto não é recomendação de investimento.