O Deflated Sharpe Ratio: Quantos dos seus 'vencedores' de backtest sobrevivem ao multiple testing?
Parte da série "Backtests Without Illusions".
📄 Este artigo se transformou em um paper de pesquisa. Todo número abaixo vem de um único script determinístico que constrói uma verdade fundamental controlada — buscas em ruído puro, buscas com edge plantado e um grid de parâmetros correlacionado real — e então executa o Deflated Sharpe Ratio, o haircut de multiple-testing de Harvey-Liu e o Reality Check de White / SPA de Hansen contra ela, medindo diretamente a taxa de falsos positivos e o poder de detecção de cada método. Leia o paper online (versão interativa + PDF) em deflated-sharpe.marketmaker.cc, código e dados em github.com/suenot/deflated-sharpe-search.
Você roda um parameter sweep. Dezesseis comprimentos rápidos, quarenta lentos, 640 combinações de um cruzamento de médias móveis. O grid termina e uma célula brilha: um Sharpe anualizado de 3,9, um p-value de teste único de . Doze zeros de significância. Você encontrou algo.
Ou você não encontrou nada, e a busca encontrou isso por você.
Uma busca de parâmetros não é um teste. É uma máquina para encontrar a mais sortuda entre N tentativas, e quanto mais tentativas você lhe dá, mais sortudo parece seu vencedor — com ou sem qualquer edge real por baixo. O melhor-dentre-N Sharpe é inflado por seleção da mesma forma que a mais alta entre mil pessoas aleatórias é alta: não porque a altura seja real, mas porque você procurou. As estatísticas de teste único impressas ao lado do vencedor — seu p-value, seu t-stat, seu "é significativo?" — foram desenhadas para uma hipótese pré-registrada. Alimente-as com o sobrevivente de uma busca e elas mentem, com confiança, sempre.
Este artigo mede exatamente o quão mal elas mentem, e depois mede três ferramentas que corrigem isso. O ponto central é uma verdade fundamental controlada: geramos retornos onde nós sabemos a resposta — às vezes ruído puro com zero de edge, às vezes um edge plantado de força conhecida — de modo que "o método acertou?" é um fato, não uma opinião. Aqui está a manchete, de saída. Em buscas de nulo conhecido, onde a resposta honesta é sempre "nenhuma descoberta", esta é a frequência com que cada teste grita lobo:
| Teste | Taxa de falsos positivos em buscas de nulo conhecido | Veredito |
|---|---|---|
| "O melhor Sharpe é significativo?" ingênuo | 1,000 | aponta uma descoberta toda vez |
| Deflated Sharpe Ratio (DSR ≥ 0,95) | 0,001 | controlado |
| Haircut de Harvey-Liu — Bonferroni | 0,057 | ~controlado |
| Haircut de Harvey-Liu — Holm | 0,057 | ~controlado |
| Haircut de Harvey-Liu — BHY | 0,007 | controlado |
| Reality Check de White (bootstrap) | 0,022 | controlado |
1.000 estratégias por busca, 1.000 observações cada, 2.000 buscas nulas independentes, Sharpe verdadeiro = 0 em todos os casos. Retornos Normais iid sintéticos, seed 0, α = 0,05, 252 períodos/ano. A taxa de falsos positivos do teste ingênuo não é alta — é exatamente um.
Leia a primeira linha até doer. Um teste que deveria disparar 5% das vezes em ruído puro dispara 100% das vezes — porque você não está mostrando a ele ruído puro, você está mostrando a ele o máximo de mil sorteios de ruído puro, e o máximo de mil lançadores de moeda sempre parece um gênio. Toda outra linha é um método que sabe disso e corrige. Este é o artigo inteiro: por que a primeira linha é 1,000, por que as outras não são, e o único lugar (a última seção) onde até os bons métodos precisam de uma segunda correção para se manterem honestos.
Ato 1 — A armadilha: uma busca fabrica Sharpe do nada

