Valoración de una opción barrera con Simulación de Montecarlo en MATLAB

Escrito por Manuel el noviembre 22, 2011

Como comenté en el POST que presenté la simulación de Montecarlo, dicho método tiene multiples aplicaciones en muchísimos procesos y métodos financieros y en otros muchos campos que no son financieros.

Una de las aplicaciones en las que la simulación de Montecarlo es más utilizada es en la valoración de opciones y lo que es más útil todavía es es en la valoración de opciones exóticas. Depende de la opción exótica que se elija, la valoración de dicho producto puede ser de lo más complicado, laborioso y computacionalmente hablando, muy muy costoso. Por ejemplo las opciones asiáticas aritméticas, que son las más comunes, deben valorarse con el método de los dos/tres momentos (en otro post me centraré en estos métodos) para aproximar los parámetros que tiene y poder utilizar las fórmulas de Black-Scholes.

En este post me voy a centrar en la valoración de opciones barrera, estas opciones son vigiladas continuamente durante su vida y en el momento que se traspase la barrera hacia arriba o hacia abajo, puede hacer que estemos dentro o fuera de la opción según del tipo que sea, por lo que claramente se distinguen 4 tipos de opciones barrera simples: UP and IN, UP and OUT, DOWN and IN y DOWN and OUT, CALL y PUT para cada uno de estos cuatro tipos. Existen variantes más complejas con dos o más barreras y combinando cada uno de los tipos anteriores, por lo que es un mundo solo el que conlleva el estudio de este tipo de opciones. Como es previsible, estas opciones son más baratas que las opciones sin barrera normales y corrientes.

Existen varios modelos de valoración para las opciones barrera, por ejemplo, el principio de reflexión, modelos lognormales, paridad IN-OUT, modelo de volatilidad local, PDE y por supuesto, el modelo de Montecarlo.

He realizado un script en MATLAB, que utiliza también el script de descarga de datos de yahoo finance, downloadValues.m, para descargar cotizaciones de un subyacente. Dicho script realiza la valoración de una opción barrera UP and OUT en la que el usuario define la barrera y el subyacente.

El script lo que hace es una simulación de montecarlo discreta para cada uno de los días de vida de la opción y una vez ha finalizado la simulación compruebo si se ha sobrepasado la barrera. En el caso de que no lo haya hecho, el valor de la opción es el valor final de la opción es el máximo entre 0 y el valor final menos el precio de ejercicio, es decir, max(0,ST(end)-X). En el caso en que se haya sobrepasado la barrera, la opción tiene un valor de 0 al ser UP and OUT. El valor de la opción simulada por Montecarlo es la media de cada una de las simulaciones actualizada al tipo de interés actual sin riesgo (algo difícil de encontrar hoy en día), yo he tomado en el sctipt un valor de un 3%.

montecarlo_discreto_barrera.m

El script muestra una gráfica con todas las simulaciones y la barrera, pintando en rojo las simulaciones que han traspasado la barrera y al final de la ejecución muestra por pantalla el valor de la prima.

He realizado una ejecución con 10000 simulaciones que es lo normal para que la valoración sea efectiva, como está claro, cuanto menos simulaciones se realizan, más incoherente son los resultados. La gráfica es un poco locura pero muestra a primera vista que porción de las simulaciones han sobrepasado la barrera. En este ejemplo defino una barrera del 150% del valor del subyacente, que en este caso ha sido Inditex, ITX.MC. El valor de la prima ha sido de 3.750397 euros.

Nunca lo he comentado, pero para la gente que no tenga MATLAB, si me pide algún otro lenguaje de programación podría implementarlo también. He estado buscando librerías estadísticas para JAVA pero no encuentro, por lo que también comento que si alguien sabe de alguna, por favor, que me lo comente por aquí o que me mande un correo a la dirección que se encuentra en el pie de página de mi web personal. Y además, para cualquier duda o aclaración, lo mismo, un comentario o un correo. Espero que os sirva y que lo entendáis perfectamente.

