Acceder

Momentum como método de inversión con Python (Parte 1)

INTRODUCCIÓN

La inversión en momentum es una técnica de inversión con muchos años de historia, pero que hasta ahora no esta empezando a tomar protagonismo. Hace unos años el value, impulsado por exitosos inversores como Warren Buffet, Peter Lynch o en España Francisco García Paramés, era la estrategia estrella. Sin embargo, los últimos años el value ha pasado a la historia, siendo estos fondos los que peor lo han hecho los últimos años. La estrategia que ha cogido el relevo como la estrella estos últimos años ha sido la estrategia “Growth” o en crecimiento. Estos años han sido sin duda gloriosos para estos fondos alcanzando rentabilidades muy altas anualmente y de forma consistente (aunque eso sí, soportando altos niveles de volatilidad).

La estrategia momentum en todos estos años no ha sido nunca la mejor, pero sí la más constante. Consiste básicamente en analizar las tendencias del mercado y moverte con él. De esta forma, cuando los inversores preferían seguir la estrategia value, los inversores en momentum también seguían estas acciones. Pero en cuanto la cosa cambio y los inversores prefirieron seguir la estrategia “Growth”, los inversores en momentum pivotaron y se subieron a este carro.

PRESENTACIÓN DEL ANÁLISIS

Hoy vamos a analizar con datos distintos escenarios en los cuales usaremos el análisis del momentum con una simple fórmula que explicaremos más adelante. La idea es ver que rendimientos suele tener esta estrategia y cómo podemos utilizarla en nuestras inversiones, adaptándola a nuestra filosofía de inversión.

Para ello, utilizaremos un histórico de datos del MSCI World desde 2000 hasta ahora. Para analizar estos datos utilizaremos el entorno de Google Colab y el lenguaje será Python.

Antes de nada, vamos a presentar el paper de Gary Antonacci Absolute Momentum: a Simple Rule-Based Strategy and Universal Trend-Following Overlay (2013). En este paper, Antonacci presenta en un artículo de carácter científico y de forma práctica el Absolute Momentum. El Absolute Momentum, a diferencia del Momentum que mayormente usamos, no busca comparar que acción/sector/mercado está mejor que otro para invertir, si no que simplemente trata de analizar si es buen momento o no para estar en cierta acción/sector/mercado de forma absoluta, es decir, sin compararla con nadie. Una de las estrategias expuestas en este paper consiste en simplemente utilizar un índice de renta variable (en nuestro caso el MSCI World) y si el momentum es negativo nos salimos. En el paper utilizan un activo libre de riesgo para entrar como refugio cuando la señal sea negativa, nosotros vamos a plantear diversos escenarios ampliando un poco el estudio realizado por Antonacci, pero (por ahora) si la señal es negativa simplemente estaremos desinvertidos 100%.

En nuestro caso, empezaremos haciendo el mismo análisis y posteriormente haremos algunos experimentos para comparar cómo hubiera sido el comportamiento si hubiéramos añadido un componente de volatilidad a la ecuación.

ANÁLISIS SIMPLE

Como comentaba anteriormente, en el primer análisis haremos un estudio similar al que hace Antonacci. La regla consiste básicamente en calcular la rentabilidad a 1 año cada día. Este periodo de rentabilidad es el que mejores rendimientos ha dado en el estudio expuesto en el artículo, comparándolo con otros muchos otros como rentabilidad a 1 mes, 1 cuatrimestre, 1 semestre o 1 semana. Creo que tiene cierto sentido que el que mejor funcione sea el anual, ya que una buena forma de saber si un activo lo está haciendo bien es compararlo con el precio de su acción el año anterior . Nadie paga más hoy por algo que estaba igual o peor el año pasado (salvo casos expecionales), pero si puedes equivocarte con mayor facilidad y pagar más hoy por algo que estaba igual o peor hace un mes. Este tipo de variaciones las vemos constantemente, por ejemplo para ver la evolución del beneficio de una empresa, o para datos macro como el PIB o el IPC. Vamos por tanto a confiar en este análisis e ir directamente a obtener la rentabilidad de nuestros precios respecto el valor 250 días atrás (he elegido descargar un histórico diario luego explicaré el por qué) que sería aproximadamente un año.

