Prediciendo el futuro con R
Intro
En este tutorial vamos a cubrir lo siguiente:
Métodos Monte Carlo
Distribución lognormal de precios
Parámetros de la simulación
Simulación Monte Carlo en R
Al final voy a compartir un script con ustedes que les va a ayudar a crear escenarios futuros de precios de acciones, como el siguiente donde simulo 100 posibles caminos de precio para el ETF SPY durante los próximos 3 años:
1 Métodos Monte Carlo
Los métodos Monte Carlo son una colección de técnicas estadísticas que se utilizan para responder problemas complejos. El método consiste en responder el problema a través del agregado de un gran número de simulaciones en vez de buscar una expresión cerrada que resuelva el problema. Existen muchas variaciones de estos métodos, pero todos siguen la misma estructura general:
Definir un dominio de posibles soluciones
Generar posibles soluciones aleatorias dentro de este dominio
Realizar un cálculo determinístico sobre estas soluciones aleatorias
Agregar los resultados.
Por ejemplo, supongamos que queremos estimar el valor de π usando métodos Monte Carlo. Sabemos que el área de un círculo de radio = 1 es π, entonces hagamos lo siguiente:
En el cuadrante 1 del plano cartesiano, dibujamos un cuarto de círculo
Distribuímos puntos
(x ∈ [0, 1], y ∈ [0, 1])
uniformemente en este cuadranteCalculamos la proporción de puntos que caen dentro del círculo
Ya que tenemos π/4, multiplicamos por 4 para encontrar π
Veamos los resultados que obtenemos con 100 y 1,000 puntos aleatorios:
Cuando tenemos 100 puntos la aproximación no es muy buena, pero conforme aumentamos el número de puntos aleatorios vamos mejorando la estimación. Cada vez que corramos este programa obtendremos un estimado de π diferente, así que lo ideal sería correrlo muchas veces y promediar los resultados, o correr un sólo experimento con muchos puntos aleatorios (e.g. 1 millón).
En nuestro caso, analizar posibles precios futuros de instrumentos financieros a través de una simulación Monte Carlo nos va a permitir analizar varios problemas como los siguientes:
¿Cuál es la probabilidad de que, dado un plan de inversión, se alcance el objetivo del inversionista?
¿Cuál es el precio justo de una opción? (podemos simular precios futuros de la acción en vez de usar el modelo Black-Scholes)
¿Existe un edge verdadero en una estrategia de trading o será que estamos ante un backtest con algún bias u overfitting?
2 Distribución lognormal
Dado que los retornos logarítimicos de una acción siguen una distribución normal (o eso asumimos), los precios de las acciones que vamos a predecir deben seguir una distribución lognormal.
Veamos lo que sabemos de los precios de las acciones hasta ahora:
El precio es incierto (dado el precio actual, es imposible determinar el precio futuro)
Los cambios de precios son continuos y tienden a cero conforme el periodo entre observaciones sea menor
El precio de la acción siempre es mayor a cero
El retorno promedio que obtengamos será mayor mientras más tiempo mantengamos la posición (obviamente esto no es una certeza, pero esperamos que tener una posición en un activo de riesgo resulte en mayor retorno)
La incertidumbre asociada con el precio futuro de la acción será mayor mientras más tiempo mantengamos la posición (la desviación estándar de los retornos es mayor para un periodo de 1 año que para un periodo de 1 día)
Por lo tanto, los precios que simulemos deben tener las siguientes características:
Los caminos tendrán volatilidad
Los caminos deben ser sólidos y sin brincos bruscos
Los caminos siempre deberán estar por encima del 0
El precio promedio deberá ser mayor cuanto más tiempo simulemos
La dispersión de los precios deberá ser mayor cuanto más tiempo simulemos
Supongamos que el precio de una acción en el tiempo t
está dado por S(t)
. Si los precios siguen una distribución lognormal, entonces el logaritmo natural de 1 más el retorno obtenido por mantener la posición entre t
y (t + Δt)
debe ser una variable aleatoria que sigue una distribución normal. Podemos relacionar el precio S(t)
y el precio siguiente S(t + Δt)
de la siguiente manera:
S(t + Δt)/S(t) = exp(μ*Δt + σ*Z*√Δt)
donde μ: media de la distribución de retornos
σ: desviación estándar de la distribución de retornos
Z: variable aleatoria normal
Por lo tanto,
S(t + Δt) = S(t)*exp(μ*Δt + σ*Z*√Δt)
Y ahora podemos generar 1, 10, o 1,000,000 de escenarios diferentes. Lo único que tenemos que hacer es conseguir el número correcto de muestras de la desviación normal, Z
, y usar la ecuación anterior.
Por ejemplo, el SPY cerró en $458.70 USD el miércoles 30 de marzo del 2022. Usando un retorno promedio de 7%, una desviación estándar de 20%, 10,000 escenarios y Δt
de 1 año, así deben verse los diferentes caminos simulados del precio y la distribución de precios finales:
Es importante verificar que la media de los precios futuros tenga sentido. En este escenario, S(0)=458.70
y S(0+
Δt)=S(1)=458.70*exp(0.07)=491.96
. Los resultados de nuestra simulación Monte Carlo debieran estar suficientemente cercanos a este número esperado para ser aceptados:
3 Parámetros de la simulación
Una pregunta que seguramente se esten haciendo ahora es: ¿cómo elijo los parámetros μ y σ? Para eso tenemos las siguientes opciones:
Pueden elegirlos arbitrariamente, por feeling (eso fue lo que hice yo en el ejemplo anterior)
Pueden elegirlos calculando retorno y volatilidad anualizada histórica (ya vimos como hacer esto en este tutorial y en este otro)
Pueden utilizar técnicas forward-looking como los retornos esperados según algún modelo de factores y la volatilidad implícita de las opciones disponibles
Etcétera
4 Simulación Monte Carlo en R
Aquí les dejo los notebooks de Google Colab con el ejercicio de calcular π y el cálculo de escenarios futuros para el precio del SPY:
Eso fue todo por hoy. Si tienen cualquier duda o comentario pueden dejarlo en la sección de abajo. Si quieren compartir este blog con sus amigos y compañeros o suscribirse, les dejo los botones aquí:
Hasta el próximo tutorial!