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.
lfilteres en vivo,filtfiltes 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