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

Mejora en la Calculadora de SWAP

Escrito por Manuel el octubre 27, 2011

Como he comentado varias veces en twitter, he realizado una mejora en la calculadora de SWAP programada en VBA en EXCEL para que se puedan calcular el valor de SWAP anteriores al día de hoy.

La primera versión de la calculadora estaba pensada para realizar cálculos en los que se valoraba un SWAP a futuro con las curvas de tipos de EURIBOR 3 meses, 6 meses y 12 meses además del EONIA. En esta versión podremos calcular swaps que empiecen a partir del 13/12/2006. Es hasta fecha porque no he podido descargar más datos históricos de los tipos de interés. Como se supone, el factor de descuento para los tipos hasta el día 19/07/2011 es 1 ya que tengo los históricos hasta ese día.

Además he realizado otra modificación en la calculadora de SWAP y es que se pueda ir liquidando el SWAP trimestral, semestral o anualmente independientemente del euribor elegido ya que en la versión antigua, si se elegía por ejemplo hacer las liquidaciones con el euribor a 6 meses, obligatoriamente había que realizar liquidaciones semestrales.

calculadora_derivadosTI

Intentaré realizar estas modificaciones en la calculadora de CAP pero es que estoy bastante liado con MATLAB también, del que como sabéis hay algún POST que otro en el blog de algunos desarrollos y algoritmos que he implementado.

Me gustaría escribir más a menudo en el blog, pero entre las clases de inglés y todo lo que llevo en mente no puedo, también tengo que actualizar un poco mi web personal que la tengo abandonada. Tengo ganas de comentar algo sobre la quita de Grecia y todo lo transcurrido en la economía europea ultimamente pero antes quería subir esta mejora de la calculadora que tengo ya preparada y revisada hace un par de semanas.

Espero que os sea útil esta nueva mejora, y como en el otro post, si alguien desea el código fuente que se ponga en contacto conmigo a través del correo electrónico de mi web personal, twitter o dejando un comentario en el post.

27Oct

CDS, ¿protección o especulación?

Escrito por Manuel el octubre 19, 2011

Se ha estado hablando mucho desde que empezó la crisis de los CDS, el acrónimo de “Credit Default Swap“. Para los que no saben de que va este producto, así en líneas generales, es un derivado de tipo de interés que te cubre ante posibles pérdidas por quiebra de una empresa. En resumen, una especie de seguro para los que poseen bonos corporativos ó estatales de una entidad que se declara en “Default“. Aquí pongo el enlace de Wikipedia donde lo explica más a fondo.

Ayer se publicó que la UE prohibirá la venta en corto al descubierto de estos productos, lo que quiere decir que se va a frenar la especulación con este producto. Esta especulación trata de comprar protección de una entidad sin tener el bono correspondiente, de esta forma sube la cotización del CDS, lo que a su vez lleva a que si es más cara la protección hay más riesgo de quiebra. Está clarísimo que el precio de un CDS que nos proteja contra la quiebra de Grecia es mucho más caro que el que nos protege contra la quiebra de España por ejemplo.

Yo siempre he opinado que es un producto de protección no de especulación, hay otros muchos productos derivados con los que se puede especular. La especulación con CDS es difícil que lleve a quebrar una entidad pero lo que si puede hacer y está haciéndose todos los días es que lleven a subir el tipo de interés de un bono corporativo o estatal. Tiene sentido que si la protección es cara, haya riesgo de quiebra, por lo que el bono debe pagar más interés al poder quebrar. Es una bola de nieve que se puede ir agrandando de forma continua hasta que se estrelle al final de la colina.

A esta especulación tampoco ayudan las agencias de rating que la tienen tomada con Europa y tampoco creo yo que se merezcan el castigo que están recibiendo muchos países y entidades entre las que se encuentra España. A ver si esta medida les ayuda a callarse un poco también.

En el máster de finanzas cuantitativas que realicé, en la asignatura de derivados de tipos de interés y en la de riesgo de crédito tuvimos el debate de si es ético la especulación con CDS y hubo opiniones de todo tipo. Yo opino que no sé si es ético o no, pero al estar en una crisis de deuda soberana como en la que estamos, esta decisión de la UE es perfecta y que solo compre protección el que tenga deuda comprada.

En definitiva, espero que acierten con esta decisión (estoy seguro de que sí lo han hecho) y que reduzca la especulación que se vive a día de hoy con la deuda soberana y los CDS ya que puede ser muy nocivo que no se arregle el panorama que tienen a día de hoy los países que forman el grupo de los PIGS.

Respecto a la pregunta principal de si los CDS son productos de protección o especulación, queda clara mi opinión, deben ser claramente un producto de protección.

19Oct

Estudio de la Volatilidad implícita en opciones Vanilla europeas con MATLAB.

Escrito por Manuel el octubre 10, 2011

La volatilidad implícita es la que iguala el precio de mercado de una opción Plain Vanilla al precio obtenido por la fórmula del modelo de Black-Scholes. La siguiente fórmula es la representación de la volatilidad implícita:

Uno de los parámetros que se utiliza es el de la tasa de dividendos implícita la cual ya expliqué en un POST anterior como calcularla con MATLAB.

Esta volatilidad es la negociada en el mercado, es decir, es el riesgo que se percibe en el mercado por las personas que negocian las opciones.  Esta volatilidad es calculada continuamente para ver el riesgo de las opciones, al ser considerada una estimación de la volatilidad futura del subyacente.

Se dice que la volatilidad de las opciones Vanilla crea una sonrisa de volatilidad respecto al strike por lo que realicé un estudio de dicha volatilidad con opciones de E.ON realizado en MATLAB en el que represento gráficamente sus opciones CALL y PUT a vencimientos de Junio 2012 y Diciembre 2012.

Esta es la representación de las volatilidades implícitas de las opciones CALL y PUT de E.ON en función del Strike y del tiempo. La cotización de E.ON cuando hice el estudio de la volatilidad era de 19,06 (20/06/2011). En ambas graficas se observa el SMILE típico de la volatilidad implícita que se acentúa la volatilidad cuando la opción CALL está muy OTM y cuando la PUT está muy ITM.

Enlace de Wikipedia Volatility Smile.

Las funciones de MATLAB que adjunto son volatilidadImplicita.m y calcularVol.m. La primera de ellas calcula la diferencia entre el precio de mercado y el precio calculado por Black-Scholes con los parámetros de entrada suministrados a la función. calcularVol.m utiliza la función volatilidadImplicita.m en el algoritmo que halla las raíces de la siguiente expresión:

Para ésto, volatilidadImplicita.m utiliza la función de MATLAB fzero que sirve para hallar las raíces que hacen 0 la función.

En cada una de las funciones explico cuales son los parámetros y la salida que dan, podéis ver la ayuda de estas funciones a través del código fuente o utilizando el comando help. Aquí pongo en un zip las dos funciones comentadas:

calcularVol_volatilidadImplicita

Si alguien desea también la función que representa gráficamente los smiles de volatilidad respecto a X y T que me mande un correo o deje un comentario para comunicármelo, y como siempre digo, para cualquier duda, lo mismo.

10Oct