¿Existe el rally navideño o es un mito?

7

El mito del Rally navideño


Como no podía ser de otra forma, si voy a escribir algo en vísperas navideñas, no puedo no hablar de la navidad y el espíritu navideño, si bien parece raro relacionar esto con la bolsa, no lo es tanto..

No me pregunten cómo se originó, pero por alguna razón existe un mito bolsero de un supuesto "rally navideño", algunos explican que puede originarse en temas fiscales, otros en un cierto espíritu optimista de estas fechas, en fin, sea cual fuera la razón que intenten aludir para darnos una explicación de algún fenómeno, lo mejor es siempre desconfiar y sacar nuestras propias conclusiones

Voy a ser sincero, lo primero que me vino a la mente ayer cuando un lector me preguntó por este mito fue "bueno, vamos a demostrar estadísticamente que es una pavada y nada mas que un simple mito"

Mi postura ante cualquier comentario que intente incidir en el comportamiento de la gente ante situaciones en la bolsa es siempre el mismo en realidad: desconfiar. 

Y los invito a que tomen el mismo camino, así venga de la persona que mas respetan en el mundo de la bolsa. Es más, desconfíen de esto que están leyendo ahora mismo, no me crean, intenten siempre ponerse en la vereda opuesta, eso los va a llevar indefectiblemente a tener que buscar un razonamiento propio, no vale desconfiar "porque si" tienen que buscar argumentos duros, refutar de alguna manera científica lo que les dicen.

Con esa postura empecé a buscar argumentos para demostrar que el rally navideño es puro mito, pero lamentablemente no encontré la forma de refutarlo, de hecho, encontré (para mi sorpresa) alguna leve evidencia de que el mito tiene un sustento estadístico cierto

Bueno, al menos, le doy el beneficio de la duda, lo cual, partiendo de la base inicial donde lo había considerado "una pavada", ya es algo, al menos para mi.

Pero basta de cháchara (sarasa como le decimos en Argentina) y vamos a los números duros


La historia semana a semana del SP500


Hago un pequeño disclaimer antes que nada, en mis artículos me referiré por lo general al índice de acciones de USA por dos motivos, por un lado porque es un índice referente, y por otro lado, porque es un índice que tiene mucha historia y accesible de forma gratuita para todo el mundo

El objetivo principal de este blog es difundir herramientas quantitativas a nivel popular, asimismo con el uso de Python para realizar cálculos quantitativos,  con lo cual valoro siempre herramientas de fácil acceso para todos y sobre todo gratuitos como el SDK de yfinance que nos brinda data histórica de casi 100 años del SP500 gratis
Ya se que  yahoo no es precisamente la mejor fuente de datos, tiene sus pequeños errores, pero es muy práctica y está al alcance de todos, por eso uso esta herramienta

Hecha esas salvedades, veamos que nos dicen los números respecto al supuesto "rally navideño"

Para comenzar nos bajamos todos los datos del SP500 desde 1928, y calculamos el rendimiento de cada semana, hay muchas formas de hacerlo, se me ocurrió esta, pero hay muchas otras, como utilizar resampleos de la serie original diaria a semanal etc.

cálculo del rendimiento semanal del SP500 desde 1928
cálculo del rendimiento semanal del SP500 desde 1928



Como verán, bajé los datos, luego le aplico en la misma línea la función pct_change() que me calcula la variación diaria en cada fecha,  le sumo 1 para obtener un factor multiplicativo que me permita calcular un rendimiento compuesto semanal.

Luego le genero un agrupamiento por año y semana y a ese agrupamiento le aplico el producto ya que tenía los factores, le resto 1 nuevamente para volver a tener un valor porcentual y finalmente le reseteo el índice para tenerlo sin multi-index (que es mas engorroso para trabajar luego)


Gráficas de la "estacionalidad" navideña


Bien, ahora que ya tenemos las series de datos de los rendimientos porcentuales de cada semana desde 1928 hasta hoy, nos toca armar un gráfico de estacionalidad o algo que se le parezca para ver si hay un "efecto navideño" notorio en esa última semana del año

Lo primero que se me ocurrió fue hacer un heatmap, para ello, antes debo armar mi dataset como una matriz, los años en las filas y las semanas en las columnas, lo puedo hacer con python usando el método de pandas pivot(), quedaría algo así:

Dataset matricial de los rendimientos semanales del SP500 1928-2020
Dataset matricial de los rendimientos semanales del SP500 1928-2020


Lo multipliqué por 100 para tenerlo en términos porcentuales que es más familiar de leer


Bien, ahora si, puedo graficar un heatmap a partir de esta matriz, esto es muy sencillo de hacer con seaborn (librería de la que les vengo hablando en notas anteriores)