Comece com a armadilha mais limpa possível. Gere estratégias cujos retornos são ruído Normal padrão independente — sem drift, sem skill, Sharpe verdadeiro exatamente zero para todas elas. Cada uma tem observações. Agora faça o que toda busca de parâmetros faz: mantenha a melhor.
O melhor-dentre-1000 Sharpe por observação tem média 0,1027, o que anualiza para 1,63 (derivado: ). Esse não é um número modesto. Um Sharpe anualizado de 1,63 é o tipo de resultado que faz uma estratégia ser financiada, publicada, alocada. Ele veio de um gerador de números aleatórios com o drift ajustado para zero.
Agora entregue o vencedor ao teste de significância ingênuo — aquele que toda biblioteca de backtest imprime de graça. Converta seu Sharpe em uma estatística t (), pegue o p-value unicaudal, chame de descoberta se :
O p-value mediano de teste único desses vencedores de ruído é 0,000686 — três zeros de "significância" de uma estratégia sem edge. E entre 2.000 buscas nulas independentes, o teste ingênuo declara uma descoberta em todas elas: uma taxa de falsos positivos de 1,000. Não "inflada". Não "um pouco alta". Um teste que está certo, por construção, no máximo 5% das vezes em uma única hipótese nula está errado 100% das vezes no vencedor de uma busca.
O mecanismo não é sutil, uma vez nomeado. O teste ingênuo pergunta "esse Sharpe poderia surgir por acaso sob o nulo?" — uma pergunta justa para uma estratégia que você escolheu antes de olhar os dados. Mas você escolheu esta porque ela tinha o maior Sharpe entre mil. Você condicionou no máximo, e a distribuição amostral de um máximo não se parece em nada com a distribuição amostral de um único sorteio. É a mesma doença que nossa taxonomia de look-ahead bias diagnosticou pelo outro lado — lá, um vazamento de uma barra fabricou um Sharpe de 15 a partir de ruído; aqui, uma busca fabrica um Sharpe de 1,63 a partir de ruído sem vazamento algum, puramente por seleção. Mecanismo diferente, sintoma idêntico: um Sharpe de ótima aparência que não significa nada.
O número 1,63 é o importante, então guarde-o. Ele é o teto de ruído para esta busca: o Sharpe que você deveria esperar que a mais sortuda entre 1.000 estratégias de edge zero postasse. Qualquer teste honesto de um vencedor de busca precisa compará-lo não contra zero, mas contra isso — contra o que a sorte sozinha entrega quando você olha mil vezes.
Ato 2 — O kit de ferramentas: três formas de precificar a busca

