Para calcular un Exponente de Hurst dinámico (también llamado Rolling Hurst Exponent), el modelo cuantitativo no toma todo el histórico de datos a la vez. En su lugar, aplica un algoritmo de ventana móvil o rolling window.
El cálculo se actualiza de forma rígida cada vez que cierra una nueva vela (por ejemplo, cada hora o cada minuto), barriendo los datos más antiguos y manteniendo un tamaño de muestra constante para medir el cambio de régimen de mercado en tiempo real.
Aquí tienes el proceso matemático y lógico paso a paso para calcularlo e implementarlo:
1. Configuración de la Ventana Móvil
El quant debe definir el tamaño de la ventana ($M$). Debe ser lo suficientemente grande para tener validez estadística, pero lo bastante corta para no suavizar demasiado los cambios de régimen actuales.
- En datos de 1 hora (1H), una ventana común es M = 500 o M = 1000 velas.
Cada vez que entra un nuevo dato en el tiempo t, el algoritmo aísla el subconjunto de precios:
$$\mathbf{P}_t = [P_{t-M+1}, P_{t-M+2}, \dots, P_t]$$
2. El Algoritmo de Rango Rescalado (R/S) en la Ventana
Dentro de esa matriz de datos aislada $\mathbf{P}_t$, se ejecuta el cálculo clásico de Hurst:
Paso A: Calcular los retornos logarítmicos
Se transforman los precios en retornos:
$$r_i = \ln\left(\frac{P_i}{P_{i-1}}\right)$$
Paso B: Dividir la ventana en subintervalos
La ventana de tamaño $M$ se divide en subintervalos de longitud $t$ (por ejemplo, si $M=500$, probamos con fragmentos de tamaño $t = 10, 25, 50, 100, 250$). Para cada subintervalo de tamaño $t$:
- Calcular la media ($m$).
- Crear la serie acumulada desviada de la media ($X_k$):$$X_k = \sum_{i=1}^{k} (r_i – m) \quad \text{para } k = 1, \dots, t$$
- Calcular el Rango ($R$): La diferencia entre el valor máximo y mínimo de la serie acumulada:$$R(t) = \max(X_1, \dots, X_t) – \min(X_1, \dots, X_t)$$
- Calcular la Desviación Estándar ($S$) de los retornos originales en ese fragmento.
- Rescalonamiento: Se calcula el ratio $R(t) / S(t)$ para cada tamaño de fragmento y se promedian los resultados.
3. La Regresión Lineal en Tiempo Real
Una vez que el algoritmo tiene los valores de R(t)/S(t) para los diferentes tamaños de fragmento ($t$), aplica la transformación logarítmica que vimos antes para ajustar una línea recta por mínimos cuadrados ordinarios (OLS):
La Fórmula Maestra: ¿Cómo Calcula el Algoritmo el Exponente de Hurst?
Si estás diseñando un modelo de trading cuantitativo basado en la reversión a la media, no puedes guiarte por el «olfato». Necesitas una regla matemática rígida que te diga si el mercado tiene memoria de signo inverso o si es puramente aleatorio.
Ahí es donde entra la linealización del Análisis de Rango Rescalado (R/S). Para que tu servidor o script calcule este indicador en tiempo real, aplica esta ecuación matemática:
ln(R(t) / S(t)) = ln(C) + H * ln(t)
A primera vista puede parecer compleja si no vienes del mundo de las matemáticas, pero en realidad esconde un truco brillante: transforma una curva exponencial en una simple línea recta (la famosa ecuación de la escuela: $y = mx + b$).
Desglosando los Componentes
Para entender qué está pasando bajo el capó de tu algoritmo, veamos qué significa cada término:
- ln: Es el logaritmo natural. Se aplica a ambos lados para «aplanar» la fórmula y permitir que el ordenador haga una regresión lineal ultrarrápida.
- R(t): Es el Rango. Mide la distancia entre el precio máximo y el mínimo alcanzado por el activo dentro de una ventana de tiempo ($t$).
- S(t): Es la Desviación Estándar de los retornos en ese mismo periodo. Al dividir el Rango entre la Desviación ($R/S$), logramos «rescalar» el dato, haciendo que la métrica sea inmune a la volatilidad nominal del activo.
- C: Es una constante matemática de escala.
- t: El intervalo de tiempo o tamaño de la muestra de datos analizada.
- H (El Santo Grial): Es el Exponente de Hurst. En la gráfica, representa la pendiente de la recta.
¿Cómo lo interpreta tu Modelo Cuantitativo en vivo?
Cuando programas una ventana móvil (rolling window) en Python para calcular este dato de forma dinámica, el algoritmo vuelca estos resultados en un plano cartesiano interno:
- En el eje Vertical (Y): Coloca el logaritmo del rango rescalado $\ln(R(t)/S(t))$.
- En el eje Horizontal (X): Coloca el logaritmo del tiempo $\ln(t)$.
El ordenador traza la línea recta que mejor une esos puntos mediante mínimos cuadrados (OLS). La inclinación (pendiente) de esa línea es tu valor H.
Si la línea se inclina hacia arriba ($H > 0.5$): El mercado es tendencial. Apaga el sistema de reversión antes de que la inercia institucional te pase por encima.
Si la línea se aplana ($H < 0.5$): El mercado te está gritando que tiene memoria de signo inverso. Es el momento ideal para que tu sistema active las órdenes automáticas de alta probabilidad y recoja beneficios cortos.
La pendiente de esa línea recta es el valor del Exponente de Hurst (H) para ese instante exacto en el tiempo t.
4. Desplazamiento de la Ventana (El Dinamismo)
Cuando cierra la siguiente vela (tiempo t+1):
- El algoritmo elimina el precio más antiguo (P_{t-M+1}).
- Añade el nuevo precio de cierre (P_{t+1}).
- Vuelve a ejecutar los pasos 2 y 3 instantáneamente.
Implementación Práctica en Python
En los modelos cuantitativos modernos, esto se programa utilizando librerías eficientes como numpy y pandas para realizar el bucle dinámico a alta velocidad:
Python
import numpy as np
import pandas as pd
def calcular_hurst_base(serie_precios):
"""Calcula el Hurst clásico para un bloque de datos fijo"""
lags = range(2, 20)
# Calcular las desviaciones de las diferencias de precios
tau = [np.sqrt(np.std(np.subtract(serie_precios[lag:], serie_precios[:-lag]))) for lag in lags]
# Regresión lineal para hallar la pendiente (Hurst)
poly = np.polyfit(np.log(lags), np.log(tau), 1)
return poly[0] * 2.0 # Ajuste del exponente
# Supongamos que 'df' es un dataframe con 10,000 velas de EURUSD
# Definimos la ventana móvil rígida de 500 periodos
ventana = 500
# Calculamos el Hurst dinámico aplicando la función en una ventana móvil
df['Hurst_Dinamico'] = df['Close'].rolling(window=ventana).apply(calcular_hurst_base, raw=True)
El Resultado Gráfico
Al final de este proceso, el modelo cuantitativo obtiene una nueva línea (indicador continuo) debajo del gráfico de precios.
Si el indicador cruza con rigidez por debajo de 0.40, el algoritmo sabe que el activo ha entrado en una fase de fuerte memoria de signo inverso (reversión a la media) y activa inmediatamente las órdenes cortas de esperanza truncada en los extremos de volatilidad. Si sube de 0.60, apaga la estrategia de reversión para evitar ser destruido por una nueva tendencia en desarrollo.
Deja una respuesta