Heatmap de rendimientos semanales SP500 1928-2020
Heatmap de rendimientos semanales SP500 1928-2020


Las zonas mas "azules" serían las de mejor rendimiento, por lo que de haber un rally navideño se debería ver un sesgo azulado en la ultima franja.. ¿medio complicado  de visualizar no?

Lo ampliamos:
Heatmap de rendimientos semanales SP500 1928-2020
Heatmap de rendimientos semanales SP500 1928-2020


Bueno, tampoco se ve nada claro, en realidad confieso que de entrada vi un leve sesgo azulado tanto en la última, como en la primera semana de todos los años (así como en la semana nro 27), pero mi instinto de desconfiar de todo me llevó a seguir probando otros gráficos mas claros


Gráficas de funciones de distribución "kernelizadas"


Una de mis gráficas favoritas para ver claramente como se distribuyen los valores, tanto positivos como negativos es un histograma o mejor aun una función kernelizada de la misma (la KDE o función kernel de una distribución viene a ser como una simplificación de la PDF o función de densidad de probabilidades de la distribución real o población)

De nuevo, este tipo de gráficas se simplifica mucho con herramientas de alto nivel como pandas, fíjense que sencillo se resuelve en python esto:

KDEs de las distribuciones del Rally navideño vs el SP500 en gral
KDEs de las distribuciones del Rally navideño vs el SP500 en gral