Três programas de pesquisa, chegando independentemente, todos alcançam a mesma correção: parar de comparar o vencedor com zero, e passar a compará-lo com o que uma busca deste tamanho produz por sorte. Eles diferem em como constroem essa comparação.
PSR e o Deflated Sharpe Ratio (Bailey & López de Prado, 2012 / 2014)
O Probabilistic Sharpe Ratio faz uma pergunta mais afiada que "o Sharpe é positivo?" Ele pergunta: dado o comprimento da amostra e o formato dos retornos (skew, caudas gordas), qual é a probabilidade de o Sharpe verdadeiro exceder um benchmark ?
Aqui é a CDF Normal padrão, o skew, e a curtose na convenção não-excedente (Normal ⇒ ; substitua por curtose excedente aqui sem somar 3 e a deflação sai errada). Defina e o PSR é apenas um teste de significância em amostra finita. A mágica está em escolher bem o .
O Deflated Sharpe Ratio é o PSR avaliado em um benchmark que não é zero, mas o máximo Sharpe esperado de toda a busca:
onde é a variância entre todos os N Sharpes de trial (a dispersão que a própria busca produziu), é a constante de Euler-Mascheroni, e os dois termos de Normal inversa são a aproximação de Teoria de Valores Extremos para o máximo esperado de sorteios Normais padrão. Em código, é curto demais para impressionar:
def expected_max_sharpe(sr_variance, N, mean_sr=0.0):
"""E[max of N independent SR estimates ~ N(mean_sr, sr_variance)]
(Bailey & LdP 2014)."""
g = EULER_MASCHERONI # 0.5772156649
a = norm.ppf(1.0 - 1.0 / N) # Z^{-1}(1 - 1/N)
b = norm.ppf(1.0 - 1.0 / (N * E)) # Z^{-1}(1 - 1/(N e))
return float(mean_sr + np.sqrt(sr_variance) * ((1.0 - g) * a + g * b))
Então o DSR é simplesmente o PSR com essa barra deflacionada:
def deflated_sharpe(sr_max, sr_estimates, T, skew=0.0, kurt=3.0, N=None):
"""DSR = PSR(sr_max, SR0). Returns (dsr, sr0)."""
v = float(np.asarray(sr_estimates).var(ddof=1)) # dispersion of the search
m = float(np.asarray(sr_estimates).mean())
if N is None:
N = len(sr_estimates)
sr0 = expected_max_sharpe(v, N, mean_sr=m)
return psr(sr_max, sr0, T, skew, kurt), sr0
O DSR é uma probabilidade. Declaramos uma descoberta quando : o Sharpe verdadeiro do vencedor supera o melhor esperado por sorte com 95% de confiança. Note a suposição estrutural embutida no : os trials são tratados como independentes. O Ato 5 é inteiramente sobre o que acontece quando não são.
O haircut de Harvey-Liu (2015)
Harvey e Liu atacam o mesmo problema via ajustes de p-value de multiple-testing — a maquinaria clássica de "eu rodei M testes, não me deixe me enganar". Ordene os p-values de teste único e infle-os:
Bonferroni é o instrumento contundente (controla a probabilidade de qualquer falso positivo multiplicando cada p-value por ); Holm é sua prima em degraus, uniformemente mais poderosa. O terceiro, Benjamini-Yekutieli (BHY), controla a taxa de falsos positivos (false-discovery rate) — a fração esperada de suas rejeições que estão erradas — e, crucialmente, faz isso sob dependência arbitrária entre os testes, usando o normalizador harmônico no numerador:
Esse é o preço que o BHY cobra por não assumir que seus 1.000 trials são independentes — ele infla o limiar de FDR por um fator que cresce como . O "haircut" em si é a métrica-chave: converta o p-value ajustado de volta em Sharpe e reporte quanto do Sharpe original você teve que cortar. Um haircut de 100% significa que o vencedor é inteiramente explicado por multiple testing; 15% significa que ele sobrevive em sua maior parte.
O Reality Check de White e o SPA de Hansen (2000 / 2005)
A terceira ferramenta não faz nenhuma suposição distribucional. O Reality Check de White pega os retornos reais de cada regra, forma a estatística de máximo entre regras, e faz bootstrap de sua distribuição nula diretamente:
onde é o desempenho médio da regra sobre o benchmark. Ele reamostra os retornos com o stationary bootstrap (Politis-Romano — blocos de comprimento aleatório para que a correlação serial sobreviva à reamostragem), recentraliza cada sorteio para satisfazer o nulo por construção, recalcula o máximo em cada sorteio, e reporta o p-value como a fração de máximos de bootstrap que superam o observado. O SPA de Hansen aprimora o RC de duas formas: studentização (divide a média de cada regra pelo seu próprio erro padrão, para que uma regra selvagem de alta variância não sequestre o máximo) e uma recentralização consistente e dependente da amostra do nulo. Nossa implementação adiciona a studentização, mas não a etapa completa de recentralização consistente — então onde quer que este artigo reporte um p-value do tipo SPA, leia como um Reality Check studentizado, não o SPA completo de Hansen. Onde o DSR pergunta "o vencedor é especial dentro desta busca?", o Reality Check pergunta "a melhor regra bate o caixa depois de contabilizar honestamente quantas regras eu tentei?" — e ele lida com regras correlacionadas nativamente, via bootstrap, sem nunca contar trials. Guarde essa distinção; a última seção gira em torno dela.
Ato 3 — A calibração é a prova inteira

