Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Passalacqua
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 2
La valutazione di derivati americani con il metodo MC
Da Option, Futures and other Derivative Securities, Hull J., Prentice
Hall (1993), pag. 334:
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 3
Stima dei percentili con il metodo Monte Carlo
Sia X ∈ R una variabile aleatoria con funzione di ripartizione F (x)
e densità di probabilità f (x); il quantile α-esimo della distribuzione
di X è definito come:
qα = inf{x|F (x) ≥ α}, α ∈ (0, 1). (1)
Nel caso di funzioni di ripartizione assolutamente continue la (1)
diventa:
qα = F −1 (α). (2)
Su un campione di n realizzazioni i.i.d. di X, x1 , x2 , . . . , xn , lo
stimatore della funzione di ripartizione è dato da:
n
1X
F̂ (x) = 1I{xi ≤x} ,
n i=1
mentre lo stimatore del quantile è:
q̂α = x(dαne)
dove x(1) ≤ x(2) ≤ . . . x(n) sono le statistiche d’ordine e due è il più
piccolo intero non inferiore a u (mentre buc è il più grande intero
non superiore a u).
Nel limite di n → ∞ lo stimatore q̂α è distribuito in maniera normale
con valore atteso qα e varianza:
α(1 − α)
Var[q̂α ] = .
nf 2 (qα )
T
Osservazione. La definizione di quantile empirico non è univoca e
AF
può comportare differenze significative quando la distribuzione non
è continua. [HF-96] discutono le proprietà di uno stimatore ideale
del quantile e riportano 9 diverse definizioni utilizzate in letteratura
o nelle librerie di calcolo. La funzione quantile() di R permette
DR
Eduardo S. Schwartz
UCLA
This article presents a simple yet powerful new approach for approximating the value of
America11 options by simulation. The kcy to this approach is the use of least squares to
estimate the conditional expected payoff to the optionholder from continuation. This
makes this approach readily applicable in path-dependent and multifactor situations
where traditional finite difference techniques cannot be used. We illustrate this tech-
nique with several realistic exatnples including valuing an option when the underlying
asset follows a jump-diffusion process and valuing an America11 swaption in a 20-factor
string model of the term structure.
One of the most important problems in option pricing theory is the valuation
and optimal exercise of derivatives with American-style exercise features.
These types of derivatives are found in all major financial markets includ-
ing the equity, commodity, foreign exchange, insurance, energy, sovereign,
agency, municipal, mortgage, credit, real estate, convertible, swap, and emerg-
ing markets. Despite recent advances, however, the valuation and optimal
exercise of American options remains one of the most challenging problems
in derivatives finance, particularly when more than one factor affects the
value of the option. This is primarily because finite difference and binomial
techniques become impractical in situations where there are multiple factors.' T
We are grateful for the cotnl~lelitsof Yaser Abu-Mostafa, Giovanlii Barone-Adesi, Marco Avellaneda, Peter
Bossaerts, Peter Carr, Peter DeCrem, Craig F~thian,Bjorn Flesaker, James Cammill, Gordon Gemmill, Robert
Geske, Eric Ghysels, Ravit Efraty Mandell. Soetojo Tanudjaja. John Thornley, Bruce Tuckman. Pedro Santa-
Clara, Pratap Sondhi. Ross Valkanov, and seminar participants at Bear Stearns, the University of British
Columbia, the California Institute of Technology. Chase Manhattan Bank. Citibank, the Courant Institute at
New York University, C r e d ~ tSuisse First Boston, Daiwa Securities. Fuji Bank. Goldman Sachs, Greenwich
Capital. Morgan Stanley Dean Witter, the No~inchukinBank, Nikko Securities, the h4ath Week Risk Magazine
AF
Conferences in London and New York. Salomon Smith Barney in London and Neu York. Simplex Capital,
the Su~nitomoBank, UCLA. the 1998 Danish Finance Association meetings. and the 1999 Western Finance
Association meetings. We are particularly grateful for the comments of the editor Ravi Jagannathan and of an
The Reiieib of Firiancial Studies Spring 2001 Vol. IS. No. I , pp. 113-147
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 7
Un esempio elementare
L’approccio di Longstaff e Schwartz è generalmente presentato a
partire da un esempio fornito dagli stessi autori.
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 8
L’algoritmo è composto da un passo preliminare, da una serie di passi
intermedi nei quali si procede ricorsivamente all’indietro lavorando
su coppie di date (tj−1 , tj ), j = 3, 2, 1, e da un passo finale.
Il passo preliminare consiste nel determinare il valore dell’opzione a
scadenza, come mostrato nella tabella 2.
Per ogni coppia di date (tj−1 , tj ) i passi intermedi sono a loro volta
composti dalle seguenti operazioni:
1. si determinano gli stati in cui l’opzione è in-the-money;
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 9
Nel primo passo intermedio si considera la coppia di date (t2 , t3 ), si
determina il valore Y dei flussi di cassa futuri – scontando da t3 a
t2 – e si stima il valore di continuazione utilizzando il polinomio di
secondo grado ottenuto regredendo il valore attuale dei flussi futuri
sul valore di X = S(t2 ). Si ottiene così:
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 10
Il secondo passo intermedio consiste nel considerare la coppia di date
(t1 , t2 ) e ripetere le operazioni eseguite al passo precedente. In questo
caso il risultato della regressione è:
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 11
L’ultimo passo consiste nella valutazione dell’opzione:
n n n
1 hX X X i
V (t0 ) = v(t0 , t1 )Vi (t1 )+ v(t0 , t2 )Vi (t2 )+ v(t0 , t3 )Vi (t3 ) ,
n i=1 i=1 i=1
i∈I1 i∈I2 i∈I3
(8)
dove Ij è l’insieme dei sentieri per i quali l’opzione viene esercitata
all’istante tj .
In questo caso:
V (t0 ) = 0.1144. (9)
T
AF
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 12
2 Basi di polinomi ortogonali
T
AF
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 13
3 Basi di polinomi ortogonali
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 14
Polinomi ortogonali “classici”
La lista dei principali polinomi ortogonali è composta da un insieme
relativamente vasto di polinomi definiti in (−1, 1) con funzioni peso
differenti e da due polinomi per gli intervalli (0, ∞) e (−∞, ∞) per i
quali la scelta della funzione peso è di tipo esponenziale.
La tabella 7 riporta dominio e funzione peso dei principali polinomi
ortogonali. Per ulteriori dettagli si veda, ad esempio, [AS-72] pag.
771 ss o [N-10] pag. 435 ss.
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 17
Espressioni analitiche dei polinomi ortogonali
Le espressioni analitiche dei polinomi ortogonali si possono ricavare
tramite la c.d. formula di Rodrigues:
1 dn h n
i
pn (x) = w(x)F (x) (17)
κn w(x) dxn
per n = 0 p0 (x) = 1
1 d −x
per n = 1 p1 (x) = e x =1−x (18)
e−x dx
T
d2 −x 2 1 21
per n = 2 p2 (x) = −x 2 e x = x − 2x + 1
AF
e dx 2
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 18
Polinomi ortogonali e integrali
I polinomi ortogonali sono legati al metodo di integrazione per qua-
drature di Gauss da una importante proprietà:
Ln (x) = 0. (19)
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 19
La libreria di R “orthopolynom” fornisce una collezione di funzioni
per l’uso dei polinomi ortogonali.
library(orthopolynom)
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 20
Esempio di integrazione
Si consideri (cfr [QSS-00] pag. 402 e pag. 429) l’integrale:
Z ∞
3
I= cos2 (x)e−x dx = = 0.6. (22)
0 5
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 21
1 # cfr. Quarteroni A., Sacco R., Saleri F. "Matematica Numerica", 2008, Springer, pagg. 339-341
2
3 coeflege <- function(n) { # calcola i coefficienti dei polinomi di Legendre
4 a = b = array(0, dim=n)
5 b[1] = 2
6 k = seq(from=2, to=n, by=1)
7 b[k] = 1/(4-1/(k-1)^2)
8 out = data.frame(a=a, b=b)
9 return(out)
10 }
11
12 coeflagu <- function(n) { # calcola i coefficienti dei polinomi di Laguerre
13 a = b = array(0, dim=n)
14 a[1] = b[1] = 1
15 k = seq(from=2, to=n, by=1)
16 a[k] = 2*(k-1)+1
17 b[k] = (k-1)^2
18 out = data.frame(a=a, b=b)
19 return(out)
20 }
21
22 coefherm <- function(n) { # calcola i coefficienti dei polinomi di Hermite
23 a = b = array(0, dim=n)
24 b[1] = sqrt(4*atan(1))
25 k = seq(from=2, to=n, by=1)
26 b[k] = 0.5*(k-1);
27 out = data.frame(a=a, b=b)
28 return(out)
29 }
30
31 zplege <- function(n) { # calcola nodi e pesi delle formule di Gauss-Legendre
32 d <- coeflege(n)
33 a = d$a
34 b = d$b
35 JacM <- triDiag(diagonal = a, upper=sqrt(b[2:n]), lower=sqrt(b[2:n]))
36 e <- eigen(JacM)
37 x <- e$values # nodi
38 w <- 2*e$vectors[1,]^2 # pesi
39 out = data.frame(nodi=x, pesi=w)
40 return(out)
41 }
42
43 zplagu <- function(n) { # calcola nodi e pesi delle formule di Gauss-Laguerre
44 d <- coeflagu(n)
45 a = d$a
46 b = d$b
47 JacM <- triDiag(diagonal = a, upper=sqrt(b[2:n]), lower=sqrt(b[2:n]))
48 e <- eigen(JacM)
49 x <- e$values # nodi
50 w <- e$vectors[1,]^2 # pesi
51 out = data.frame(nodi=x, pesi=w)
52 return(out)
53 }
T
54
55 zpherm <- function(n) {# calcola nodi e pesi delle formule di Gauss-Hermite
56 d <- coefherm(n)
57
AF
a = d$a
58 b = d$b
59 JacM <- triDiag(diagonal = a, upper=sqrt(b[2:n]), lower=sqrt(b[2:n]))
60 e <- eigen(JacM)
61 x <- e$values # nodi
62 w <- sqrt(pi)*e$vectors[1,]^2 # pesi
63 out = data.frame(nodi=x, pesi=w)
64 return(out)
DR
65 }
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 22
Esempio di approssimazione di funzione
In generale, per costruire il polinomio che approssima una funzione
data tramite polinomi ortogonali è necessario compiere i seguenti
passi:
1. Scegliere la funzione peso w(x);
2. Identificare il corrispondente polinomio ortogonale;
3. Scegliere il grado del polinomio;
∞ m
(f · pk )ω
Z X
fˆk = 2 = −x
C(x)Lk (x) | e{z } dx ' w
bj C(x̂j )L(x̂j ),
kpk kω 0 | {z }
ω(x) j=1
| {z }
ϕ(x) ϕ(x̂j )
DR
(25)
avendo approssimato l’integrale con m nodi di coordinate xj .
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 23
1 library("orthopolynom")
2 library(SoDA)
3 source("NodiPesi.R")
4
5 # prezzo di una call secondo il modello di Black e Scholes
6 # come funzione del prezzo corrente del sottostante
7 r = 0.01; sigma = 0.3; tau = 5; K = 1
8 BScall <- function(S){
9 d1 = (log(S/K) + (r+0.5*sigma^2)*tau)/sigma/sqrt(tau)
10 d2 = d1 - sigma*sqrt(tau)
11 f = S*pnorm(d1)-K*exp(-r*T)*pnorm(d2)
12 }
13 # griglia di valori del sottostante
14 S = seq(from=0, to=5, by=0.01)
15 # prezzo dell’opzione in t
16 Ct = BScall(S)
17 # payoff a scadenza
18 CT = pmax(S-K,0)
19
20 # Sviluppo in serie di polinomi di Laguerre
21 n = 20
22 CL20 = array(0, dim = length(S)) # valore della funzione
23 CL10 = array(0, dim = length(S)) # valore della funzione
24 CL5 = array(0, dim = length(S)) # valore della funzione
25
26 # polinomi
27 p.Laguerre <- glaguerre.polynomials(n, alpha = 0, normalized=TRUE)
28 # nodi e pesi del polinomio
29 z <- zplagu(n)
30 x <- z$nodi
31 w <- z$pesi
32
33 # coeff. dello sviluppo in serie
34 fhat = array(0, dim = (n+1))
35 for (j in 1:n) {
36 yn <- unlist(polynomial.values(p.Laguerre, x[j]))
37 fhat <- fhat + w[j]*BScall(x[j])*yn
38 }
39
40 for (i in 1:length(S)) {
41 yn <- unlist(polynomial.values(p.Laguerre, S[i]))
42 CL20[i] <- fhat %*% yn
43 CL10[i] <- fhat[1:10] %*% yn[1:10]
44 CL5[i] <- fhat[1:5] %*% yn[1:5]
45 }
46
47 # grafico
48 plot(S, Ct, typ="l", col="red", xlab="S(t)", ylab="C(t)")
49 lines(S, CT, col="black", lty=2)
50 lines(S, CL5, col="blue", lty=3)
T
51 legend("topleft", c("Exact in t=0", "Exact in t=T", "Laguerre n=5 in t=0"), col=c("red", "black",
"blue"), lty=c(1,2,3), bty="n")
52
AF
53 plot(S, Ct-CL5, type="l", col="red", xlab="S(t)", ylab=expression(paste(’C’[BS],’(t)-C’[Laguerre],
’(t)’)))
54 lines(S, Ct-CL10, col="blue")
55 lines(S, Ct-CL20, col="green")
56 abline(h=0)
57 grid()
58 legend("bottomleft", legend = c("n = 5", "n = 10", "n = 20"), col=c("red", "blue", "green"), lty=c
(1,1,1), bty="n")
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 24
Exact in t=0
4
Exact in t=T
Laguerre n=5 in t=0
3
C(t)
2
1
0
0 1 2 3 4 5
S(t)
−0.02
−0.04
−0.06
−0.08
n=5
n = 10
T
−0.10
n = 20
0 1 2 3 4 5
S(t)
AF
Figura 3: Differenza tra il valore esatto della call e quello del polinomio di
Laguerre al variare del grado del polinomio, rispettivamente pari a n = 5
(in rosso), n = 10 (in blu), n = 20 (in verde), al variare del prezzo del
DR
sottostante.
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 25
Un esempio finanziario: il modello di Nelson-Siegel
Il modello di Nelson-Siegel [NS-87], utilizzato direttamente o nella
sua estensione dovuta a Svensson [S-95] dalla maggior parte delle
Banche centrali, assume che l’intensità istantanea di rendimento (in-
stantaneous forward rate), definita tramite il fattore di sconto v(t, T )
sull’orizzonte temporale [t, T = t + τ ] come:
1 ∂v(t, T )
δ(t, T ) = − , (26)
v(t, T ) ∂T
risulta essere
−λτ −λτ
1−e 1−e
h(t, T ) = β1 + β2 + β3 − e−λτ (29)
T
λτ λτ
AF
Si ricorda che h(t, T ) = log(1 + i(t, T )) ' i(t, T ).
DR
[NS-87] Nelson C.R., Siegel A.F. (1987), Parsimonious modeling of yield curves,
Journal of Business, 60, pp. 473-489.
[S-95] Svensson L.E.O. (1995) Estimating forward interest rates with the extended
Nelson and Siegel method, Sveriges Riksbank Quarterly Review, 3, pp. 13-26.
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 26
Osservazione. In virtù della relazione:
1 d 1 − e−λτ 1−e −λτ
=− − e−λτ , (30)
τ dτ λτ λτ
il tre termini nella (29) vengono a volte interpretati rispettivamente
come level, slope e curvature della struttura per scadenza.
[CHQZ-06] Canuto C., Hussaini M.Y., Quarteroni A, Zang T.A. (2006) Spectral
Methods: Fundamentals in Single Domains, Springer.
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 27
Le funzioni di Laguerre costituiscono una base ortonormale in L2 (0, ∞)
e sono particolarmente adatte per descrivere funzioni che si annullano
nel limite x → ∞.
Lo sviluppo in serie di δ(t, T ) come funzione di µτ , con µ > 0
opportuna costante, è pertanto:
n
X
δn (t, T ) = δ∞ + δ̂k Lk (µτ ) . (34)
k=0
| {z }
→0
T →∞
= β1 + β2 e−λτ + β3 λτ e−λτ ,
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 28
Il problema della approssimazione di funzione rivisitato
Si supponga di essere interessati al prezzo della opzione call europea
considerata in precedenza, ma all’istante t + 1 invece che all’istante
corrente t, vista come una funzione del valore del sottostante in t+ 1:
h RT i h i
− r du −r(T −t+1)
C(St+1 ) = E e t+1 C(T )|Ft+1 = e E C(T )|Ft+1 . (36)
.. ..
. .
(37)
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 29
Si avrebbe pertanto:
n
X
Cn (St+1 ) = e−r(T −t+1) Ĉk pk (St+1 ), (38)
k=0
k=0 k=1
n
X k
= ck St+1
T
k=0
(40)
AF
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 30
L’approccio Least-Squares Monte Carlo
L’approccio Least-Squares Monte Carlo (LSMC) si propone di risol-
vere il problema di determinare i coefficienti ck nella (40), effettuando
gli integrali nella (39) tramite il metodo Monte Carlo, invece che per
quadrature.
Osservazione. Dal punto di vista numerico, nel caso unidimensionale
è conveniente usare il metodo delle quadrature, mentre per integrali
su 3 o più dimensioni è più conveniente il metodo Monte Carlo.
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 31
Esempio in R
Il caso del quantile della distribuzione del valore di una call europea
in t + 1 può essere considerato come benchmark, essendo la soluzione
ottenibile in modo esatto.
Nell’esempio la determinazione del quantile viene ripetuta un numero
N.repliche di volte per ottenere la distribuzione della v.a. stima-
tore del quantile. Per ciascuna replica vengono generate N.realW
× N.riskN simulazioni, rispettivamente in probabilità naturale e
risk-neutral.
Le N.riskN simulazioni risk-neutral sono utilizzate per calcolare il
valore della call in t + 1, condizionatamente al valore S(t + 1) otte-
nuto in ciascuna traiettoria naturale. I prezzi della call così ottenuti
vengono regrediti su un polinomio di grado n in S(t + 1).
Usando un campione di N.realW.big simulazioni naturali, diffe-
renti da quelle usate per la regressione, viene quindi determinato il
quantile di C(t + 1), per ciascuna delle N.repliche repliche.
Sul campione dei quantili così stimati viene determinata la media
campionaria µQ e la varianza campionaria σQ , al fine di investigare
la presenza di distorsione nella stima e la dipendenza della preci-
sione dai parametri di calcolo (numero di simulazioni e grado del
polinomio).
T
AF
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 32
n N.realW N.riskN µQ σQ ∆
3 5000 2 1.2802 0.0973 −3.3098
3 5000 10 1.2800 0.0424 −7.3960
3 5000 40 1.2798 0.0261 −11.7988
3 5000 100 1.2805 0.0193 −17.1781
3 5000 400 1.2801 0.0164 −19.4293
3 5000 1000 1.2804 0.0147 −22.2027
5 5000 2 1.2636 0.1164 1.7566
5 5000 10 1.2679 0.0533 1.2842
5 5000 40 1.2687 0.0295 1.4441
5 5000 100 1.2702 0.0213 −0.2265
5 5000 400 1.2701 0.0163 −0.0327
5 3420 60 1.2692 0.0287 0.9201
5 6300 80 1.2713 0.0213 −1.8788
5 15875 125 1.2699 0.0161 0.2685
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 33
0.12
●
limite
fit
0.10
0.08
Errore sul quantile
0.06
●
0.04
●
0.02
N.riskN
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 34
Calcolo dell’errore asintotico
m.log = (mu-0.5*sigma^2)*DeltaT
s.log = sigma*sqrt(DeltaT)
Q.S1.exact <- S0*qlnorm(meanlog=m.log, sdlog =s.log, p=alfa)
f.Q = dlnorm(x=Q.S1.exact, meanlog=m.log, sdlog=s.log)
Bahadur.variance <- alfa*(1-alfa)/N.realW.big/f.Q^2
Bahadur.std <- sqrt(Bahadur.variance)
print(Bahadur.std)
[1] 0.01438756
T
AF
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 35
Considerazioni “geometriche” sul numero di simulazioni
[B-11] Broadie M., Du Y., Efficient Risk Estimation via Nested Sequential Si-
mulation, Management Science 57 n.6 (2011) pp. 1172-1194.
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 36
Considerazioni sul numero di simulazioni “ottimo”
In [G-10] si discute il problema della scelta “ottima” del numero di
simulazioni N.realW e N.riskN, in caso di Monte Carlo annidato
(non di LSMC), per la determinazione della probabilità di subire
perdite superiori ad un livello prefissato, dove la v.a. perdita è la
differenza tra il valore corrente (in t) di un portafoglio e il valore
scontato da t + H a t dello stesso portafoglio, e le poste scadute in
[t, H] vengono reinvestite a tasso di mercato dalla data di scadenza
all’istante H.
Sotto opportune ipotesi sulla continuità e derivabilità della distri-
buzione della v.a. perdita (essenzialmente per portafogli altamen-
te granulari) si può dimostrare che lo stimatore di tale probabilità
è distorto, e che il bias è inversamente proporzionale a N.riskN.
Ponendo un vincolo sul carico computazionale complessivo, ovvero
chiedendo che:
[G-10] Gordy M.B., Juneja S., Nested Simulation in Portfolio Risk Measurement,
Management Science 56 n 10 (2010) pp. 1833-1848.
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 37
Considerazioni sull’uso di un numero di simulazioni risk-
neutral “piccolo”
Come si vede dalla tabella 9, è possibile applicare il metodo LSMC
anche con un numero di simulazioni risk-neutral molto piccolo.
Dal punto di vista “informativo” questa possibilità può essere giusti-
ficata dal fatto che il polinomio sta introducendo una relazione tra i
valori in t + 1, che – in un approccio di Monte Carlo annidato – non
è presente.
In alcuni documenti sull’uso del LSMC in ambito Solvency II, la
possibilità di ridurre N.riskN viene portata all’estremo, proponen-
do di usare N.riskN=2, campionate con la tecnica della variabile
antitetica.
Dal punto di vista numerico questa soluzione presenta il vantaggio di
ridurre fortemente il carico computazionale, tuttavia presenta alcuni
“punti di attenzione”:
1. N.riskN = 2 è un valore estremamente piccolo, che non permette
di considerare valide le ipotesi di normalità del metodo Monte
Carlo;
2. N.riskN=2 potrebbe comportare un errore troppo elevato nella
determinazione del quantile, che risulti superiore, ad esempio, alla
differenza tra i quantili “limitrofi”, q0.995 − q0.994 e q0.996 − q0.995 ;
3. N.riskN=2, a causa dell’elevato errore, potrebbe mascherare la
T
presenza di un bias elevato; il bias riceve contributi, sia dall’effet-
to di aumentata varianza della stima risk-neutral – che tuttavia
AF
dovrebbe spingere gli eventi sulle code – che dall’effetto di distor-
sione dovuto a un polinomio di grado troppo basso, che invece
può agire in senso contrario; dalla tabella 9 si vede infatti che,
per n = 3, σQ è molto simile ai valori ottenuti per n = 5, mentre
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 38
Esempio della call europea
1 library("orthopolynom")
2 library("SoDA")
3 source("NodiPesi.R")
4
5 BSoption <- function(K,T,S,sigma,r){
6 d1 = log(S/K)+(r+0.5*sigma^2)*T
7 d1 = d1/sigma/sqrt(T)
8 d2 = d1 - sigma*sqrt(T)
9 f = S*pnorm(d1)-exp(-r*T)*pnorm(d2)
10 return(f)
11 }
12
13 t = 0
14 T = 5
15 K = 1
16 r = 0.01
17 mu = 0.06
18 S0 = 1
19 sigma = 0.3
20
21 # ----------------------------------------
22 # Monte Carlo annidato
23 # ----------------------------------------
24
25 N.repliche <- 1000
26 N.realW <- 5000
27 N.riskN <- 1000
28
29 set.seed(20151001)
30
31 # quantile esatto di S(t+1) e corrispondente quantile di C(t+1)
32 Q.S1.exact <- S0*qlnorm(meanlog = (mu-0.5*sigma^2)*DeltaT, sdlog = sigma*sqrt(DeltaT), p = 0.995)
33 V.Q1.exact <- BSoption(K,T-1,Q.S1.exact,sigma,r)
34
35 # simula S(t+1)
36 DeltaT = 1
37 S1 <- S0*rlnorm(N.realW, meanlog = (mu-0.5*sigma^2)*DeltaT, sdlog = sigma*sqrt(DeltaT))
38 V1 <- BSoption(K,T-1,S1,sigma,r)
39
40 # calcola il quantile empirico di C(t+1) e S(t+1)
41 Q.V1.MC <- quantile(V1, probs=0.995, type=5)
42 Q.S1.MC <- quantile(S1, probs=0.995, type=5)
43
44 # controlla che il quantile sia ben ricostruito
45 Q.S1.MC.r <- array(0, N.repliche)
46 Q.V1.MC.r <- array(0, N.repliche)
47 for (k in 1:N.repliche) {
48 S <- S0*rlnorm(N.realW, meanlog = (mu-0.5*sigma^2)*DeltaT, sdlog = sigma*sqrt(DeltaT))
T
49 V <- BSoption(K,T-1,S,sigma,r)
50 Q.S1.MC.r[k] <- quantile(S, probs=0.995, type=5)
51 Q.V1.MC.r[k] <- quantile(V, probs=0.995, type=5)
AF
52 }
53
54 hist(Q.S1.MC.r, xlab="quantile di S(t+1)", main="")
55 abline(v=Q.S1.exact, col="red")
56
57 precisione <- (Q.S1.exact-mean(Q.S1.MC.r))/Q.S1.exact
58 print(paste("precisione = ", as.character(round(precisione,5))))
59
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 39
1 # -----------------------------------
2 # Calcola C(t+1) via MC
3 # -----------------------------------
4 t0 = Sys.time()
5 Q1.regr = array(0, N.repliche)
6
7 for (k in 1:N.repliche) {
8
9 S1 <- S0*rlnorm(N.realW, meanlog = (mu-0.5*sigma^2)*1, sdlog = sigma*sqrt(1))
10 V1 <- BSoption(K,T-1,S1,sigma,r)
11
12 # calcola E[C(T) | S(t+1)]
13 V1.nested <- array(0, N.realW)
14 for (i in 1:N.realW) {
15 ST <- S1[i]*rlnorm(N.riskN, meanlog = (r-0.5*sigma^2)*(T-1), sdlog = sigma*sqrt(T-1))
16 V1.nested[i] <- mean(pmax(ST-K,0)*exp(-r*(T-1)))
17 }
18
19 if (k==1) {
20 hist(V1.nested, 50, main="", xlab="C(t=1)")
21 abline(v=mean(V1), col="red")
22 abline(v=V.Q1.exact, col="blue")
23 }
24
25 # Regressione
26 x = S1; y = V1.nested
27 degree = 5
28 regr <- lm(y ~ poly(x, degree))
29 yregr <- regr$fitted.values
30 Q1.regr[k] = quantile(yregr, type=5, probs = 0.995)
31
32 if (k==1) {
33 irank = order(x)
34 x.sorted = sort(x, decreasing = FALSE)
35 x.sorted = x[irank]
36 yregr.sorted = yregr[irank]
37 yexact.sorted = V1[irank]
38
39 plot(x.sorted, yregr.sorted, col="red", ylim=c(0,3), xlim=c(0,4),
40 xlab="S(t+1)", ylab="C(t+1)", typ="l")
41 par(new=TRUE)
42 plot(x.sorted, yexact.sorted, col="black", ylim=c(0,3), xlim=c(0,4),
43 xlab="S(t+1)", ylab="C(t+1)", typ="l")
44 abline(v=V.Q1.exact, lty=2)
45 grid()
46 legend("topleft", c("LSMC", "valore esatto", "quantile esatto"),
47 lty=c(1,1,2), col=c("red", "black", "black"), bty="n")
48 }
49 }
50 t1 = Sys.time(); print(t1-t0)
T
51
52 hist(Q1.regr, xlab="quantile", main="")
53 abline(v=V.Q1.exact, col="red")
AF
54
55 print(paste("Quantile esatto =", as.character(round(V.Q1.exact,5)),
56 ", LSMC = ", as.character(round(mean(Q1.regr),5))))
57
58 precisione.LSMC <- (V.Q1.exact-mean(Q1.regr))/V.Q1.exact
59 print(paste("precisione LSMC = ", as.character(round(precisione.LSMC,5))))
60
61 scarto.standard.LSMC <- (V.Q1.exact-mean(Q1.regr))/(sd(Q1.regr)/sqrt(N.repliche))
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 40
4 Esempi numerici su casi elementari
1. una put americana per un sottostante che non paga dividendi, nel
contesto del modello di Black e Scholes;
2. una call asiatica americana con scadenza T e prezzo di esercizio co-
stante X, il cui payoff è indicizzato a valore medio A(t) del sotto-
stante calcolato su uno scadenzario di date (−T2 , −T2 +∆t, . . . , T ),
dove t = 0 è la data di valutazione, il cui esercizio anticipato è per-
messo solo nell’intervallo (T3 , T ), sempre nel contesto del modello
di Black e Scholes.
2
+ m1 St S̄t + m2 St2 S̄t + m3 St S̄t . (47)
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 41
Esempio della put americana
1 #--------------------------------
2 # Generazione dei sentieri
3 #--------------------------------
4
5 OriginalExample = FALSE
6
7 if (OriginalExample) {
8
9 Nsimul = 8
10 Nt = 3
11 Np = Nt + 1
12 S0 = 1
13 K = 1.1
14 r = 0.06
15 dt = 1
16
17 Spaths = matrix(0, nrow=Nsimul, ncol=Np)
18 Spaths[1,] = c(1.00, 1.09, 1.08, 1.34)
19 Spaths[2,] = c(1.00, 1.16, 1.26, 1.54)
20 Spaths[3,] = c(1.00, 1.22, 1.07, 1.03)
21 Spaths[4,] = c(1.00, 0.93, 0.97, 0.92)
22 Spaths[5,] = c(1.00, 1.11, 1.56, 1.52)
23 Spaths[6,] = c(1.00, 0.76, 0.77, 0.90)
24 Spaths[7,] = c(1.00, 0.92, 0.84, 1.01)
25 Spaths[8,] = c(1.00, 0.88, 1.22, 1.34)
26
27 } else {
28
29 T <- 1
30 S0 <- 44
31 sigma <- 0.4
32 K <- 40
33 r <- 0.06
34 Nt <- 50*T
35 dt <- T/Nt
36 Np <- Nt+1
37
38 nu_t = (r-0.5*sigma^2)*dt
39 si_t = sigma*sqrt(dt)
40
41 set.seed(20151001)
42
43 Nsimul = 50000
44 epsilon = matrix(rnorm(Nsimul*Nt), nrow=Nsimul, ncol=Nt)
45 epsilon2 = -epsilon # variabili antitetiche
46 epsilon = rbind(epsilon, epsilon2)
47 Nsimul = 2*Nsimul
48 increments = nu_t + si_t*epsilon
49
50 Spaths = matrix(0, nrow=Nsimul, ncol=Nt)
51 for (i in 1:Nsimul) {
T
52 Spaths[i,] = log(S0) + cumsum(increments[i,])
53 Spaths[i,] = exp(Spaths[i,])
54 }
AF
55 Spaths = cbind( array(S0,dim = Nsimul), Spaths)
56
57 # test: confronto del valore medio e dev. st di S(T)
58 meanS <- c(mean(Spaths[,Np]), exp(r*T)*S0)
59 names(meanS) = c("MC", "Esatto")
60 sdS <- c(sd(Spaths[,Np]), exp(r*T)*S0*sqrt(exp(sigma^2*T)-1))
61 names(sdS) = c("MC", "Esatto")
62 print(meanS); print(sdS)
DR
63 }
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 42
1 #--------------------------------
2 # Valutazione
3 #--------------------------------
4
5 Vo = matrix(0, nrow=Nsimul, ncol=Np) # valore dell’opzione
6 Vo[,Np] = pmax(K-Spaths[,Np],0) # payoff a scadenza
7
8 # "Loop" all’indietro sugli istanti temporali
9 for (i in Nt:2) {
10
11 Vexer = pmax(K-Spaths[,i],0) # valore intrinseco
12
13 id <- which(Vexer>0) # in-the-money paths
14 x <- Spaths[id,i]
15
16 # polinomi ortogonali
17 L0 <- x/x
18 L1 <- (1-x)
19 L2 <- (2-4*x+x^2)/2
20
21 # valore corrente dei pagameti futuri
22 y <- array(0, dim = length(id))
23 for (j in 1:length(id)) {
24 isc= id[j]
25 Vnext = Vo[isc, (i+1):Np];
26 idj = which(Vnext>0)
27 idt = ifelse(length(idj)==0, 0, idj[1])
28 y[j] = ifelse (idt==0, 0, exp(-idt*r*dt)*Vnext[idt])
29 }
30
31 # regressione
32 data = data.frame(y=y, x=x, x2=x^2, L0=L0, L1=L1, L2=L2)
33
34 if (OriginalExample==TRUE) {
35 regr <- lm(data = data, y ~ x + x2)
36 print("coeff. di regressione")
37 print(regr$coefficients)
38 } else {
39 regr <- lm(data = data, y ~ 0 + L0 + L1 + L2)
40 }
41
42 Vcont <- regr$fitted.values # valori di continuazione
43
44 ide = which(Vexer[id]>Vcont) # sentieri su cui si esercita
45 Vo[id[ide], i] = Vexer[id[ide]] # valore dell’opzione
46 Vo[id[ide], (i+1):Np] = 0 # azzera il payoff sugli istanti futuri
47
48 }
49
50 P = array(0, dim = Nsimul) # valore in t=0 dei pagamenti futuri
T
51 for (i in 1:Nsimul) {
52 id = which(Vo[i,]>0)
53 if (length(id)>0) {
AF
54 k = id[length(id)]
55 P[i] = Vo[i,k]*exp(-r*(k-1)*dt)
56 }
57 }
58
59 MCAmerican = mean(P)
60 print(paste("Risultato = ", as.character(round(MCAmerican,4))))
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 43
Figura 6: Risultati riportati in [LS-01] p. 127, relativi alla valutazione di
una opzione put americana, per diversi valori del sottostante, della vola-
T
tilità e della scadenza del contratto. Il valore determinato con il metodo
LSMC è riportato nella colonna “Simulated American”. Per confronto sono
riportati anche il corrispondente valore del contratto valutato con il meto-
AF
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 44
Esempio della call asiatica americana
1 A0 = 110 # A(0)
2 S0 = 120 # prezzo corrente del sottostante
3 #
4 X = 100 # strike
5 T = 2 # vita residua a scadenza
6 r = 0.06 # spot rate
7 dividend = 0
8 sigma = 0.2 # volatilita’ del sottostante
9 nsimulations = 50000 # deve essere un numero pari (!)
10 T2 = 3/12 # (-T2) data da cui si conta A(t)
11 T3 = 3/12 # (+T3) data da cui e’ permesso l’esercizio enaticipato
12 nsteps = 100*T # usa 100 date per anno
13 z=1 # option type (1 = call, -1 = put)
14
15 smat = matrix(0, nrow = nsimulations, ncol = nsteps+1)
16 dt = T/nsteps
17
18 drift = ((r-dividend)-sigma^2/2)*dt
19 diffusion = sigma*sqrt(dt)
20
21 # genera con variabili antitetiche
22 set.seed(931316785)
23 randmat1 = matrix(rnorm(n = nsimulations/2*nsteps), nrow = nsimulations/2, ncol = nsteps)
24 randmat2 = -randmat1
25 randmat = rbind(randmat1, randmat2)
26
27 smat[ ,1] = S0
28 smat[1:nsimulations ,2:(nsteps+1)] = exp(drift+diffusion*randmat)
29 smat = t(apply(smat,1,cumprod))
30
31 # media ponderata per il valore iniziale di A(t)
32 tmpsmat = (T/(T+T2))*smat[,1:(nsteps+1)] + (T2/(T+T2))*A0
33 AT = rowMeans(tmpsmat)
34
35 EuropeanPayoff = exp(-r*T)*pmax(z*(AT-X),0)
36 MCEuropeanPrice = mean(EuropeanPayoff)
37
38 CC = matrix(0, nrow=nsimulations, ncol=(nsteps+1)) # valore di continuazione
39 CE = matrix(0, nrow=nsimulations, ncol=(nsteps+1)) # valore di esercizio
40 EF = matrix(0, nrow=nsimulations, ncol=(nsteps+1)) # indicatore di esercizio anticipato
41
42 # valori a scadenza
43 st = smat[ , nsteps+1]
44 CE[ , nsteps+1] = pmax(z*(AT-X),0)
45 CC[ , nsteps+1] = CE[ ,nsteps+1]
46 EF[ , nsteps+1] = ifelse(CE[ ,nsteps+1]>0,1,0)
47
48 # indice corrispondente all’istante T3
49 klimit = round(T3/dt)
T
Listing 8: Esempio in R per il prezzo di una call asiatica mericana con il
metodo LSMC. Prima parte.
AF
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 45
1 for (k in seq(from=nsteps, to=klimit, by = -1)) {
2 St = smat[ ,k]
3 currentT = k*dt
4
5 tmpsmat = (currentT/(currentT+T2))*smat[,1:k] + (T2/(currentT+T2))*A0
6 At = rowMeans(tmpsmat)
7
8 CE[ ,k] = pmax(z*(At-X),0)
9
10 idx = which(CE[ ,k]>0) # per la regressione si usano solo i sentieri "in the money"
11
12 if (length(idx)>0) {
13 Xvec = smat[idx,k]
14 Yvec = CC[idx,k+1]*exp(-r*dt)
15 Avec = At[idx]
16 # Si regredisce il valore di continuazione (scontato) sui valori di S e A correnti
17 regr = lm(Yvec ~ I(Xvec) + I(Xvec^2) + I(Avec) + I(Avec^2) + I(Xvec*Avec))
18 if (length(which(is.na(regr$coefficients)==TRUE))) {
19 regr$coefficients[which(is.na(regr$coefficients)==TRUE)] = 0
20 warning(’errore di regressione’)
21 }
22 CC[idx,k] = regr$coefficients[1]*(Xvec/Xvec) +
23 regr$coefficients[2]*Xvec +
24 regr$coefficients[3]*Xvec^2 +
25 regr$coefficients[4]*Avec +
26 regr$coefficients[5]*Avec^2 +
27 regr$coefficients[6]*Xvec*Avec
28 EF[idx,k]= ifelse(CE[idx,k] > CC[idx,k], 1, 0)
29 }
30
31 # trova le traiettorie su cui l’opzione viene esercitata
32 tmp = which(EF[ ,k]>0)
33 print(c(k, length(tmp)))
34
35 # azzera gli indicatori degli istanti successivi
36 if (length(tmp)>0) {EF[which(EF[ ,k]>0),(k+1):(nsteps+1)] = 0}
37
38 # trova le traiettorie su cui l’opzione NON viene esercitata
39 idx = which(EF[ ,k] == 0)
40 if (length(idx)>0) {CC[idx,k] = CC[idx,k+1]*exp(-r*dt)}
41
42 # trova le traiettorie su cui l’opzione viene esercitata
43 idx = which(EF[ ,k] == 1)
44 if (length(idx)>0) {CC[idx,k] = CE[idx,k]}
45
46 }
47
48 payoff_sum = 0
49 for (i in 1:(nsteps+1)) {
50 idx = which(EF[ ,i] == 1)
T
51 if (length(idx)>0) {
52 st = smat[idx,i]
53 currentT = i*dt
AF
54 tmpsmat=(currentT/(currentT+T2))*smat[idx,1:i] + (T2/(currentT+T2))*A0
55 if(length(idx)==1) {At = mean(tmpsmat)} else {At = rowMeans(tmpsmat)}
56 payoffvec = exp(-r*(i-1)*dt)*pmax(z*(At-X),0)
57 payoff_sum = payoff_sum + sum(payoffvec)
58 }
59 }
60
61 MCAmericanPrice=payoff_sum/nsimulations
DR
62 print(MCAmericanPrice)
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 46
Figura 7: Risultati riportati in [LS-01] p. 130, relativi alla valutazione di
una opzione call americana asiatica, per diversi valori del sottostante S(0)
e della media (“average”) A(0) dei valori assunti dal sottostante in [−T2 , 0],
con t = 0 data di valutazione. Il valore determinato con il metodo LSMC
è riportato nella colonna “American” del gruppo di colonne indicato con
virgoletteSimulation. Per confronto sono riportati anche il corrispondente
valore del contratto e della sua versione europea, valutati con il metodo
delle differenze finite
T
AF
DR
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 47
Sulla precisione numerica del metodo LSMC nella valuta-
zione del prezzo di opzioni americane
Il problema della convergenza del metodo LSMC è stato ampiamente
dibattuto, senza che ne sia emersa una prescrizione operativa univoca
per scegliere il grado e il tipo di polinomio da utilizzare, e il numero
di simulazioni, in funzione della precisione richiesta.
(k)
È stato dimostrato (si veda, ad es., [CLP-02]) che lo stimatore VN (t0 )
basato su N simulazioni e un polinomio di grado k tende, nel limite
del numero di simulazioni N → ∞, ad un limite V (k) (t0 ) diverso dal
valore corretto del contratto, che, tuttavia, nel limite k → ∞, tende
al valore corretto V (t0 ):
[CLP-02] Clément E., Lamberton D., Protter P., An Analysis of a Least Squares
DR
Regression Method for American Option Pricing, Finance and Stochastics 6(4),
pp. 449-471, 2001.
[R-05] Rasmussen N. S., Control variates for Monte Carlo valuation of American
options, Journal of Computational Finance, 9(1), pp. 84-102, 2005.
Metodologia “Least-Squares Monte Carlo”. Applicazioni finanziarie ed attuariali – Roma, a.a. 2018-19 48