Como ven, simplemente genero un "filtro" para las semanas del "rally navideño" que son la primera y la última de todos los años (agrego la semana 53 al "rally" que según la convención ISO sólo existe en los años que comienzan en lunes (y los bisiestos que comienzan en domingo)

Ese filtro representa las semanas pertenecientes al "rally" y las grafico en VERDE, mientras que a todas las semanas en general las ubico en la distribución que grafico en ROJO.

Como se puede observar, aquí si que se ve claramente un leve sesgo con mas valores positivos en la curva del rally (curva VERDE por encima de la ROJA en valores positivos)

Y lo mismo al revés en los negativos, es menos probable un valor negativo en las del rally (curva VERDE por debajo de la ROJA en los negativos)

Obviamente la diferencia es muy sutil, el diferencial de probabilidades entre ambas curvas es la diferencia del área bajo esas mismas curvas, hay que resolver la integral definida en ambos KDEs, no es gran cosa pero hay un diferencial de probabilidad en torno al 5% en cada caso, es decir que hay un 5% mas de probabilidades de suba en las semanas del "rally" y un 5% menos de probabilidades de baja en las mismas.

Esto de un 5% mas probable de alza y un 5% menos en las bajas puede resultar un tanto engañoso, a priori parece muy poca diferencia,  pero esto no nos dice nada de que tan altas las altas y que tan bajas las bajas, si se fijan mas detenidamente en los KDEs la diferencia entre ambas curvas pareciera acentuarse un poco mas mas cerca de las colas, así que para ver el efecto haciendo pesar mas las colas, quizá conviene ver los promedios de cada semana entre los 93 años de historia que tenemos


Tabla de posiciones por semana

Veamos entonces lo que sería el equivalente a una tabla de posiciones semanal, sería algo así:

mejores 20 semanas desde 1928 por media de rendimiento semanal SP500
mejores 20 semanas desde 1928 por media de rendimiento semanal SP500



Por último agrego a pedido del público una tabla completa con los rendimientos promedio de todas las semanas en los 93 años de historia en forma de grafico de barras

Ordenado por mejor a peor rendimiento:

Rendimiento medio desde 1928 del SP500 según semana del año
Rendimiento medio desde 1928 del SP500 según semana del año


Ordenado por orden de sucesión de semanas

Rendimiento medio desde 1928 del SP500 según semana del año
Rendimiento medio desde 1928 del SP500 según semana del año



Bueno, la mejor semana del año tomando el promedio de los 93 años de historia es la primera semana del año, vaya casualidad no? bueno, debo aclarar que me sorprendí particularmente con esto, no era lo que esperaba ver, pero son los datos.. Luego vemos que la semana 52 está en el puesto 6, y las semanas 51 y 53 están en el top 20 de 53 semanas totales, es decir que esto del espíritu navideño puede tener cierto crédito, al menos en el SP500

En fin, les mando un saludo a los lectores de este blog, hace muy poco empecé a escribir para Rankia y ya veo muchos lectores que se suscriben a este humilde blog de difusión de temas quant, así que muy agradecido por ello con todos ustedes queridos lectores, les mando un afectuoso saludo navideño, y buenas inversiones a todos!

  1. en respuesta a Cadenaperpetua
    -
    #7
    24/12/20 14:49
    Lo que pasa que construir un indicador con volatilidades del SPY sería un indicador de volatilidad "pasada" y el VIX es un indicador de volatilidad "futura" es lo que el mercado proyecta de volatilidad en el futuro para el indice. 

    La mejor forma de construir algo similar al VIX para tu seleccion de activos es armarte un ponderador con las cadenas de opciones de esos activos, recomiendo usar TTM de 30 dias aproximadamente, y rangos en torno al 5% de cada lado del strike ATM promediando IV del call con el put de cada strike.
  2. en respuesta a Juanpy
    -
    #6
    24/12/20 04:13
    Gracias por actualizar tablas. Queda increible. Parece que las semanas 36-40  (sobre septiembre) son buenas para irse de vacaciones. Curioso,en mis estrategias sobre el spy, septiembre es segundo peor mes del año, febrero es el peor y enero el segundo peor, simulando desde el inception date del SPY. Como veis los estudios del Juanpy sobre el spy se pueden llevar a la estrategia de cada uno, por ejemplo para ver que mes os compensa iros de vacaciones dejar toda la operativa parada. O por ejemplo si quereis desindexaros del SPY pues mediados/finales de agosto seria buen momento y os librais de la presumible caida de Septiembre.

    Te iva a mandar algo por privado, pero mejor aqui que asi aprende más gente en el caso de que tengas tiempo, tengo unas simulaciones de estrategias de opciones que dan muy buenos resultados y seguramente las lleve a real el 2021

    Todo lo que te pido si no tienes tiempo, pasa directamente de la pregunta, entiendo que lo puedo hacer yo con tiempo.

    Uso como datos los precios del SPY y el VIX, llevo un tiempo intentando llevar esas estrategias a otros indices, pero a no existir un "vix" para ellos me veo forzado a simularlo, la simulación de volatilidad con varias formulas y periodos desde datos del SPY ni se acercan al VIX, me veo en la misión de crear la formula que se aproxime. Si conoces algún metodo de calcular esto se agradece, si no me veo 3 meses trabajando en ello, que no pasa nada.


  3. en respuesta a Gatoisidoro
    -
    #5
    23/12/20 20:06
    Buen punto esto que dices incide en las medias, en la distribución (KDEs) son unos valores menos en las colas, no incide allí. Lo probé y en los promedios haciendo un clip() antes, es una función de pandas que permite poner "topes" a los valores extremos para que estos no desvirtuen tanto los promedios por ejemplo, pero no hay gran diferencia, es muy leve
  4. #4
    23/12/20 19:14
    Muy interesante el artículo.

    Creo que se podría mejorar quitando los 3 mejores años y 3 peores años, ya que por ejemplo el lunes negro del 87 te desvirtúa esa semana (aquello de si tu te comes dos pollos y yo ninguno... la estadística dice que nos hemos comido un pollo cada uno).
    Quizás salga otra conclusión, quién sabe.


  5. en respuesta a Cadenaperpetua
    -
    #3
    23/12/20 14:57
    Totalmente yo mo lo tomo como un aprendizaje constante, por eso me cuestiono siempre incluso a mi mismo y mi set de creencias, e intento siempre basarme en la estadística para poner algo de luz entre tanto azar. Ahi agregué la lista completa de semanas en forma de gráfico de barras al final
  6. #2
    23/12/20 09:51
    Esta muy bien, por que algunos aprendemos, y otros por lo menos se quedan con conclusiones.

    Desde luego hacerlo en python facilita las cosas, si bien esta simulación es de lo mas complicado para hacer en cualquier lenguaje, lo importante es ver, que puedes tener preguntas que hacerte, y puedes resolver las respuestas gracias a la programación, respuestas que son muy dificiles/imposible resolverlas con formulas matematicas, y complicadas con la estadistica por el gran tiempo manual que se necesita para hacer todo "a mano".

    Tambien seria interesante ya puestos, poner el ranking completo de semanas, asi sabremos cuales son las peores. Esta claro que no significa que se repita en el futuro. Pero es un indicador.

    def checksemana(week):
       if week==1:
          return true


    La base de todo el negocio bursatil es que la gente tenga convicciones para comprar o vender, y si a unos les vale un grafico(tecnico), a otros nos vale una estadistica(quant), a otros un informe de las cuentas de la empresa(value), y a otros cualquier cosa(gambling).

    Saludos y sigue con esta buena labor, todos necesitamos creer en algo para mantener posiciones abiertas, jajaja. 
    A mi particularmente, me gusta sobremanera la lista de semanas que has puesto.
  7. #1
    23/12/20 04:49
    Muy interesante Juanpy!! Yo tampoco me esperaba esos datos la verdad, me suena mucho a "mito" todo este tipo de cosas... Gracias por poner un poco de estadística aquí para sacar conclusiones!