Eu Deixei o Futuro Vazar Para o Passado
Houve um resultado de backtest, no começo, tão bom que deveria ter me deixado feliz. Em vez disso, depois de alguns minutos encarando aquilo, me deixou profundamente inquieto. Os lucros na simulação eram grandes, suaves e limpos demais — o tipo de desempenho que não acontece em um mercado real, ruidoso e adversarial. E a razão pela qual aquilo não aconteceria em um mercado real é que o meu teste, silenciosamente e sem que eu percebesse, conseguia enxergar o futuro.
Não de propósito. Eu não havia escrito se você souber o que acontece a seguir, trapaceie. O futuro tinha vazado para o passado através de uma dúzia de pequenas costuras de aparência inocente, e cada uma delas estava recompensando o meu sistema por um tipo de clarividência que ele jamais teria quando houvesse dinheiro de verdade em jogo.
O bug mais sedutor do backtesting
O nome geral disso é viés de antecipação (look-ahead bias), ou vazamento. Acontece sempre que uma decisão na sua simulação tem permissão para usar informação que, na vida real, ainda não existiria no momento em que a decisão foi tomada.
Vale a pena se demorar nisso, porque é mais sutil do que parece. Um backtest deveria ser uma reencenação fiel da história: a cada instante, o sistema só pode saber o que de fato era conhecível naquele instante, e deve agir usando apenas isso. Vazamento é qualquer rachadura nessa parede — qualquer lugar onde um fragmento da informação de amanhã se infiltra na decisão de hoje. E no momento em que isso acontece, o seu backtest deixa de medir “como isso teria se saído” e passa a medir “como isso se sairia se pudesse espiar”.
Como o futuro se infiltra
Quero ter o cuidado aqui de não descrever os detalhes do meu próprio sistema, então deixe-me manter isso no nível das formas gerais que esses vazamentos assumem, porque elas são notavelmente comuns.
Uma forma clássica: usar em uma decisão um valor que só foi de fato finalizado depois do momento em que você finge estar decidindo. Outra: preparar os seus dados escalonando-os ou normalizando-os com estatísticas — uma média, uma amplitude, um tamanho típico — calculadas sobre o histórico inteiro, incluindo a parte que, no seu instante simulado, ainda não havia acontecido. Outra: filtrar ou rotular os seus dados com o benefício da retrospectiva, excluindo silenciosamente certos casos de um jeito que você só conseguiria se já soubesse como eles terminaram.
Cada uma dessas coisas é uma única linha de código de aparência razoável. Nenhuma delas parece trapaça enquanto você a escreve. E cada uma entrega ao seu sistema um pequeno e constante fluxo de informação vinda do futuro.
Por que é tão difícil de pegar
O mais cruel do vazamento é que ele não se parece com um bug. O código roda sem erro. Nada quebra. E o resultado que ele produz não é um sinal de alerta — é um número ótimo. Números ótimos não despertam suspeita na maioria das pessoas. Despertam comemoração, um print de tela, uma sensação discreta de que você talvez esteja no caminho de algo.
É exatamente isso que torna essa classe de bug tão perigosa. Ela se esconde dentro de resultados que parecem sucesso, que é o pior lugar possível para um bug se esconder, porque sucesso é o único desfecho que você tem menos motivação para questionar. Uma quebra exige ser consertada. Uma curva de capital bonita te convida a parar de olhar.
O sinal: resultados bons demais para ser verdade
Por muito tempo, o único alarme confiável que eu tinha era a minha própria incredulidade. Quando um backtest volta dramaticamente melhor do que qualquer coisa que você poderia razoavelmente esperar — mais suave, mais lucrativo, mais consistente do que o mercado tem o direito de permitir — a primeira hipótese correta não é “encontrei algo brilhante”. É “informação está vazando em algum lugar, e eu preciso encontrá-la”.
Isso é um prior genuinamente útil, e passei a sustentá-lo com firmeza: em um backtest, a excelência é, muito mais frequentemente, um sintoma de bug do que evidência de uma vantagem. O mercado é difícil. Resultados que sugerem que ele é fácil normalmente estão te contando sobre o seu código, não sobre o mercado.
Caçando os vazamentos
O trabalho de fato de caçar vazamentos é tedioso e completamente sem glamour, e não há nenhum atalho esperto que eu tenha encontrado capaz de substituí-lo. A disciplina é esta: pegue cada valor individual que alimenta uma decisão e rastreie-o de volta até o instante preciso em que ele teria se tornado conhecido na vida real. Depois pergunte, sem rodeios: “no instante em que finjo agir, eu realmente já poderia ter esse número?”.
A maioria dos vazamentos, quando você finalmente os encurrala, acaba sendo uma trapaça do tamanho de um único timestamp — um valor usado um instante antes de ele verdadeiramente existir, um cálculo que avançou um passo a mais para dentro dos dados do que lhe era permitido. Costuras pequenas. Mas uma costura pequena, repetida ao longo de milhares de decisões, basta para fabricar uma fortuna imaginária inteira.
O princípio mais profundo: respeite a flecha do tempo
Por baixo de tudo isso há um único princípio que agora trato como quase sagrado: respeite a flecha do tempo. Um backtest é, em essência, uma promessa — a promessa de que você só usou o passado para agir no presente, jamais o futuro. Cada vazamento é uma pequena promessa quebrada, um lugar onde o seu código silenciosamente se esticou para frente no tempo para se ajudar.
Então construir uma simulação confiável acabou tendo muito menos a ver com modelagem esperta e muito mais a ver com defender uma fronteira: a linha entre o que era conhecido num instante e o que era apenas conhecível mais tarde. A maior parte do esforço de engenharia, a parte sobre a qual ninguém escreve threads admiradas, é só guardar essa fronteira contra a tendência constante e casual do seu próprio código de espiar.
Por que agora desconfio dos meus melhores resultados
A mudança duradoura de tudo isso foi que a minha relação com boas notícias se inverteu. Um backtest decepcionante é apenas decepcionante; eu olho para ele, dou de ombros e sigo em frente. Um espetacular agora me deixa nervoso antes de me deixar feliz. Quanto melhor o resultado, com mais afinco vou atrás do vazamento que o produziu.
Soa sem graça, e às vezes é. Mas vem de um respeito conquistado a duras penas por como esse jogo em particular pune o autoengano. As mentiras mais perigosas que um sistema jamais vai te contar não são os fracassos feios. São os sucessos deslumbrantes — aqueles que se parecem exatamente com a coisa que você esperava encontrar, e por isso mesmo são os últimos de que você pensa em duvidar.
— Sem sinais, sem retornos, isto não é aconselhamento de investimento.