Como vemos, en el año 2020 se ve claramente ese rápido cambio de tendencia en marzo y como progresivamente se ha ido convirtiendo en tendencia alcista a medida que se recuperaban las bolsas. La línea horizontal está trazada en 0, de forma que valores por encima de la línea indican tendencia alcista y por debajo de la línea tendencia bajista.

PROGRAMACIÓN

Vamos a programar ahora un sistema automático de compra y venta de forma que compre cuando el ratio pase de un valor negativo a positivo y venda cuando pase de un valor positivo a uno negativo. Veremos luego cuáles han sido los resultados y aplicaremos el mismo proceso, pero con ligeras modificaciones que pasaré a explicar más adelante.

El código es sencillo, simplemente hemos puesto como condición que si el valor del momentum en d-1, es decir, el día de ayer, fue positivo que añada la rentabilidad obtenida en el periodo de hoy, es decir, Precio de cierre de hoy – Precio de cierre de ayer. Esto nos dará una rentabilidad algo engañosa, ya que realmente estamos suponiendo una rentabilidad diaria, pero nosotros cuando entremos o salgamos no lo haremos al precio de cierre del día anterior. Sin embargo, este efecto dependerá también del número de señales de entrada o salida que, por lo menos en este primer análisis, son relativamente pocas.

Este es el código que hemos programado y que nos ha dado tanto la evolución que hubiera tenido nuestro patrimonio siguiendo una estrategia momentum como la obtenida si hubiéramos invertido durante todo este tiempo. Cabe recalcar que la rentabilidad es sin dividendos en ambos casos, lo cual puede también distorsionar un poco la realidad ya que todo el periodo que nosotros no hubiéramos estado invertidos nos hubiéramos perdido algunos dividendos, mientras que manteniendo nuestra cartera durante todo este tiempo en el MSCI sí que nos hubiéramos beneficiado de esos dividendos.

RESULTADOS

Los resultados obtenidos han sido los siguientes:

La línea azul es la evolución de nuestro patrimonio siguiendo una estrategia momentum y la amarilla manteniendo nuestra cartera invertida todo este tiempo. Podemos ver como hemos conseguido en la mayoría de los casos evitar la mayor parte de las caídas, aunque también nos hubiéramos perdido parte de las recuperaciones (tal y como ocurre este año donde nuestro patrimonio apenas se habría recuperado ya que habríamos entrado nos hubiéramos salido muy tarde):

Esto intentaremos solucionarlo posteriormente, incorporando un factor volatilidad que explicaré más adelante.

A pesar de todo, los resultados parecen coincidir con los que obtuvo Antonacci, una gran reducción de la volatilidad manteniendo o incluso superando en este caso unos niveles parecidos de rentabilidad (con su consiguiente mejoría del Ratio de Sharpe), y lo más importante, conseguir reducir drásticamente nuestra pérdida máxima.

ANÁLISIS INCLUYENDO VOLATILIDAD

Para poder luchar contra momentos de alta volatilidad, se me ha ocurrido incluir en nuestro análisis un factor que detecte momentos de alta volatilidad y los incorpore a la ecuación del momentum. De esta forma, lo que queremos es que, si se nos dispara la volatilidad, la rentabilidad a 1 año exigida para mantener el activo tiene que ser mayor de la que lo sería con niveles de volatilidad normales. Esto puede tener sentido ya que normalmente la volatilidad se dispara en momentos de caídas, lo cual podría darnos una señal de alerta y permitirnos actuar antes. El ejemplo de si esto funcionará o no lo veremos sobretodo en la evolución de este año, donde esperamos que la señal nos permita salirnos antes y (dada la caída en la volatilidad) entrar más o menos al mismo tiempo. Sin embargo, también puede que nos dé más señales de salida y de entrada provocando así que la rentabilidad obtenida diste cada vez más de la realidad por lo comentado anteriormente.

PRESENTACIÓN DEL PROBLEMA

Antes de nada, veamos el efecto que tiene incorporar activos muy volátiles a nuestra cartera. Para ello, vamos a comparar la evolución del MSCI con el Nasdaq, activos completamente diferentes en cuanto a rentabilidad y volatilidad se refiere:

Y si comparamos el indicador momentum aparentemente las señales son similares:

Vamos por tanto a realizar el mismo estudio con este índice para ver qué ocurre:

Como vemos, la rentabilidad se ha visto muy perjudicada, incluso nos hubiéramos perdido gran parte de la recuperación, y aunque sí que hemos conseguido reducir la volatilidad, el drawdown sigue siendo muy elevado. Por tanto, podemos ver cómo (tal y como sospechamos) parece que este método pierde eficacia en activos muy volátiles.