Um método que não aponta nada também teria uma taxa de falsos positivos de zero — e seria inútil. Então o único teste significativo dessas ferramentas é um teste de dois lados: em dados de nulo conhecido elas precisam controlar falsos positivos em ou abaixo de , e em dados de edge conhecido (próxima seção) elas ainda precisam disparar. Esta seção é a primeira metade.
Rode 2.000 buscas independentes, cada uma sobre 1.000 estratégias de edge zero, e conte quantas vezes cada método declara uma descoberta. Essa contagem, dividida por 2.000, é a taxa de falsos positivos — e como a verdade é sem edge, toda descoberta é falsa:
| Teste | Taxa de falsos positivos (α = 0,05) |
|---|---|
| Significância ingênua | 1,000 |
| Deflated Sharpe Ratio | 0,001 |
| Harvey-Liu — Bonferroni | 0,057 |
| Harvey-Liu — Holm | 0,057 |
| Harvey-Liu — BHY | 0,007 |
| Reality Check de White | 0,022 |
Todo método fundamentado pousa em ou perto da linha de 5% — os dois haircuts de FWER um pouco acima dela, DSR/BHY/RC abaixo — enquanto o teste ingênuo fica em 100. (Bonferroni e Holm imprimem o mesmo 0,057 aqui, e não por sorte: para a única estratégia melhor, o primeiro passo de Holm é , idêntico a Bonferroni por construção, então é uma confirmação, não duas.) Mas o número mais profundo de todo o estudo não está nesta tabela — é o benchmark deflacionado que produz a coluna DSR. Em média entre as buscas nulas, o sai em um 0,1030 por observação, que anualiza para 1,63 (derivado: ) — o mesmo 1,63 que o vencedor médio de ruído posta (1,63). Isso não é coincidência; é a ideia inteira funcionando:
A barra deflacionada fica exatamente no teto de ruído. O DSR não pede que um vencedor de busca supere zero. Ele pede que o vencedor supere a melhor pontuação que a sorte sozinha produz de uma busca deste tamanho — 1,63 anualizado aqui. Um vencedor que apenas iguala o teto de ruído pontua DSR ≈ 0,5 (uma cara-ou-coroa), razão pela qual o DSR médio nulo é 0,495, não algo pequeno. Para ser uma descoberta, o vencedor precisa superar 1,63 e mais um pouco — o suficiente para empurrar o PSR além de 0,95.
Isso reenquadra todo o exercício. O teste ingênuo mede distância de zero; toda busca supera essa barra trivialmente, razão pela qual ele é inútil. O DSR mede distância do teto de ruído, e superar essa barra é genuinamente difícil — como deveria ser. O haircut de Harvey-Liu e o Reality Check alcançam o mesmo controle por caminhos diferentes (uma inflação para o BHY, uma distribuição de máximo por bootstrap para o RC), e pousam na mesma vizinhança: 0,001 a 0,057, em ou perto de . O 0,057 de Bonferroni/Holm está um fio acima da linha de 5%, mas só um pouco: com 2.000 buscas de Monte Carlo, o erro padrão em uma estimativa de FDR perto de 0,05 é cerca de 0,005, então 0,057 fica aproximadamente 1,4 desvios padrão acima de — ruído de Monte Carlo, não uma garantia quebrada. "Controla FWER" é uma promessa assintótica de qualquer forma, não exata em bits para .
Ato 4 — Poder: ele ainda mantém os edges reais?

Controlar falsos positivos é só metade de um teste — um método paranoico que rejeita tudo pontua um perfeito 0,000 e é inútil. A outra metade: quando um edge genuíno está presente, o DSR o encontra?
Plante um. Em um campo de 1.000 estratégias, faça 25 delas carregarem um edge real de força conhecida e deixe o resto como ruído, então rode a busca e pergunte se o DSR aponta o vencedor. Varra o edge plantado de fraco a forte e o poder de detecção traça uma curva em S limpa (taxa de falso positivo mantida em ~0 durante todo o processo):
| Sharpe verdadeiro plantado (anualizado) | Poder de detecção do DSR | Taxa de falso positivo do DSR |
|---|---|---|
| 0,79 | 0,005 | 0,000 |
| 1,27 | 0,090 | 0,000 |
| 1,90 | 0,651 | 0,000 |
| 2,54 | 0,998 | 0,000 |
| 3,17 | 1,000 | 0,000 |
Observe onde a curva vira. Abaixo do teto de ruído — um Sharpe anualizado verdadeiro de 0,79, bem abaixo de 1,63 — o DSR dispara 0,5% das vezes, corretamente se recusando a chamá-lo: um edge tão fraco é genuinamente indistinguível da sorte que uma busca de 1.000 trials gera, e fingir o contrário seria desonesto, não poderoso. Bem ao redor do teto a curva sobe abruptamente (0,09 em 1,27, 0,65 em 1,90). Em um Sharpe anualizado de 2,54 o poder é 0,998; em 3,17 é um perfeito 1,000. Edges fortes são retidos essencialmente sempre, falsos positivos ficam presos em zero, e o cruzamento de 50% de poder fica em um Sharpe anualizado de cerca de 1,73 (derivado por interpolação entre as linhas 1,27 e 1,90) — logo acima do teto de ruído de 1,63, exatamente onde uma barra honesta deveria colocá-lo: o ponto onde um edge começa a superar o que uma busca de 1.000 trials inventa.
Essa é a propriedade que você realmente quer, declarada como uma curva em S: edges abaixo do teto de ruído são corretamente descartados como sorte; edges confortavelmente acima dele são mantidos com poder se aproximando de um. O teste ingênuo, por contraste, "detecta" o edge plantado 67% das vezes mesmo em um Sharpe verdadeiro de 0,79 — mas esse número não tem significado, porque já vimos que ele detecta um edge inexistente 100% das vezes. Um teste que dispara em tudo não tem poder; não tem discriminação. O DSR troca um pouco de sensibilidade a edges marginais (as linhas 0,79 e 1,27) pela coisa que importa: suas descobertas são reais.
Ato 5 — A armadilha do praticante: grids correlacionados

