Ir al contenido principal

Tu primera estrategia cuantitativa

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

Los promedios móviles tienen dos importantes características: Primero, suavizan el ruido que se encuentran en los precios; Segundo, van retrasados con respecto a la acción del precio mas reciente. Entre mas larga la ventana de tiempo que se analice, mayor será el retraso asociado al promedio movil. En un intento de reducir esté efecto, se aplican los promedios exponenciales. Sin embargo, dado que el factor de suavizamiento es fijo, los promedios móviles exponenciales no se pueden adaptar a la volatilidad del mercado. Durante periodos de ausencia de tendencia secular o mercados lateralizados, ni los promedios móviles simples ni exponenciales eliminan el potencial de una larga lista de falsos positivos o aleteos (“whipsaws”), los cuales erosionan el capital.

Dicho lo anterior y en un intento de adaptación a la volatilidad del mercado se presenta el promedio movil adaptativo. La mayoría de las técnicas de promedios adaptativos utilizan alguna medida de volatilidad, la cual tiene el fin de producir un promedio exponencial modificado. El promedio adaptativo de Perry Kaufman’s (KAMA, por sus siglas en ingles) usa la suma absoluta de los cambios en los precios como una medida de volatilidad. John Elters (dimensión fractal y entropía) y Tushar Chande (desviación estándar) han desarrollado otros filtros ampliamente ocupados por los traders o analistas. El factor común denominador de estas técnicas es la alteración del largo efectivo de la ventana de datos para un promedio exponencial, el cual responde a cambios en los precios.

Enfocaré el problema desde una perspectiva diferente. Emplearé el concepto estadístico de la regresión lineal para desarrollar un promedio movil adaptativo (RAMA, Regression Adaptative Moving Averge). 

Para el desarrollo de la estrategia, utilizaré el marco de referencia propuesto por Quantconnect. En conjunto a los conceptos de cada etapa, añadiré el código en Python y ejemplificación en base a la estrategia propuesta.

  • 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:

  1. Importar los datos y seleccionar una ventana de tiempo.
  2. Calcular el promedio movil simple para compararlo con las reglas (utilizando la ventana de tiempo anterior).
  3. 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).
  4. Calcular el percentil del error estándar actual versus el conjunto de la ventana de tiempo.
  5. Pronosticar o predecir el precio de cierre utilizando el ajuste de volatilidad.
  6. Comparar si el precio se ajusta a las reglas de compra o venta.
  7. 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.
se adjuntara a la función que une todo.
  • 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:


Ahora bien ¿es 25 días la ventana óptima para el proceso? ¿Se podrá ocupar para otro tipo de instrumentos, tales como divisas y precios de bonos? Para responder a esas preguntas te recomiendo implementar una simulación de Montecarlo usando como función de generadora de retornos un kernel gaussiano basado en los parámetros de los retornos históricos del instrumentos. Luego promedias los resultados y obtienes tu respuesta. Se que suena complicado, pero en realidad, la pronunciación es mas difícil que su implementación. En mis próximos artículos abordare este tema.

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

Entradas más populares de este blog

Impopular, pero no hay una píldora mágica para escapar de ella.

Los mercados son instancias en donde se transan bienes y servicios, los cuales actúan como sistemas descentralizados, gobernados por relaciones caóticas y fuertemente influenciados por factores estocásticos, es decir, son sistemas complejos. Los agentes económicos que cotizan, compran y venden los instrumentos agregan información proveniente de estímulos externos basados en riesgos macro económicos. Dentro de esos mercados, esta el mercado de bonos soberanos, los cuales transan las expectativas de crecimiento e inflación para el gobierno central de un país. Ambas variables se pueden ver desde dos ángulos complementarios: mercado secundario y balance fiscal.

A list of SDKs that may help your next project

Now that I work independently, I can code whatever I want, whenever I want. One of my favorite things to code and publish is SDKs (Software development kits) related to APIs, specifically financial APIs. This helps analysts standardize the layer of data extraction and helps them work with the actual stuff they are good at. Extract insights for educated guesses about the market. Without further due, let me show you a list of curated financial SDKs that may help your work as an analyst or trader (be aware that some of these SDK will be in Spanish):  End-of-Day data extractor https://github.com/LautaroParada/eod-data This library is the Python 🐍 unofficial SDK for the EOD Historical data REST API. It's intended to be used for data extraction for financial valuations, macroeconomic analyses, sentiment analysis, option strategies, technical analysis, development of machine learning models, and more! Variance Ratio Test https://github.com/LautaroParada/variance-test These statistical te

Índice de miedo y codicia chileno

El índice de miedo y codicia (IMC) fue desarrollado originalmente por CNNMoney  para el mercado de renta variable estadounidense. Se creó para parametrizar la  variabilidad de las principales emociones que influyen a los inversionistas, las cuales van desde el miedo extremo hasta la codicia extrema. El índice se mide de forma diaria, pero se puede sacar muestras en cualquier otra periodicidad (semanal, mensual, etc.). Desde el 2018, se desarrolló un índice alternativo (relacionado a las criptomonedas) por la empresa Alternative.me . En teoría, el índice se puede utilizar para medir si el mercado de valores tiene un precio justo o no . Esto se basa en la lógica de que el miedo excesivo tiende a bajar los precios de las acciones, y la codicia excesiva tiende a influir en el efecto contrario. En jerga financiera, estos dos efectos se conocen como “exuberancia irracional” , es decir, los precios ya no reflejan la información financiera actual de la compañía, por ende, se empieza a inco