Sharpe Deflacionado: Por Que o meu Backtest Estava Inflado (com dado real)

Testar muitas estrategias infla o Sharpe por acaso. O Sharpe deflacionado e as correcoes de multiplos testes separam descoberta real de fantasma estatistico.

Atualizado em 25/08/2026

O número: montei um portfólio de 42 robôs e o Sharpe saltou de 3,76 pra 5,24. Parecia vitória. Quando rodei a deflação, o 5,24 apareceu no percentil 100 de 2.000 sorteios aleatórios do mesmo procedimento, que é o extremo absoluto e a assinatura de um número ajustado contra o próprio alvo. Anualizar por √252 uma série de trades esparsos ainda inflava o resultado em cerca de 40%, e o Sharpe honesto, medido na frequência semanal, ficava entre 4,2 e 4,8. Em dólar somado, o líquido caía de $23,8k pra $9,6k.

Esta explicação também virou carrossel no nosso Instagram, onde a gente publica todo dia sobre algotrading e mercado: ver no @invista.ja. Por lá também ficam os bastidores do portfólio que roda em conta real, com o saldo aberto.

O Sharpe deflacionado, ou DSR, é o índice de Sharpe descontado de duas coisas que o Sharpe comum ignora: quantas estratégias você testou antes de ficar com essa, e o formato da distribuição de retornos (assimetria e curtose). Ele devolve uma probabilidade entre 0 e 1, que é a chance de o Sharpe verdadeiro da sua estratégia estar acima do teto que o puro acaso produziria depois do mesmo número de tentativas. Bailey e López de Prado (2014) definiram essa conta no trabalho em que enunciaram o Teorema da Estratégia Falsa.

O seu backtest está inflado porque garimpar estratégia é fazer uma busca com milhares de tentativas, e o melhor resultado de uma busca grande já nasce alto mesmo quando nenhum candidato carrega vantagem nenhuma. Rodei essa medição na minha própria janela de build, de uns três anos, procurando o maior Sharpe que apareceria só por sorte: com 600 tentativas de vantagem zero, o campeão chega em ~1,8; com 6.000, em ~2,1; com 60.000, em ~2,5. Ninguém precisa ter errado nada pra isso acontecer. Enquanto você não subtrair esse teto do seu resultado, está lendo o máximo de uma distribuição de ruído como se fosse mérito do robô.

Comigo isso aconteceu no meio de um processo que eu achava cuidadoso. Cuidado não protege contra o N. Rodei um construtor de portfólio com seis regras de disciplina, o número melhorou em toda métrica de vitrine, e eu quase liguei aquela carteira no simulado. O que segurou a minha mão foi rodar a deflação antes da decisão, junto com o PBO e a comparação obrigatória com a divisão igual de capital.

O que a pesquisa mostra: Harvey, Liu e Zhu revisaram 316 fatores de retorno publicados na academia de finanças e mostraram que, depois de cobrar o preço de todos os testes que a literatura rodou pra chegar neles, o limiar honesto de significância sobe do clássico t > 2 para algo em torno de t > 3,0. Boa parte dos fatores publicados e revisados por pares fica abaixo dessa régua (Harvey, Liu e Zhu, 2016).

O Teorema da Estratégia Falsa, de onde sai o desconto

Bailey e López de Prado provaram o seguinte. Se você gerar N estratégias cujo Sharpe verdadeiro é exatamente zero e ficar com a melhor delas, o Sharpe dessa melhor se concentra num valor positivo que dá pra calcular de antemão, e esse valor cresce com N. A razão é aritmética. Você deixou de sortear um elemento da distribuição. Passou a colher o máximo dela. Uma amostra qualquer de ruído tem média zero, enquanto o maior valor entre mil amostras de ruído fica bem acima disso, e é exatamente esse maior valor que você guardou e batizou de robô aprovado.

Repare no que isso faz com a sua rotina. Você relata o Sharpe do robô que sobreviveu e omite os milhares que morreram no caminho, quando é justamente o número de mortos que determina o quanto o sobrevivente estava fadado a parecer bom. O N é metade do resultado. Um Sharpe relatado sem o N ao lado dele não dá pra interpretar.

