Machine Learning em Trading: As Armadilhas Que Destroem o Backtest

Mercados sao quase o pior cenario para ML: nao-estacionariedade, vazamento de dados, sinal-ruido baixo e overfitting. Onde o ML realmente ajuda e onde ele engana.

Resposta rápida: machine learning não fracassa em trading por ser fraco — fracassa porque o mercado reúne, ao mesmo tempo, baixíssima razão sinal-ruído, não-estacionariedade e poucas observações independentes. Nesse terreno, quanto mais poderoso o modelo e quanto mais configurações você testa, mais fácil é “aprender o ruído” e produzir o backtest mais bonito e mais enganoso da sua vida. O alpha não vem do algoritmo; vem de um mecanismo econômico e de uma validação que respeite a flecha do tempo (purga, embargo, CPCV, Sharpe deflacionado).

Machine learning transformou visão computacional e linguagem. Em trading, ele entrega resultados espetaculares no backtest e decepcionantes ao vivo com uma frequência alarmante. Entender por quê é mais útil do que aprender mais um algoritmo — porque o problema raramente está no modelo, e quase sempre na natureza dos dados e na forma como você os validou.

A crença: mais dados + modelo poderoso = edge

A intuição vem de domínios onde o ML brilha — reconhecer um gato numa foto, traduzir uma frase — em que há sinal forte, dados praticamente ilimitados e regras estáveis. A suposição é que finanças é igual: “dados não faltam, e modelos modernos são poderosos”. O problema é que quase nenhuma dessas três condições vale nos mercados. Israel, Kelly e Moskowitz, em Can Machines “Learn” Finance? (vencedor do prêmio Harry M. Markowitz de 2020), colocam o dedo na ferida: o ML em finanças enfrenta um conjunto de desafios que difere radicalmente dos domínios onde ele venceu — sobretudo a razão sinal-ruído baixíssima dos retornos e a quantidade de dados que só parece grande.

As seis armadilhas que quebram o ML ao vivo

A maior parte dos fracassos cabe em seis categorias. As quatro primeiras são propriedades do mercado; as duas últimas são erros de processo — e justamente por isso evitáveis.

Grade com as quatro armadilhas do ML em trading: vazamento, nao-estacionariedade, sinal-ruido baixo e overfitting

1. Vazamento de dados (look-ahead / leakage)

É a armadilha número um — e a mais sutil. Acontece quando informação do futuro entra no treino sem você perceber. Os clássicos: usar o preço de fechamento de um dia para “prever” o próprio dia; normalizar (z-score, min-max) com média e desvio calculados sobre todo o período, incluindo o que ainda não aconteceu; ou montar o label com uma janela que se sobrepõe à janela das features. O efeito é uma acurácia inflada que evapora ao vivo. Pior: em séries temporais financeiras, observações vizinhas são autocorrelacionadas — o rótulo de hoje “sabe” um pouco do amanhã. Por isso López de Prado, em Advances in Financial Machine Learning (2018), insiste que a validação cruzada padrão “viola a regra de não treinar no futuro” e propõe purging (remover do treino as observações que se sobrepõem ao teste) e embargo (abrir um intervalo de segurança entre treino e teste).

2. Baixa razão sinal-ruído

Em finanças, o sinal é minúsculo perto do ruído. Um R² de 1% num modelo de retorno mensal já é economicamente relevante — algo impensável em visão computacional. Com um sinal tão tênue, um modelo flexível faz o que foi treinado para fazer: encontra estrutura. Só que, quando quase tudo é ruído, a estrutura encontrada é o ruído. Daí a contradição que confunde iniciantes: aumentar a capacidade do modelo (mais camadas, mais árvores, mais features) piora o desempenho fora da amostra, porque dá mais liberdade para memorizar o que não se repete.

3. Poucos dados independentes e não-estacionariedade

“Tenho 20 anos de dados de 1 minuto, são milhões de barras.” Não são milhões de observações independentes. O que importa para inferência é o número de eventos não sobrepostos e independentes — e regimes de mercado duram meses ou anos. Vinte anos de dados diários são poucas centenas de ciclos econômicos distintos. Israel-Kelly-Moskowitz lembram que, para classes de ativos, dados mensais rendem apenas algumas centenas de pontos. E, pior que serem poucos, eles são não-estacionários: a distribuição que gerou o passado não é a que gera o futuro. A relação que o modelo aprendeu muda — e muda porque foi descoberta (ver armadilha 6).

4. Features sem economia nem causalidade

