Di seguito verr`a riportato il codice utilizzato per risolvere le equazioni di cui si `e parlato sopra.
Iniziamo con riportare il codice per trovare U (T − t, x). Ricordiamo che il codice prevede l’utilizzo del θ-metodo e di uno schema decentrato per la discretizzazione della derivata prima in spazio. Per risolvere il sistema lineare, si `e scelto di invertire una sola volta la matrice I che resta costante nel tempo. Si sarebbe potuto scegliere, come gi`a detto in precedenza, di risolvere il sistema tramite l’algoritmo di Thomas. Questo ci porterebbe sicuramente beneficio in caso di N (x) molto grande, ma per i calcoli svolti in questo lavoro non `e necessario, anzi, aumenterebbe i tempi di calcolo.
function [x,t,U]=trovaU(sigma,r)
% Inserendo il tasso free-risk e la volatilit\‘{a} del sottostante % calcola il valore di U in funzione di G e di t
dt=0.02; % passo temporale
dx=0.01; % passo spaziale
teta=0.5; % teta=0 ---> eulero implicito % teta=0.5----> cranck-nicholson
Figura 7: La frazione V (t,G(t),S(t))π(t,G(t),S(t)) per r = 0.035, σ = 0.25 e T = 1.
alpha=0.5; % alpha=0.5---> schema centrato % alpha=1 ----> trasporto negativo
[x,t]=meshgrid([-1.5:dx:3],[0:dt:1]);
u=zeros(length(x),1); zero=find(x(1,:)==0); u(1:zero)=1;
U=u;
%%%% Teta metodo decentrato I*U(t+1)=E*U(t)
E= diag((dt/dx)*teta*(0.5*sigma^2.*x(1,2:end).^2/dx-... alpha*((sigma^2-r).*x(1,2:end)-1)),-1)+... diag(1+(dt/dx)*teta*(-sigma^2.*x(1,:).^2/dx+... ((sigma^2-r).*x(1,:)-1)*(2*alpha-1)),0)+... diag((dt/dx)*teta*(0.5*sigma^2.*x(1,1:end-1).^2/dx+... ((sigma^2-r).*x(1,1:end-1)-1)*(1-alpha)),+1); I= diag((dt/dx)*(teta-1)*(0.5*sigma^2.*x(1,2:end).^2/dx-...
alpha*((sigma^2-r).*x(1,2:end)-1)),-1)+... diag(1+(dt/dx)*(teta-1)*(-sigma^2.*x(1,:).^2/dx+... ((sigma^2-r).*x(1,:)-1)*(2*alpha-1)),0)+... diag((dt/dx)*(teta-1)*(0.5*sigma^2.*x(1,1:end-1).^2/dx+... ((sigma^2-r).*x(1,1:end-1)-1)*(1-alpha)),+1); A=inv(I)*E; for i=dt:dt:1 u(2:end-1)=A(2:end-1,:)*u; u(1:zero)=1; U=[U,u]; end end
Il passo successivo `e calcolareRG(t)∞ U (T −t, x)dx. Per fare questo abbiamo scelto, molto semplicemente, di utilizzare la formula dei trapezi. Prestare attenzione ai parametri in ingresso che, anche se con nome diverso, sono gli stessi identici parametri in uscita dalla funzione TrovaU.
function [IU]=IntegraleU(G,ttm,U)
% Calcolo dell’integrale di U % con la formula dei trapezi
[T,N]=size(G); % #passi temporali, #passi spaziali
% perch\‘{e} G \‘{e} una meshgrid dei temporali e degli spaziali dx=G(2,2)-G(1,1); for j=1:T for i=1:N Int=0; for h=i:N-1 Int=Int+0.5*(U(h,j)+U(h+1,j))*dx; end IU(i,j)=Int; end end
Infine ci rimane da calcolare 1 + G(t)·U (T −t,G(t))R∞
G(t)U (T −t,x)dx
. Avendo gi`a tutti gli elementi non ci rimane che combinarli.
function [G,ttm,Fraction]=fraction_risky
% Calcola la frazione di capitale da investire nel titolo rischioso % con volatilit\‘{a} pari a sigma in u mercato con tasso d’interesse % free-risk pari a r.
sigma=0.25; r=0.035;
[G,ttm,U]=trovaU(sigma,r); %%% ttm= time to maturity
[T,N]=size(G); IU=IntegraleU(G,ttm,U); for j=1:T for i=1:N Fraction(i,j)=1+(G(1,i)*U(i,j))/IU(i,j); end end
5
Caso Media Geometrica
Proveremo adesso a svolgere gli stessi passi effettuati in precedenza, per`o applicandoli ad un’opzione Asiatica con media geometrica, ovvero con la funzione payoff pari a
fT(S(T )) = exp 1 T Z T 0 ln(S(u))du − K + .
Per iniziare abbiamo bisogno di un teorema che ci permetta di derivare sec- ondo Malliavin funzioni composte. Per fare ci`o, vedremo prima un lemma tecnico che useremo nella dimostrazione.
Lemma 5.1. Sia (Fn)n≥1 una successione di elementi di D1,2 e supponiamo
che Fn → F in L2(Ω) e che la successione (DFn)n≥1 sia limitata in L2(Ω ×
[0, T ]): allora F ∈ D1,2.
Dimostrazione. Poich`e D1,2`e uno spazio di Hilbert, una successione limitata
`
e debolmente relativamente compatta: esiste dunque una sottosuccessione (Fnk)k≥1 convergente debolmente a G ∈ D
1,2: quindi (F
nk)k≥1 converge a G
debolmente in L2(Ω) e di conseguenza G = F . Si noti che (DF
nk) converge
a DF solo debolmente in L2(Ω × [0, T ]).
Teorema 5.2. Sia F ∈ D1,2, g lipschitziana con costante di Lipschitz C: allora g ◦ F ∈ D1,2 ed esiste Z con |Z(w)| ≤ C quasi certamente, tale che si abbia
Dimostrazione. La tesi `e vera se g ∈ C1
b(R) con Z(w) = g
0(F (w)) : consideri-
amo (mediante regolarizzazione) una successione (gn)n≥1 di funzioni di classe
C1 convergente uniformemente a g e tali che |g0(·)| ≤ C.
Innanzi tutto gn ◦ F converge a g ◦ F in L2(Ω); inoltre la successione
Dt(gn◦ F ) = (gn0 ◦ F )DtF `e limitata in L2(Ω × [0, T ]) e quindi per il Lemma
5.1 (g ◦ F ) ∈ D1,2.
Inoltre, poich`e la successione (gn0 ◦ F ) `e uniformemente limitata dalla costante C, `e relativamente compatta per la topologia σ(L∞, L1) e quindi (modulo passaggio ad una sottosuccessione) esiste Z ∈ L∞ con |Z(w)| ≤ C quasi certamente tale che gn0 ◦ F converga a Z per la topologia σ(L∞, L1).
Di conseguenza gn0(F )DtF → ZDtF debolmente in L2(Ω × [0, T ]) ma
siccome (sempre passando a una sottosuccessione) g0n(F )DtF → Dt(g ◦ F )
debolmente, segue l’eguaglianza Dt(g ◦ F ) = ZDtF.
A questo punto possiamo proseguire seguendo l’esercizio fatto per le opzioni Asiatiche a media aritmetica. Quindi, analogamente a quanto visto nella Proposizione 3.5, otteniamo
Proposizione 5.3. Definita gT(S(T )) =
h
expnT1 R0T ln(S(u))duo− Ki+, con S(·) dato da (80) e K ∈ R. Allora gT ∈ D1,2 e
Dt(gT) = (gT + k) ·
1
Tσ(T − t).
Dimostrazione. Possiamo riscrivere gT = (f ◦ ψ)(S(T )) − K dove
f (x) = ex ψ(S(T )) = 1 T Z T 0 ln(S(u))du.
ψ(S(T )) ∈ D1,2 per le propriet`a del calcolo di Malliavin. Di conseguen- za possiamo applicare il Teorema 5.2 ed ottenere che gT ∈ D1,2. Inoltre
otteniamo Dt(gT) = Dt(f ◦ ψ)(S(T )) = f0(ψ(S(T ))) · Dtψ(S(T )) = |{z} Propriet`a 3.1 exp 1 T Z T 0 ln(S(u))du · 1 T Z T t 1 S(u) Y (u) Y (t)σS(t) = |{z} Y (·)=S(·) exp 1 T Z T 0 ln(S(u))du · 1 T Z T t 1 S(u) S(u) S(t)σS(t) = exp 1 T Z T 0 ln(S(u))du · 1 Tσ(T − t) = (gT + k) · 1 Tσ(T − t).
Proseguendo sulla falsariga del Teorema 3.8 vorremmo arrivare ad una formula quasi-esplicita per calcolare la quantit`a da investire nel risky asset. Possiamo scrivere quindi che:
Dt[fT exp(−rT )] = exp(−rT )Dt[fT]
= exp(−rT )σ
T(T − t)(fT + K · 1gT>0).
Dalla Proposizione 3.4 si deduce che
fT exp(−rT ) = E[fT exp(−rT )] +
Z T
0
E[Dt(fT exp(−rT ))|Ft]dW (t). (118)
Per l’equazione (82) e sapendo che il valore iniziale della strategia deve soddisfare v0 = E[fT exp(−rT )], possiamo scrivere
fT exp(−rT ) = E[fT exp(−rT )] +
Z T
0
E exp(−rt)σπ(t)dW (t) (119)
tazione dei funzionali di Wiener ottengo che π(t) = 1
σ exp(rt) · E[Dt(fT exp(−rT ))|Ft]
= 1
σ exp(rt) · E[exp(−rT )(fT + K · 1gT>0)
σ
T(T − t)|Ft]. Siccome Vπ(t) exp(−rt) `e una martingala, possiamo scrivere che
V (t) exp(−rt) = E[fTexp(−rT )|Ft] quasi ovunque.
Dunque, procedendo nei nostri calcoli, troviamo che
π(t) = V (t) · (T − t)
T +
(T − t)
T · exp(−r(T − t)) · K · P(gT > 0|Ft) (120) che `e la quantit`a di denaro da investire nel titolo rischioso all’istante t.
Abbiamo ottenuto un risultato simile a quello per le opzioni Asiatiche a media aritmetica. Solamente che nel caso precedente, siamo stati in grado di esprimere la funzione di ripartizione come la soluzione di una equazione differenziale parziale nota. In questo caso non siamo in grado di portare una funzione che rappresenti questa funzione di ripartizione.
Non essendo in grado di ricavare un metodo quasi esplicito, per poter usare i risultati ottenuti, si pu`o scegliere di abbandonare la strada analitica e provare a calcolare P(gT > 0|Ft) tramite il metodo monte carlo. Questo `e
esattamente ci`o che ci apprestiamo a fare.
5.1
Implementazione
Analizziamo brevemente il significato di P(gT > 0|Ft). Questa `e la proba-
bilit`a che l’opzione venga esercitata, condizionatamente al fatto di essere in t. Ovvero, conoscendo la storia del mio sottostante fino a t, voglio sapere con che probabilit`a la media geometrica del sottostante in [0, T ] sia mag- giore di K. Quindi in ogni istante di tempo t, abbiamo bisogno di effettuare delle simulazioni da (t, T ], valutare il payoff a scadenza, e stimare con che probabilit`a ci sar`a l’esercizio dell’opzione.
Per quanto riguarda la simulazione del risky asset, come gi`a detto, adop- ereremo il metodo Monte-Carlo applicato ad un sottostante che evolve sec- ondo il modello di Black-Scholes classico3, per poi adoperare il metodo della
variabile antitetica per ridurre la varianza.
Un altro problema da affrontare `e il valore iniziale dell’opzione. Purtrop- po, non avendo raggiunto una rappresentazione quasi-esplicita, non siamo in grado di calcolare il valore esatto della strategia (e quindi il fair price del- l’opzione). In nostro soccorso per`o, viene il fatto che conosciamo in forma esplicita il valore dell’opzione a t = 0. Questa rappresentazione l’abbiamo gi`a incontrata nella Sezione 1.1, per l’esattezza, noi useremo la versione a tempo discreto la cui rappresentazione `e espressa dall’equazione (13).
Un altro problema da affrontare, `e costituito dal fatto che abbiamo s`ı il valore della strategia a t = 0, ma non abbiamo un modo per calcolare il valore di questa strategia per ogni t. Questa volta possiamo ricorrere al vincolo di portafoglio autofinanziato, ovvero
Vπ(t) = x(t) · S(t) + y(t) m
Vπ(t + 1) = x(t) · S(t + 1) + e(r·dt)y(t) = x(t + 1) · S(t + 1) + y(t + 1), dove x(t) `e la quantit`a di titoli rischiosi posseduti in t, e y(t) `e il credito con la banca al tempo t (se y(t) < 0 rappresenta un debito).
Finalmente siamo in grado di calcolare
π(t) = V (t) · (T − t)
T +
(T − t)
T · exp(−r(T − t)) · K · P(gT > 0|Ft), ricordando che x(t) = π(t)/S(t).
5.2
Codice
I codici necessari per poter calcolare i risultati sono principalmente quattro e servono per:
• generare traiettorie antitetiche; • stimare la probabilit`a;
• trovare il fair value iniziale dell’opzione; • gestire il ciclo da 0 a T . function Path=Asset_MC_AV(S0,mu,sigma,T,Nsteps,Nsim) Path1=zeros(Nsim,Nsteps+1); Path1(:,1)=S0; Path2=zeros(Nsim,Nsteps+1); Path2(:,1)=S0; dt=T/Nsteps; nu=mu-sigma^2/2; epsilon=randn(Nsim,Nsteps); for i=1:Nsteps Path1(:,i+1)=Path1(:,i).*exp(nu*dt+sigma*sqrt(dt)*epsilon(:,i)); Path2(:,i+1)=Path2(:,i).*exp(nu*dt+sigma*sqrt(dt)*(-epsilon(:,i))); end Path=[Path1;Path2];
Per calcolare P(gT > 0|Ft) useremo:
function P=Probability(t,St,Gt,S0,K,T,r,sigma,N0) T=T-t; N=N0-round(t*200); Nsim=10000; if T ~= 0 Path=Asset_MC_AV(St,r,sigma,T,N,Nsim)./S0; Avg=(prod(Path(:,2:end),2) .*Gt).^(1/N0)*S0; P=sum(Avg>K)/(2*Nsim); else
P=St*Gt^(1/N0)>K; end
dove Gt rappresenta Qu≤t
Su
S0
. Questo `e solo un trucco per evitare che il valore di GT diventi pari a infinito o a 0. Questo spiega le moltiplicazioni in
Path ed in Avg. N0 `e il numero di passi temporali per arrivare da 0 a T .
Calcolare il prezzo iniziale della strategia, come riportato in (13), `e sem- plice: function P=PriceGeoDisc(S0,K,T,r,sigma,N) mu=r-sigma^2/2; A=(N+1)/(2*N); B=sqrt((N+1)*(2*N+1)/(6*N^2)); C=mu*A*T+0.5*(sigma*B*sqrt(T))^2; D=(-log(K/S0)+mu*A*T)/(sigma*B*sqrt(T)); P=exp(-r*T)*(S0*exp(C)*normcdf(D+sigma*B*sqrt(T),0,1)-K*normcdf(D,0,1));
Il codice per gestire il ciclo temporale ci riserviamo di riportarlo in seguito, assieme all’implementazione del metodo per le opzioni Asiatiche a media ar- itmetica, cos`ı da rendere pi`u agevole il confronto. In quel codice sfrutteremo la seguente funzione per rendere pi`u snella la scrittura del ciclo:
function pi=piMalliavin(p,t,V,K,T,r)
pi=V*(T-t)/T+(T-t)/T*exp(r*(T-t))*K*p;