O número que me enganou: Sharpe 5,24 no percentil 100 de 2.000 sorteios

O caso concreto. Eu tinha 139 robôs num pool de grids e sistemas de tendência em USDJPY, EURUSD, GBPUSD e USDCAD, e rodei o meu build_portfolio.py com as seis regras de disciplina que eu achava certas: risco por covariância, teto de fator, pirâmide fora, corte de clones por célula, lote igual de 0,01 em todo mundo. Sobraram 42 robôs. O Sharpe do conjunto subiu de 3,76 pra 5,24. A concentração no iene caiu de 71% pra 34%. Toda métrica de vitrine dizia “melhorou”. Então mandei o resultado pra quatro revisores independentes. A tarefa deles era derrubar cada alegação, re-derivando os números por conta própria.

O primeiro furo é o que importa aqui. O ganho de Sharpe decompunha em média ×1,33 e volatilidade ×0,95. Ou seja: o retorno médio subiu 33% e a oscilação caiu meros 5%. O que eu chamava de controle de risco era, na conta, manutenção dos vencedores. Quando eu selecionava 10 robôs por célula ao acaso, o Sharpe dava ~4,7. Praticamente o mesmo do meu algoritmo esperto. E o conjunto que eu escolhi a dedo ficou no percentil 100 de 2.000 sorteios do mesmo procedimento. O topo absoluto, em 2.000 rodadas.

Tinha um segundo problema empilhado por baixo desse. Os meus robôs SQX operam com frequência baixa, então a série de retornos é esparsa, e anualizar uma série assim multiplicando por √252 inflou o Sharpe em cerca de 40%. Medido na frequência semanal real, o número honesto ficava entre 4,2 e 4,8. O teste mais brutal veio depois. Somando o resultado em dólar de verdade, em vez da média por robô, o líquido do portfólio otimizado caía de $23,8k pra $9,6k, e o que subia com a seleção era a média por robô, uma consequência aritmética de dividir o mesmo lucro por menos robôs.

Falta dizer onde a auditoria acertou e onde ela mesma errou. Publiquei as duas coisas no meu registro. A frase que ficou foi que o exercício respondia “qual pedaço de 2024-2026 teria sido melhor em 2024-2026”, e essa parte sobrevive inteira: o meu código escolhia o maior lucro dentro da janela de 2024-2026 e depois media o portfólio na mesma janela. Circular. O que a auditoria errou foi o diagnóstico maior. Ela cravou que todos os robôs eram in-sample. Quando abri o arquivo de projeto do StrategyQuant (o project.cfx, que por dentro é um ZIP), o pipeline mostrava build em 2019.01 a 2021.07, out-of-sample de verdade em 2021.08 a 2023.12 e só depois o reteste no período cheio. O rótulo “IST” que sai nos CSVs descreve esse reteste final, e nunca significou ausência de out-of-sample. A ilusão do 5,24 sobreviveu à correção. Ela nasceu da seleção circular do meu código.

Histograma: Sharpe 5,24 do portfolio de 42 robos no percentil 100 de 2.000 sorteios; o Sharpe honesto semanal vive em 4,2-4,8

A equação, termo por termo

Cada pedaço da conta mata uma ilusão específica. O ponto de partida é o teto de acaso: para N tentativas independentes de estratégias sem vantagem, o maior Sharpe esperado por puro ruído cresce, grosso modo, como SR* ≈ √(2·ln(N) / T), onde N é o número de tentativas e T é o comprimento da série. O ln(N) diz que o teto sobe com o número de testes, e sobe devagar, por ser logaritmo: dobrar as tentativas mexe pouco na barra, multiplicar por cem mexe bastante, e foi isso que separou o ~1,8 dos 600 do ~2,5 dos 60.000. O T no denominador diz que série longa aperta a distribuição do Sharpe estimado, então histórico curto é onde o acaso mais engana. Esse SR* é a barra que o seu Sharpe observado precisa superar. Ela quase nunca é zero.