Tudo até agora usou estratégias independentes — o cenário mais limpo possível, e aquele onde a suposição de independência do DSR vale exatamente. Grids de parâmetros reais não são assim, e é aqui que uma ferramenta usada ingenuamente vira uma nova forma de estar errado.
Pegue uma busca honesta de cruzamento de médias móveis: 16 comprimentos rápidos 40 lentos trials, cada um com 755 observações. Um grid assim está encharcado em correlação — fast=45/slow=120 e fast=45/slow=125 são quase a mesma estratégia, então suas séries de retorno se movem juntas. Correlação pareada média medida entre os 640 trials: cerca de 0,61. Essas não são 640 apostas independentes. Nem de longe.
Caso A — passeio aleatório (sem edge): todo método o elimina, corretamente
Rode o grid sobre um passeio aleatório puro. O vencedor parece tentador: params fast=45/slow=120, melhor Sharpe anualizado 0,81, p-value de teste único 0,081. Todo método enxerga através dele:
| Método | Resultado | Veredito |
|---|---|---|
| DSR (K bruto = 640) | 0,431 | rejeita (< 0,95) |
| p do Reality Check | 0,570 | rejeita |
| p do tipo SPA (RC studentizado) | 0,569 | rejeita |
| Haircut de Harvey-Liu | 100% | rejeita |
Comece pelo sinal que não precisa de nenhuma deflação: mesmo a significância de amostra finita não ajustada deste vencedor, -vs-zero, é apenas 0,918 — já aquém de 0,95 antes mesmo de corrigirmos por um único dos 640 trials. A deflação então o enterra: a barra é um por observação de 0,057, um ~0,91 anualizado (derivado: ) — acima do 0,81 do vencedor. A melhor estratégia nem sequer alcança o teto de ruído, DSR ≈ 0,43 (pior que cara-ou-coroa), e o Reality Check, o teste do tipo SPA e um haircut de 100% concordam: nada aqui. Perfeito. Este é o caso fácil, e funciona — e, como veremos, permanece rejeitado em todas as contagens de trials efetivos que tentarmos.
Caso B — um edge de regime genuíno: o DSR bruto erra
Agora rode o mesmo grid sobre uma série de troca de regime que carrega um edge real, explorável. O vencedor é enfático: params fast=3/slow=55, melhor Sharpe anualizado 3,92 — este é o Sharpe in-sample, selecionado, ele próprio inflado por seleção pela busca (não um edge verdadeiro ou out-of-sample), mas o efeito de regime subjacente é genuíno — com um p-value de teste único de e significância não deflacionada -vs-zero de essencialmente 1,000. Há um edge real aqui e o vencedor o encontrou. Observe o DSR bruto rejeitá-lo mesmo assim:
| Método | Resultado | Veredito |
|---|---|---|
| DSR (K bruto = 640) | 0,748 | rejeita (< 0,95) ✗ deflacionado em excesso |
| p do Reality Check | 0,0024 | confirma ✓ |
| p do tipo SPA (RC studentizado) | 0,0038 | confirma ✓ |
| Haircut de Harvey-Liu | 15% | confirma ✓ |
O DSR bruto de 0,748 é uma falsa rejeição de um edge genuíno. A razão é a suposição de independência, agora violada gravemente: o DSR construiu sua barra deflacionada tratando 640 trials correlacionados como 640 sorteios independentes, o que infla o máximo esperado para um 0,221 por observação — ~3,51 anualizado (derivado: ). Contra uma barra de 3,51, um vencedor de 3,92 a supera apenas modestamente, e o DSR pousa em 0,748 — aquém de 0,95. Duas coisas inflam essa barra: a contagem bruta (640 olhares em vez de um punhado de olhares efetivos), e a dispersão genuína de skill entre os trials — alguns pares de parâmetros realmente são melhores em uma série de regime, o que amplia e eleva o além do que a sorte pura sozinha entregaria. Ambos empurram na mesma direção, e a barra termina alta demais porque a busca nunca foi realmente 640 olhares independentes; foram algumas apostas independentes, amostradas 640 vezes.
Alimente o DSR com o número efetivo de trials em vez disso. A linha única usada acima é uma estimativa grosseira a partir da correlação pareada média:
def effective_n_trials(returns_matrix):
"""N_eff = N / (1 + (N-1) * rho_bar), clipped to [1, N].
Correlated trials -> fewer independent bets."""
C = np.corrcoef(returns_matrix, rowvar=False)
rho_bar = max(np.nanmean(C[np.triu_indices(C.shape[0], k=1)]), 0.0)
N = returns_matrix.shape[1]
neff = N / (1.0 + (N - 1) * rho_bar)
return float(min(max(neff, 1.0), N))
Com e , isso colapsa o grid para um trials efetivos (derivado: ), e o DSR salta para 1,000. Mas pare antes de comemorar esse número, porque ele é a evidência mais fraca de toda esta seção. Em a barra deflacionada colapsa para um anualizado — essencialmente a média dos trials, essencialmente zero. A deflação ali está desligada: o DSR em está apenas reportando de volta a significância de amostra finita não deflacionada do vencedor (-vs-zero ). O veredito é herdado da significância bruta, não produzido pela correção de multiple testing. E a ressalva espelhada do lado do passeio aleatório: sua rejeição em vale apenas porque aquele vencedor já era marginal de forma independente para começar (-vs-zero ). Ancore todo o argumento em 1,6 e um cético estaria certo em duvidar: você desligou a correção e reportou o que estava por baixo.
Então não ancore em um único estimador. O movimento honesto — e o mais forte — é calcular de cinco formas padrão diferentes e ler o veredito em toda a faixa. Aqui estão cinco estimadores aplicados ao mesmo grid de sinal de 640 trials, cada um com a barra deflacionada que ele implica e o DSR que produz:
| Estimador de trials efetivos | Barra deflacionada (anual) | DSR | Veredito | |
|---|---|---|---|---|
| Correlação média | 1,6 | 0,25 | 1,000 | mantém |
| Razão de participação | 2,4 | 0,43 | 1,000 | mantém |
| PCA (95% da variância) | 16 | 1,85 | 1,000 | mantém |
| Kaiser (autovalores > 1) | 21 | 2,00 | 0,999 | mantém |
| Cheverud-Nyholt | 370 | 3,31 | 0,845 | rejeita |
| contagem bruta do grid (sem ajuste) | 640 | 3,51 | 0,748 | rejeita |
Estimadores: correlação média é a fórmula acima; razão de participação e as contagens PCA-95%/Kaiser leem a dimensionalidade efetiva a partir dos autovalores da matriz de correlação; Cheverud-Nyholt é um estimador de variância de autovalores da literatura de genética conhecido por superestimar sob quase-equicorrelação.
Agora o ponto se estabelece, e não é "qualquer ajuste te salva". Observe o meio-termo defensável — PCA-95% () e Kaiser (). Estes não são o regime de deflação desligada; eles impõem uma barra anualizada real de 1,85 a 2,00 — um haircut sério, bem acima do ruído, uma penalidade genuína de multiple testing para 16-21 olhares efetivos. E o edge de 3,92 ainda a supera (DSR 1,000 e 0,999). O sinal sobrevive ao DSR para qualquer abaixo de 144,8 (derivado do ponto de cruzamento); ele falha apenas sob o de Cheverud-Nyholt, um estimador que comprovadamente superestima quando os trials são quase-equicorrelacionados — e mesmo a contagem bruta e não ajustada de 640 só empurra o DSR para baixo até 0,748, não até zero. O vencedor do passeio aleatório, rodado pelos mesmos cinco estimadores, é rejeitado em todos eles (não sobrevive para nenhum acima de 1). Esse é o resultado real: não um único número sortudo, mas um veredito estável em toda a faixa de estimadores padrão de trials efetivos — o que é uma evidência muito mais forte do que confiar em qualquer um deles isoladamente.
Uma ressalva técnica sobre o estimador mais grosseiro, porque explica por que ele fica no extremo mais fraco: é na verdade o fator de redução de variância para a média de variáveis correlacionadas (quanto a média compra sob correlação ). O benchmark do DSR é uma quantidade de valor extremo — o máximo esperado dos trials — então usar uma redução de variância de média como sua contagem de trials é um descompasso funcional: correto na direção (correlacionado ⇒ menos trials efetivos), mas não a quantidade da qual a distribuição do máximo realmente depende. É exatamente por isso que os estimadores baseados em autovalores no meio da faixa são a leitura mais confiável, e por que a faixa, não o ponto, é o entregável.
A lição: use as duas ferramentas, e alimente o DSR com o N correto

