σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyRoadmapsRoteiros
Ctrl K
AO
+1,2 mil alunos
EntrarParticipar ↗
RoadmapsRoteiros
AO
+1,2 mil alunos
Entrar
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyRoadmapsRoteiros
Ctrl K
AO
+1,2 mil alunos
EntrarParticipar ↗
RoadmapsRoteiros
AO
+1,2 mil alunos
Entrar
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Roteiro de SciPy›Módulo 1 · Ajustar e encontrar›Tópico 1.3·~45 minIntermediário

Testes de hipóteses e bootstrap

Posição no roteiroMódulo 1 de 3 · Tópico 3 de 8
1.3 Testes de hipóteses e bootstrap
—Nota do lab— / 100XP total—Sequência—

Uma barra de erro para cada afirmação

Um backtest diz que uma estratégia ganhou 0,05% ao dia. Habilidade ou sorte? Um teste de hipótese responde com um valor p: se a média verdadeira fosse zero, com que frequência uma amostra pareceria tão boa? stats.ttest_1samp(r, 0.0) testa uma média, e stats.ttest_ind(a, b, equal_var=False) compara dois ativos sem supor que sejam igualmente voláteis (teste de Welch, a escolha segura). stats.jarque_bera(r) verifica se os retornos são normais olhando assimetria e curtose. Um valor p pequeno é evidência contra a ideia testada, não prova da ideia de que gostamos. E um teste vale o que valem suas suposições: o teste t supõe caudas finas, que os retornos diários não têm.

Quando as fórmulas são duvidosas, reamostre. O bootstrap sorteia muitas amostras com reposição dos seus dados, recalcula uma estatística a cada vez (a média, um índice de Sharpe, um quantil) e lê um intervalo da dispersão dos resultados: stats.bootstrap((r,), stat, method='percentile', random_state=np.random.default_rng(seed)). A estatística precisa aceitar um argumento axis, porque o SciPy passa um lote inteiro de reamostras de uma vez, e a semente torna a resposta repetível. Um teste de permutação embaralha os rótulos de dois grupos para ver com que frequência o acaso sozinho dá uma diferença tão grande quanto a observada. Por fim, teste 62 ativos a 5% e cerca de três parecerão significativos só por sorte. stats.false_discovery_control(p) aplica a correção de Benjamini–Hochberg e diz quais descobertas sobrevivem.

O que dizem os dados reaisNos últimos 2.500 pregões o SPY ganhou em média 0,046% ao dia, com t=2,80 e p=0,005. Seu índice de Sharpe anualizado é 0,89, e um intervalo bootstrap de 95% vai de 0,26 a 1,53: os dados não o definem melhor. Dos 62 ativos, 22 passam no teste de 5% de média diferente de zero, mas só 12 sobrevivem à correção de Benjamini–Hochberg. O teste de Jarque–Bera rejeita a normalidade do SPY com valor p igual a 0.
  • Welch por padrão: não suponha que dois ativos tenham a mesma volatilidade.
  • Reamostrar na dúvida: um bootstrap precisa de uma estatística com argumento axis e uma semente.
  • Conte seus testes: 62 testes a 5% dão cerca de três falsas descobertas; corrija-as.

Lab: o que é avaliado

  • A média é zero?8 pts
  • Dois ativos, duas volatilidades8 pts
  • Um teste de normalidade6 pts
  • Um intervalo bootstrap18 pts
  • Um índice de Sharpe anualizado8 pts
  • Um índice de Sharpe com barra de erro10 pts
  • Um teste de permutação14 pts
  • Contar falsas descobertas12 pts
  • O estudo completo16 pts
Explorador · lab-sp-13
▾ lab-sp-13
▾ data
…
bash · no navegador
learner@quantcraft:~/lab-sp-13$
Python ainda não carregadoPythonLn 1, Col 1Spaces: 4UTF-8

Redefinir este tópico?

Tudo em lab-sp-13 volta aos arquivos iniciais e o terminal é limpo. Sua solução atual será perdida — isso não pode ser desfeito.

Será redefinido
  • main.py → código inicial
  • Histórico do terminal e saída dos testes
  • Alterações não enviadas
Será mantido
  • Melhor nota do lab
  • Seu XP e sua sequência
  • Progresso da aula e anotações

Entre para executar o seu código.

Todas as aulas são gratuitas para ler. Crie uma conta ou entre para executar código, rodar os testes e enviar este lab.

  • IDE no navegador com terminal bash — nada para instalar
  • Correção instantânea, XP e o seu lugar no roteiro
Criar uma contaEntrar
OU
Continuar com o GitHub