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

Carga de datos automática en MATLAB a partir de Yahoo Finance

Escrito por Manuel el septiembre 25, 2011

Un tema que utilizamos todas las personas que hacemos desarrollos en MATLAB y descargamos datos de cotizaciones de la página de Yahoo Finance es el tener que ir a la página web de yahoo, buscar el subyacente del cual queremos descargar los datos y una vez que tenemos el CSV, hay que importarlo a EXCEL, ordenar las columnas en orden ascendente por fecha, cambiar puntos por comas en los decimales y finalmente hacer la importación en MATLAB.

Aunque es una tarea habitual, se hace pesado tener que realizar este trabajo y se pierde un tiempo del cual a lo mejor no se dispone. Como a mi me pasa muy habitualmente, lo que he hecho ha sido una primera versión de una función en MATLAB la cual descarga e introduce los datos históricos de yahoo finance en MATLAB. El nombre de la función es downloadValues.m.

downloadValues.m

Dicha función es muy fácil de utilizar y se basa en tres parámetros, en primer lugar es el código de Yahoo Finance del subyacente, por ejemplo, ^IBEX para el IBEX35 o ^DJI para el Dow Jones Industrial. Los dos parámetros siguientes son la fecha de inicio y fecha de fin de las cotizaciones que queremos descaargar. Estas fechas tienen que ir en formato MM/DD/YYYY.

Los datos que devuelve la función son las fechas en una estructura cell y el valor de apertura, más alto de la sesión, más bajo de la sesión, el cierre, el volumen y el cierre ajustado, todo éstos en un vector columna.

Un ejemplo de una descarga de cotización sería por ejemplo la del IBEX35 desde el 1 de Enero de 2011 al 23 de Septiembre de 2011. La línea a ejecutar sería la siguiente:

[dates, open, high, low, close, volume, adjClose]=downloadValues(‘^IBEX’, ’01/01/2011′, ’09/23/2011′);

En la función faltan por hacer algunas validaciones, como por ejemplo que la fecha de inicio no sea mayor que la de fin, pero para una primera utilización funciona perfectamente.

Próximamente iré subiendo aquí al blog nuevas funcionalidades que estoy haciendo en MATLAB, además de unas cuantas funciones que realicé durante el máster, las cuales son muy útiles a la hora de hacer distintos estudios de los mercados financieros y la bolsa de valores.

Si alguien encuentra un error en la función o tiene alguna duda en su utilización, por favor que se ponga en contacto conmigo para poder corregir o explicarle sus errores o dudas surgidos. Espero que sea útil.

25Sep

Proyecto del Máster finalizado

Escrito por Manuel el julio 18, 2011

A falta de recibir las notas, puedo decir que he acabado satisfactoriamente el Máster en Finanzas Cuantitativas.

El viernes entregué lo que me faltaba para completar mi formación, el proyecto final. El proyecto consistía en analizar la importancia de la consideración del Smile de Volatilidad en la valoración y análisis de riesgo de una Opción Exótica ligada a un subyacente (acción, índice, futuro sobre materias primas o divisa), todo ello con MATLAB.

El proyecto se dividía en tres partes: un análisis empírico del subyacente y las opciones Plain Vanilla, valoración de una opción exótica a elegir mediante el modelo de Black-Scholes y el Modelo de Hagan et al. (2002) ambos modelos con simulación de Montecarlo y el análisis de riesgo del subyacente y de la opción exótica elegida en el punto anterior.

La única condición impuesta es que el subyacente, índice o futuro cotizara en euros, por lo que para obtener liquidez en opciones decidí irme al DAX alemán y acabé eligiendo E.ON.

La fecha de valoración en la que descargué los datos fue el 20 de Junio. En esta fecha descargué las cotizaciones históricas, los datos de las opciones y la curva de tipos del BCE, los enlaces son los siguientes: cotizaciones E.ON, datos opciones Vanilla E.ON y curva de tipos de BCE.

Una vez que tuve los datos empecé la programación en MATLAB de los puntos pedidos, además de realizar algún ejercicio opcional.

Cuando sepa la nota y corrija algún error si se me detectan, subiré las funciones principales aquí por si a alguien le interesa, sobre todo las de la calibración del modelo de Hagan et al. (2002) que son las más interesantes y útiles y es trabajo que se puede ahorrar si ya está hecho. Tambien alguna de las simulaciones de Montecarlo y la de valoración de la opción barrera que fue la exótica que yo elegí.

A ver si ahora que tengo más tiempo puedo escribir más, prometo intentarlo.

Mientras escribo todo esto, solo comentar algo más que no tiene mucho que ver con el post: la prima de riesgo de España está alcanzando límites de rescate, esperemos que se calme la cosa y que los test de stress de la banca dejen de afectar negativamente a los mercados.

18Jul

Calculadora de derivados de tipos de interés: SWAPS, CAPS y 3×12

Escrito por Manuel el julio 4, 2011

Hola, llevo un tiempo diciendo que iba a compartir aquí uno de los trabajos que he realizado durante el máster y hasta que no recibiera la nota de la asignatura y la corrección de la práctica no quería subir el fichero, ya que podía subir algo erróneo, pero ahora ya se que está bien, esta práctica es la calculadora de swaps.

