Atualizado em 07/08/2026
Direto ao ponto. Peguei os robôs com melhor desempenho no histórico recente e rodei numa era que eles nunca tinham visto, e o portfólio perdeu cerca de 1.690 dólares, com 3 dos 5 anos no vermelho. Quando comparei formas de selecionar lado a lado, usar todos os robôs com peso igual rendeu Ret/CDaR de 23,4 fora da amostra, contra 5,2 de escolher os 15 melhores pelo passado. A seleção fina custou dinheiro.
No capítulo anterior eu falei que o foco do projeto é montar um portfólio e que a primeira régua é bater a divisão igual de capital, o 1/N. Aqui começa a parte que dói. Eu tinha em mãos um portfólio com o melhor número possível dentro da janela de teste, montado a partir de 62 robôs gerados sobre o histórico recente, e ele parecia ótimo. Faltava um teste. Era justamente o que eu vinha adiando.
O teste que eu estava com medo de rodar
O teste é simples de descrever e desconfortável de encarar, e os 62 robôs que entraram nele foram gerados e otimizados sobre o período de 2024 a 2026. Então peguei esses mesmos 62 robôs com peso igual e rodei tick a tick numa era que eles nunca tinham visto, de 2014 a 2018, sem nenhum custo embutido, ou seja, no melhor cenário possível para eles. É o equivalente honesto de um walk-forward levado ao extremo, com o sistema julgado num pedaço de mercado que não participou em nada da sua construção. Cinco anos que nenhum deles conhecia.
Separei o resultado ano a ano, um por linha, para enxergar se a perda estava concentrada num ano ruim ou espalhada pelo caminho inteiro.
| Ano | Resultado (US$) | Situação |
|---|---|---|
| 2014 | +263 | positivo |
| 2015 | −774 | negativo |
| 2016 | −940 | negativo |
| 2017 | −532 | negativo |
| 2018 | +293 | positivo |
| Total | −1.690 | drawdown máx. 3.334 |
Net de 1.690 dólares no vermelho, ao longo de cerca de 33.814 trades. Drawdown máximo de 3.334 dólares. Três dos cinco anos no negativo. Dezenas de milhares de decisões repetiram o mesmo veredito por cinco anos seguidos. O Ret/CDaR, que dentro da janela recente era altíssimo, virou levemente negativo, e o portfólio “ótimo” ficou sem vantagem nenhuma fora da janela onde nasceu.
O que me incomodou foi o significado do número. Aquele Ret/CDaR alto era memória do regime recente, e regime de mercado é fase, com hora para começar e hora para acabar.
Escolher os melhores robôs foi pior do que a sorte
Aí eu fui mais fundo. Em vez de só constatar que o portfólio caiu, quis saber qual forma de montar o portfólio aguenta melhor fora da amostra. Testei quatro abordagens sobre os mesmos 62 robôs, medindo o Ret/CDaR mediano numa validação cruzada honesta, com seis dobras, cerca de 31.026 carteiras avaliadas e um bootstrap de 8.000 reamostragens. O resultado está abaixo, e vai contra a intuição de quase todo mundo que monta portfólio.
| Forma de montar o portfólio | Ret/CDaR fora da amostra |
|---|---|
| Todos os 62, peso igual (1/N) | 23,4 |
| Remover os redundantes por correlação | 17 a 18 |
| 15 robôs sorteados ao acaso | 12,9 |
| 15 melhores pelo desempenho passado | 5,2 |
Leia de baixo para cima. Escolher os 15 melhores robôs pelo desempenho passado deu o pior resultado fora da amostra, pegar 15 robôs no sorteio foi mais que o dobro melhor que isso, e usar todos com peso igual foi o melhor de todos, com folga. A seleção fina, aquilo que parece ser exatamente o trabalho do gestor, teve valor negativo. Ela piorou o portfólio. DeMiguel, Garlappi e Uppal (2009) já tinham mostrado que nenhum dos 14 modelos de otimização supera o 1/N de forma consistente fora da amostra, e os meus 62 robôs reproduziram o resultado deles.
Esse padrão tem nome e número na literatura de robustez: a probabilidade de overfitting do meu conjunto, medida por validação cruzada combinatória sobre os 53 robôs elegíveis (Bailey e López de Prado, 2014), deu 0,91. Em palavras, o robô que parece o melhor no histórico tem cerca de 91% de chance de não ser o melhor fora da amostra. Ranquear por backtest, nesse regime, é quase sortear. Então eu paro de escolher e uso todos.
Por que cada abordagem deu esse número
Vale destrinchar a tabela, porque cada linha falha por um motivo diferente, e entender o motivo é o que evita repetir o erro.
- Os 15 melhores pelo passado (5,2) concentram o portfólio justamente nos robôs que mais se ajustaram a 2024-26. São os campeões da fase. Quando a fase passa, são os primeiros a virar.
- Remover os redundantes por correlação (17) é uma ideia boa de verdade, porque corta clones que não diversificam nada, mas continua sendo uma escolha dentro de um conjunto que concentra quase tudo na mesma direção. Limpa a redundância. A concentração fica de pé.
- Sortear 15 ao acaso (12,9) parece burrice e tem uma virtude escondida, que é a ausência total de viés de seleção. O sorteio não tenta adivinhar quem é bom, então não cai na armadilha de premiar o artefato, e perde só por usar menos robôs que o conjunto inteiro.
- Usar todos com peso igual (23,4) junta as duas coisas, zero viés de seleção e diversificação máxima. E tem um ponto mais fundo, que é o centro de tudo isto: o erro com que eu estimo quem é o melhor robô é tão grande que tentar usar essa estimativa destrói mais valor do que agrega.
Aqui aparece a pergunta que todo mundo faz: por que então não otimizar os pesos de cada robô, em vez de dividir igual? A resposta tem nome desde 1989. Michaud chamou a otimização de média-variância de maximizadora de erro, porque o otimizador pega as suas estimativas de retorno e risco e despeja peso nos ativos que parecem melhores, que são exatamente os que têm o maior erro de estimativa para cima. Ele amplifica o ruído. Com poucos anos de dado e dezenas de robôs, os retornos médios e a matriz de covariância vêm cheios de erro, e o 1/N, que não estima nada, sai na frente justamente por não ter o que errar.
Como eu medi isso, e por que com CDaR
Rankeei por retorno sobre CDaR, o Conditional Drawdown at Risk, e antes da fórmula vale dizer por que descartei as duas réguas mais comuns.
O Sharpe divide retorno por desvio-padrão e tem dois problemas para o meu caso. Ele pune oscilação dos dois lados, então um robô que sobe rápido demais é tratado como arriscado do mesmo jeito que um que cai, e ainda assume um mundo mais ou menos normal, quando o que me preocupa são justamente as caudas. O drawdown máximo resolve o foco, porque olha só a queda, e troca um defeito por outro: ele é um único ponto, o pior instante de toda a série. Um número assim é refém de um dia só.
O CDaR fica no ponto certo entre os dois, e a construção dele começa pelo drawdown da conta no instante t, que é a distância até o topo histórico:
D_t = \max_{s \le t} E_s - E_tAqui E é a equity (o saldo) e D_t é o quanto a conta está abaixo do seu maior valor já atingido. O CDaR num nível de confiança alfa é a média dos piores drawdowns dessa série:
\mathrm{CDaR}_\alpha = \frac{1}{1-\alpha}\int_{\alpha}^{1} D_{[u]}\,duEm palavras, eu pego só os piores momentos da conta, por exemplo os 5% piores, e tiro a média deles, de forma que a régua passa a depender da cauda inteira e um único recorde deixa de mandar sozinho no número. Contra o Sharpe, a diferença é que eu conto só o lado que machuca. Só a queda. A métrica final é o retorno acumulado dividido por esse número, e foi com ela que a tabela foi medida. A referência formal é Chekhlov, Uryasev e Zabarankin (2005).
Tem ainda um detalhe de método que muda tudo. Eu medi a tabela com muitas divisões entre treino e teste, porque uma divisão só é um sorteio, e nele você pode ter tido sorte ou azar naquele recorte específico. Usei validação cruzada combinatória e purgada, que monta muitas combinações de treino e teste e remove a contaminação entre amostras vizinhas, aqueles trades colados no tempo que vazariam informação de um lado para o outro. Por isso a tabela traz medianas sobre muitas dobras, e nenhum número dela é um resultado único que eu poderia ter escolhido a dedo.
Por que o número bonito não sobreviveu
A explicação tem duas camadas, e as duas valem para qualquer pessoa que gera robô. A primeira é sobre o que o gauntlet de robustez realmente prova. Monte Carlo, perturbação de parâmetros e validação out-of-sample dentro do período atacam um inimigo só, o curve-fit grosseiro, o robô que só funciona naquela sequência exata de trades. Eles matam o lixo aleatório. Mas todos esses testes perturbam o sistema dentro da mesma era, e nenhum deles testa a virada de regime. Por isso um robô passa no gauntlet inteiro e ainda assim morre quando o mercado muda de comportamento. São dois eixos diferentes.
A segunda camada é sobre seleção. Quando eu escolho os 15 melhores pelo passado, estou escolhendo justamente os robôs que mais se ajustaram àquela fase específica de mercado, e o que eu levo para casa é o artefato que melhor casou com o regime recente. Artefato não viaja para a era seguinte. Robô de setup raramente tem vantagem permanente, e a que ele tem vem condicionada a um regime, e some junto com o regime. Combinar robôs de forma robusta protege o portfólio. A vantagem tem que existir antes.
O que isso mudou no projeto
Esse capítulo matou uma ideia que eu carregava sem questionar, a de que o trabalho era achar os melhores robôs. O dado disse o contrário. Daqui em diante o padrão honesto virou usar todos com peso igual e parar de fingir que sei escolher o vencedor pelo retrovisor. Isso me empurrou para uma pergunta pior. Se selecionar pelo regime recente é só memória, onde está a vantagem que de fato sobrevive? Foi atrás dessa resposta que eu entrei num debate longo, de várias rodadas, sobre onde mora o edge no forex, e o resultado foi um mapa dos caminhos que não levam a lugar nenhum. É sobre ele o próximo capítulo.
Acompanhe a série para não perder. O próximo sai em poucos dias.
Perguntas frequentes
O que é o teste cross-era?
É rodar um sistema construído numa época de mercado dentro de outra época completamente diferente, que não participou da sua otimização, e serve para separar vantagem real de ajuste ao regime recente. Robô que ganha no histórico onde nasceu e perde numa era anterior estava casado com aquela fase de mercado.
Por que escolher os melhores robôs piora o portfólio?
Porque os robôs com melhor desempenho passado costumam ser os que mais se ajustaram àquela fase específica de mercado, e escolhê-los concentra o portfólio no artefato que não se repete. Nos meus 62 robôs, o 1/N com peso igual mediu 23,4 fora da amostra contra 5,2 da seleção fina.
O que é CDaR e por que usar no lugar do Sharpe?
O CDaR (Conditional Drawdown at Risk) é a média dos piores drawdowns da conta, e pune só o que quebra um trader, que é cair fundo e demorar a recuperar. O Sharpe pune oscilação para os dois lados. Por isso eu ranqueio por retorno sobre CDaR.
Então backtest não serve para nada?
Serve, para a função certa. O backtest e o gauntlet de robustez eliminam bem o lixo, o robô que claramente não sobrevive, e são fracos para escolher o vencedor entre os sobreviventes. Usar o backtest para rankear e selecionar é onde mora boa parte do overfitting.
Referências
- DeMiguel, V.; Garlappi, L.; Uppal, R. (2009). Optimal Versus Naive Diversification: How Inefficient Is the 1/N Portfolio Strategy? Review of Financial Studies, 22(5), 1915-1953.
- Chekhlov, A.; Uryasev, S.; Zabarankin, M. (2005). Drawdown Measure in Portfolio Optimization. International Journal of Theoretical and Applied Finance, 8(1), 13-58. Definição formal do CDaR.
- Michaud, R. O. (1989). The Markowitz Optimization Enigma: Is ‘Optimized’ Optimal? Financial Analysts Journal, 45(1), 31-42. A otimização de média-variância como maximizadora de erro de estimativa.
- Bailey, D. H.; López de Prado, M. (2014). The Probability of Backtest Overfitting. SSRN 2326253 / Journal of Computational Finance.
- López de Prado, M. (2018). Advances in Financial Machine Learning. Wiley. Validação cruzada combinatória e purgada (CPCV), base do método de medição usado aqui.
- Diário de um Portfólio de Robôs (7): A Esteira, a Máquina que Monta o Portfólio em Seis Estações
- Anatomia de uma Estratégia Real: Keltner e Estocástico no EUR/USD, e a Degradação de Só 1%
- Diário de um Portfólio de Robôs (8): A Auditoria que Escondia Risco e Cortou o Portfólio de 60 para 34
- Diário de um Portfólio de Robôs (6): O Drawdown que Te Quebra é o das Posições Abertas
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.
Quem escreve: Flávio Araújo
Trader algorítmico há mais de 13 anos, MBA em Mercado de Capitais e Derivativos. Mantém um laboratório próprio que já rodou mais de 20 milhões de backtests e analisou mais de 20 mil estratégias, e opera um portfólio de robôs acompanhado publicamente no blog. LinkedIn · Instagram · YouTube
