Las medias móviles suavizan el precio, pero siempre llegan tarde y tratan todas las observaciones igual, sin importar cuánto ruido haya en el mercado. El filtro de Kalman resuelve un problema más ambicioso: estima un estado oculto (el valor subyacente "verdadero") a partir de observaciones ruidosas, actualizando su estimación de forma recursiva con cada dato nuevo y ponderando la información nueva según cuánto se fía de ella. Eso lo convierte en una de las herramientas más útiles para un quant en MATLAB: suavizado adaptativo, ratios de cobertura dinámicos para pairs trading y betas variables en el tiempo.
La intuición, sin dolor de cabeza matricial
Un filtro de Kalman alterna dos pasos en cada barra:
Cuando las observaciones son ruidosas en relación con el estado, la ganancia es pequeña y el filtro suaviza con fuerza. Cuando el estado se mueve deprisa, la ganancia crece y el filtro sigue al precio con agilidad. Esa adaptabilidad es justo lo que les falta a las medias móviles de longitud fija.
Un suavizador de precios mínimo en MATLAB
Para un modelo de estado de paseo aleatorio con observación escalar, el filtro completo cabe en unas pocas líneas:
El cociente Q/R es el único mando de ajuste real: suba Q (o baje R) y el filtro se pega al precio; haga lo contrario y suaviza como una media móvil larga — pero con mucho menos retardo para la misma suavidad, porque la ganancia se adapta.
La aplicación estrella: ratios de cobertura dinámicos en pairs trading
El enfoque de manual para un pairs trade estima el ratio de cobertura con una regresión OLS sobre una ventana fija y lo asume constante. Las relaciones reales derivan, y un ratio desactualizado convierte silenciosamente un spread neutral al mercado en una apuesta direccional.
La formulación con Kalman trata el propio ratio de cobertura (y el intercepto) como el estado oculto, observado a través de la ecuación de regresión en cada barra. El vector de estado es
En MATLAB puede escribir el filtro de dos estados a mano exactamente como arriba (con matrices 2x2), o apoyarse en la Control System Toolbox (
Advertencias prácticas
En resumen
El filtro de Kalman ofrece al trader de MATLAB una alternativa adaptativa, recursiva y con base teórica frente a las regresiones de ventana fija y las medias móviles: menos retardo para la misma suavidad, ratios de cobertura que siguen al mercado en lugar de a una ventana, y un chequeo de salud incorporado en la serie de innovaciones. Domine primero el suavizador escalar y pase después al filtro de regresión de dos estados: no en vano es el caballo de batalla de muchas mesas de arbitraje estadístico.
La intuición, sin dolor de cabeza matricial
Un filtro de Kalman alterna dos pasos en cada barra:
- Predicción: proyecta la estimación actual del estado un paso hacia delante y amplía su incertidumbre (las cosas derivan).
- Actualización: compara la nueva observación con la predicción. La diferencia es la innovación. El filtro desplaza su estimación hacia la observación en una fracción llamada ganancia de Kalman, que se recalcula en cada paso a partir del tamaño relativo del ruido de proceso (cuán rápido puede cambiar el estado real) y del ruido de medida (cuán ruidosas son las observaciones).
Cuando las observaciones son ruidosas en relación con el estado, la ganancia es pequeña y el filtro suaviza con fuerza. Cuando el estado se mueve deprisa, la ganancia crece y el filtro sigue al precio con agilidad. Esa adaptabilidad es justo lo que les falta a las medias móviles de longitud fija.
Un suavizador de precios mínimo en MATLAB
Para un modelo de estado de paseo aleatorio con observación escalar, el filtro completo cabe en unas pocas líneas:
% y: vector columna de precios (o log-precios)
Q = 1e-5; % varianza del ruido de proceso (el estado deriva)
R = 1e-2; % varianza del ruido de medida (las observaciones son ruidosas)
n = numel(y);
xhat = zeros(n,1); P = zeros(n,1);
xhat(1) = y(1); P(1) = 1;
for t = 2:n
% prediccion
xpred = xhat(t-1);
Ppred = P(t-1) + Q;
% actualizacion
K = Ppred / (Ppred + R); % ganancia de Kalman
xhat(t) = xpred + K * (y(t) - xpred);
P(t) = (1 - K) * Ppred;
end
El cociente Q/R es el único mando de ajuste real: suba Q (o baje R) y el filtro se pega al precio; haga lo contrario y suaviza como una media móvil larga — pero con mucho menos retardo para la misma suavidad, porque la ganancia se adapta.
La aplicación estrella: ratios de cobertura dinámicos en pairs trading
El enfoque de manual para un pairs trade estima el ratio de cobertura con una regresión OLS sobre una ventana fija y lo asume constante. Las relaciones reales derivan, y un ratio desactualizado convierte silenciosamente un spread neutral al mercado en una apuesta direccional.
La formulación con Kalman trata el propio ratio de cobertura (y el intercepto) como el estado oculto, observado a través de la ecuación de regresión en cada barra. El vector de estado es
[alpha_t; beta_t], la matriz de observación en cada paso es H_t = [1, x_t], y el filtro reestima ambos coeficientes barra a barra con memoria que decae exponencialmente. El spread que se opera es la innovación — la diferencia entre la y observada y la predicción del filtro —, que por construcción tiene media cero si el modelo se cumple.En MATLAB puede escribir el filtro de dos estados a mano exactamente como arriba (con matrices 2x2), o apoyarse en la Control System Toolbox (
kalman) y en la maquinaria de espacio de estados de la Econometrics Toolbox (ssm, filter, smooth), que además estima las varianzas de ruido por máxima verosimilitud en lugar de ajustarlas a ojo.Advertencias prácticas
- No use el smoother para backtests. El smoother de Kalman (a diferencia del filtro) usa toda la muestra, incluidos datos futuros: gráficos preciosos, sesgo de anticipación. Para señales de trading solo es legítima la estimación filtrada en el instante t.
- Modelos basura, basura con confianza. El filtro siempre produce una estimación, con una incertidumbre que presupone que el modelo es correcto. Si la relación del par se rompe de verdad (exclusión de cotización, operación corporativa, cambio de régimen), el filtro seguirá rastreando como si nada — vigile las innovaciones: si dejan de parecer ruido de media cero, el modelo está roto.
- Ajuste con honestidad. Unos Q y R elegidos para maximizar el beneficio del backtest son simplemente otro par de parámetros sobreajustados. Estimarlos por máxima verosimilitud en una ventana de entrenamiento y congelarlos fuera de muestra es el camino defendible.
En resumen
El filtro de Kalman ofrece al trader de MATLAB una alternativa adaptativa, recursiva y con base teórica frente a las regresiones de ventana fija y las medias móviles: menos retardo para la misma suavidad, ratios de cobertura que siguen al mercado en lugar de a una ventana, y un chequeo de salud incorporado en la serie de innovaciones. Domine primero el suavizador escalar y pase después al filtro de regresión de dos estados: no en vano es el caballo de batalla de muchas mesas de arbitraje estadístico.