here
Transcript
here
Analisi del prezzo di prodotti derivati con modelli a volatilità stocastica usando il metodo alle differenze finite Baldan Daniele - matricola 680786 Bonfanti Laura Elisa - matricola 680871 3 marzo 2008 Indice 1 Introduzione 1 2 Modelli a volatilità stocastica 2.1 Valutazione dei derivati usando l’approccio delle e.d.p. . . . . . . 3 3 3 L’e.d.p. di Heston come equazione parabolica 3.1 Soluzione in forma chiusa . . . . . . . . . . . . . . . . . . . . . . 3.2 Condizioni al bordo . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Localizzazione del dominio . . . . . . . . . . . . . . . . . . . . . . 6 6 9 9 4 Descrizione del metodo alle differenze finite 10 4.1 Aspetti implementativi . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2 Struttura del codice . . . . . . . . . . . . . . . . . . . . . . . . . 14 5 Risultati numerici 16 5.1 Esempio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.2 Esempio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 5.3 Sviluppi futuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1 Introduzione I mercati finanziari sono caratterizzati per loro natura dal rischio, concetto legato all’impossibilità di prevedere con esattezza il risultato di una determinata operazione: gli investitori sono alla costante ricerca di strategie che permettano di eliminarlo in modo da potersi garantire guadagni significativi senza rischiare di perdere denaro, tramite una compravendita di diverse quantità di prodotti finanziari di vario genere. Sfortunatamente le fonti di rischio sono innumerevoli e non possono essere annullate completamente, ma solo minimizzate tramite diverse tipologie di strumenti finanziari presenti sul mercato, che risultano essere in continua evoluzione per soddisfare le esigenze di quanti più investitori possibili. 1 Tra i prodotti finanziari più importanti vi sono le opzioni, contratti che danno il diritto al possessore di comprare o vendere un determinato titolo finanziario ad un prezzo fissato; questo può avvenire in un istante temporale preciso o in più tempi diversi, a seconda del tipo di opzione considerata. Nel nostro lavoro incentreremo la nostra attenzione sulle opzioni call europee, che permettono al loro possessore di comprare in un particolare istante (detto scadenza) un titolo finanziario ad un prezzo chiamato strike price. Uno degli obiettivi della matematica finanziaria è quello di assegnare un prezzo equo a questo tipo di contratti, sotto ipotesi di assenza di opportunità di arbitraggio, in altre parole si assume che non possa esistere ciò che in gergo è chiamato “free lunch”, ovvero non sia possibile fare soldi dal nulla. A tal fine, è necessario anzitutto costruire un buon modello che descriva in maniera realistica l’andamento del titolo sottostante, in modo che sia possibile ricavare il giusto prezzo dell’opzione scritta su di esso. Il prezzo di un’opzione verrà determinato in base al valore del portafoglio quando il contratto viene stipulato. Ovviamente per avere una valutazione accurata del prezzo del derivato in esame è necessario avere un modello stocastico realistico per l’andamento del sottostante. Black-Scholes nel 1973 discussero un semplice modello dove il sottostante viene supposto essere un moto geometrico browniano e sotto questa ipotesi ricavano il prezzo dell’opzione basandosi sul principio di non arbitraggio. Tale modello è di semplice comprensione e facile da maneggiare nei calcoli, ma si basa su ipotesi non completamente realistiche e non coglie tutte le particolarità delle dinamiche dei titoli finanziari. Noi ci concentreremo sui modelli a volatilità stocastica dove, come suggerisce il nome stesso, la volatilità non è costante come nel modello di Black-Scholes ma è essa stessa un processo stocastico. Analizzando pregi e difetti di alcuni modelli noti in letteratura e cercando di mantenere i primi eliminando i secondi, siamo giunti alla conclusione che un modello che ricalca in maniera ragionevole e coerente l’andamento di un titolo finanziario è quello proposto da Heston. Un’ipotesi fondamentale di questo modello è la non completezza del mercato, ovvero non tutti i titoli derivati possono essere replicati per mezzo di opportune combinazioni di azioni. In altre parole, non è sempre possibile ottenere un payoff pari a quello di un titolo derivato costruendo ad hoc un portafoglio di titoli. Ciò è piuttosto ragionevole se si pensa che l’ipotesi di completezza dei mercati renderebbe le opzioni un prodotto ridondante che addirittura non avrebbe motivo di esistere. E’ possibile mostrare che il prezzo equo di un prodotto derivato in ipotesi di assenza di arbitraggio è dato dal valore atteso scontato del prezzo del sottostante, secondo una misura detta neutrale al rischio o misura di martingala equivalente. Questa misura è tale per cui il rendimento atteso del titolo rischioso è pari al tasso privo di rischio, ovvero in media è equivalente investire nel titolo rischioso o nel titolo privo di rischio. Grazie ai teoremi dell’asset pricing [2], l’assunzione di assenza di opportunità di arbitraggio garantisce l’esistenza di almeno una misura di martingala equivalente, tuttavia l’ipotesi di mercati incompleti fa sı̀ che questa misura non sia unica. Il modello di Heston ha avuto successo per la seguenti ragioni: 2 1. ha una soluzione in forma chiusa per il calcolo del prezzo delle opzioni europee; 2. il processo stocastico usato per modellizzare i prezzi del titolo sottostante permette di utilizzare distribuzioni di probabilità diverse dalla lognormale; 3. è in grado di riprodurre diversi andamenti della volatilità implicita nei prezzi delle opzioni su intervalli di tempo lunghi: le volatility surfaces empiriche hanno spesso un andamento similare a quello generato dal modello di Heston. 2 Modelli a volatilità stocastica Lo scopo di questo capitolo è di dare un’idea di come si possa derivare un’equazione differenziale per il valore di un’opzione con modello stocastico per il sottostante. Sia (Ω,A,P ) uno spazio di probabilità. Il valore del sottostante, che è chiamato anche spot value, è generalmente modellato da un processo stocastico denotato da S. Ad ogni istante t il processo è una variabile casuale St : Ω → R+ . Nel mondo di Black-Scholes lo spot evolve in accordo con l’equazione differenziale stocastica: dSt = µdt + σdWt St dove per un processo stocastico con pedice t, si denota il valore casuale che il processo assume al tempo t, W è un processo di Wiener, mentre µ ∈ R e σ > 0 sono due costanti che descrivono rispettivamente il drift e la volatilità. Nei modelli a volatilità stocastica la costante σ è rimpiazzata da un processo stocastico e tale volatilità è una funzione deterministica dello spot e del tempo. In questo caso, seguendo [5], il modello può essere caratterizzato da: √ dSt (1) = µdt + σL (St , t) vt dWt St √ (2) dvt = κ(θ − vt )dt + ξ vt dWt dove θ > 0, κ > 0 e ξ > 0 sono costanti, mentre σL è una funzione che identifica la volatilità locale ed è tale che σL : R+ × [0, T ] → R+ . Esistono diversi modi per definire σL in funzione di S0 , tuttavia noi utilizzeremo σL = 1 come previsto dal caso particolare di Heston. Inoltre sono stati usati degli apici diversi per identificare i processi di Wiener perchè si tratta di due processi differenti. 2.1 Valutazione dei derivati usando l’approccio delle e.d.p. Ora deriviamo la e.d.p. per il calcolo del valore u di un’opzione per il modello di Heston. In generale possiamo trattare i modelli a volatilità stocastica nello stesso modo ma ricordando sempre che i modelli sono incompleti, nel senso che non siamo in grado di replicare perfettamente un derivato perchè esistono molte differenti strategie che possono essere usate. Poichè il prezzo di un’opzione dipende dall’implementazione della strategia di hedging, che non è unica, anch’esso non sarà unico. 3 In realtà le opzioni europee (plain vanilla) sono trattate in un mercato molto liquido ed una persona potrebbe accettare di utilizzare questi prodotti per coprirsi dal rischio di alcune opzioni esotiche. In questo senso noi siamo perfettamente in grado di replicare i derivati ed ottenere un unico prezzo. Denotiamo il prezzo di un’opzione vanilla come c(s, v, t) dove s è lo spot e v rappresenta la volatilità istantanea attuale. Il nostro portafoglio per coprirci dal rischio consiste in: √ (1) dSt = St µdt + St vt dWt (1) √ (2) dvt = κ(θ − vt )dt + ξ vt dWt dove questa volta prendiamo due processi di Winer correlati in modo tale che (1) (2) dWt dWt = ρdt con |ρ| ≤ 1. Il modello di mercato è rappresentato da: dMt = Mt rdt e il contingent claim lo rappresentiamo come c(St , vt , t). A questo punto non abbiamo bisogno di conoscere esattamente il valore di c : R2+ × [0, T ] → R ma ci basta sapere che c dipende solamente da s, v e t e che sia 2 volte differenziabile eccetto che per t = T . Ora vogliamo quindi coprire ogni derivato del sottostante (con una funzione u : R2+ × [0, T ] → R che deve essere determinata) con una strategia di tipo Ht : Ω → R3 , Ht = (αt , δt , γt ), applicata al portafoglio (Mt , St , c(St , vt , T )). Il valore della strategia è quindi: ht + αt Mt + δt St + γt c(St , vt , t). Ora vogliamo che la strategia sia autofinanziante e che per esempio sia: dht + αt Mt + δt St + γt dc(St , vt , t). Il valore del portafoglio di hedging deve essere uguale al valore dell’opzione: u(St , vt , t) = ht e in particolare il cambio istantaneo deve essere uguale, quindi: du(St , vt , t) = dht Usando ora la formula di Ito possiamo derivare l’equazione alle derivate parziali (e.d.p.) a cui u deve obbedire. Per applicare la formula di Ito assumiamo che u e c siano due volte differenziabili, quindi adesso abbiamo direttamente un espressione per du(St , vt , t) ed ht : ¶ µ 1 1 du(St , vt , t) = u0t + St µu0s + κ(θ − v)u0v + St2 vt u00ss + ξ 2 vt u00vv + St ξvt ρu00sv dt 2 2 √ √ (1) (2) +St vt u0s dWt + ξ vt u0v dWt , (2) ¶ µ 1 2 00 1 2 0 00 0 0 0 dht = γt ct + St µcs + κ(θ − v)cv + St vt css + ξ vt cvv + St ξvt ρcsv dt 2 2 √ √ √ (1) (2) +(αt Mt r + δt St µ)dt + (γt St vt c0s + δt St vt )dWt + γt ξ vt c0v dWt . (3) 4 dove l’apice 0 denota le derivate delle variabili in esame rispetto alla variabile utilizzata come pedice, quindi u0t risulta essere la derivata prima di u rispetto al tempo. Essendo |ρ| < 1, allora i processi u(St , vt , t) e ht sono identici se e solo se i fattori moltiplicativi di dW (1) , dW (2) e dt sono uguali (in un certo senso stocastico). L’uguaglianza dei primi due fattori implica che: √ √ √ St vt u0s = γt St vt c0s + δt St vt √ 0 √ 0 ξ vt uv = γt ξ vt cv Quindi la strategia scelta sarà determinata da γt e δt tali che: γt = u0v , c0v δt = u0s − γc0s = u0s − u0v c0s c0v A questo punto siamo perfettamente in grado di coprire l’opzione u con il modello di mercato assunto Mt , il sottostante St e l’opzione c. Avendo determinato γt e δt cerchiamo di rimpiazzare αt sfruttando la relazione u(St , vt , t) = ht = αt Mt + δt St + γt c(St , vt , t), ottenendo cosı̀ αt Mt = u − δt St − γt c. Ora comparando i termini di drift si ottiene: 1 1 u0t + St µu0s + κ(θ − v)u0v + St2 vt u00ss + ξ 2 vt u00vv + St ξvt ρu00sv 2 2 µ ¶ 1 1 = γt c0t + St µc0s + κ(θ − v)c0v + St2 vt c0ss + ξ 2 vt c00vv + St ξvt ρc00sv 2 2 +(u − δt St − γt c)r + δt St µ. Riarrangiando i termini, sostituendo γt e δt e dividendo l’equazione per u0v troviamo la seguente equazione: µ ¶ 1 1 2 00 1 2 00 0 0 0 00 0 u + S µu + κ(θ − v)u + S v u + ξ v u + S ξv ρu − ru − (µ − r)u S t t ss t vv t t s v sv s t u0v µt 2 t 2 ¶ 1 1 1 = 0 c0t + St µc0s + κ(θ − v)c0v + St2 vt c0ss + ξ 2 vt c00vv + St ξvt ρc00sv − cr − (µ − r)c0s St . cv 2 2 (4) Ovviamente è possibile riprodurre questo risultato con qualsiasi opzione c. Guardando il primo membro della (4) ci accorgiamo che esso non dipende da c ma è funzione solo di St , vt e t; denotiamo allora questa funzione con λ : R2+ × [0, T ] → R e otteniamo: µ 1 1 u0t + St µu0s + κ(θ − v)u0v + St2 vt u00ss + u0v 2 ¶ 1 2 00 ξ vt uvv + St ξvt ρu00sv − ru − (µ − r)u0s St = λ(St , vt , t). 2 Riscriviamo ora l’equazione precedente considerando la funzione u =: R2+ × [0, T ] → R, dove u = u(s, v, t) e si ha: 1 u0t + sru0s + (k(θ − v) − λ(s, v, t))u0v + v(s2 u00ss + ξ 2 u00vv + 2sξρu00sv ) − rv = 0 2 5 La funzione λ è chiamata premio per il rischio del mercato e non è univocamente determinata. Questo, quindi, caratterizza un modello di mercato incompleto dove non è possibile replicare il derivato con un portafoglio formato dal sottostante e dal modello di mercato preso in esame. Comunque se uno considera il prezzo dell’opzione plain vanilla call/put c osservato nel mercato e vuole prezzare un’altra opzione u, per esempio un’opzione barriera, è in grado di trovare un’unica soluzione. Quest’ultima viene calcolata mediante l’utilizzo di appropriata funzione λ che ci permette di ritrovare il prezzo dell’opzione c precedentemente considerata. In pratica basta prendere λ(s, v, t) = 0 e calibrare i parametri del sottostante per osservare il prezzo dell’opzione plain vanilla (calibrazione dello smile). La condizione finale dell’e.d.p. è data dal payoff dell’opzione. Una trasformazione dal tempo t al “time to maturity”(tempo a scadenza) T − t ci permette di utilizzare il payoff dell’opzione come condizione iniziale, inoltre prendiamo in considerazione il modello di Heston assumendo che il premio per il rischio del mercato sia della forma λ(s, v, t) = λv. L’equazione per Heston risulta essere: ut = 1 v(uss + ξ 2 uvv + 2ρξusv ) + rsus + (κ(θ − v) − λv)uv − ru 2 (5) dove, per semplicità di scrittura, si sono tralasciati gli apici che indicavano le derivate. Quindi i pedici delle variabili prese in esame nell’equazione indicano le variabili rispetto a cui derivare (ut indica la derivata temporale di u rispetto a t). 3 L’e.d.p. di Heston come equazione parabolica L’equazione (5) è un’equazione alle derivate parziali parabolica che si può riscrivere in forma più compatta come: ∂ u = div(A∇u) − div(ub) + f ∂t (6) dove A è chiamata matrice di diffusione e b è il vettore di trasporto del problema (5). Confrontando i coefficienti dell’equazione di Heston (5) con i coefficienti del generico problema di diffusione trasporto (6) si trova: µ ¶ 1 1 ρξ A= v ρξ ξ 2 2 1 ρξ − rs 2 b= 1 2 ξ − κ(θ − v) + λv 2 f = (κ + λ − 2r)u 3.1 Soluzione in forma chiusa Può essere sempre utile avere una formula esplicita per prezzare un opzione. Fortunatamente Heston propose un particolare metodo per prezzare un’opzione 6 call europea in ambito di modelli a volatilità stocastica. In questo lavoro si deriverà brevemente la soluzione in forma chiusa per un’opzione call europea con il modello di Heston, ma per maggiori dettagli si veda [6]. Come prima cosa riprendiamo la soluzione basata sulla formula di BlackScholes: c(St , vt , t, T ) = St P1 − Ke−r(T −t) P2 dove K rappresenta lo strike price dell’opzione, r è il tasso d’interesse e Pj può essere interpretata come la probabilità neutrale al rischio. Tale probabilità può anche essere espressa come: Pj (x, vt , T, K) = probabilità [x(T ) ≥ ln(K)|x(t) = x, v(t) = v] dove x = ln(St ) con j = 1, 2. Ora possiamo sostituire la soluzione proposta dentro l’equazione di Heston. Allora la seguente equazione deve essere soddisfatta: 1 ∂ 2 Pj ∂ 2 Pj 1 2 ∂ 2 Pj ∂Pj ∂Pj ∂Pj v + ρξv + ξ v + (r + uj v) + (a − bj v) + =0 2 ∂x2 ∂x∂y 2 ∂v 2 ∂x ∂v ∂t dove u1 = 0.5, u2 = −0.5, a = κθ, b1 = κ + λ − ρξ, b2 = κ + λ. Dato che le probabilità non sono facilmente calcolabili, è necessario derivare una funzione caratteristica. Sia g(x(T ), v(T )) una funzione di x e v al tempo di scadenza T , chiamiamo fj (x, v, t) la funzione due volte differenziabile che rappresenta il valore atteso condizionale di g(x(T ), v(T )). Allora, grazie al lemma di Ito si ottiene la seguente espressione: µ ¶ 1 ∂ 2 fj ∂ 2 fj 1 ∂ 2 fj ∂fj ∂fj dfj = v 2 + ρξv + ξ 2 v 2 + (r + uj v) + dt 2 ∂x ∂x∂v 2 ∂v ∂v ∂t (7) ∂fj ∂fj +(r + uj v) dW (1) + (a − bj v) dW (2) ∂x ∂v Poichè chiediamo che fj (x, v, t) sia una martingala, è necessario che il termine moltiplicativo di dt della (7) sia nullo, quindi: 1 ∂ 2 fj ∂ 2 fj 1 ∂ 2 fj ∂fj ∂fj v 2 + ρξv + ξ 2 v 2 + (r + uj v) + =0 2 ∂x ∂x∂v 2 ∂v ∂v ∂t (8) Se g(x(T ), v(T )) = 1x(T )≥ln(K) , la soluzione della precedente equazione è la probabilità condizionale al tempo t tale che x(T ) ≥ ln(K). Se poi g(x(T ), v(T )) = exp(iφx), la soluzione è la funzione caratteristica. Assumiamo inoltre che la nostra soluzione abbia una forma del tipo: fj (xt , vt , t) = exp[Cj (T − t) + Dj (T − t)vt + iφx]. dove Cj (T − t) e Dj (T − t) sono funzioni note. Sostituendo la precedente soluzione all’interno dell’equazione (8), otteniamo: 1 2 2 ∂Dj 1 2 − 2 φ + ρξφiDj + 2 ξ Dj + uj φi − bj Dj + ∂t = 0 ∂Cj rφi + aDj + =0 ∂t Cj (0) = 0 Dj (0) = 0 7 Risolvendo l’equazione differenziale ordinaria precedente, si ottiene una soluzione come segue: fj (x, vt , T, φ) = exp[Cj (T − t, φ) + Dj (T − t, φ)vj + iφx] · µ ¶¸ a 1 − gedj τ (b − ρξφi + d )τ − 2ln j j ξ2 1−g µ ¶ bj − ρξφi + dj 1 − edj τ Dj (τ = T − t, φ) = ξ2 1 − gedj τ q bj − ρξφi + dj gj = dj = (ρξφi − bj )2 − ξ 2 (2uj φi − φ2 ) bj − ρξφi − dj Cj (τ = T − t, φ) = rφir + u1 = 0.5, u2 = −0.5, a = κθ, b1 = κ+λ−ρξ, b2 = κ+λ, x = ln(St ). Una volta ricavata la funzione caratteristica, possiamo calcolarci la corrispondente probabilità: à ! Z 1 ∞ eiφln(K) fj (x, vt , T, φ) 1 Re dφ. Pj (x, vt , T, K) = + 2 π 0 iφ Alla fine la soluzione in forma chiusa per un opzione call europea che non paga dividendi è: c(St , vt , t, T ) = St P1 − Ke−r(T −t) P2 , (9) dove: per j = 1, 2 1 1 Pj (x, vt , T, K) = + 2 π Z à ∞ Re 0 eiφln(K) fj (x, vt , T, φ) iφ ! dφ fj (x, vt , T, φ) = exp[Cj (T − t, φ) + Dj (T − t, φ)vj + iφx] · µ ¶¸ a 1 − gedj τ Cj (τ = T −t, φ) = rφir+ 2 (bj − ρξφi + dj )τ − 2ln ξ 1−g µ ¶ dj τ bj − ρξφi + dj 1 − e Dj (τ = T − t, φ) = ξ2 1 − gedj τ q bj − ρξφi + dj gj = dj = (ρξφi − bj )2 − ξ 2 (2uj φi − φ2 ) bj − ρξφi − dj u1 = 0.5, u2 = −0.5, a = κθ, b1 = κ+λ−ρξ, b2 = κ+λ, x = ln(St ). Ovviamente anche in questo caso per uniformità di linguaggio è possibile pensare alla soluzione in forma chiusa come c(s, v, T, t), dove s rappresenta il sottostante al tempo t e v rappresenta la volatilità al tempo t. 8 3.2 Condizioni al bordo Il modello di Heston tratta sia le derivate spaziali (rispetto allo stock ed alla volatilità), sia la derivata temporale . E’ quindi necessario assegnare delle condizioni al bordo in ogni direzione. Noi utilizzeremo una sorta di condizioni al bordo “artificiali” che risultano essere ragionevoli per il nostro problema. Le considerazioni sulle condizioni al bordo sono anche basate su quanto spiegato in [6]. Per quanto riguarda la direzione temporale è molto semplice, quando si raggiunge il time to maturity il prezzo di un’opzione call europea sarà il payoff del contratto: u(0, s, v) = max(s − K, 0). Nel nostro caso, avendo posto T = T − t, risulta T = 0 mentre K è lo strike price. Per lo stock price, invece, se assumiamo che esso sia zero, facendo riferimento a [6], si pone: u(t, 0, v) = 0 Quando invece il prezzo del sottostante è molto più grande dello srike price è possibile utilizzare una condizione di Neumann anche se, come consigliato in [7], è meglio utilizzare la soluzione in forma chiusa (9). Per quanto riguarda la volatilità, se questa è zero la condizione al bordo è: u(t, s, 0) = max(s − Ker(T −t) , 0), mentre quando la volatilità tende ad aumentare è intuitivo pensare che il valore del contratto sia lo stesso di quello dello stock price e quindi: u(t, s, vmax ) = s. 3.3 (10) Localizzazione del dominio Dopo aver definito le condizioni al bordo, dobbiamo decidere i valori da assegnare al massimo stock price ed alla volatilità massima. Per quanto riguarda il primo, assumiamo che il massimo valore assunto dal sottostante sia pari a quattro volte lo strike price [6], invece per la volatilità massima non esistono delle regole fisse; proviamo quindi a determinare questo valore facendo dei test. Basandoci sulla (10) sappiamo che quando la volatilità è massima, il prezzo dell’opzione deve essere uguale allo stock price, questo significa che nel piano cartesiano del prezzo dell’opzione in funzione del prezzo dello stock avremo una retta che parte dall’origine e cresce con pendenza pari ad 1. Allora se facessimo qualche test potremmo trovare il valore della volatilità massima utilizzando la soluzione in forma chiusa al variare del sottostante fissando la volatilità stessa; quando quest’ultima coinciderà con il grafico della retta generata precedentemente avremo effettivamente trovato il valore della volatilità massima. In figura 1 vengono mostrati alcuni test da noi effettuati plottando la curva della soluzione ottenuta con la formula chiusa al variare di v. Da questi test possiamo concludere che quando la volatilità è uguale a 40 o più grande, la curva del prezzo dell’opzione soddisferà i requisiti richiesti. Il massimo valore per la volatilità per il metodo alle differenze finite sarà preso quindi uguale a 40. 9 80 80 ’Volatility 10.data’ ’Volmax.data’ 70 60 60 50 50 Prezzo opzione Prezzo opzione ’Volatility 5.data’ ’Volmax.data’ 70 40 40 30 30 20 20 10 10 0 0 0 10 20 30 40 Prezzo Stock 50 60 70 80 0 10 20 (a) v = 5 30 40 Prezzo Stock 50 70 80 (b) v = 10 80 80 ’Volatility 20.data’ ’Volmax.data’ ’Volatility 40.data’ ’Volmax.data’ 70 70 60 60 50 50 Prezzo opzione Prezzo opzione 60 40 40 30 30 20 20 10 10 0 0 0 10 20 30 40 Prezzo Stock 50 60 70 80 0 10 (c) v = 20 20 30 40 Prezzo Stock 50 60 70 80 (d) v = 40 Figura 1: Volatilità massima 4 Descrizione del metodo alle differenze finite L’idea principale del metodo alle differenze finite è che bisogna applicare una discretizzazione dell’equazione alle derivate parziali su una griglia per un dominio finito. La discretizzazione può essere effettuata tramite una griglia uniforme, non uniforme oppure casuale. Noi utilizzeremo una griglia uniforme del tipo in figura 2, dove la direzione delle x e delle y sono suddivise rispettivamente in N x e N y intervalli di ampiezza 4x e 4y. Ovviamente il valore di u in ogni punto della mesh dipenderà dai diversi valori attorno ad esso. Tutti i valori interni al dominio sono incogniti mentre i valori al bordo sono determinati. Il problema adesso sta nel approssimare il meglio possibile le derivate. Si possono usare differenti forme di differenze finite: in avanti, all’indietro e centrate ∂F F (x + 4x) − F (x) Differenze in avanti = ∂x 4x Differenze all’indietro F (x) − F (x − 4x) ∂F = ∂x 4x Differenze centrate ∂F F (x + 4x) − F (x − 4x) = ∂x 24x A meno di indicazioni particolari si utilizzano le differenze centrate. Se invece il termine di trasporto ha una direzione dominante è preferibile utilizzare le differenze finite in avanti o in indietro, a seconda della direzione del trasporto. Per 10 Figura 2: Discretizzazione di un dominio finito verificare quale approssimazione utilizzare per l’equazione di Heston abbiamo plottato il termine di trasporto (Vedi figura 3). Trasporto 45 40 35 Volatility 30 25 20 15 10 5 0 0 10 20 30 40 Stock 50 60 70 80 Figura 3: Campo di trasporto per il problema di Heston Dalla figura si vede bene come il trasporto sia dominante lungo l’asse delle y, ed è per questo motivo che abbiamo scelto di utilizzare differenze finite decentrate (upwind) per la derivata prima rispetto alla volatilità. Per quanto riguarda la derivata prima rispetto a s abbiamo scelto una differenza centrata. La presenza di derivate seconde all’interno dell’equazione di Heston necessita di uno schema di approssimazione di questo tipo: 1 ∂2F = (F (x + 4x) − 2F (x) + F (x − 4x)). ∂x2 4x2 11 Per quanto riguarda la derivata seconda mista, un’opportuna scelta è stata quella di approssimarla con: ∂2F ∂x∂y = 1 44x4y (F (x + 4x, y + 4y) + F (x − 4x, y − 4y) −F (x + 4x, y − 4y) − F (x − 4x, y + 4y)) Inoltre l’equazione presenta derivate continue anche in tempo e per approssimarle si usano delle strategie in avanti, in indietro o con Crank-Nicholson nel seguente modo: Eulero in avanti F t+1 − F t = AF t + bt 4t Eulero all’indietro F t+1 − F t = AF t+1 + bt+1 4t Crank-Nicholson F t+1 − F t 1 1 = A(F t+1 + F t ) + (bt+1 + bt ) 4t 2 2 Nel nostro caso abbiamo utilizzato Eulero all’indietro e Crank-Nicolson che sono incondizionatamente stabili e convergenti [3] mentre Eulero in avanti ha delle condizioni di stabilità molto restrittive. 4.1 Aspetti implementativi Per poter scrivere il problema alle differenze finite come sistema lineare è necessario passare da un’individuazione del nodo sotto forma di coppia di coordinate (i, j) ad una del tipo k con k=1,...,n dove n=(Nx-1)*(Ny-1) (figura 4). Figura 4: Numerazione dei nodi di griglia. In questo modo è possibile scrivere il problema in forma matriciale assegnando ad ogni derivata una matrice che la rappresenti. Possiamo vedere la rappresen- 12 tazione delle matrici del problema: 1 −1 0 0 1 −1 0 0 1 0 0 0 ··· ··· .. . .. . ∂u 1 ≈ D1v = ∂v 4v 0 0 −1 1 .. .. .. . . . 0 0 0 ··· 1 0 0 ··· 0 0 0 ··· 0 1 0 ··· 0 0 0 ··· 0 0 1 ··· .. .. . . . . . . ... ... . . . . . . ∂u 1 . . ≈ D1s = 0 ··· 0 0 0 ··· ∂s 4s −1 0 0 −1 0 · · · 0 0 0 · · · 0 0 −1 · · · 0 0 0 · · · .. .. . . .. .. .. .. . . .. .. . . . . −2 1 0 0 ··· 1 −2 1 0 ··· ∂2u 1 0 1 −2 1 ≈ D2v = 2 2 . ∂v (4v) . . 0 1 −2 0 .. .. .. .. . . . . −2 0 0 ··· 1 0 0 0 −2 0 · · · 0 1 0 0 0 −2 · · · 0 0 1 . . . . . . . . .. .. .. .. .. .. 1 ∂2u . ≈ D2s = 2 2 0 0 · · · −2 0 0 ∂s (4s) 1 0 1 0 ··· 0 −2 0 0 0 1 ··· 0 0 −2 .. .. .. .. .. .. .. . . . . . . . 1 ∂2u ≈ D2sv = ∂s∂v 44s4v 0 0 0 0 0 0 ··· ··· 0 −1 1 0 0 1 0 .. . 0 .. . 0 .. . 0 .. . −1 .. . 0 .. . 0 1 −1 0 0 −1 0 0 0 0 0 0 0 .. . 1 .. . 0 .. . ··· .. . ··· ··· .. . 0 .. . 0 .. . 0 .. . .. . ··· ··· ··· .. . ··· ··· ··· .. . ··· ··· .. . .. . ··· ··· ··· .. . ∂u Per quanto riguarda la moltiplicazione per s o v (ad esempio per il termine v ) ∂v si deve ragionare come segue: partendo dal primo nodo della mesh e proseguendo secondo la numerazione appena introdotta, possiamo pensare che moltiplicare per s significhi moltiplicare gli elementi della k-sima riga delle matrici per la 13 s corrispondente all’indice i. Per quanto riguarda la moltiplicazione per la v si dovrà moltiplicare gli elementi della k-sima riga per la v corrispondente all’indice j. Con questo procedimento sarà possibile creare tutte le matrici che approssimano i termini di derivazione spaziale dell’equazione (e che chiameremo per comodità vD1v, svD2sv, ...). I nodi vicini al bordo risentiranno delle condizioni di Dirichlet imposte dal problema. Ad esempio il nodo (i, j)=(0, 0), a cui corrisponde k=0, si troverà tra il lato u = u(0, v) e u = u(s, 0), mentre il nodo (i, j)=(Ny-1, 0), a cui corrisponde k=Ny-1, acquisirà le informazioni anche da u = u(0, v) e u = u(s, 40). Procedendo cosı̀ per tutti i nodi interni che si trovano vicino al bordo si costruisce il termine noto b. Avremo dunque che l’equazione di Heston (5) si può approssimare con: ∂u = Au + b, ∂t dove, con la notazione precedente, A = r sD1s + κθ D1v − (κ + λ) vD1v + 1 1 s2vD2s + ξ 2 vD2v + ξρ svD2sv − r I. 2 2 Come si può ben immaginare la matrice A sarà altamente sparsa e ciò è dimostrato anche dalla figura 5, in cui si vedono gli elementi non nulli in una simulazione con Nx=Ny=9. Spy della matrice (n=64) 0 10 20 30 40 50 60 Figura 5: Elementi non nulli della Matrice A per il problema di Heston 4.2 Struttura del codice La risoluzione dell’equazione di Heston (5) tramite le differenze finite si può riassumere in alcuni passi fondamentali: • Costruzione delle matrici di discretizzazione dei termini derivativi; • Costruzione dei termini di bordo; 14 • Soluzione di un sistema lineare per ogni istante di tempo (EI, CrankNicolson); • Salvataggio e plot della soluzione. Innanzitutto abbiamo dovuto scegliere quale metodo utilizzare per la risoluzione del sistema lineare. Tra i diversi metodi noti in letteratura si è dovuto scegliere tra un metodo iterativo (tipo GMRES) ed un metodo diretto (UMFPACK). A tal proposito abbiamo pensato di verificare la velocità di risoluzione di un sistema lineare con matrice tridiagonale all’aumentare della dimensione del problema. I risultati sono mostrati in figura 6. La nostra scelta è ricaduta Confronto tempi CPU di UMFPACK e GMRES al variare di n 0.35 ’tempiGMRES.data’ ’tempiUMFPACK.data’ 0.3 Tempo (sec) 0.25 0.2 0.15 0.1 0.05 0 0 10000 20000 30000 Dimensione problema 40000 50000 60000 Figura 6: Confronto tempi per la risoluzione di un sistema lineare. GMRES in rosso, UMFPACK verde. su UMFPACK che fornisce la soluzione esatta ed ha le stesse prestazioni del GMRES per problemi della nostra dimensione. Un’altra importante considerazione va fatta sul tipo di struttura da utilizzare per la memorizzazione delle matrici. Abbiamo scelto di utilizzare la libreria uBLAS che permette di gestire il noto formato per matrici sparse CSC (“Compressed Sparse Column”). Esso è uno dei formati più compatti ed è formato da tre vettori: il primo contenente i valori degli elementi non nulli della matrice ordinati per colonna, il secondo contiene gli indici di riga di ogni elemento non nullo mentre il terzo contiene i puntatori alle colonne. Vediamo ora come funziona il codice che si trova all’interno del main. Particolare attenzione è stata fatta per la memorizzazione delle matrici di approssimazione delle derivate. In particolare si è riusciti a memorizzare tutte le matrici con un ordine di complessità pari alla dimensione n = (N x − 1)(N y − 1) del problema. Per costruire il termine di bordo u = u(smax , v) è stato necessario creare una funzione che restituisse il valore della soluzione chiusa in funzione dei parametri finanziari, della volatilità v e del valore del sottostante s. Tale funzione richiede a sua volta il calcolo di un integrale e quindi abbiamo implementato un semplice codice per il calcolo di integrali definiti tramite la formula di quadratura 15 di Simpson. Per non appesantire il main abbiamo salvato il tutto in un file f chiusa.hpp. In un altro file (linear solve.hpp) abbiamo creato il risolutore per un sistema lineare tipo (Au = f ) con UMFPACK. Tale risolutore prende come argomenti la matrice sparsa A (nel formato CSC) ed il vettore del termine noto f e restituisce la soluzione esatta. Per la creazione di questo risolutore è stata seguita la guida dell’utente inclusa nelle librerie UMFPACK [8]. Per quanto riguarda il salvataggio e il plot della soluzione abbiamo deciso di procedere nel seguente modo: si è unito il vettore soluzione del sistema lineare con la soluzione sul bordo utilizzando una funzione da noi creata per poi salvare i dati delle coordinate e la soluzione in ogni punto in un formato leggibile da gnuplot1 . Questa ed altre funzioni ausiliari sono state salvate in un file chiamato f unction.hpp. 5 Risultati numerici In questa sezione riportiamo i risultati ottenuti con il metodo alle differenze finite discusso in precedenza. Il programma è stato compilato con il compilatore GNU C++ su una macchina avente processore AMD Turion ML-34 e 2GB di RAM. 5.1 Esempio 1 In questo primo caso test abbiamo scelto i seguenti valori per i parametri finanziari: K = 20 Smax = 80; r = 0.1 ρ = −0.1; θ = 0.04 λ = 0; ξ = 0.5 κ = 2; T = 2; Tali parametri sono frutto di una calibrazione del mercato [5]. In figura (7) è possibile confrontare i risultati ottenuti con Eulero implicito e Crank-Nicholson nel caso in cui la griglia spaziale sia discretizzata con Nx=Ny=30 e passo temporale fissato a 4t = 0.01 anni. Soluzione al tempo t=2.000000s Call Soluzione al tempo t=2.000000s 80 70 60 50 40 30 20 10 0 Call 40 40 80 35 Volatility 30 10 20 5 0 0 50 20 40 15 60 25 50 20 70 30 60 25 80 35 70 30 80 70 60 50 40 30 20 10 0 Stock Volatility 40 15 30 10 20 5 10 0 0 (a) Eulero Implicito. 10 (b) Crank-Nicolson. Figura 7: Caso test1 con Nx=Ny=30. 1 http://www.gnuplot.info/ 16 Stock In figura (8) è possibile vedere la stessa soluzione ottenuta con una griglia più fitta. Soluzione al tempo t=2.000000s Call 80 70 60 50 40 30 20 10 0 40 80 35 70 30 60 25 50 20 Volatility 40 15 30 10 20 5 0 0 Stock 10 Figura 8: Test1 - Eulero Implicito con Nx=Ny=50. Mettiamo ora a confronto i tempi di risoluzione: Dimensione 30 × 30 50 × 50 Eulero Implicito 7s 18 s Crank-Nicholson 92 s 770 s Il metodo di Eulero implicito risulta essere molto più efficente di Crank-Nicolson. Questo è dovuto al fatto che il secondo richiede un prodotto matrice-vettore ad ogni passo temporale che ne rallenta le performance. Inoltre Crank-Nicolson produce delle oscillazioni nella soluzione. Tali oscillazioni tendono però ad attenuarsi col passare del tempo, come previsto dalla stabilità incondizionata. 5.2 Esempio 2 I valori dei parametri per questo caso test sono: K = 20 r = 0.2 θ = 0.02 ξ = 0.3 Smax = 80; ρ = −0.5; λ = 0.1; κ = 3; T = 2; Per il secondo caso test riportiamo i risultati ottenuti con Eulero Implicito in quanto abbiamo verificato essere il metodo più affidabile per il nostro problema. Nella figura (9) si può vedere quindi la soluzione ottenuta con una discretizzazione spaziale Nx=Ny=50 e con passo temporale 4t = 0.01 anni. Per questa simulazione sono stati necessari 17s per il calcolo della soluzione ed il salvataggio dati in ogni istante di tempo. 17 Soluzione al tempo t=2.000000s Call 80 70 60 50 40 30 20 10 0 40 80 35 70 30 60 25 50 20 Volatility 40 15 30 10 20 5 0 0 Stock 10 Figura 9: TEST2 - Eulero Implicito con Nx=Ny=50. 5.3 Sviluppi futuri Il modello di Heston presenta però degli svantaggi e lascia delle questioni aperte: - per certi valori dei parametri, non opportunamente calibrati, si ottengono prezzi delle opzioni negativi oppure più bassi del limite inferiore dell’intervallo determinato dalle condizioni di non arbitraggio; ciò non avviene se i parametri vengono accuratamente stimati in modo tale che il processo dei prezzi sia una martingala; - il modello fallisce nel riprodurre l’andamento della volatilità implicita per brevi scadenze; - i parametri del modello calibrato con i dati di mercato non sono costanti. Una calibrazione è adeguata soltanto se, una volta stabiliti i parametri sulla base di una serie storica di dati, essi rimangono costanti se si usano i dati dei giorni successivi. Se ciò non accade, come in realtà avviene, allora è difficile interpretare i cambiamenti dei parametri nei modelli con volatilità stocastica. E’ per questi motivi che questo modello non risulta sempre adeguato. Una possibile soluzione che mantenga i pregi del modello di Heston, ma ne corregga i difetti, è stata proposta da Bates. In futuro si potrebbe quindi implementare una modifica al codice che gestisca un termine integrale anche nell’equazione differenziale; questo permetterebbe di gestire le equazioni alle derivate parziali integro-differenziali (PIDE) che si ricavano nello studio di modelli con salti (come quello di Bates). 18 Riferimenti bibliografici [1] L.Formaggia, Programmazione avanzata per il calcolo scientifico, Dispense dal sito www2.mate.polimi.it:8080/CN/PACS05, 2006-2007. [2] Tomas Bjork, Arbitrage theory in continuous time, Oxford University Press, 2003. [3] Alfio Quarteroni, Modellistica numerica per problemi differenziali, Springer, 2003. [4] Rama Cont e Peter Tankov, Financial modelling with jump processes, Chapman e Hall/CRC Financial Mathematics Series, 2003. [5] Jian Wang, Convexity of option prices in the Heston model, U.U.D.M. Project Report 2007:3, 2007. [6] S.L.Heston, A closed-form solution for option with stochastic volatility with applications to bond and currency options, The review of financial studies, 327-343, 1993. [7] F.Black e M.Scholes, The valuation of option and corporate liabilities, Journal of political economy, 81,637-654, 1973. [8] T.A.Davis, UMFPACK Version 5.2.0 User Guide, Dept. of Computer and Information Science and Engineering Univ. of Florida. 19