σμ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 3 · Matrizes, sinais e estrutura›Tópico 3.3·~50 minIntermediário

Filtragem de sinais e espectros

Posição no roteiroMódulo 3 de 3 · Tópico 3 de 5
3.3 Filtragem de sinais e espectros
—Nota do lab— / 100XP total—Sequência—

Suavizar uma série ruidosa e achar seu ritmo

Um filtro transforma uma série em outra misturando cada valor com seus vizinhos. Uma média móvel de NNN dias é o filtro mais simples: cada saída é a média das últimas NNN entradas, então o ruído diminui, mas a saída também atrasa. Uma média móvel exponencial (MME) dá mais peso aos dias recentes: yt=αxt+(1−α)yt−1y_t=\alpha x_t+(1-\alpha)y_{t-1}yt​=αxt​+(1−α)yt−1​, em que α=2/(N+1)\alpha=2/(N+1)α=2/(N+1) é o peso de suavização. signal.lfilter(b, a, x) roda um filtro assim sobre uma série, usando só valores passados e presentes. O atraso médio de uma MME é (1−α)/α(1-\alpha)/\alpha(1−α)/α dias, e o de uma média móvel de NNN dias é (N−1)/2(N-1)/2(N−1)/2 dias, então uma média de 19 dias e uma MME com α=0,1\alpha=0{,}1α=0,1 atrasam ambas cerca de 9 dias.

A segunda tarefa é achar ciclos. signal.periodogram(x) reparte a variância de uma série por frequências, medidas em ciclos por dia. Um pico na frequência fff indica um padrão repetido de período 1/f1/f1/f dias. Com uma observação por dia só se veem frequências até 0,50{,}50,5 ciclo por dia, o limite de Nyquist, porque um ciclo mais rápido não se distingue de um mais lento. Um aviso importa muitíssimo em trading. signal.filtfilt passa o filtro para a frente e depois para trás, o que elimina o atraso, mas então cada saída usa valores futuros. Um sinal construído com filtfilt parece perfeito num backtest e não pode ser negociado, porque os dados de amanhã não estão disponíveis hoje. Use só filtros causais como lfilter para tudo que pretende negociar.

yt=αxt+(1−α)yt−1,α=2N+1,lag=1−αα  (moving average: N−12),period=1fy_t=\alpha x_t+(1-\alpha)y_{t-1},\quad \alpha=\frac{2}{N+1},\quad \text{lag}=\frac{1-\alpha}{\alpha}\ \ \Big(\text{moving average: }\frac{N-1}{2}\Big),\qquad \text{period}=\frac1fyt​=αxt​+(1−α)yt−1​,α=N+12​,lag=α1−α​  (moving average: 2N−1​),period=f1​(1)
Três números e um cicloTome a série 10;12;1110;12;1110;12;11 com α=0,5\alpha=0{,}5α=0,5 e comece a MME no primeiro valor. Então y0=10y_0=10y0​=10, y1=0,5⋅12+0,5⋅10=11y_1=0{,}5\cdot12+0{,}5\cdot10=11y1​=0,5⋅12+0,5⋅10=11 e y2=0,5⋅11+0,5⋅11=11y_2=0{,}5\cdot11+0{,}5\cdot11=11y2​=0,5⋅11+0,5⋅11=11. Uma média móvel de 3 dias de 10;12;11;1310;12;11;1310;12;11;13 dá 111111 e depois 121212. Uma janela de 19 dias significa α=2/20=0,1\alpha=2/20=0{,}1α=2/20=0,1 e um atraso de (1−0,1)/0,1=9(1-0{,}1)/0{,}1=9(1−0,1)/0,1=9 dias. Um ciclo puro que se repete 0,050{,}050,05 vez por dia tem período de 1/0,05=201/0{,}05=201/0,05=20 dias, e o periodograma tem pico exatamente ali. Em dados reais, os retornos diários do SPY têm autocorrelação de ordem 1 de apenas −0,10-0{,}10−0,10, mas seus quadrados têm 0,270{,}270,27 na defasagem 1 e 0,300{,}300,30 na 5: dias grandes seguem dias grandes, o agrupamento de volatilidade. Uma MME dos retornos ao quadrado com peso α=0,06\alpha=0{,}06α=0,06 (RiskMetrics λ=0,94\lambda=0{,}94λ=0,94) chegou a 0,75%0{,}75\%0,75% ao dia em 21 de agosto de 2026 (11,9%11{,}9\%11,9% ao ano), bem abaixo dos 1,20%1{,}20\%1,20% da amostra inteira. É exatamente o que uma média lenta do passado pode dizer sem olhar para o futuro.
  • Suavizar custa atraso: uma janela maior ou um α\alphaα menor remove mais ruído e atrasa mais o sinal.
  • Períodos a partir de picos: um pico do periodograma na frequência fff significa um ciclo de 1/f1/f1/f dias, até o limite de 0,5 ciclo por dia.
  • Só filtros causais para negociar: filtfilt usa o futuro, então serve para análise, nunca para um sinal real.

Lab: o que é avaliado

  • Um passo de MME10 pts
  • Uma média móvel10 pts
  • O peso para uma janela10 pts
  • Um período a partir de uma frequência10 pts
  • O atraso de uma MME10 pts
  • O que cada rotina faz15 pts
  • Por que filtfilt não pode ser negociado35 pts
0/ 7 respondidas
Tarefas
1Resposta numérica10 ptsSem resposta

Com α=0,5\alpha=0{,}5α=0,5, y0=10y_0=10y0​=10 e o valor seguinte x1=12x_1=12x1​=12, quanto vale y1=αx1+(1−α)y0y_1=\alpha x_1+(1-\alpha)y_0y1​=αx1​+(1−α)y0​?

y=y =y=aceito: ± 0.01
2Resposta numérica10 ptsSem resposta

A série é 10; 12; 11; 1310 ;\ 12 ;\ 11 ;\ 1310; 12; 11; 13. Quanto vale a média móvel de 3 dias no último dia?

m=m =m=aceito: ± 0.01
3Resposta numérica10 ptsSem resposta

Uma MME deve se parecer com uma média de N=19N=19N=19 dias. Quanto vale α=2/(N+1)\alpha=2/(N+1)α=2/(N+1)?

a=a =a=aceito: ± 0.002
4Resposta numérica10 ptsSem resposta

O periodograma de uma série diária tem pico em f=0,05f=0{,}05f=0,05 ciclo por dia. Quantos dias dura um ciclo?

p=p =p=aceito: ± 0.1
5Resposta numérica10 ptsSem resposta

Uma MME tem α=0,1\alpha=0{,}1α=0,1. Seu atraso médio é (1−α)/α(1-\alpha)/\alpha(1−α)/α dias. Quantos dias?

l=l =l=aceito: ± 0.05
6Associar15 ptsSem resposta

Associe cada rotina do scipy.signal ao que ela faz.

Escolha o par de cada item da esquerda.

lfilter
filtfilt
periodogram
detrend
7Explicar com palavras35 ptsSem resposta

Um sinal feito com filtfilt não tem atraso e dá um backtest maravilhoso. Em uma ou duas frases, explique por que ele não pode ser negociado.

Modo matemáticaEntrada por teclado ou LaTeXTarefa 1 de 7 · Ctrl ⏎ para verificar

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