Meu Modelo Aprendeu a Operar de Graça
Um dos meus primeiros modelos encontrou operações que pareciam confiáveis, quase tediosamente lucrativas — um gotejar constante de pequenos ganhos, o tipo de consistência que faz você pensar que finalmente encontrou algo real.
Ele havia encontrado algo. Havia encontrado um mundo onde operar é de graça. Nesse mundo, o modelo era genuinamente bom. O problema é que eu, e todos os outros, temos que operar em um mundo diferente — e no momento em que fiz operar custar o que realmente custa, a maior parte daquele belo lucro simplesmente evaporou.
A vantagem que vivia em um mundo sem custos
A assinatura da estratégia era um monte de pequenas vitórias frequentes. Individualmente, cada captura era minúscula; juntas, somavam uma curva suave e encorajadora. Lembro de estar discretamente orgulhoso dela. Não parecia um golpe de sorte. Parecia uma disciplina.
O que eu não havia levado em conta era que cada uma daquelas pequenas vitórias estava sendo medida em um cenário onde o ato de operar era sem custo — onde você podia entrar e sair quantas vezes quisesse e nunca pagar pelo privilégio.
A suposição que eu nunca percebi que estava fazendo
Aqui está a falha silenciosa. Quando gerei os dados com os quais o modelo aprendeu, tratei cada operação como se fosse de graça. Nenhuma taxa por transacionar. Nenhuma slippage — nenhuma diferença entre o preço que eu imaginava e o preço que eu realmente obteria. Então uma operação que capturava o menor lampejo favorável era registrada como uma vitória, mesmo quando aquele lampejo era menor do que custaria, no mundo real, fazer a operação em si.
Eu não estava mentindo para o modelo de propósito. Eu havia simplesmente construído todo o seu entendimento de “uma boa operação” sobre uma suposição — a de que operar é de graça — que geralmente é irrealista em qualquer lugar onde dinheiro de fato troca de mãos.
Custos não encolhem retornos; eles mudam o veredito
O instinto é pensar nos custos como um imposto fixo: faça a análise e, no fim, subtraia algum pedágio fixo. Essa intuição é o que torna esse erro tão fácil de cometer, e ela está errada de uma forma importante.
Um custo não apenas faz uma operação vencedora vencer um pouco menos. Ele pode mudar se a operação foi sequer vencedora. Um movimento que é lucrativo antes dos custos pode ser uma perda depois deles. E se seus rótulos — sua própria definição de quais operações foram boas — são calculados como se os custos não existissem, então você não está apenas exagerando o desempenho. Você está rotulando erroneamente alguns perdedores como vencedores, e então ensinando um modelo a ir encontrar mais deles.
Por que isso é pior do que parece
A parte cruel é o efeito de seleção. Testes sem fricção podem favorecer desproporcionalmente estratégias de alto giro — aquelas que operam constantemente, colhendo uma multidão de pequenas vantagens. Esse é também, precisamente, o perfil que os custos do mundo real punem com mais força, porque cada uma daquelas muitas operações paga o pedágio.
Então um backtest sem custos não exagera todas as estratégias igualmente. Ele tende a se apaixonar mais por exatamente as estratégias que os custos vão prejudicar mais rápido. Você sai à procura de uma vantagem, e sua simulação excessivamente generosa lhe entrega algo frágil a custos, embrulhado na curva mais atraente que ela consegue produzir.
A correção: coloque o custo dentro da definição de “bom”
O conserto foi parar de tratar o custo como algo secundário e movê-lo para dentro da verdade na qual o modelo era treinado. Incorporei o custo de ida e volta de operar — taxas e uma estimativa de slippage, sabendo que isso ainda não capturaria todo custo do mundo real — no próprio rótulo, de modo que uma operação só contasse como boa se ainda fosse lucrativa depois de pagar para existir. Um movimento que não conseguisse passar dessa barra era rotulado pelo que realmente era: não valia a pena fazer.
O desempenho aparente do modelo caiu, às vezes acentuadamente. Essa queda não foi uma regressão. Foi a fantasia escoando daquele primeiro protótipo, deixando para trás um sinal de treinamento que era ao menos menos desconectado de um mercado que cobra de você para participar.
Um backtest é um mundo que você constrói
A lição por trás desta é maior do que taxas. Todo backtest é um pequeno universo simulado, e ele só é tão honesto quanto as regras que você escolhe colocar nele. Deixe de fora os custos e você não construiu um teste neutro — você construiu um mundo mais gentil do que o real, e qualquer modelo que aprende a prosperar ali aprendeu a prosperar em uma generosidade que não existe fora da sua simulação.
A primeira lição do mercado para uma nova estratégia é quase sempre alguma versão da mesma: que é mais caro agir do que você supôs. Você pode ou ensinar essa lição ao seu modelo de antemão, na segurança de uma simulação, ou deixar o mercado ensiná-la mais tarde, com dinheiro de verdade, a preço cheio. Eu prefiro pagar pela lição na sala de aula mais barata.
Uma estratégia que só é lucrativa quando operar é de graça não é realmente uma estratégia. É uma descoberta pela qual você esqueceu de se cobrar por fazer.
— Sem sinais, sem retornos, não é recomendação de investimento.