POSIBLES SOLUCIONES

Para afrontar estos momentos de alta volatilidad, vamos a hacer varias pruebas. En un primer momento, se me ocurrió simplemente calcular la volatilidad anualizada y hacer algo parecido a lo que hacemos con el precio, si el cambio de volatilidad respecto un año atrás es positivo le exigiremos a nuestra rentabilidad respecto un año atrás que supere a este aumento en la volatilidad. Sin embargo, tras un simple vistazo del movimiento de este indicador a lo largo del tiempo, ya podemos suponer que los resultados no van a ser muy buenos y la operativa será complicada:

El indicador oscila continuamente alrededor del 0 y pasando de un lado a otro, por lo que la inmensa cantidad de señales haría completamente inviable la operatividad de esto además de que más que posiblemente afecte a nuestra rentabilidad media:

Solo esto serían las señales de 2019, pero en todo el horizonte temporal las señales que nos hubiera dado este indicador serían 2792, aproximadamente 100 señales al año.

Si probamos a hacer un backtest con este nuevo momentum, vemos como se confirma que los resultados son incluso peores que si no hiciéramos nada:

Siendo en este caso peor el Ratio de Sharpe y aumentando el máximo drawdown (justo lo contrario de lo que buscábamos)

Frente a esto, se me ocurrió suavizar esta volatilidad, aplicando una media móvil de 50 periodos (en este caso días) y el resultado parece que promete.

Como vemos, la volatilidad se ha suavizado mucho lo cual también debería disminuir drásticamente el número de señales que ofrece.

Efectivamente, el número de señales se ha reducido y podemos afirmar que por lo menos operativamente, esta modificación del indicador hace mas viable su aplicación. De hecho, el número de señales se ha reducido a 88 frente a las 176 que ofrecía el modelo simple. Como apunte, era de esperar que el número de señales disminuyese ya que al hacer medias móviles y medias respecto un año atrás hemos perdido aproximadamente 400 datos, sin embargo, dado el tamaño de la muestra no esperaba que disminuyese tanto. Veamos ahora si hemos conseguido reducir nuestro máximo drawdown:

Tal y como pensábamos, al haber menos señales también dejamos al activo que fluctúe más, provocando así que la rentabilidad se asemeje más a la del índice referencia y permitiéndonos aun así disminuir nuestra volatilidad. Sin embargo, el objetivo que era reducir ese drawdown y darnos la señal de salirnos antes no lo hemos conseguido del todo, ya que aunque sí que hemos reducido ligeramente esta pérdida máxima, todavía sigue siendo muy elevada (en comparación con el método simple). Creo que esto se debe a que la media móvil ha sido muy alta, provocando que el impacto que tengan movimientos bruscos en la volatilidad se transforme en ligeros cambios en esta media móvil e impidiendo por tanto que salte la señal. Supongo que disminuyendo el número de días de la media móvil esto podría solventarse, pero también aumentaría el número de señales. Hasta ahora había puesto 50 como una mera prueba, pero voy ahora a probar que ocurriría si hiciésemos lo mismo con 20 días (1 mes), 40 días (2 meses) y 60 días (3 meses).

Este sería el resultado utilizando una media móvil de 20 días. Como vemos el número de señales aumenta considerablemente y esto afecta directamente a la rentabilidad provocando que mayores señales de salida impidan aprovecharse de las recuperaciones. Además, la volatilidad y el drawdown tambien han aumentado ligeramente.

En el caso de utilizar 40 días, el número de señales disminuye con respecto a 20 días (como era de esperar) aunque sigue siendo superior a la de 50 días (como también era de esperar). Hemos conseguido también una mayor rentabilidad comparándolo con la media móvil de 20 días, debido a ese menor número de señales y también hemos reducido la volatilidad. Sin embargo, nuevamente el drawdown sigue siendo superior que en el caso de 50 días y en este caso incluso superior al de 20 días.

Finalmente, utilizando 60 días en la media móvil el resultado ha sido también similar en cuanto a rentabilidad (manteniendo unos niveles de rentabilidad anual similares a si no utilizáramos el indicador) y reduciendo drásticamente la volatilidad. Sin embargo, seguimos teniendo unos altos niveles de drawdown.