Jogar 500 indicadores num gradient boosting e deixar o modelo “escolher” é o caminho mais rápido para o overfitting. Sem uma hipótese econômica ex-ante de por que aquela feature carrega informação sobre o retorno futuro, qualquer correlação encontrada é candidata a espúria. Arnott, Harvey e Markowitz, em A Backtesting Protocol in the Era of Machine Learning (2019), fazem disso a primeira regra: comece por uma ideia com fundamento econômico anterior ao teste, não por uma mineração cega. Causalidade não é luxo acadêmico — é o que separa um edge que persiste de um padrão que existia só naquela amostra.

5. Custos e capacidade ignorados

Modelos de ML costumam gerar sinais de alta rotatividade — exatamente onde spread, slippage e impacto de mercado mais corroem. Um backtest sem custos realistas mede um produto que não existe. Pior: estratégias de alta frequência têm capacidade limitada; o que parece lucrativo com 0,01 lote some quando o tamanho cresce. Antes de comemorar a curva, desconte o que vimos sobre slippage e custos de execução.

6. Regime shift e adaptação do mercado

O mercado é um sistema adaptativo: outros agentes reagem ao seu edge. Quando um padrão é descoberto e explorado, ele é arbitrado e decai. Isso fecha o ciclo da não-estacionariedade — o próprio ato de operar o sinal acelera sua morte. ML para detecção de regime pode ajudar a medir a mudança, mas nenhum modelo treinado num regime sobrevive intacto à transição para outro.

Por que mercados são o pior caso para o ML

Reúna os ingredientes: dados não-estacionários, um sistema adaptativo, baixa razão sinal-ruído e amostras efetivamente pequenas. É quase o oposto das condições em que o deep learning prospera. Como alertou Longmore (Robot Wealth), o ML torna trivial gerar uma equity curve linda — então uma curva bonita produzida por ML é bandeira vermelha, não verde. É a mesma doença do Sharpe inflado por múltiplos testes, turbinada: o ML explora milhões de combinações de hiperparâmetros e features implicitamente, num único fit.

É aqui que entra a matemática mais desconfortável do tema. O Teorema da Estratégia Falsa (Bailey & López de Prado, 2018) mostra que, ao testar muitas variações independentes de uma estratégia sem skill nenhum, o melhor Sharpe esperado cresce só por sorte. Com N tentativas independentes e variância dos Sharpes estimados V, o máximo esperado é aproximadamente:

E\left[\max_n \widehat{SR}_n\right] \approx \sqrt{V}\left[(1-\gamma)\,\Phi^{-1}\!\left(1-\tfrac{1}{N}\right) + \gamma\,\Phi^{-1}\!\left(1-\tfrac{1}{N e}\right)\right]

onde \Phi^{-1} é a inversa da normal padrão e \gamma \approx 0{,}5772 é a constante de Euler-Mascheroni. A leitura prática: o resultado é ilimitado à direita — com tentativas suficientes, sempre existe um Sharpe alto o bastante para parecer real sem nenhum edge por trás. Como um modelo de ML embute um número gigantesco de tentativas, ele é uma máquina de produzir falsos positivos se você não corrigir por isso.

O erro de validação que arruína tudo: k-fold em série temporal

Mesmo quem desconfia do overfitting tropeça aqui. O k-fold cross-validation padrão embaralha as observações e usa pedaços do futuro para validar o passado — uma forma estrutural de vazamento. Em séries temporais financeiras, isso infla qualquer métrica. As correções de López de Prado:

  • Purged K-Fold + embargo: remove do treino o que se sobrepõe ao teste (purging) e adiciona um intervalo morto entre eles (embargo), eliminando o vazamento por autocorrelação.
  • CPCV (Combinatorial Purged Cross-Validation): em vez de um único caminho passado→futuro, gera múltiplos caminhos OOS combinando blocos, produzindo uma distribuição de desempenho fora da amostra em vez de um número solitário. É a base estatística da Probabilidade de Overfitting do Backtest (PBO).
  • Triple-barrier & meta-labeling: rotular cada evento por três barreiras (stop, alvo, expiração) em vez de “subiu/desceu” no horizonte fixo; e usar um segundo modelo binário que decide se apostar (não a direção), separando o problema de “achar o sinal” do de “dimensionar a aposta”.
Armadilha Defesa
Vazamento / look-ahead Purging + embargo; normalização só com dados passados
k-fold em série temporal CPCV / walk-forward; nunca embaralhar o tempo
Muitas tentativas (Sharpe inflado) Sharpe deflacionado (DSR) + PBO; contar os trials
Features sem economia Hipótese econômica ex-ante; parcimônia de features
Custos / capacidade Spread + slippage + impacto no backtest; testar por tamanho
Regime shift / adaptação Walk-forward contínuo; monitorar degradação OOS por cluster

As defesas que de fato funcionam