22Nov

Simulación de Montecarlo de un subyacente con MATLAB

Escrito por Manuel el noviembre 14, 2011

La simulación de Montecarlo es utilizada en infinidad de campos de estudio y se utiliza para aproximar expresiones matemáticas mediante operaciones con números aleatorios. Yo por ejemplo las veces que había utilizado Montecarlo antes de mi interés por las finanzas (hace ya casi 10 años) fue en temas de seguridad informática, en creación de algoritmos de encriptación. Un ejemplo es un programa que realicé con Mathematica en el que calculaba números primos de más de 100 cifras. Los primos que calculaba eran “Primos de Mersenne” que son de la forma (2^n)-1, donde n es un número entero, pero bueno, este estudio que me encantaría retomar de nuevo, lo comentaré más adelante cuando lo retome aunque no tiene mucho que ver con finanzas. Al final son matemáticas, que supongo que muchos de los que leeis mi blog, es lo que os fascina.

Volviendo a la materia financiera, la simulación de Montecarlo es uno de los métodos por excelencia más utilizado en el mundo financiero. Tiene multitud de aplicaciones en las que por ejemplo se encuentra la valoración de opciones. La valoración de opciones no es el tema de esta entrada, y más adelante dedicaré un post completo a la valoración de una opción europea y a una exótica, como por ejemplo, una opción barrera que es una de las más utilizadas en el mundo financiero por un estructurador de productos.

Este post presenta una simulación de Montecarlo de un subyacente, para el subyacente, como ya es a menudo a mí en el blog, voy a utilizar mi script downladValues.m para descargar las cotizaciones de un año para el subyacente elegido y utilizar su última cotización y su volatilidad diaria para realizar cada una de las simulaciones, la descarga la hace a través de la página de Yahoo Finance.

El ejemplo que aquí pongo, lo voy a realizar con una de mis empresas favoritas, Repsol, además voy a realizar únicamente 100 simulaciones, pero el script está preparado para realizar las que se deseen, eso sí con cierto rigor. En el cálculo de la prima de una opción, cuantas más simulaciones se realizan más exacto es el cálculo, asemejándose muchísimo al calculado por el método de Black-Scholes, eso lo veremos en otro post. Hay que tener en cuenta que voy a realizar la simulación de un año de cotización pero es muy sencillo modificar el script para que realice una simulación más larga.

Lo que trato de poner en claro aquí es como se realiza la simulación de Montecarlo para un subyacente cualquiera, es muy sencillo, y lo único que hay que hacer es multiplicar el valor anterior de la simulación, siendo la primera vez la última cotización del subyacente por (1+ALEATORIO_NORMAL*(VOLATILIDAD_DIARIA)). Se toma un aleatorio normal porque la teoría nos dice que los rendimientos de cualquier subyacente son normales. De esta forma se crea un recorrido aleatorio para el subyacente. Por este motivo se trata de una simulación de Montecarlo discreta ya que se simula la cotización de cada uno de los días. Lo que hago es crear un bucle, en este caso de 100 repeticiones, y guardar cada una de las simulaciones, mostrando al final un gráfico con todas las simulaciones y guardando en dos variables el valor máximo y mínimo final de todas las simulaciones.

A continuación dejo la gráfica de la ejecución que yo he realizado como ejemplo:

– Valor máximo: 49,6477

– Valor mínimo: 9,8588

Aquí dejo el script de MATLAB para que lo descarguéis y ejecutéis, su nombre es montecarlo_discreto.m, también incluyo en el .zip la función downloadValues.m para que se ejecute correctamente en el caso que no hayáis descargado ese script anteriormente.

montecarlo_discreto.m

Como siempre, para cualquier duda, un correo electrónico que encontraréis en el pie de página de mi web personal o un comentario aquí en el post que contestaré gustosamente.

14Nov

“Market Risk Tool” con MATLAB