Com a barra na mão, o DSR é a probabilidade de o Sharpe verdadeiro estar acima dela: DSR = Z( (SR − SR*)·√(T−1) / √(1 − g3·SR + ((g4−1)/4)·SR²) ). O Z(...) é a normal acumulada, que transforma o escore numa probabilidade entre 0 e 1. O numerador mede o quanto o seu Sharpe passou da barra de acaso, escalado por √(T−1), de novo premiando quem tem mais dado na mão. No denominador entram a assimetria (g3) e a curtose (g4) dos seus retornos. Retorno de robô costuma ter assimetria negativa e cauda gorda, ganhando pouco muitas vezes e perdendo muito de vez em quando, e é esse formato que aumenta a incerteza sobre o Sharpe estimado. Quando o denominador cresce, o escore encolhe e o DSR desce junto. O Sharpe comum assume normalidade e por isso subestima o próprio erro justamente nas séries de cauda gorda.

Quantos testes você realmente fez

Aqui está o erro que eu cometi na primeira vez que tentei deflacionar de verdade. Uma revisão externa pegou o erro. Eu tinha plugado no N o número de fatores de risco independentes da carteira. Dava 2 ou 3. Com N nessa casa a deflação quase não descontava nada. O DSR saía inflado e o gate aprovava qualquer coisa. O N certo é o tamanho do funil inteiro do garimpo, contando tudo que foi gerado e descartado no caminho, o que no meu caso são milhares de estratégias, e virou parâmetro obrigatório da esteira, com o número real plugado na mão.

Pra sentir a escala, rodei o próprio Teorema da Estratégia Falsa sobre uma janela de build de uns três anos, medindo o melhor Sharpe esperado por puro acaso, com vantagem zero, contra o número de tentativas:

Tentativas geradas (N) Melhor Sharpe esperado só por acaso
600 ~1,8
6.000 ~2,1
60.000 ~2,5

Leia essa tabela devagar. Ela reorganiza o jeito de olhar pro seu próprio garimpo. Gerar 600 robôs e achar um com Sharpe 1,8 é o que o ruído entrega sozinho, sem nenhuma vantagem envolvida, e quem varre dezenas de milhares de configurações e comemora um Sharpe 2,5 está comemorando o valor esperado do acaso. Por isso “achei 600 robôs bons” nunca virou argumento aqui dentro. A quantidade de candidatos testados é o que corrói o significado do vencedor, e o DSR serve pra colocar esse custo na conta com número, antes de a estratégia virar decisão de capital.

Por que exijo t maior que 3, e não o t maior que 2 dos livros

O limiar clássico de significância, t > 2 (equivalente a p < 0,05), foi desenhado para uma hipótese testada uma vez. Garimpo de estratégia testa milhares de hipóteses e guarda a melhor. Assim o t > 2 aprova candidato que o acaso produziu. A correção mais óbvia seria Bonferroni. Ele divide o nível de significância pelo número de testes. Eu, particularmente, não uso Bonferroni como régua principal, e o motivo é o pressuposto dele: Bonferroni supõe testes independentes, e os candidatos de um garimpo são fortemente correlacionados entre si, porque são variações do mesmo par, do mesmo indicador e da mesma janela de otimização. Tratar tudo como independente castiga muito além do necessário. Harvey, Liu e Zhu (2016) usam procedimentos que levam a correlação entre os testes em conta, e é assim que eles chegam no t > 3,0. Adotei esse 3,0 como piso de trabalho pelo mesmo motivo pelo qual deflaciono o Sharpe, porque são dois jeitos de cobrar o preço dos múltiplos testes, um na estatística do fator e o outro na métrica do portfólio.

O que o DSR não desconta

Deflacionar tem limite, e eu bati nele na medição seguinte. Depois de consertar o medidor de rebaixamento em aberto, rodei a esteira inteira numa pool corrigida de 34 robôs e o DSR voltou 1,000 para qualquer número de tentativas que eu plugasse, de 1 até 20.000. O veredito formal foi “vale”. Não acreditei nele.

