Desde que los holandeses implementaron el primer mercado de valores en 1611, los analistas han tratado de crear estrategias que sistematicen la agregación de información. El fin póstumo es adelantarse al consenso generalizado, el cual siempre está mal debido a que llegan tarde o derechamente está mal. Su mantra siempre ha sido y será comprar miedo para luego vender codicia, ya que de esa manera se logra materializar las ganancias de capital (en largo o en corto).
Dicho lo anterior, los marcos de referencia han evolucionado en conjunto a la tecnología disponible en cada estadio cultural. Desde los clásico “chartistas” que descubren las zonas de liquidez en base a fractales de otros mercados e instrumentos y los replican en el instrumento analizado, hasta los tiempos mas recientes donde se enfoca en parametrizar el agregamiento de información exógena en los precios. El último enfoque se conoce como “Quant” o Cuantitativo. El método se basa en utilizar las herramientas de las ciencias exactas, y desde ese punto extraer los factores que dirigen los retornos en los mercados.
¿Cómo se aborda tal enfoque? La respuesta radica en el siempre asertivo Julio Cesar, el cual nos dejó el refrán "divide y vencerás".
![]() |
Fuente: Steemit |
En este articulo desarrollaré mi método para desplegar estrategias cuantitativas, más un ejemplo de una. Ocuparé Python para su ejecución y análisis. Los datos vendrán de la API EOD Historical Data. Podrás encontrar el cliente que desarrollé para la API en su repositorio en GitHub. Terminaré el artículo con una conclusión del trabajo realizado y las características deseadas que deberás explorar al momento de implementar o crear alguna estrategia cuantitativa de manera profesional (en tu trabajo diario o con tu patrimonio).
Estrategia
- Universo: En este primer paso se seleccionan los instrumentos o activos que se comercializarán. El filtro puede ser dinámico (basado en fundamentos económicos o financieros) o una canasta fija. Dado que es el primer articulo con respecto a una estrategia cuantitativa, me avocaré a la segunda opción. En artículos posteriores escribiré concerniente a este punto, pero por el momento, es mejor la simplicidad. Expresado lo anterior, ejemplificare mi estrategia con el ETF (Exchange traded fund) del S&P 500. Este instrumento sigue el indice en el cual cotizan las 500 empresas con mayor capitalización bursátil de Estados Unidos.
- Alpha: Este paso se ocupa principalmente de predecir las tendencias del mercado y señalar los mejores momentos para invertir basado en las reglas del algoritmo. Las predicciones o señales tienen las siguientes características: tipo (hallazgo de precio o volatilidad), dirección (alza, baja o mantenerse), periodo (tiempo de duración), magnitud (nivel de ganancia esperado), confianza y peso (si hay múltiples señales, cuanto vale en porcentaje). Las señales deben generarse en un conjunto definido de activos proporcionados por el universo y solo deben emitirse cuando cambian (de compra a venta y viceversa). En la siguiente sección comentaré en detalle el Alpha de RAMA.
- Portafolio: Aquí se calcula la distribución del capital con respecto al universo elegido, es decir, se computa el numero de instrumentos a comprar. Existen varias metodologías para calcular la distribución óptima, tales como Markowitz, Black Litterman, Hierarchical Risk Parity, VaR, etc. Por el momento no ahondaré en estas metodologías ya que asumen una canasta amplia de instrumentos a invertir. En artículos futuros ahondare en especifico en cada una de ellas.
- Ejecución: Un aspecto a veces olvidado por los traders es la forma en que entran a las posiciones. Normalmente asumen ejecución inmediata, lo cual puede ser un poco irrealista. En la practica, los grandes operadores de algoritmos de alta frecuencia utilizan órdenes limite, VWAP o emiten órdenes basados en la desviación estándar de los precios. En este articulo prefiero la simplicidad, así que asumiré ejecución instantánea.
- Administración del riesgo: En simple, este último paso considera cuanto estas dispuesto a perder por posición antes de cerrarla, y de esa manera cortar las pérdidas de manera temprana. En rigor, este paso es una prolongación de la ejecución, pero se desarrolla de manera independiente, debido a que existe todo un abanico de opciones. Entre las más comunes se encuentran: Trailing Stop, Option Hedging, Exposición máximo a algún sector, Detección de crisis flash, máxima perdida, VaR, etc. Por el momento, el algoritmo asumirá que las reglas de venta descritas en Alpha corresponderán a la administración del riesgo. En artículos futuros expandiré en detalle este tema.
Ejecución estrategia
He expresado que mi universo será el ETF del S&P500 (AMEX:SPY), no habrá distribución óptima del capital (ya que es un solo instrumento), la ejecución se asumirá instantánea y la administración del riesgo estará basada en las reglas de salida del Alpha ¿Pero cual es el Alpha de RAMA?
RAMA es un estimador de los precios de cierre basado en una regresión ajustada a la volatilidad. Cuando la volatilidad es alta, RAMA sigue de cerca al precio actual y se mantiene por sobre algún promedio movil de referencia (el tamaño de la ventana de ambos debe ser igual para ser comparables, e.g. promedio movil de 25 periodos en ambos). Cuando la volatilidad es baja, RAMA se mueve por debajo del promedio movil y se mueve pro sobre el precio actual. Esta adaptabilidad reduce tu riesgo durante periodos de alta volatilidad, y al mismo tiempo, reduce la probabilidad de tocar tu stop-loss durante periodos de alza en los precios y baja volatilidad.
Formalmente las reglas son las siguientes: Cuando los precios se mueven por encima de RAMA y RAMA está por debajo el promedio movil simple, se indica una señal de compra. Cuando los precios estan por debajo de RAMA y RAMA está por sobre el promedio movil simple, se indica una señal de venta. El pseudo algoritmo para calcular RAMA es el siguiente:
- Importar los datos y seleccionar una ventana de tiempo.
- Calcular el promedio movil simple para compararlo con las reglas (utilizando la ventana de tiempo anterior).
- Calcular el error estándar de una regresión lineal de los precios de cierre del instrumento (el rango de datos corresponde a la ventana de tiempo elegida).
- Calcular el percentil del error estándar actual versus el conjunto de la ventana de tiempo.
- Pronosticar o predecir el precio de cierre utilizando el ajuste de volatilidad.
- Comparar si el precio se ajusta a las reglas de compra o venta.
- Repetir el proceso para cada dato nuevo.
Implementación y Backtesting
Para la implementación del código utilizaré el enfoque de programación funcional, el cual no es mas que dividir el proceso en pequeñas partes para luego unirlo en una función que engloba todo el proceso. Dicho eso, el código en Python para el pseudo código anterior es el siguiente:
- Importar los datos y seleccionar una ventana de tiempo (25 días).
- Calcular el promedio movil simple para compararlo con las reglas (utilizando la ventana de tiempo anterior).
- Calcular el error estándar de una regresión lineal de los precios de cierre del instrumento (el rango de datos corresponde a la ventana de tiempo elegida).
- Calcular el percentil del error estándar actual versus el conjunto de la ventana de tiempo.
- Pronosticar o predecir el precio de cierre utilizando el ajuste de volatilidad.
- Comparar si el precio se ajusta a las reglas de compra o venta.
- Unir todas las funciones.
Con nuestra implementación completa veamos los resultados para el SPY. Acortando los datos (por temas visuales) desde mayo de 2019 hasta la fecha de publicación de este articulo, la evolución de precios del SPY es la siguiente:
Como se puede apreciar, la masiva corrección durante marzo de 2020 nos puede dar potenciales entradas para rentabilizar. Gráficamente, la estrategia se visualiza de la siguiente manera:
Naturalmente al ojo humano no es evidente donde se encuentran las entradas y las salidas, es por eso que marque con color verde las entradas y con rojo los eventos de salida. Su código y visualización es la siguiente:
Ahora que es más claro donde se encuentran las entradas y las salidas, se puede apreciar que la estrategia ha encontrado de manera bastante eficiente y eficaz puntos de compra y venta sistemáticos. Expandiendo este comportamiento a la incepción de SPY, su rentabilidad promedio por cada año es la siguiente:
Como se puede apreciar, la estrategia no es capaz de explotar el SPY de manera exorbitante ¿Se mantendrá el mismo comportamiento para otros tipos de ETFs? Veamos:
- ETFs relacionados a tasas de interés:
- ETFs relacionados a crecimiento secular:
- ETFs relacionados a alternativas del dinero FIAT:
- ETFs relacionados a Commodities:
- ETFs relacionados a Volatilidad:
Conclusión
El promedio movil adaptativo basado en regresiones lineales (RAMA) es un enfoque novedoso al problema de incorporar la volatilidad del mercado en los promedios móviles. Se ocupa el concepto de regresión lineal del precio versus el tiempo y es relativamente fácil de implementar en Python. Usando el error estándar de la línea de regresión como una medición de la volatilidad, se produce un promedio movil que filtra señales de potenciales bajas en el mercado. Al mismo tiempo permite la detección temprana de alzas en los precios cuando la volatilidad es baja, sin la interferencia de salidas subóptimas.
Comentarios
Publicar un comentario