Valoració de derivats
en el model de Black-Scholes amb Montecarlo.
Construcció d'un simulador sobre Excel.

Índex del dossier:

  1. Breu introducció teòrica.
  2. Estructura del programa per la simulació d'opcions amb el mètode de Montecarlo.
  3. Fulles del simulador. Entrada de dades.
  4. Exemples.
  5. Teoremes i resultats.
  6. Codi del programa.

1. Breu introducció teòrica.

1.1 - Model de Black-Scholes

Sota la probabilitat neutre P* que ens dona el teorema de Girsanov (veure Th. de Girsanov), la corba de preus d'un actiu financer amb risc segueix l'equació diferencial estocàstica,

dS_t = r S_t dt + sigma S_t d B_t

on {B_t, t>0} és un moviment brownià, definit en l'espai de probabilitat que ens dona P*.

Aquest model conegut amb el nom de "model de Black-Scholes" serà el que utilitzarem per a la valoració de derivats. De fet treballarem amb una generalització d'aquest model permetent que els paràmetres r i sigma puguin variar al llarg del temps, i a més, no només treballarem amb un sol subjacent sinó que permetrem que el model treballi amb més d'un subjacent alhora. El model que tindrem serà:

dS_t = r(t) S_t dt + sigma(t) S_t dB_t

en un espai R^n.

1.2 - Valoració de derivats en el model continu ( Model de Black-Scholes).

Per a poder valorar derivats en aquest model, una possibilitat és calcular el valor que pren l'expressió

G(t,S_t) = exp(-r(T-t))E[h|F_t]

on h és una variable aleatòria que ens dona el benefici del derivat a temps T, F_t és la informació de que disposem a temps t i exp(-r(T-t) és l'actualització del valor esperat del derivat de T fins a t.

Desenvolupament del problema en el cas d'una sola variable i amb payoff depenen del preu a venciment del subjacent.

Si el valor final només depengués del valor de S a temps T, podríem escriure:

G(t,S_t) = exp(-r(T-t))E[g(S_T) | F_t] ( i )

on la funció g(S_t) és la funció de pagament del PayOff ( que en aquest cas nomès depèn del preu del subjacent a venciment). Aquesta expressió fa referència al valor esperat a temps t d'una funció de PayOff g condicionada a la informació que tenim en l'instant t.

En el cas d'una Call normal ( Current Vanilla ) tindríem

G(t,S_t) = exp(-r(T-t)) E[max(S_T-K,0)|F_t]

A partir de resultats obtinguts a la teoria de probabilitats ( veure Proposició 1 ) l'equació ( i ) la podem escriure com :

G(t,S_t) = exp(-r(T-t)) E[g(S_t exp((r- sigma^2/2)(T-t)+sigma sqrt(T-t)theta))]  ( ii )
on theta ~ N(0,1) .

En el cas de la call corrent europea, ens quedaria:

G(t,S_t) = exp(-r(T-t)) E[max(S_t exp((r- sigma^2/2)(T-t)+sigma sqrt(T-t)theta),0)].

Tenim diverses maneres de calcular l'expressió (ii), en aquest treball s'ha utilitzat la simulació de Montecarlo per tal d'aproximar el valorG(t,S_t) ( més concretament s'ha utilitzat Montecarlo per tal d'aproximar el valor esperat de

g(Ste(r-s^2/2)(T-t) + s v(T-t) z) ),

a més a més en el programa s'ha inclòs que la funció g sigui multidimensional, podent avaluar opcions que no depenguin únicament del valor a venciment ( com per exemple les opcions asiàtiques, LookBack o altres)

1.3 - Simulació de Montecarlo en la valoració d'opcions.

La simulació de Montecarlo és un mètode numèric d'integració de funcions, aquest mètode es basa en avaluar diferents punts de la funció a calcular i prendre la mitja d'aquests, en el nostre cas, ens interessa conèixer el valor de l'expressió

e^(-r(T-t)) E[ g(Ste^((r-s^2/2)(T-t) + s v(T-t) z)) ]

o equivalentment :

G(t,S_t) = exp(-r(T-t)) int(g(S_t exp((r-sigma^2/2)(T-t) + sigma sqrt(T-t) theta));N(theta);-inf;+inf)

on N( ) és la funció de probabilitat d'una variable aleatòria normal estàndard. Aleshores només ens farà falta generar N punts diferents de la funció G(t,S_t ) i calcular-ne la mitjana.