Nenhuma técnica isolada salva um modelo sem edge. O que funciona é uma esteira em camadas, na ordem certa:

  1. Mecanismo primeiro. Antes de qualquer fit, escreva por que esse edge deveria existir (Arnott-Harvey-Markowitz). Sem isso, todo o resto é p-hacking sofisticado.
  2. Validação que respeita o tempo. Walk-forward e CPCV com purga e embargo — nunca k-fold cego.
  3. Deflacionar pelo número de tentativas. Reporte o Sharpe deflacionado e a PBO. O haircut do Sharpe por múltiplos testes é não-linear (Harvey & Liu): Sharpes altos cortam pouco, marginais cortam muito — nunca use um desconto fixo de 50%.
  4. Intervalos de confiança, não pontos. Bootstrap de bloco estacionário sobre a métrica final; selecione pelo limite inferior do intervalo, que penaliza a incerteza de amostra curta.
  5. Parcimônia. Menos features, menos profundidade, regularização forte. Em sinal-ruído baixo, o modelo simples quase sempre generaliza melhor.
  6. Custos reais e teste por capacidade antes de comemorar qualquer curva.

O veredito: onde o ML ajuda de verdade

ML não é inútil em trading — é mal-empregado. Ele agrega valor em tarefas auxiliares, não como caçador autônomo de alpha:

E sempre com validação rigorosa: walk-forward, CPCV/PBO, custos reais e — antes de tudo — um mecanismo econômico que explique o edge. Vale tudo o que se aplica a qualidade de dados: lixo entra, lixo sai, agora com uma camada de verniz estatístico por cima. E vale a disciplina geral de teste de robustez que separa edge de coincidência.

Perguntas frequentes

Machine learning não serve para trading?

Serve — mas para tarefas auxiliares (features, regime, NLP, execução), não como gerador autônomo de sinais. A expectativa de “jogar dados e colher alpha” é que falha. Como ferramenta dentro de um processo disciplinado, com mecanismo econômico e validação que respeite o tempo, o ML agrega valor real.

Qual a armadilha de ML mais comum em finanças?

O vazamento de dados (leakage) — usar informação do futuro no treino sem perceber. É sutil (normalização global, features mal alinhadas no tempo, k-fold que embaralha a série) e infla a acurácia de forma que evapora ao vivo. Logo atrás vêm a não-estacionariedade e o overfitting por excesso de tentativas.

Por que k-fold cross-validation é perigoso em séries temporais?

Porque ele embaralha as observações e treina com pedaços do futuro para validar o passado — uma forma estrutural de look-ahead. Como retornos vizinhos são autocorrelacionados, o teste “enxerga” o treino. A correção é purging (remover sobreposições) + embargo (intervalo morto) e, idealmente, CPCV, que respeita a flecha do tempo e ainda entrega uma distribuição OOS em vez de um número único.

Como saber se meu modelo de ML está overfitando?

Sinais clássicos: acurácia/Sharpe altíssimos no treino que caem muito na validação; desempenho concentrado em poucos períodos; sensibilidade extrema a pequenas mudanças de parâmetro ou de janela. Quantifique com o PBO e o Sharpe deflacionado, e desconfie por princípio de qualquer curva “boa demais”.

Deep learning ou gradient boosting é melhor para o mercado?

A questão erra o alvo: nenhum modelo compensa baixa razão sinal-ruído, dados não-estacionários e ausência de mecanismo. Em sinal-ruído baixo, modelos mais simples e mais regularizados costumam generalizar melhor; árvores com boosting (LightGBM, XGBoost, CatBoost) são populares em finanças tabular por lidarem bem com poucas features e ruído, mas só se você controlar o número de tentativas e validar com purga. Capacidade extra de modelo, sem dados e sem economia, só acelera o overfitting.

Referências

Presente para Leitores: Robô de Gradiente Linear Gratuito

Estou liberando o acesso ao meu setup pessoal de Gradiente Linear sem custo nenhum. É só clicar e me pedir o arquivo.

Quero meu Robô Gratuito
🔒 Acesso Direto no WhatsApp
⚠️ Aviso de risco: O conteúdo do Invista Já é educacional e informativo sobre algotrading e estratégias quantitativas e não constitui recomendação ou consultoria de investimento, nem oferta ou solicitação de compra ou venda de qualquer ativo. Operações no mercado financeiro envolvem risco de perda, inclusive do capital investido, e resultados passados não garantem resultados futuros. Avalie seu perfil de risco e, se necessário, consulte um profissional certificado antes de investir.
Flavio Araújo
Flavio Araújo

Engenheiro com MBA em Mercado de Capitais e Derivativos. Atua há mais de 10 anos no Mercado Financeiro, com 6 anos dedicados ao Algotrading e estratégias quantitativas. Especialista em validação de robustez e automação de investimentos.

Artigos: 158