Un’opzione americana dà, in ogni momento, il diritto di esercitarla oppure di aspettare il momento successivo. In ogni istante di tempo \(t\in[t_0,T]\) tra l’emissione e la scadenza, l’opzione americana ha un payoff che può avere due valori:
Poiché possiamo scegliere se esercitare o meno l’opzione, allora il valore dell’opzione americana al tempo \(t\) è dato da
\[C_{a}\left(t\right)=\max\left\{ \left(S\left(t\right)-K\right)\mathbb{I}_{S\left(t\right)>K},\mathbb{E}_{t}^{\mathbb{Q}}\left[C_{a}\left(t+1\right)\frac{G\left(t\right)}{G\left(t+1\right)}\right]\right\},\]
la quale è un’equazione ricorsiva perché definisce il valore \(C_a(t)\) in funzione del valore \(C_a(t+1)\). Questa equazione si definisce “alle differenze finite” (si tratta del corrispondente, in tempo discreto, di un’equazione differenziale).
Per risolvere numericamente un’equazione alle differenze, basta conoscere un valore dell’incognita in un momento qualsiasi, e derivare gli altri valori per iterazione. Noi conosciamo il valore dell’opzione americana al momento della scadenza \(T\), poiché, in tale momento, essa coincide con il valore dell’opzione europea:
\[C_{a}\left(T\right)=C\left(T\right)=\left(S\left(T\right)-K\right)\mathbb{I}_{S\left(T\right)>K}.\] Si può, quindi, partire dall’ultima data \(T\) e risolvere, “a ritroso”, l’equazione alle differenze fino ad arrivare al momento della valutazione (cosiddetta backward induction). Vediamo ora come scrivere il modello di Balck e Scholes nella forma binomiale discretizzata.
Data l’equazione del moto del prezzo di un sottostante \(S_t\) nella forma
\[\frac{dS_{t}}{S_{t}}=rdt+\sigma dW_{t}^{\mathbb{Q}},\] sappiamo che la soluzione è:
\[S_{T}=S_{t}e^{\left(r-\frac{1}{2}\sigma^{2}\right)\left(T-t\right)+\sigma\left(W_{T}^{\mathbb{Q}}-W_{t}^{\mathbb{Q}}\right)},\]
dove ricordiamo che la differenza \(W_{T}^{\mathbb{Q}}-W_{t}^{\mathbb{Q}}\) è distribuita come una normale con media nulla e varianza \(T-t\). Per discretizzare questa distribuzione possiamo usare la variabile:
\[x=\begin{cases} +\sqrt{T-t} & \frac{1}{2}\\ -\sqrt{T-t} & \frac{1}{2} \end{cases}\]
e, quindi, scrivere il prezzo del sottostante come
\[S_{T}=\begin{cases} S_{t}e^{\left(r-\frac{1}{2}\sigma^{2}\right)\left(T-t\right)+\sigma\sqrt{T-t}} & \frac{1}{2}\\ S_{t}e^{\left(r-\frac{1}{2}\sigma^{2}\right)\left(T-t\right)-\sigma\sqrt{T-t}} & \frac{1}{2} \end{cases}\]
Il titolo privo di rischio, invece, evolve in modo desterministico nella forma:
\[G_{T}=G_{t}e^{r\left(T-t\right)}.\]
Pensando al modello binomiale, quindi, si può scrivere un mercato nella forma:
\[\Phi\left(t\right)=\left[\begin{array}{c} G_{t}\\ S_{t} \end{array}\right],\quad\Phi\left(t+1\right)=\left[\begin{array}{cc} G_{t}v & G_{t}v\\ S_{t}vu & S_{t}vd \end{array}\right]\]
dove abbiamo posto:
\[v:=e^{r\left(T-t\right)},\] \[u:=e^{-\frac{1}{2}\sigma^{2}\left(T-t\right)+\sigma\sqrt{T-t}},\] \[d:=e^{-\frac{1}{2}\sigma^{2}\left(T-t\right)-\sigma\sqrt{T-t}}.\]
L’assenza di arbitraggio prevede che esista una probabilità neutrale al rischio tale da soddisfare:
\[\mathbb{E}_{t}^{q}\left[\Phi\left(t+1\right)\frac{1}{v}\right]=\Phi\left(t\right),\]
dove ho usato il termine \(\frac{1}{v}\) per indicare il fattore di sconto. Questa equazione diventa:
\[\left(vuq+vd\left(1-q\right)\right)\frac{1}{v}=1,\]
da cui si ottiene
\[q=\frac{1-d}{u-d}.\]
Se dividiamo il periodo \(T-t\) in una sequenza di \(n\) nodi equidistanti, possiamo simulare il prezzo del titolo sottostante mediante un albero a \(n\) nodi nella forma seguente:
Nella definizione dei termini \(v\), \(u\) e \(d\), quando si divide il periodo \(T-\) in \(n\) nodi, bisogna sostituire la differenza \(T-\) con il lasso temporale \(\frac{T-t}{n}\). Trasformando questo albero in una matrice, si può scrivere:
| colonna 0 | colonna 1 | colonna 2 |
|---|---|---|
| \(S_0\) | \(S_0 \cdot v\cdot u\) | \(S_0 \cdot v^2\cdot u^2\) |
| \(S_0 \cdot v\cdot d\) | \(S_0 \cdot v^2\cdot u\cdot d\) | |
| \(S_0 \cdot v^2\cdot d^2\) |
Un codice che calcola queseta matrice è scritto come segue.
albero=function(S0,T,r,sigma,n){
v=exp(r*T/n)
u=exp(-0.5*sigma^2*T/n+sigma*sqrt(T/n))
d=exp(-0.5*sigma^2*T/n-sigma*sqrt(T/n))
n=n+1 #si crea una matrice con una colonna in più
S=array(NA,dim=c(n,n)) #matrice vuota
for (i in 1:n){
S[1:i,i]=S0*v^(i-1)*u^(seq(i,1)-1)*d^(seq(1,i)-1)
}
S
}
Proviamo a usare questa funzione per costruire un albero binomiale su \(T=10\) anni, con tasso di interesse \(r=0.03\), volatilità \(\sigma=0.2\) e \(n=10\) nodi:
albero(100,10,0.03,0.2,5)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 100 135.37015 183.2508 248.06686 335.80849 454.58447
## [2,] NA 76.88628 104.0811 140.89471 190.72939 258.19066
## [3,] NA NA 59.1150 80.02407 108.32871 146.64474
## [4,] NA NA NA 45.45133 61.52753 83.28992
## [5,] NA NA NA NA 34.94584 47.30623
## [6,] NA NA NA NA NA 26.86855
Partendo dall’ultima colonna della matrice dell’albero binomiale, possiamo calcolare il valore dell’opzione americana (che, in \(T\), coincide con il valore dell’opzione europea) e, poi, calcolare il valore dell’americana a ritroso, utilizzando la prima equazione alle differenze. Per valutare l’opzione americana in ogni colonna, bisogna moltiplicare i valori della colonna (nodo) successivo per le probabilità neutrali al rischio \((q,1-q)\) per i valori della colonna successiva.
Prendendo l’esempio dell’albero più semplice iniziale, su una ipotetica quarta colonna, si dovrebbe calcolare il valore atteso della call americana è dato dal seguente calcolo matriciale:
\[\left[\begin{array}{cccc} q & 1-q & 0 & 0\\ 0 & q & 1-q & 0\\ 0 & 0 & q & 1-q \end{array}\right]\left[\begin{array}{c} S_{0}v^{3}u^{3}\\ S_{0}v^{3}u^{2}d\\ S_{0}v^{3}ud^{2}\\ S_{0}v^{3}d^{3} \end{array}\right]=\left[\begin{array}{c} S_{0}v^{3}u^{3}q+S_{0}v^{3}u^{2}d\left(1-q\right)\\ S_{0}v^{3}u^{2}dq+S_{0}v^{3}ud^{2}\left(1-q\right)\\ S_{0}v^{3}ud^{2}q+S_{0}v^{3}d^{3}\left(1-q\right) \end{array}\right].\]
La matrice a sinistra può essere creata mediante il comandi
diag che genera una matrice digonale (anche se
rettangolare).
optionAE=function(S0,T,r,sigma,n,K){
#generazione dell'albero (funzione precedente)
v=exp(r*T/n)
u=exp(-0.5*sigma^2*T/n+sigma*sqrt(T/n))
d=exp(-0.5*sigma^2*T/n-sigma*sqrt(T/n))
n=n+1
S=array(NA,dim=c(n,n)) #matrice vuota
for (i in 1:n){
S[1:i,i]=S0*v^(i-1)*u^(seq(i,1)-1)*d^(seq(1,i)-1)
}
q=(1-d)/(u-d) #probabilità neutrale al rischio
C=(S-K)*as.numeric(S>K) #matrice dei payoff europei
Ca=Ce=array(NA,dim=c(n,n)) #matrice vuota (americana ed europea)
Ca[,n]=Ce[,n]=C[,n] #ultimo valore uguale all'europea
for (i in (n-1):1){
M=diag(q,i,i+1)+cbind(rep(0,i),diag(1-q,i,i))
Ca[1:i,i]=pmax(C[1:i,i],
M%*%Ca[1:(i+1),i+1]/v)
Ce[1:i,i]=M%*%Ce[1:(i+1),i+1]/v
}
list(S=S,Ce=Ce,Ca=Ca)
}
Possiamo così verificare se le due opzioni (europea e americana) hanno o meno lo stesso prezzo. La teoria ci dice che dovrebbero avere lo stesso prezzo poiché il sottostante, in questo modello, non paga dividendi.
optionAE(100,10,0.03,0.2,5,110)
## $S
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 100 135.37015 183.2508 248.06686 335.80849 454.58447
## [2,] NA 76.88628 104.0811 140.89471 190.72939 258.19066
## [3,] NA NA 59.1150 80.02407 108.32871 146.64474
## [4,] NA NA NA 45.45133 61.52753 83.28992
## [5,] NA NA NA NA 34.94584 47.30623
## [6,] NA NA NA NA NA 26.86855
##
## $Ce
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 33.80389 57.13288 94.143996 150.505616 232.21439 344.58447
## [2,] NA 14.57485 27.060386 49.233461 87.13529 148.19066
## [3,] NA NA 3.847834 8.156078 17.28807 36.64474
## [4,] NA NA NA 0.000000 0.00000 0.00000
## [5,] NA NA NA NA 0.00000 0.00000
## [6,] NA NA NA NA NA 0.00000
##
## $Ca
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 33.80389 57.13288 94.143996 150.505616 232.21439 344.58447
## [2,] NA 14.57485 27.060386 49.233461 87.13529 148.19066
## [3,] NA NA 3.847834 8.156078 17.28807 36.64474
## [4,] NA NA NA 0.000000 0.00000 0.00000
## [5,] NA NA NA NA 0.00000 0.00000
## [6,] NA NA NA NA NA 0.00000
Possiamo modificare il precedente codice in modo da tenere conto anche delle opzioni put. Questa volta ci aspettiamo che il prezzo dell’opzione europea sia diverso da quello dell’opzione americana, sempre perché il sottostante non paga dividendi.
optionAE=function(S0,T,r,sigma,n,K){
#generazione dell'albero (funzione precedente)
v=exp(r*T/n)
u=exp(-0.5*sigma^2*T/n+sigma*sqrt(T/n))
d=exp(-0.5*sigma^2*T/n-sigma*sqrt(T/n))
n=n+1
S=array(NA,dim=c(n,n)) #matrice vuota
for (i in 1:n){
S[1:i,i]=S0*v^(i-1)*u^(seq(i,1)-1)*d^(seq(1,i)-1)
}
q=(1-d)/(u-d) #probabilità neutrale al rischio
C=(S-K)*as.numeric(S>K) #payoff call europei
P=(K-S)*as.numeric(S<K) #payoff put europei
Ca=Ce=Pa=Pe=array(NA,dim=c(n,n)) #matrici vuote
Ca[,n]=Ce[,n]=C[,n] #ultimo valore uguale per call
Pa[,n]=Pe[,n]=P[,n] #ultimo valore uguale per put
for (i in (n-1):1){
M=diag(q,i,i+1)+cbind(rep(0,i),diag(1-q,i,i))
Ca[1:i,i]=pmax(C[1:i,i],
M%*%Ca[1:(i+1),i+1]/v)
Pa[1:i,i]=pmax(P[1:i,i],
M%*%Pa[1:(i+1),i+1]/v)
#le europee sono solo lo sconto del valore successivo
Ce[1:i,i]=M%*%Ce[1:(i+1),i+1]/v
Pe[1:i,i]=M%*%Pe[1:(i+1),i+1]/v
}
list(S=S,Ce=Ce,Ca=Ca,Pe=Pe,Pa=Pa)
}
Il confronto dà i risultati che si aspettavano.
optionAE(100,10,0.03,0.2,5,110)
## $S
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 100 135.37015 183.2508 248.06686 335.80849 454.58447
## [2,] NA 76.88628 104.0811 140.89471 190.72939 258.19066
## [3,] NA NA 59.1150 80.02407 108.32871 146.64474
## [4,] NA NA NA 45.45133 61.52753 83.28992
## [5,] NA NA NA NA 34.94584 47.30623
## [6,] NA NA NA NA NA 26.86855
##
## $Ce
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 33.80389 57.13288 94.143996 150.505616 232.21439 344.58447
## [2,] NA 14.57485 27.060386 49.233461 87.13529 148.19066
## [3,] NA NA 3.847834 8.156078 17.28807 36.64474
## [4,] NA NA NA 0.000000 0.00000 0.00000
## [5,] NA NA NA NA 0.00000 0.00000
## [6,] NA NA NA NA NA 0.00000
##
## $Ca
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 33.80389 57.13288 94.143996 150.505616 232.21439 344.58447
## [2,] NA 14.57485 27.060386 49.233461 87.13529 148.19066
## [3,] NA NA 3.847834 8.156078 17.28807 36.64474
## [4,] NA NA NA 0.000000 0.00000 0.00000
## [5,] NA NA NA NA 0.00000 0.00000
## [6,] NA NA NA NA NA 0.00000
##
## $Pe
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 15.2939 8.291792 2.772936 0.000000 0.00000 0.00000
## [2,] NA 24.217637 14.859032 5.899996 0.00000 0.00000
## [3,] NA NA 36.612553 25.693256 12.55346 0.00000
## [4,] NA NA NA 52.109920 42.06657 26.71008
## [5,] NA NA NA NA 68.64826 62.69377
## [6,] NA NA NA NA NA 83.13145
##
## $Pa
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 19.92126 9.237793 2.772936 0.000000 0.00000 0.00000
## [2,] NA 33.113718 16.871844 5.899996 0.00000 0.00000
## [3,] NA NA 50.884996 29.975929 12.55346 0.00000
## [4,] NA NA NA 64.548672 48.47247 26.71008
## [5,] NA NA NA NA 75.05416 62.69377
## [6,] NA NA NA NA NA 83.13145