Lab · estatísticas populacionais
Densidade de Sharpe e scatter populacional (μ, σ, t)
Biblioteca de ajuste de distribuições e visualização para trabalhar com populações de estratégias de 38k+ variantes por ativo.
A matemática
Para cada estratégia i em um pool de N variantes, observada ao longo de T barras com retornos realizados ri,t, compute
Sob o nulo de retornos N(0, σ²) independentes, a estatística Sharpe studentizada tem uma distribuição Student-t com T − 1 graus de liberdade. Para T moderado, isso é bem aproximado por uma normal padrão.
A visualização populacional agrega N estatísticas-t em um histograma. Sob o nulo global (sem edge real em lugar nenhum) esse histograma é a distribuição empírica de N variáveis N(0, 1) i.i.d. Qualquer desvio, especialmente na cauda direita, é a assinatura no nível populacional de um subconjunto não-vazio de não-nulos verdadeiros.
Inflação por comparações múltiplas
No limiar de “significância de 5%” |t| > 1,96, a contagem esperada de falsos positivos em um pool de N = 38.000 estratégias extraídas do nulo global é
Qualquer estratégia individual passando |t| > 1,96 nesse pool é virtualmente desinformativa. O limiar corrigido por Bonferroni para controle populacional a 5% é , extremamente conservador e provável de matar todo o sinal. O movimento certo é controle de FDR via knockoffs (M/02) ou Benjamini–Hochberg, que a biblioteca reporta junto com a distribuição bruta.
Distribuição amostral do índice de Sharpe
Para o Sharpe deflacionado de Bailey & López de Prado (2014), o erro-padrão de um Sharpe observado depende de seu skew e curtose:
onde γ3, γ4 são skewness e curtose da distribuição de retornos por barra. Para retornos cripto com caudas pesadas isso pode inflar o SE em 30–50% relativo à baseline Gaussiana; a biblioteca reporta tanto o limite ingênuo quanto o deflacionado.
Exemplo trabalhado
Gere N = 2.000 estratégias com T = 200 barras cada. 5% (k = 100) carregam um edge verdadeiro com (logo Sharpe por barra de 0,06, anualizado ≈ 0,95 em frequência diária). As 1.900 restantes são puro ruído.
- # esperado de |t| > 2 do pool de ruído: 1900 · (1 − Φ(2)) · 2 ≈ 87 falsas descobertas.
- # esperado de |t| > 2 do pool de alpha: 100 · P(ti > 2 − √200·0,06) ≈ 100 · P(Z > 1,15) ≈ 12,5. Logo, aproximadamente 12 descobertas verdadeiras.
- A FDP realizada no corte |t| > 2 portanto fica perto de 87 / (87 + 12) ≈ 88%. Esse é o baseline que você precisa bater com qualquer regra de seleção.
O demo abaixo regenera esse cenário ao vivo. Aumente a fração de alpha e veja a cauda direita da densidade de Sharpe crescer; o scatter (μ, σ) colore os pontos alpha-positivos em laranja via |t| > 2.
Demo: Sharpe density & (μ, σ, t) scatter
2000 strategies, T=200 bars each. Most are pure noise; 100 carry a small true edge.
Figuras
Por que isso importa para estratégias sistemáticas
Populações de estratégias do tamanho com que trabalhamos (38k+ variantes por ativo) são basicamente intratáveis sem uma biblioteca para resumi-las. A biblioteca dá a mesma entrada para cada modelo a jusante: um tensor de resumo por estratégia com μ, σ, Sharpe, t, p-valor, e momentos de retorno por barra. M/01 (RMT) consome a estrutura de correlação dos retornos; M/02 (HC + knockoffs) consome as estatísticas-t; M/03 (TDA) consome as mesmas correlações que M/01 mas extrai invariantes topológicos; M/04 (EVT) consome retornos por barra diretamente. Rotinas de visualização são a ponte entre a população e o pattern-matching humano: o scatter (μ, σ) é onde você primeiro vê se seu subconjunto filtrado está em outro planeta em relação ao bulk, ou apenas em um canto ligeiramente mais sortudo do mesmo.
Reprodutibilidade
DaruFinance / strategy-stats
Python · implementação de referência open-source
Invocação mínima
from strategy_stats import population_summary, sharpe_kde, mu_sigma_scatter
# returns: N x T strategy returns matrix
summary = population_summary(returns, periods_per_year=252)
print(summary.head()) # mu, sigma, sharpe, t, p_value
ax = sharpe_kde(summary['sharpe'])
ax = mu_sigma_scatter(summary, color_by='t')
Referências
- [1]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 40(5), 94–107.
- [2]Lo, A. W. (2002). The statistics of Sharpe ratios. Financial Analysts Journal 58(4), 36–52.
- [3]Harvey, C. R., Liu, Y. & Zhu, H. (2016). … and the cross-section of expected returns. Review of Financial Studies 29(1), 5–68.

