Herramientas, aplicaciones y hojas excel y de Google para seguimiento de carteras

En este post voy a explicar como realizar una simulación de Montecarlo de variables aleatorias que siguen una distribución normal. ¿Los retornos mensuales del S&P500 siguen una distribución normal? Pues bueno, desde 1982 tenemos esto:

Alguno dirá que no se parece mucho. Bien, si en vez de retornos mensuales, tomamos retornos diarios o semanales veremos que sí se parece mucho a una distribución normal. Además si ponemos los intervalos más gordos también veríamos que se parece mucho más.
De todas formas, si nos ponemos puristas, sería más adecuado utilizar la distribución logística que es más puntiaguda y tiene más peso en las colas y los eventos extremos son menos improbables. En excel no está. No es demasiado complicada pero ya no es tan directo como usar una función ya programada. Una alternativa podría ser la t de Student y ajustar los grados de libertad para tener colas más gruesas. Por simplicidad usamos la distribución normal. A efectos prácticos los resultados no van a ser muy diferentes.

Ahora necesitamos caracterizar los parámetros de la distribución a los datos experimentales. Si asumimos una distribución normal, esta viene caracterizada por su media y desviación estándar. La media normalmente se identifica con la letra griega mu, y la desviación estándar con la sigma. La media mu es el promedio (normalmente se escribe, x con una barra encima) y la sigma es la desviación estándar muestral (normalmente se escribe s). Por simplificar, solo escribiré mu y s para referirme a ambos:

Ahora hay que simular esta variable aleatoria. Es decir, tenemos que generar números aleatorios que se distribuyan conforme a nuestra normal. Primero necesitamos un número aleatorio Z normalmente distribuido. Usamos la siguiente función:
=DISTR.NORM.INV(ALEATORIO();0;1)
Con este número aleatorio Z, calculamos el retorno mensual del SP500 con la siguiente fórmula:
retorno mensual SP500 = mu + Z*s
Si lo que queremos simular otro activo junto con el SP500, por ejemplo el IBEX, tenemos que hacer lo mismo con ese segundo activo. Pero hay que tener en cuenta que ambos activos pueden estar correlacionados. En el siguiente ejemplo, calculamos el grado de correlación entre el SP500 y la inflación:

Al grado de correlación se le suele nombrar con la letra griega rho. Ahora para el activo 2 necesito un nuevo numero aleatorio normalmente distribuido, Z2. Recordemos que ya teniamos el del primer activo Z1. Para Z2 usamos la misma fórmula:
=DISTR.NORM.INV(ALEATORIO();0;1)
OJO! este Z2 no lo usaremos, porque necesitamos un Zcorr que esté correlacionado con Z1. la fórmula es la siguiente:
Zcorr = Rho * Z1 + RAIZ(1 - (Rho ^2)) * Z2
Ahora ya podemos calcular la variación del segundo activo:
retorno mensual activo2 = mu2 + Zcorr*s2

Ahora que ya sabemos calcular la variación mensual de los activos los simulamos. Una columa será el tiempo en meses. Y en las siguientes calculamos la variación de nuestros activos, las aportaciones o lo que queramos. A modo de ejemplo, en la siguiente imagen se hace la simulación de 40 años aportando 400 euros al mes teniendo en cuenta la inflación:

El resultado final estará en la última fila.

Pero eso solo será sólo un resultado posible. Es solo una tirada de dados. pero en las simulaciones de Montecarlo lo que hacemos es tirar los dados muchas veces (cientos o miles de veces) y anotar que es lo que sale. Para esto necesitamos hacer una macro. Primeramente pondremos en modo de cálculo en manual. Un ejemplo de macro sería la siguiente:

Sub Simular()

Dim i As Integer

For i = 1 To 300
    Calculate
    Cells(2 + i, 2).Value = Worksheets("Simu").Cells(489, 12).Value
    Cells(2 + i, 3).Value = Worksheets("Simu").Cells(489, 13).Value
    Cells(2 + i, 4).Value = Worksheets("Simu").Cells(489, 7).Value
    Cells(2 + i, 5).Value = Worksheets("Simu").Cells(489, 9).Value
    
Next

End Sub

En este caso estamos haciendo 300 simulaciones y estamos tomando los cuatro datos que nos son de interés.

¡Ya hemos acabado! Ahora solo falta interpretar los datos. Normalmente se suele hacer un histograma y se estima la probabilidad de obtener un resultado dado como la división entre el numero de simulaciones en las que se ha obtenido ese resultado y el número de simulaciones hechas.

Eso es todo. Tenéis chatgtps y tutoriales de youtube. Si se ha estudiado una carrera de ciencias, y se tienen un poco de manejo con excel, no es complicado.

19 Me gusta