Llama la atención ver cómo al aumentar los periodos en la media movil y suavizar por tanto nuestra volatilidad, nuestra rentabilidad media aumenta. Una explicación que se me ocurre es que, este método te permite salirte cuando la tendencia ha llegado a su fin y entrar cuando ha iniciado. Esto implica que siempre iremos tarde, tanto para salir como para entrar, asumiendo así que las recuperaciones nos perderemos parte de ella y por tanto la rentabilidad en ese periodo será menor que el mercado. Si esto lo repetimos muchas veces, el impacto empieza a ser mayor y acaba ocurriendo lo visto anteriormente.

En caso de que utilicemos el msci para ver que tal funciona este nuevo indicador incluyendo la volatilidad vemos que realmente, en activos poco volátiles, incluir un factor de volatilidad no solo no ayuda a reducir nuestro drawdown si no que afecta negativamente a la rentabilidad e incluso puede aumentar el número de señales, dificultando así su operativa.

CONCLUSION

Como hemos comprobado, siguiendo una estrategia de momentum podemos reducir drásticamente nuestra volatilidad manteniendo unos retornos similares. En el caso de activos con alta volatilidad como pueden ser en este caso las empresas tecnológicas, hemos visto que funciona mejor si incluimos un factor de volatilidad, que nos ayudará a reducir nuestras señales tanto de entrada como de salida y nos permitirá reducir la volatilidad aun manteniendo altos retornos. Por otro lado, reducir el máximo drawdown es una tarea difícil de solventar, aunque creo que no se le debe dar mucha importancia. Si observamos los gráficos adjuntados anteriormente, podemos ver como precisamente estas caídas mas pronunciadas en nuestra cartera utilizando el momentum vienen precedidas por momentos de fuertes subidas. Entendiendo el funcionamiento del indicador, es normal que después de un año muy bueno tarde mucho en dar señal de salida, ya que tenemos que estar en un año tan malo como bueno fue el anterior. Sin embargo, en términos generales el indicador lo ha hecho mucho mejor que el mercado, manteniendo unas tasas similares de rentabilidad y reduciendo drásticamente su volatilidad.

Tenéis aquí disponible el código y los datos históricos utilizados. Si queréis probar con vuestros propios históricos podéis hacerlo sin problema, simplemente tenéis que subir el archivo a el proyecto de Google Colab e importarlo con pd.read_csv().

En la próxima entrada, introduciremos otros activos en la cartera, de forma que pasaremos a combinar dos (o más) tipos de activos e iremos saltando de uno a otro a medida que la tendencia de uno se vaya debilitando y la de otro fortaleciendo. De esta forma evitaremos que se den esos momentos en los que nuestro patrimonio está completamente desinvertido, algo para nada viable para gestores y asesores.

No olvides seguirme en mis redes sociales y suscribirte a este blog para más análisis:

Twitter : @KevinGonGar

LinkedIn : /kevingnzlz

