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