O DSR desconta o garimpo que gerou os candidatos. E para por aí. Ele não sabe que a minha própria esteira selecionou aqueles 34 robôs dentro da mesma janela em que eu depois os medi, e não sabe que os grids eram in-sample naquele período. Calibrar o limiar mínimo do DSR não conserta nenhuma das duas coisas. O problema está fora da fórmula. O que conserta é medir forward, selecionando numa era e avaliando na era seguinte, e essa medição continua na fila do projeto.

Como isso roda no meu processo hoje

Depois desse tombo a deflação virou etapa fixa da esteira de validação. Três coisas mudaram na prática.

A primeira é que o gate de overfit calcula o DSR com o N do funil real, os milhares de candidatos do garimpo, e nunca com um N de conveniência. Ao lado dele rodam o PSR, que eu exijo em pelo menos 0,95, e o PBO por validação cruzada combinatória sobre os robôs individuais. O PBO dos 53 robôs elegíveis deu 0,91 com seeds fixos, ou seja, o robô que aparece como melhor dentro da amostra fica abaixo da mediana fora dela em 91% das dobras. Ranquear por Sharpe não prediz desempenho futuro. Por isso eu seguro o pool inteiro em vez de escolher o campeão.

A segunda é que parei de usar Sharpe como critério de seleção, porque a auditoria mostrou que o ganho de Sharpe do meu construtor vinha todo de cortar clones, que é controle de variância, e zero de escolher os melhores. Então a construção do portfólio virou divisão igual de capital sobre um pool amplo e curado, que é o que resiste fora da amostra no meu dado.

A terceira é que toda comparação de portfólio agora carrega uma linha de base fixa, formada pelo resultado do sorteio aleatório e pelo 1/N do pool inteiro. Se o meu aparato não bater o acaso com folga estatística, com banda de confiança por bootstrap, a ponta de baixo decidindo e tudo deflacionado, então o simples basta e eu paro por ali. Foi esse portão que me obrigou a escrever, no meu próprio registro, que a minha máquina serve pra controlar risco: contra o sorteio aleatório de 34 robôs, o meu tombo bateu 100% dos sorteios ($459 contra $880 no sorteio), enquanto o lucro ficou acima de apenas 68% deles. O retorno extra por unidade de risco eu ainda não consigo provar. A pool multi-era é o que fecha essa lacuna, e ela ainda não rodou.

O que é o Sharpe deflacionado em uma frase?

É o Sharpe corrigido pela quantidade de estratégias que você testou e pelo formato (assimetria e curtose) dos retornos, entregando a probabilidade de a vantagem ser real depois de descontar o maior valor que o acaso produziria com o mesmo número de tentativas. Foi definido por Bailey e López de Prado (2014).

Qual N eu coloco na fórmula da deflação?

O número total de estratégias que passaram pelo seu garimpo, na casa dos milhares se você otimizou de verdade, contando as descartadas. Um N pequeno (2, 3, 5) infla o DSR e anula a correção. O número de fatores de risco independentes da carteira final mede outra coisa e não entra aqui.

Sharpe alto no backtest é bom sinal?

Sozinho, não diz quase nada, porque com testes suficientes o ruído puro produz Sharpe alto, e um Sharpe 1,8 saído de 600 tentativas é exatamente o que se espera do acaso. O sinal só vale depois de descontar o número de testes (DSR) e checar se ele resiste à validação cruzada e à comparação com a divisão igual de capital.

Por que assimetria e curtose entram na conta?

Porque a incerteza sobre o Sharpe estimado depende do formato da distribuição de retornos. Retorno de robô costuma ter assimetria negativa e cauda gorda, e esse formato aumenta o erro da estimativa, o que derruba o DSR. O Sharpe comum assume normalidade e ignora o risco dos dias extremos.

Referências

  • Bailey, D. H.; López de Prado, M. (2014). The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting and Non-Normality. Journal of Portfolio Management. SSRN 2460551.
  • Bailey, D. H.; Borwein, J.; López de Prado, M.; Zhu, Q. J. (2014). The Probability of Backtest Overfitting. Journal of Computational Finance. SSRN 2326253.
  • Harvey, C. R.; Liu, Y.; Zhu, H. (2016). … and the Cross-Section of Expected Returns. Review of Financial Studies. SSRN 2249314.

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.

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

Flávio Araújo
Flávio 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: 171