Tindrem G(t,St)=e^(-r*(T-t))*[G] +- sqr(([G^2]-[G]^2)/N) on

[G]=sum(Gi/N,i=1,N)

[G^2]=sum(Gi^2/N,i=1,N)

L'últim terme de l'expressió serà l'error estàndard de l'estimació (segon moment centrat).

En l'apartat anterior s'ha procedit fins a arribar a l'expressió

G(t,S_t) = exp(-r(T-t)) E[g(S_t exp((r- sigma^2/2)(T-t)+sigma sqrt(T-t)theta))]

( en general hauríem arribat a tenir que calcular l'expressió on P* denota la probabilitat neutre. ) que ens permet calcular el preu d'una opció, aquesta expressió ens diu que el preu d'una opció consisteix en actualitzar per e-r(T-t) el valor esperat de la funció Payoff depenen de com sigui el comportament del subjacent.

2. Estructura del programa per la simulació d'opcions amb el mètode de Montecarlo.

esquema

Gràfic 1. Esquema general del simulador de Montecarlo.

2.1 - Recull de dades

Per tal de recollir les dades, el programa fa ús d'un llibre d'Excel dividit en 8 fulles ( Fulla Principal, Actius, Correlació, Definició de l'Opció, Tipus Interès, Declaració PayOff, Gregues, Test PayOff ).

Al iniciar-se la valoració el programa llegeix les cel·les, i guarda els valors en variables definides dins el programa de Visual Basic per a poder fer-ne un tractament més àgil que si tinguéssim que accedir cada cop a la fulla de càlcul. Les funcions que realitzen aquesta feina dins del programa de Visual Basic, són ( dins el Mòdul MODCalcDeriv ):

Totes elles retornen un valor enter que és 0 en cas de que tot hagi anat bé o un enter diferent de 0 que farà referència al l'error que s'hagi pogut produir.

2.2 - Tractament de dades

Aquest procés consisteix en estandarditzar les dades per tal que el programa pugui treballar de manera més general. L'objectiu és poder enviar al mòdul que fa la simulació les dades recollides a l'apartat 2.1(sempre en el mateix format). Per tal d'entendre quin és aquest tractament de dades, veiem quina és la definició de la funció que fa la simulació, si entenem el format dels paràmetres d'aquesta funció entendrem quin és l'objectiu d'aquest apartat:

Public Function SimMontecarlo( ByRef Valor() As Double, ByRef PAct() As Double,
ByRef Corr() As Double, ByRef Vol() As Double,
ByRef d() As Double, ByRef r() As Double,
ByRef tPer() As Double, ByVal NActius As Integer,
ByVal NData As Integer, ByVal NAct As Integer,
ByVal sim As Long, ByRef Resultat() As Double,
ByRef Calc() As Integer, ByRef divisa() As Integer,
ByRef FD() As Double)as Double

Variables que intervenen en la declaració de la funció:

Així doncs, hem vist que l'objectiu d'aquesta fase és arribar a transformar totes les dades en el format que necessita la funció SimMontecarlo. ( Per veure detalladament el procés de conversió, mirar el codi de la funció associada, veure Codi de Programa )

2.3 - Simulació

El procés de simulació és l'encarregat de generar el diferents escenaris en que es poden trobar els actius sota el model de Black-Scholes. Els únics paràmetres necessaris per iniciar la simulació són els explicats en l'apartat anterior. La metodologia que segueix el programa per aconseguir el valor del derivat és la generació del moviment de les accions a partir dels paràmetres que la defineixen , cal fer notar que aquesta manera de fer és una de moltes altres maneres d'enfocar la metodologia de MonteCarlo, una altre hauria pogut ser a partir de la equació que segueix el PayOff, calcular-ne el preu per simulació. Aquest cas seria bastant rebuscat sobretot tenint en compte que es disposen de mètodes d'integració exacte per aquest casos.

Així doncs en el programa s'ha simulat pas a pas el camí de l'acció que ens permet generar tota la trajectòria del subjacent per a poder-la tractar a posteriori. Calculant-ne el cost associat en la simulació individual.

esquema

Gràfic 2. Esquema del procés de simulació

Com veiem en el gràfic 2, el procés de simulació consta de 4 parts bastant diferenciades, primer de tot s'ha de generar els valors aleatoris, concretament s'ha d'emplenar una matriu de (Ndata-Nact) x Nactius numeros aleatoris.

Exemple

Si fos necessari generar el camí per dos actius amb 4 períodes, aleshores hauríem d'emplenar la següent matriu:

Aleatori(1,1) Aleatori(1,2)
Aleatori(2,1) Aleatori(2,2)
Aleatori(3,1) Aleatori(3,2)
Aleatori(4,1) Aleatori(4,2)
Aleatori(5,1) Aleatori(5,2)

amb valors aleatoris Normals(0,1)

Un cop s'han generat els nombres aleatoris s'ha de crear el camí de cada actiu, això ho podem fer a partir de l'expressió que ens dona el model de Black-Scholes sobre l'actiu, entre el pas t i t+1 tenim:
S(t+1) = S(t) exp( (r-d-sigma^2) temps(t,t+1) + sigma sqrt(temps(t,t+1)) theta)
on zeta és la variable aleatòria normal que hem generat abans, r és el tipus forward aplicable en aquell període, d el dividend en el període, s la volatilitat en el període i temps(t,t+1) és el temps (en anys suposant que estiguem treballant en anys) entre les dates t i t+1. L'expressió ( i ) és lleugerament diferent en el cas de simular una divisa o una acció estrangera, prenen respectivament la forma:
S(t+1) = S(t) exp( (r-d-sigma^2) temps(t,t+1) + sigma sqrt(temps(t,t+1)) theta)
i
S(t+1) = S(t) exp( (r-d-Cov sigma^2) temps(t,t+1) + sigma sqrt(temps(t,t+1)) theta)
on s és el tipus forward estranger en el període t, t+1 i Cov és la covariància entre l'acció i la divisa. En la segona expressió l'acció estar expressada en moneda estrangera, i el tipus de canvi estar en format ( Estrangera/Domèstica ).

En el cas de simular més d'un actiu fa falta simular-los amb la correlació que se'ls estima, per això el programa genera la descomposició de Txoleski que ens dona una matriu amb la propietat A · A' = S on S serà la matriu de correlacions. Aquesta propietat ens permetrà generar nombres aleatoris normals amb una correlació S, a partir de valors aleatoris normals sense correlació.

Un cop generades les trajectòries de tots els actius, es calcula el valor del derivat en cada simulació, obtenint així diferents valors de la funció PayOff i a partir de la mitjana d'aquests valors aconseguim aproximar el preu de l'opció. El procés de simulació el tenim a la funció SimMontecarlo del programa.

2.4 - Sortida de resultats

La sortida de resultats es fa a través de la matriu Resultat() de la funció SimMontecarlo, aquesta matriu al finalitzar les simulacions contindrà el Preu estimat de l'opció així com la desviació estàndard d'aquest preu ( que ens permetrà estudiar la validesa d'aquest), també contindrà en el cas que s'hagi demanat els valors que prenen les diferents gregues que s'hagin demanat calcular. ( veure gregues per conèixer com s'han calculat les gregues i quina és la seva interpretació )

Els resultats es mostren a l'usuari a la fulla de càlcul Excel "Fulla Principal".

Per portar un control de les simulacions que s'estan fet s'ha afegit un quadre a la fulla principal que ens va contant la simulació que estar fent el programa, poden així preveure el temps que durarà la simulació total. ( Nota: Per cancel·lar la simulació prémer el boto Esc).

3. Fulles del simulador. Entrada de dades.

3.1 - Fulla Principal

Pantalla Principal

Pantalla 1. Pantalla inicial del Simulador de Montecarlo.

En aquesta fulla s'hi introdueix els paràmetres bàsics de la simulació, en la primera cel·la la data actual de valoració o la data a on es vol saber el preu de la opció (Data actual), la segona cel·la correspon al nombre de períodes necessaris per a dur a terme la valoració de la opció (Passos de la simulació). La tercera conté el numero del següent pas a avaluar dins el total de passos de la simulació (Següent pas). I per últim cal introduir el numero de simulacions a realitzar per tal d'aproximar el valor de l'opció (Número de simulacions) .

Les cel·les 'Identificador de l'opció' i 'Simulació a realitzar', només estan a mode informatiu, l'identificador ens servirà per distingir les opcions quant tinguem que generar informes i "Simulació a realitzar" ens indica quina simulació estar realitzant el programa, per acabar totes les simulacions necessitarà arribar fins al valor de la cel·la número de simulacions.

A més de les cel·les per introduir dades la primera fulla conté un segon grup de cel·les on s'hi mostraran els resultats, el valor de l'opció, l'error d'aquest i el valor calculat de les gregues per les simulacions realitzades.

A la part alta dreta de la fulla hi tenim un botó "Actualitzar" que ens permet actualitzar els mòduls de que estar format els programa per a possibles modificacions. El botó "Recalcular" ens permet iniciar el procés que ens calcularà el preu de la opció a avaluar. ( prèviament s'hauran d'haver omplert les altres fulles).

3.2 - Actius

Pantalla Actius

Pantalla 2. Fulla per a la definició dels actius de la simulació.

En aquesta fulla se'ns permet descriure els actius de que estar composta la opció. Aquesta fulla estar separada en 3 parts diferenciades. La primera ens permetrà descriure quants i com són els actius que intervenen en la valoració de l'opció(Acció o índex i divisa). El programa ens permet diferenciar entre accions domèstiques o accions estrangeres ( aquestes hauran d'anar acompanyades amb el tipus de canvi associat).

IMPORTANT: SI VOLEM UTILITZAR ACCIONS ESTRANGERES, LA DIVISA ASSOCIADA HAURÀ D'ANAR NECESSÀRIAMENT DEFINIDA ABANS QUE L'ACCIÓ. AIXÍ DONCS NO PODEM TENIR UNA ACCIÓ ESTRANGERA DEFINIDA A LA POSICIÓ 4 I LA SEVA DIVISA EN LA POSICIÓ 5. UNA RECOMANACIÓ ÉS COL.LOCAR SEMPRE LES DIVISES COM ELS PRIMERS ACTIUS.

El programa tracta el tipus de canvi en recíproc (Euro/Estrangera) en el cas que estiguem treballant amb moneda euro, així doncs totes les entrades que li donem al programa hauran d'estar en aquest format ( inclòs els càlculs de la matriu de correlacions ).

La cel·la "Preu/Canvi Actual" conté el preu o tipus de canvi a data actual de l'actiu.

La següent cel·la "Tipus d'actiu" permet al programa diferenciar entre accions, accions estrangeres o divises, LA SEGONA CEL·LA CONTINDRÀ SEMPRE 0 A NO SER QUE SIGUI UNA ACCIÓ ESTRANGERA QUE ALESHORES CONTINDRÀ EL NUMERO QUE OCUPA EL TIPUS DE CANVI ASSOCIAT.

La segona part diferenciada de la fulla és el recuadre "Dividends o tipus d'interès exterior", aquest quadre ens permet definir el tipus d'interès de la divisa exterior o en el cas d'estar simulant una acció el dividend anual que reparteix.

Per definir la corba de tipus exterior tenim l'opció d'escriure la corba cupó zero en factor de descompte o en tipus d'interès (amb diversos formats). Com veiem en la Pantalla 2, els tipus hi estan escrits amb un corba cupó zero escrita amb factors de descompte.

Volatilitats

Pantalla 3. Definició de volatilitats.

La tercera part diferenciada d'aquesta fulla és la definició de la volatilitat de cada títol, com veiem en la pantalla 3, el programa ens permet canviar la volatilitat en cada període. El programa simula fins arribar a la data indicada amb la volatilitat que s'indica al costat de la data. En cas de només voler utilitzar una sola volatilitat, és necessari definir la data posterior al venciment de la opció. ( Per a que pugui utilitzar la volatilitat indicada fins al venciment de l'opció)

3.3 - Correlació

En la fulla de correlacions s'hi introdueix la matriu de correlacions entre actius, només és necessari, introduir la part triangular superior de la matriu.

3.4 - Definició de l'opció

Definició de l'opció

Pantalla 4. Fulla per la definició dels valors coneguts

Aquesta fulla ens permet introduir al programa les dates importants per la valoració de l'opció, així per exemple en un opció asiàtica si posarien les dates en les que es calcularà la mitjana. (veure Pantalla 4)

Les cel·les que queden a la dreta de les dates, ens serviran per introduir possibles valors que ja coneguem, necessaris per a la valoració de l'opció.

Les cel·les grogues de la fulla estan com a variables auxiliars alhora de treballar amb el PayOff, per exemple en el cas de que tinguem un Strike fix podríem utilitzar aquestes caselles i desprès podríem tenir-hi accés des de la funció a on es defineix el PayOff, més endavant ja veurem exemples.

3.5 - Tipus d'interès

En aquesta fulla podem introduir-hi la corba zero de tipus d'interès. Els formats disponibles per a la creació d'aquesta són:

Factor Descompte: Corba tipus amb factors de descompte
Act/360, Act/365, Act/Act: Corba de tipus en compost anual en el format indicat
Continu: Corba tipus en continu anual

3.6 - Declaració PayOff

Declaració de l'opció

Pantalla 5. Fulla per la declaració del Pay Off.

La fulla "Declaració PayOff" és la que ens permet definir el PayOff per cada tipus d'opció que vulguem generar. El codi per tal de definir el PayOff s'ha d'escriure en Visual Basic a la columna B de la fulla. Per facilitar la feina la fulla incorpora quatre botons que ens permetran agilitar el procés de creació d'un PayOff.

Actualitzar Llista: ens permet actualitzar el ComboBox de l'esquerra de la fulla, a on hi podem trobar tots els PayOff que tinguem a la carpeta "ModulsPayOff"

Importar PayOff: ens importarà el PayOff que tinguem seleccionat i l'escriurà a la fulla per a què puguem veure com s'ha definit.

Definir PayOff: ens defineix el PayOff que tinguem escrit a la fulla de càlcul com a mòdul que utilitzarà per a la simulació.

Exportar PayOff: ens guarda el PayOff que tinguem insertat a la carpeta de PayOff per a poder recuperar-lo posteriorment.

3.7 - Gregues

Aquesta fulla ens permet senyalar quina grega volem que calculi el programa. És necessari marcar amb una 'X' la casella que conté la grega a calcular.

Quina informació ens donen les gregues?

Rho Domèstica: ens mesura com canvia el valor de l'opció quant canvia el tipus d'interès, formalment,
r := dP / di
on i és el tipus d'interès aplicable

Theta: ens mesura com canvia el valor de l'opció quant canvia el temps pel venciment,
q := dP / dt
on t és el temps per a venciment

Rho: ens mesura els canvis respecte el dividends de cada actiu ( en el cas de divises ens estar mesurant els canvis respecte els tipus d'interès exteriors),
ri' := dP / ddi
on d són els dividends anualitzats de l'actiu i

Delta: ens mesura els canvis respecte els canvis en preus dels actius.
di := dP / dSi
on Si és el preu de l'actiu i

Nu: ens mesura els canvis en el valor de l'opció respecte canvis en la volatilitat dels actius.
ni := dP / dsi
on si és la volatilitat de l'actiu i

Gamma: ens mesura els canvis al valor delta d'un actiu quant varia el preu d'un actiu
gij := d^2P / dSidSj =  ddi / dSj

Epsilon: ens mesura com canvia el valor de l'opció al variar la correlació.
eij := dP / dsij
on sij és la correlació entre dos actius.

Gràfic derivació

Gràfic 3. Càlcul de les gregues amb la simulació

La metodologia utilitzada per aproximar la derivada (el pendent) de la corba de preus respecte un paràmetre en un punt S0 ha consistit en prendre la pendent de la recta que passa pels punts S0-dS i S0+dS.

Per calcular el preu de l'opció en aquests punts, aprofitem la simulació realitzada, per veure com varia el preu al pujar i baixar el paràmetre a analitzar.

3.8 - Test PayOff

Pantalla de Test

Pantalla 6. Fulla de prova pel PayOff

Aquesta fulla ens permet fer proves amb la funció de PayOff que tinguem inserida a dins el programa. Ens permet definir els valors que prendrà en un cas concret i calcular-ne el PayOff a venciment. La fulla disposa d'un botó "Recull Valors" que ens agafa els valors dels actius que ja coneixem i les dates de valoració per agilitar l'escriptura de dades.

Per fer la crida a la funció PayOff definida tenim la funció d'Excel FPayOff(Rang1,Rang2) on Rang1 és el Rang que conté les dates inicials ( DataActual, segPas, Num.Actius, Num. Dates) que ens permet que el programa calculi els descomptes a cada període i el Rang2 conté els valors que prendran els diferents actius. Normalment la crida serà "=FpayOff(J12:BG61;B8E9)".

3.9 - Fulles ocultes

Per accedir a les següents fulles anar a 'Formato->Hoja->Mostrar...'

Per tornar-les a amagar anar a 'Formato->Hoja->Ocultar' amb la fulla que volem amagar activa.

ComboDades
Aquesta fulla conté els valors dels quadres combinats del programa.

Calc
Aquesta fulla recull els valors que ha agafat el programa per a fer la valoració, data actual, dates de valoració, numero d'actius, tipus forward aplicats, dividends que s'han utilitzat i valors coneguts dels actius.
El programa no utilitza aquesta fulla, només estar a mode d'informació per l'usuari en cas de no saber quines dades estar utilitzant el programa.