σμ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 AcademyHojas de rutaRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Hojas de rutaRutas
AO
+1,2 k estudiantes
Iniciar sesión
  • 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 AcademyHojas de rutaRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Hojas de rutaRutas
AO
+1,2 k estudiantes
Iniciar sesión
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Ruta de SciPy›Módulo 3 · Matrices, señales y estructura›Tema 3.6·~45 minIntermedio

Filtros causales para señales de trading

Posición en la rutaMódulo 3 de 3 · Tema 6 de 10
3.6 Filtros causales para señales de trading
—Puntuación del lab— / 100XP total—Racha—

Una línea suave que ha visto el futuro

Un filtro convierte una secuencia de entrada xₜ en una salida yₜ como suma ponderada de entradas y salidas recientes. La media móvil exponencial es el más simple: yₜ=αxₜ+(1-α)yₜ₋₁. En scipy.signal un filtro es un par de listas de coeficientes, b para las entradas y a para las salidas, y aquí yₜ=b₀xₜ-a₁yₜ₋₁ con b = [alpha] y a = [1, -(1 - alpha)]. signal.lfilter(b, a, x) lo ejecuta hacia delante en el tiempo, exactamente como un sistema en vivo, así que yₜ solo depende de xₛ con s≤t. Por defecto parte del reposo (estado cero), lo que falsea los primeros valores para un precio cercano a 100; pase zi = signal.lfilter_zi(b, a) * x[0] para partir del primer valor. El resultado coincide con pd.Series(x).ewm(alpha=alpha, adjust=False).mean() hasta la precisión de máquina.

signal.filtfilt(b, a, x) ejecuta el mismo filtro hacia delante y luego hacia atrás. El retardo se cancela, así que la línea suave queda sobre los datos, lo que se ve perfecto en un gráfico, pero cada salida depende ahora de entradas posteriores. Usado para construir una señal de trading es una fuga. Tome una señal de tendencia, el log del precio menos su media, y correlaciónela con el rendimiento del día siguiente: para SPY en 2.501 días y α=0,1, la señal causal tiene una correlación de -0,055 (una débil reversión a la media), la de fase cero -0,33; para α=0,3 las cifras son -0,076 y -0,54. Ningún trader podría ganar esas cifras de fase cero, porque el valor filtrado ya contiene el precio de mañana. La prueba de una señal es sencilla: trunque los datos en una fecha y compruebe que los valores anteriores no cambian.

  • lfilter es en vivo, filtfilt es retrospectiva: solo el primero puede correr en una mesa de trading.
  • Fije el estado inicial: lfilter_zi(b, a) * x[0] elimina el transitorio de arranque.
  • Prueba de truncamiento: corte los datos en una fecha; una señal válida no cambia antes de ella.

Lab: qué se califica

  • Coeficientes del filtro10 pts
  • La media causal20 pts
  • La versión de pandas10 pts
  • La media de fase cero15 pts
  • Señales y rendimiento de mañana25 pts
  • El estudio de SPY20 pts
Explorador · lab-sp-21
▾ lab-sp-21
▾ data
…
bash · en el navegador
learner@quantcraft:~/lab-sp-21$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

Todo lo que hay en lab-sp-21 vuelve a los archivos iniciales y se limpia el terminal. Tu solución actual se perderá: no se puede deshacer.

Se restablecerá
  • main.py → código inicial
  • Historial del terminal y salida de pruebas
  • Cambios sin enviar
Se conservará
  • Mejor puntuación del lab
  • Tu XP y tu racha
  • Progreso de la lección y notas

Inicia sesión para ejecutar tu código.

Todas las clases se pueden leer gratis. Crea una cuenta o inicia sesión para ejecutar código, lanzar las pruebas y enviar este lab.

  • IDE en el navegador con terminal bash — sin instalar nada
  • Corrección instantánea, XP y tu lugar en la ruta
Crear una cuentaIniciar sesión
O
Continuar con GitHub