calculadora_derivadosTI

Recomiendo que para que se pueda ver el funcionamiento correcto de la calculadora así como las validaciones que he realizado y los formatos de algunas celdas que he programado se utilice la versión de EXCEL 2007 ya que sino habrá algunas funcionalidades que no estarán disponibles.

Voy a resumir un poco de que va el trabajo para que lo podáis probar, entender y darme sugerencias para mejorar esta calculadora de productos derivados de tipos de interés. Se trata de una calculadora realizada en EXCEL utilizando VBA, es decir, está todo programado, no hay nada en las hojas que no sea programado excepto las etiquetas y cabeceras de las tablas. Muchas validaciones no están hechas ya que no me dió tiempo a programarlas, por ejemplo, que el nominal introducido sea texto y no de tipo numérico, pero próximamente cuando acabe el proyecto final del máster quiero retomar muchas cosas y trabajos pendientes por retocar y mejorar y éste es uno de ellos.

La calculadora se divide en las siguientes partes: tiene tres hojas para cada uno de los productos implementados, que son el SWAP, el CAP y el 3×12, otra hoja más con los tipos EONIA para el descuento de flujos aunque he dado la posibilidad en la calculadora de descontar con el EURIBOR también, dependiendo de los plazos elegidos para el SWAP y el CAP. Tiene otras tres hojas que son los tipos EURIBOR a 3, 6 y 12 meses, dos hojas más con los tipos SPOT para 3, 6 y 12 meses y tres hojas con las volatilidades de los CAPS para poder implementar dicho producto. La última hoja es una prueba para probar las interpolaciones que he programado.

He programado dos funciones de interpolación para interpolar los EURIBOR, los factores de descuento de los SPOT y las volatilidades de los CAP ya que esos datos no se actualizan, están sacados de Bloomberg el día 12 de Mayo de 2011, de ahí que se necesite interpolar y extrapolar para los cálculos, son funciones de interpolación lineal y cuadrática y en en el formulario se puede elegir cual de las dos se quiere utilizar para el cálculo.

Voy a subir el manual que realicé también para el profesor para que se entienda mejor el trabajo y si tenéis alguna duda por favor ponedme un comentario o escribidme un correo electrónico a la dirección que hay en mi página personal: manoloalonso.com. Con todas las dudas o comentarios que reciba iré actualizando esta entrada para que todo el mundo disponga de la misma información final.

El código lo he protegido, si a alguien le interesa verlo que contacte conmigo para comunicarme para que lo quiere, me será de agrado saber que alguien se interesa por este trabajo que he realizado. No me gustaría que se utilizara para fines empresariales sin contar con mi consentimiento o permiso.

Espero que os guste y os sea de ayuda a todos aquellos que estáis estudiando estos productos derivados de tipos de interés y a los que queráis entenderlos.

4Jul

Máster al 90%

Escrito por Manuel el junio 19, 2011

Hola, ahora mismo estoy acabando el último trabajo que tengo que entregar en el máster exceptuando el proyecto final. El viernes acabé todos los exámenes a falta de saber las notas, mi último examen fue el de riesgo de crédito.

Estoy contentísimo y con muchas ganas de empezar a hacer el proyecto, el cual no he empezado porque tengo que entregar un trabajo (el que estoy acabando) más para la asignatura de opciones exóticas.

A falta de realizar el proyecto puedo decir que ha sido un año muy duro para mí, trabajando a jornada completa y realizando un máster de estas características es muy complicado ya que tiempo libre deja muy poco, por no decir ninguno. Además puedo presumir de que desde el 11 de octubre de 2010 que empecé, al 17 de junio de 2011, no he faltado a ninguna clase.

Resumo mi experiencia como apasionante y lo único que me gustaría es poder tener la oportunidad de desarrollar mi carrera profesional en el ámbito de las finanzas. A día de hoy está muy muy complicado pero no pierdo las esperanzas de que una empresa me de la oportunidad.

A la pregunta del millón, que es si haría este esfuerzo de nuevo, respondo que SI, es más, si alguna vez puedo emplear un buen dinero en formación, no dudo que volveré a realizar otro máster presencial, aunque esta vez me encantaría un MBA, pero claro, el problema es el dinero, no son muy asequibles que digamos. Por cierto, el máster, se ha revalorizado un 20% en su precio, lo cual para los alumnos es una gran noticia, ya que mucha gente quiere realizarlo y está tomando mucho valor en el mercado, lo cual siempre es positivo, tanto para los alumnos anteriores como para las empresas que buscan empleados con títulos de postgrado.

Vuelvo a prometer que en cuanto acabe el proyecto, empezaré a recopilar trabajos y prácticas que he realizado haciendo mejoras en ellos y poniéndolos por aquí para que sirvan de ayuda tanto académica como profesional. El primero será la ya famosa calculadora de swaps, pero estoy a la espera de la corrección para poder subsanar posibles errores que tenga y subir un trabajo bien hecho.

Bueno, voy a pegarme un baño a la piscina y a continuar con el trabajo de opciones exóticas.

Es un placer escribir pensando que ya casi he finalizado mi máster en finanzas cuantitativas, está al 90%.

19Jun