Simulación de Montecarlo de un subyacente utilizando la fórmula de Black-Scholes con MATLAB

Escrito por Manuel el enero 4, 2012

Anteriormente escribí un post en el que realizaba una simulación de Montecarlo. Dicha simulación es calculada mediante la volatilidad y números aleatorios normales en cada salto de tiempo.

Ahora lo que he implementado es una simulación de Montecarlo algo más compleja, dicha simulación se basa en las fórmulas del modelo de Black-Scholes para obtener las sendas de simulación. Dichas fórmulas se han obtenido con la discretización log-Euler de la fórmula del futuro del subyacente.

Estas fórmulas las he sacado del enunciado del proyecto final del máster pero creo que buscando por Internet no es difícil encontrarlas.

Para calcular el tipo de interés sin riesgo he descargado los datos en formato CSV de la página http://www.ecb.int/stats/money/yc/html/index.en.html, los he pasado a EXCEL para que sea más cómodo su tratamiento y he cargado los datos de la curva en MATLAB para así poder interpolar sobre esa curva, se incluye en el ZIP.

Para los datos del subyacente, he utilizado la función downloadValues, algo ya típico en mis desarrollos de MATLAB, y descargo los datos de cotización del último año a partir de hoy hacia atrás, ya que solo voy a simular un año. Si se quisiera tener una simulación más grande simplemente tendriamos que cambiar en la llamada a esta función el today-365 por el valor que se quiera tener, por ejemplo para 2 años, today-730.

Para la utilización de esta simulación es necesario tener la tasa de dividendos y el tipo de interés sin riesgo que son datos que utiliza el modelo de Black-Scholes. Tanto como la tasa de dividendos como el tipo de interés sin riesgo son recalculados mediante interpolación para cada una de las sendas de simulación con la función curvasRQ. Previamente tenemos que haber calculado la tasa de dividendos para el subyacente, esta tasa la he definido en el propio código fuente para no liar el tema, ya que el objetivo es la simulación no dicho cálculo, pero si se desea se puede utilizar lo que escribí en el post de la tasa de dividendos implícita en opciones Vanilla Europeas y utilizar la paridad PUT-CALL para hayar dicho valor.

La función con el grueso del programa es montecarloBS pero la función para ejecutar el programa es principalBS.m.

Utilizo los forward de la tasa de dividendos y del tipo de interés, dichos forward los voy calculando en cada senda de simulación a partir de las curvas obtenidas anteriormente.

Una vez obtenidos los forward, aplico las funciones de la discretización mostrada anteriormente para obtener los dos términos principales por separado para simplificar su cálculo en MATLAB.

Uno de los problemas que surgen en las simulaciones de Montecarlo es la baja precisión, es decir, la alta varianza, la forma en que se arregla es incrementando el número de simulaciones, pero esto nos lleva a tener tiempos de procesamiento altos. Uno de las formas que se tienen para aumentar la precisión sin tener que aumentar las simulaciones es por técnicas de reducción de varianza y una de esas técnicas es la de las variables antitéticas que consiste en realizar pares de simulaciones en lugar de una sola. Para poder implementar esta técnica en el código he realizado dos simulaciones realmente y lo implemento sumando en una simulación y restando en la otra (sumo y resto porque la base de las potencias que se multiplican es la misma) los términos de Black-Scholes calculados, es decir, en lugar de multiplicar únicamente las dos potencias, en una simulación multiplico las potencias y en la otra las divido. La simulación final es la media de ambas simulaciones (línea verde), pero en la gráfica resultante de la ejecución muestro en rojo y azul las dos simulaciones antitéticas.

La imagen anterior es una simulación de técnicas reunidas.

Para ejecutar dicho programa hay que ejecutar el script principalBS, el cual muestra la gráfica resultante que dije en el párrafo anterior.

montecarloBS

Como siempre, para cualquier duda que os pueda surgir escribidme un correo electrónico a la dirección que encontraréis el el pie de página de mi web personal o dejándome un comentario en el POST, resolveré vuestras dudas encantado.

Espero que le saquéis partido a dicha simulación.

4Ene