Escrito por Manuel el noviembre 7, 2011

Esta herramienta que he desarrollado en MATLAB con interfaz gráfica va a calcular el riesgo de mercado de un subyacente o índice con distintos niveles de confianza predefinidos (95%, 97,5%, 99% y 99,99%). Además calcula el riesgo para 1 día, 1 semana y 1 mes. He implementado 4 métodos distintos a la hora de calcular el riesgo de mercado, el VaR y el TailVar ambos calculados por el método paramétrico y por simulación de Montecarlo.

Antes de seguir comentando el programa voy a explicar en que consiste el VaR y el TailVaR. Bueno el riesgo de mercado es el riesgo al que estamos expuestos al comprar un determinado subyacente en un determinado rango de tiempo y con una confianza predefinida, es decir, la posible pérdida en el valor de uno o varios activos financieros de una cartera de valores. En el caso implementado por mi, esta cartera estaría compuesta de un único valor (proximamente realizaré un programa que incluya la posibilidad de tener más de un activo en cartera).

Los dos métodos teóricos más utilizados para calcular el riesgo de mercado son el VaR y el TailVar:

– El VaR (value at risk) mide la posible pérdida que se pueden tener en condiciones normales en un intervalo de tiempo. En concepto matemático, es el percentil de la distribución de variación de valor de la cartera expresada en términos positivos. Como ya comenté, la medida depende del horizonte temporal y de la confianza, siendo mayor el var cuanto menor sea el percentil de confianza (1-alfa), para explicar esto, quiere decir que en solo en un porcentaje de (1-alfa)% de los posibles escenarios tendremos pérdidas mayores que el VaR.

– El TailVar mide la pérdida de valor en media a las pérdidas que excedan el VaR, es decir, mientras el VaR estima la pérdida mínima que ocurre en el (1-alfa)% de los peores escenarios, el TailVaR mide la pérdida media de esos posibles escenarios, por lo que siempre es mayor que el VaR, y por eso es considerado una medida mucho más fiable que el VaR.

Los métodos paramétrico y Montecarlo, son muy distintos, siendo el paramétrico un método analítico. El método de Montecarlo obtiene una muestra representativa simulada a partir de ciertas hipótesis como que los rendimientos de un activo son normales y los precios log-normales.

Las fórmulas paramétricas son las que muestro a continuación:

Una vez dada una introducción a lo que son estas medidas de riesgo de mercado, ya se puede entender que calcula y en que consiste mi aplicación. En primer lugar descargo las cotizaciones históricas del subyacente a través de Yahoo Finance en el intervalo de tiempo elegido en el desplegable (la aplicación mostrará un mensaje de error si no existe el subyacente o si se ha dejado en blanco el intervalo de tiempo, además no funciona si la conexión a internet va a través de un proxy, es una mejora que tengo que implementar). Una vez se tienen las cotizaciones descargadas (la aplicación nos lo indica con un mensaje), en el menú de arriba se elige el método de cálculo de los cuatro que he explicado y una vez elegido en la tabla que hay en el centro de la ventana se mostrarán los datos.

Market_Risk_Tool

Para poder ejecutar la aplicación (.exe) no es necesario tener MATLAB instalado pero si hay que tener instalado el MCR de Matlab (MATLAB Component Runtime). He intentado que no fuera necesario tenerlo instalado, pero me ha sido imposible encontrar la forma. Si se dispone de un ordenador con MATLAB instalado, tecleando en la consola mcr, nos dirá el directorio donde se encuentra el instalador para copiarlo e instalarlo en otra máquina donde no se posea MATLAB. Se que es un rollo pero no he podido hacer otra cosa.

Como siempre, para cualquier duda que se posea, podéis escribirme al correo electrónico que encontraréis en mi web personal o dejarme un comentario en la entrada, gustosamente os contestaré.

Espero que sirva de ayuda para consultas y pequeños riesgos que se quiera calcular.

7Nov