σμ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 AcademyFeuilles de routeParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Feuilles de routeParcours
AO
+1,2 k apprenants
Connexion
  • 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 AcademyFeuilles de routeParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Feuilles de routeParcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Parcours SciPy›Module 3 · Matrices, signaux et structure›Sujet 3.3·~50 minIntermédiaire

Filtrage de signaux et spectres

Position dans le parcoursModule 3 sur 3 · Sujet 3 sur 5
3.3 Filtrage de signaux et spectres
—Score du lab— / 100XP total—Série—

Lisser une série bruitée et trouver son rythme

Un filtre transforme une série en une autre en mélangeant chaque valeur avec ses voisines. Une moyenne mobile sur NNN jours est le filtre le plus simple : chaque sortie est la moyenne des NNN dernières entrées, donc le bruit diminue mais la sortie prend aussi du retard. Une moyenne mobile exponentielle (MME) donne plus de poids aux jours récents : yt=αxt+(1−α)yt−1y_t=\alpha x_t+(1-\alpha)y_{t-1}yt​=αxt​+(1−α)yt−1​, où α=2/(N+1)\alpha=2/(N+1)α=2/(N+1) est le poids de lissage. signal.lfilter(b, a, x) exécute un tel filtre sur une série, en n'utilisant que des valeurs passées et présentes. Le retard moyen d'une MME est (1−α)/α(1-\alpha)/\alpha(1−α)/α jours, et celui d'une moyenne mobile sur NNN jours est (N−1)/2(N-1)/2(N−1)/2 jours, donc une moyenne de 19 jours et une MME avec α=0,1\alpha=0{,}1α=0,1 ont toutes deux environ 9 jours de retard.

La seconde tâche est la recherche de cycles. signal.periodogram(x) répartit la variance d'une série par fréquences, mesurées en cycles par jour. Un pic à la fréquence fff signale un motif répété de période 1/f1/f1/f jours. Avec une observation par jour, on ne voit que les fréquences jusqu'à 0,50{,}50,5 cycle par jour, la limite de Nyquist, car un cycle plus rapide ne se distingue pas d'un cycle plus lent. Un avertissement compte énormément en trading. signal.filtfilt fait passer le filtre en avant puis en arrière, ce qui supprime le retard, mais chaque sortie utilise alors des valeurs futures. Un signal construit avec filtfilt paraît parfait dans un backtest et ne peut pas être tradé, car les données de demain ne sont pas disponibles aujourd'hui. N'utilisez que des filtres causaux comme lfilter pour tout ce que vous comptez trader.

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)
Trois nombres et un cyclePrenons la série 10;12;1110;12;1110;12;11 avec α=0,5\alpha=0{,}5α=0,5 et démarrons la MME à la première valeur. Alors 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 et y2=0,5⋅11+0,5⋅11=11y_2=0{,}5\cdot11+0{,}5\cdot11=11y2​=0,5⋅11+0,5⋅11=11. Une moyenne mobile sur 3 jours de 10;12;11;1310;12;11;1310;12;11;13 donne 111111 puis 121212. Une fenêtre de 19 jours signifie α=2/20=0,1\alpha=2/20=0{,}1α=2/20=0,1 et un retard de (1−0,1)/0,1=9(1-0{,}1)/0{,}1=9(1−0,1)/0,1=9 jours. Un cycle pur qui se répète 0,050{,}050,05 fois par jour a une période de 1/0,05=201/0{,}05=201/0,05=20 jours, et le périodogramme culmine exactement là. Sur données réelles, les rendements quotidiens de SPY ont une autocorrélation d'ordre 1 de seulement −0,10-0{,}10−0,10, mais leurs carrés ont 0,270{,}270,27 au retard 1 et 0,300{,}300,30 au retard 5 : les grosses journées suivent les grosses journées, c'est le regroupement de volatilité. Une MME des rendements au carré avec le poids α=0,06\alpha=0{,}06α=0,06 (RiskMetrics λ=0,94\lambda=0{,}94λ=0,94) atteignait 0,75%0{,}75\%0,75% par jour le 21 août 2026 (11,9%11{,}9\%11,9% par an), bien sous le 1,20%1{,}20\%1,20% de l'échantillon complet. C'est exactement ce qu'une moyenne lente du passé peut dire sans regarder l'avenir.
  • Lisser coûte du retard : une fenêtre plus longue ou un α\alphaα plus petit retire plus de bruit et retarde davantage le signal.
  • Des périodes à partir des pics : un pic du périodogramme à la fréquence fff signifie un cycle de 1/f1/f1/f jours, jusqu'à une limite de 0,5 cycle par jour.
  • Seulement des filtres causaux pour trader : filtfilt utilise le futur, donc il sert à l'analyse, jamais à un signal réel.

Lab : ce qui est noté

  • Un pas de MME10 pts
  • Une moyenne mobile10 pts
  • Le poids pour une fenêtre10 pts
  • Une période à partir d'une fréquence10 pts
  • Le retard d'une MME10 pts
  • Ce que fait chaque routine15 pts
  • Pourquoi filtfilt ne peut pas être tradé35 pts
0/ 7 traités
Exercices
1Réponse numérique10 ptsSans réponse

Avec α=0,5\alpha=0{,}5α=0,5, y0=10y_0=10y0​=10 et la valeur suivante x1=12x_1=12x1​=12, que vaut y1=αx1+(1−α)y0y_1=\alpha x_1+(1-\alpha)y_0y1​=αx1​+(1−α)y0​ ?

y=y =y=accepté : ± 0.01
2Réponse numérique10 ptsSans réponse

La série est 10; 12; 11; 1310 ;\ 12 ;\ 11 ;\ 1310; 12; 11; 13. Que vaut la moyenne mobile sur 3 jours au dernier jour ?

m=m =m=accepté : ± 0.01
3Réponse numérique10 ptsSans réponse

Une MME doit ressembler à une moyenne sur N=19N=19N=19 jours. Que vaut α=2/(N+1)\alpha=2/(N+1)α=2/(N+1) ?

a=a =a=accepté : ± 0.002
4Réponse numérique10 ptsSans réponse

Le périodogramme d'une série quotidienne culmine à f=0,05f=0{,}05f=0,05 cycle par jour. Combien de jours dure un cycle ?

p=p =p=accepté : ± 0.1
5Réponse numérique10 ptsSans réponse

Une MME a α=0,1\alpha=0{,}1α=0,1. Son retard moyen est (1−α)/α(1-\alpha)/\alpha(1−α)/α jours. Combien de jours ?

l=l =l=accepté : ± 0.05
6Associer15 ptsSans réponse

Associez chaque routine de scipy.signal à ce qu'elle fait.

Choisissez le partenaire de chaque élément de gauche.

lfilter
filtfilt
periodogram
detrend
7Expliquer avec des mots35 ptsSans réponse

Un signal construit avec filtfilt n'a aucun retard et donne un backtest magnifique. En une ou deux phrases, expliquez pourquoi il ne peut pas être tradé.

Mode mathsSaisie au clavier ou en LaTeXExercice 1 sur 7 · Ctrl ⏎ pour vérifier

Connectez-vous pour exécuter votre code.

Tous les cours sont gratuits à lire. Créez un compte ou connectez-vous pour exécuter du code, lancer les tests et soumettre ce lab.

  • IDE dans le navigateur avec terminal bash — rien à installer
  • Correction instantanée, XP et votre place dans le parcours
Créer un compteSe connecter
OU
Continuer avec GitHub