Duas coisas se depreendem do Caso B, e ambas são estruturais:
- O tamanho bruto do grid é o N errado para o DSR sempre que os trials são correlacionados — e nenhum N efetivo único é o certo também. Colocar 640 em uma fórmula que assume independência deflaciona em excesso: fabrica um teto de ruído muito mais alto do que a busca de fato alcançou e enterra edges reais sob ele. O DSR precisa da contagem efetiva de trials — mas a correção não é confiar em um único estimador (muito menos o mais grosseiro, onde a correção se desliga perto de ). É ler o veredito em toda a faixa de estimadores padrão (aqui 1,6 a 370) e ver se ele é estável. Para este edge, foi: mantido em todo lugar onde a deflação está genuinamente ativa (uma barra anual real de 1,85-2,00 em -), falhando apenas sob um estimador que superestima. Um veredito estável em toda a faixa é muito mais forte do que qualquer número isolado.
- Combine o DSR com um Reality Check. Note que o Reality Check e sua prima do tipo SPA (studentizada) acertaram o Caso B sem nenhuma cirurgia de contagem de trials (p = 0,0024 e 0,0038) — eles lidam com dependência nativamente, via stationary bootstrap, porque reamostram as séries de retorno correlacionadas reais em vez de contar apostas hipoteticamente independentes. Esse é o desempate para toda a confusão de N efetivo: o RC não precisa de . DSR e RC respondem perguntas diferentes: o DSR pergunta "o vencedor é especial dentro desta busca?" (e precisa saber quantos olhares efetivos a busca deu); o RC/tipo SPA pergunta "a melhor regra bate o caixa depois do data-snooping?" (e lê a dependência diretamente dos dados). Você quer os dois. Quando eles discordam — como o DSR de contagem bruta e o RC fizeram aqui — a discordância é diagnóstica: geralmente significa que seu está errado.
Esse é o mesmo alerta estrutural que nossos estudos speed-ladder e IPC-tax já haviam encontrado pelo lado da engenharia — uma busca rápida que roda um grid correlacionado enorme não está te comprando um número enorme de apostas independentes, e tratar o tamanho do grid como contagem de trials engana tanto seu otimizador quanto seu teste de significância. O companheiro futuro sobre a probabilidade de overfitting de backtest ataca o mesmo viés de seleção pelo lado da reamostragem (CSCV), e combina naturalmente com tudo aqui: o DSR precifica o vencedor, o PBO precifica o procedimento.
Notas de honestidade
Três ressalvas, ditas claramente, porque todo o ponto de um estudo controlado é não superestimá-lo.
- Os retornos são sintéticos. Normal iid para os experimentos de calibração e poder, um processo de troca de regime para o caso de edge genuíno — escolhidos por verdade fundamental controlada, não por realismo de mercado. Retornos reais têm caudas gordas, são autocorrelacionados e não-estacionários, e os termos de skew/curtose do PSR existem precisamente para lidar com o primeiro desses. O entregável aqui é o método calibrado, não uma estratégia: só podemos provar que um teste controla falsos positivos rodando-o em dados onde nós sabemos que não há nada a descobrir. Isso exige fabricar a verdade fundamental.
- Nenhum estimador de N efetivo é canônico — por isso reportamos cinco. A fórmula única de correlação média é legível por revisores e corretamente direcionada (mais correlação ⇒ menos trials efetivos), mas é o fator de redução de variância para uma média — um descompasso funcional com o benchmark de máximo do DSR — e perto de ela desliga a deflação inteiramente. Os estimadores de autovalores (razão de participação, PCA-95%, Kaiser) são mais bem ajustados mas ainda heurísticos, e Cheverud-Nyholt superestima sob equicorrelação. A abordagem mais completa e fundamentada é o clustering de trials (Apêndice 3 do DSR de Bailey & López de Prado): agrupar trials por estrutura de correlação e contar clusters em vez de colapsar tudo em um único escalar. Reportamos a faixa inteira precisamente porque a escolha não está resolvida — um veredito estável em todos os cinco estimadores é a afirmação honesta; uma que dependesse de escolher um único estimador não seria.
- O bootstrap é um Reality Check studentizado, não o SPA completo de Hansen, e as contagens de reamostragem diferem por experimento. Onde quer que este artigo diga "tipo SPA", significa Reality Check de White com studentização por regra; a recentralização completa, consistente e dependente da amostra de Hansen não está implementada. As taxas de falsos positivos de calibração usam 500 reamostras de stationary bootstrap por busca em 400 buscas; os dois p-values de RC/tipo SPA dos estudos de caso usam 5.000 reamostras cada. Comprimento médio de bloco 20 em todos os casos (Politis-Romano), , 252 períodos/ano para anualização. Mude isso e os números na terceira casa decimal se movem; a história — ingênuo 1,000 versus fundamentado 0,001-0,057, uma curva em S alcançando 50% de poder logo acima do teto de ruído, e uma armadilha de grid correlacionado cujo veredito precisa ser lido em toda a faixa de N efetivo — não muda.
Conclusões
- Uma busca de parâmetros é uma máquina de multiple testing, e o teste de significância ingênuo é cego a isso. Em 1.000 estratégias de edge zero, o melhor Sharpe anualizado tem média 1,63 com mediana de p-value de teste único de 0,000686 — e o teste "é significativo?" declara uma descoberta 100% das vezes (taxa de falsos positivos 1,000). Um ótimo Sharpe do nada, certificado como significativo por um teste que nunca fez a pergunta certa.
- O Deflated Sharpe Ratio move o gol de zero para o teto de ruído. O DSR compara o vencedor não contra zero mas contra , o melhor esperado por sorte de uma busca deste tamanho — que, para o caso nulo, pousa em um 1,63 anualizado, exatamente onde fica o vencedor médio de ruído (derivado: ). Sua taxa de falsos positivos nula é 0,001; o haircut de Harvey-Liu (Bonferroni/Holm 0,057, BHY 0,007) e o Reality Check de White (0,022) alcançam o mesmo controle por outros caminhos.
- Ele mantém os edges reais. O poder de detecção do DSR traça uma curva em S que alcança 50% de poder em um Sharpe anualizado de ~1,73 — logo acima do teto de ruído de 1,63: 0,005 em um Sharpe verdadeiro anualizado de 0,79, 0,651 em 1,90, 0,998 em 2,54, 1,000 em 3,17, falsos positivos ~0 durante todo o processo. Edges abaixo do teto são corretamente considerados indistinguíveis de sorte; edges acima dele são retidos com poder se aproximando de um.
- Grids correlacionados quebram o DSR bruto — e nenhum N efetivo único o resgata; a faixa sim. Em um cruzamento de MA de 640 células (correlação pareada média ~0,61), o DSR de contagem bruta rejeitou falsamente um edge genuíno (selecionado in-sample, anual 3,92) (0,748 < 0,95) porque 640 trials correlacionados não são 640 apostas independentes. Mas a correção não é um único mágico — na estimativa mais grosseira () a deflação está essencialmente desligada (barra ~anual 0,25) e o DSR meramente ecoa a significância bruta. A evidência real é que o edge é mantido em toda a faixa de estimadores padrão — DSR 1,000/1,000/1,000/0,999 em 1,6/2,4/16/21, incluindo uma barra anual genuína de 1,85-2,00 no intervalo médio defensável PCA-95%/Kaiser — sobrevivendo para qualquer , e falhando apenas sob o 370 superestimado de Cheverud-Nyholt. O passeio aleatório é rejeitado em todo estimador. Leia a faixa, não um ponto.
- Combine o DSR com um Reality Check, porque eles respondem perguntas diferentes. O Reality Check e sua prima do tipo SPA (studentizada) confirmaram o edge real (p = 0,0024 e 0,0038) sem nenhuma cirurgia de contagem de trials — eles lidam com dependência nativamente via stationary bootstrap, que é exatamente o desempate quando o N efetivo é contestado. O DSR pergunta "o vencedor é especial dentro desta busca?"; o RC/tipo SPA pergunta "o melhor bate o caixa depois do data-snooping?" Uma discordância entre eles é um sinal de que seu está errado. Rode os dois.
O vencedor de uma busca é culpado até que se prove inocente. O p-value ingênuo não é uma prova de inocência — é o próprio testemunho inflado da busca, e ele vai atestar por ruído puro com doze zeros de confiança. Deflacione o benchmark para o que a sorte entrega, conte seus trials efetivos honestamente, e faça bootstrap do máximo para uma segunda opinião. O que superar as três barras pode de fato ser real. O que supera apenas a ingênua é a mais alta entre mil lançadores de moeda.
O experimento completo — o harness de calibração nula, a varredura de poder com edge plantado, as buscas em grid correlacionado, e cada número neste artigo regenerável a partir de um único script determinístico — está no paper complementar em deflated-sharpe.marketmaker.cc, com código e dados em github.com/suenot/deflated-sharpe-search.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.