14
¿Te ha gustado mi artículo?
Si quieres saber más y estar al día de mis reflexiones, suscríbete a mi blog y sé el primero en recibir las nuevas publicaciones en tu correo electrónico
  1. en respuesta a efueyo
    -
    #14
    23/02/22 14:27
    Claro! De hecho la estrategia se está haciendo con diferentes índices de renta variable que pueden ser sustituidos por ETFs o fondos de inversión indexados que repliquen cualquiera de estos índices. Se podría complicar más haciendo esto con diferentes índices regionales e incluso por tipo de activo. Sin embargo, mi consejo es que lo hagas lo más sencillo posible para luego poder llevarlo a cabo sin problemas.
  2. #13
    23/02/22 13:40
    Kevin, Se que hay fondos de inversión que son gestionados utilizando esta estrategia. No es este el sentido de mi pregunta siguiente. Mi pregunta es si crees que esta estrategia, también puede ser utilizada por un pequeño inversor en la gestión de una pequeña cartera de fondos. Saludos
  3. en respuesta a Kevingonzalez
    -
    #12
    21/02/22 23:18
    Kevi, ¿Conoces alguna Web en la que pueda ver alguna forma de ejecutar esta estrategia combinándola con algún otro indicador, stoploss, trailling stops, etc.?  
  4. en respuesta a efueyo
    -
    #11
    21/02/22 23:09
    Eso es.
  5. en respuesta a Kevingonzalez
    -
    #10
    21/02/22 23:08
    Gracias Kevin, entiendo entonces que, estamos 'limpiando' la rentabilidad de las cotizaciones respecto a su valor hace 250 días,  restádole la diferencia entre las volatilidades de hoy y de hace 250 días, para eliminar de alguna manera las oscilaciones, ¿no?  dísculpa mi insistencia. 
  6. en respuesta a efueyo
    -
    #9
    21/02/22 21:05
    Eso es, la esencia es la misma que con el momentum “normal” pero en lugar de con el precio lo hacemos con la volatilidad. Al final lo que nos interesa es saber si la volatilidad hoy es menor a la que era hace un año, de la misma forma que en el momentum “normal” buscábamos que el precio estuviera por encima que hace un año. Soy consciente de que en volatilidad los valores fluctúan mucho y no de forma creciente o de creciente, sino lateral. Sin embargo, creo que es mejor que usar una simple media movil ya que la volatilidad es muy volátil (valga la redundancia) y con una media movil estos valores extremos distorsionarían constantemente esta media.
  7. en respuesta a Kevingonzalez
    -
    #8
    21/02/22 20:51
    Gracias Kevin. Estoy intentando entender en todo su alcance, tu algoritmo, y me surge otra duda. Cuando calculas 'New Momentun, ¿por qué restas dos veces la volatilidad (df['New Momentum'] = df['Momentum'] - (df['Vol'] - df['Vol'].shift(250)))?.  Estamos restando la volatilidad del día actual y la de hace 250 días. 
  8. en respuesta a efueyo
    -
    #7
    21/02/22 18:55
    Holaa @efueyo, gracias por tu comentario. Pues lo cierto es que es un error mio. En ambos casos debería de ser 260 ya que son días laborables. En cualquier caso, eso solo afecta al dato de rentabilidad anualizada que será superior, pero las conclusiones son las mismas.

    Un saludo.
  9. #6
    21/02/22 16:56
    @KevinGonGar Muchas gracias Kevin, por esta aportación. Te agradecería una aclaración.
    En los retornos anualizados, consideras 'periods_per_year = 365'.
    ¿por qué en la volatilidad anualizada consideras 'periods_per_year = 260'?. Saludos
  10. Nuevo
    #5
    02/10/20 18:53
    Que gran aporte, muchas gracias 
  11. en respuesta a Tibu74
    -
    #4
    25/09/20 15:15
    Muchas gracias @Tribu74 por tu comentario. Realmente el objetivo de este análisis era ver simplemente los resultados que hubiera tenido aplicar una inversión en momentum durante el largo plazo, pero de una forma muy sencilla: si hay señal entramos, si no nos salimos (no nos ponemos cortos). En la entrada que estoy preparando estoy intentando programar un sistema de pivotaje entre activos de forma que vaya dando saltos de un activo a otro en función de su momentum y comparar el rendimiento de esta cartera con varias combinaciones de carteras, ahi veremos de forma más realista una posible estrategia de inversión utilizando el momentum.
    Por otro lado, lo que dices de tu RN, estoy convencido de que en el corto/medio plazo posiblemente el periodo de 1Y no sea el más adecuado. Sin embargo, aquí la idea es estudiar una estrategia lo más estable posible y que consiga batir al mercado, y en el largo plazo el periodo que mejor funciona parece ser el de 1Y (según Antonacci).
    Un saludo!
  12. #3
    25/09/20 13:28
    Muy interesante!

    Recomiendas utilizar el momentum 1Y(momento de un año) para ponerte corto.

    Sin embargo, en la RN que he diseñado, el momento de 1Y no es un buen predictor.

    Puede ser que haya sido mal predictor historicamente, pero muy bueno en los ultimos meses.

    Saludos

  13. en respuesta a Salva Marqués
    -
    #2
    24/09/20 13:36
    Gracias Salva por tu comentario. Los blogs que me comentas ya los conocía, estoy suscrito a ambos de hecho, gracias de todos modos!
    Un saludo.
  14. Top 100
    #1
    24/09/20 12:02
    Interesante artículo Kevin. Con permiso comparto un par de blogs de reciente creación en Rankia y que creo que te podrían gustar:


    Un saludo!

Definiciones de interés
Sitios que sigo
También puedes encontrarme en Twitter y en LinkedIn a través de los siguientes enlaces: Twitter: https://twitter.com/rutafinanciera LinkedIn: https://www.linkedin.com/in/kevingnzlz/