Dispensa delle lezioni Corso di programmazione in GAUSS...

27
Dispensa delle lezioni Corso di programmazione in GAUSS Parte V Club di Economia Applicata Dipartimento di Scienze Economiche Universit` a di Verona

Transcript of Dispensa delle lezioni Corso di programmazione in GAUSS...

Dispensa delle lezioniCorso di programmazione

in GAUSSParte V

Club di Economia ApplicataDipartimento di Scienze Economiche

Universita di Verona

Option Pricing

Un’opzione call (put) e un titolo che conferisce all’acquirente il diritto diacquistare (vendere) dalla controparte una attivita di riferimento ad un certoprezzo K (strike) alla data di scadenza T (tipo europeo) o entro una scadenzaT (tipo americano).

Il payoff a scadenza delle opzioni e uguale a:

fT = max(ST −K, 0) opzione Call

fT = max(K − ST , 0) opzione Put

Prima della scadenza il valore delle opzioni dipende anche da altre varia-bili come ad esempio la volatilita del sottostante, il tasso di interesse privodi rischio o la vita residua.

L’esclusione di possibilita di arbitraggio implica che i prezzi delle opzionisiano limitati inferiormente e superiormente.

Siano c e p rispettivamente i prezzi delle opzioni call e put europee e Ce P le opzioni di tipo americano. Se non ci sono dividendi, necessariamentedevono valere i seguenti vincoli:

Limiti Superiori

c ≤ S0

p ≤ Xe−rT

C ≤ S0

P ≤ X

Limiti inferiori

C ≥ c

P ≥ p

c ≤ S0 −Xe−rT

1

p ≥ Xe−rT − S0

C ≤ S −X

P ≥ X − S

Analoghe considerazioni di arbitraggio implicano che i prezzi delle opzionidevono necessariamente soddisfare la put-call parity :

c + D + Xe−rT = p + S0 per le opzioni europee

S0 −D −X ≤ C − P ≤ S0 −Xe−rT per le opzioni americane

Alcuni dei metodi piu noti in letteratura per la valutazione delle opzionisono:

- Alberi binomiali

- Formula di Black-Scholes

- Metodo Monte Carlo

Alberi Binomiali - Black & Scholes

Il metodo degli alberi binomiali e uno dei metodi impiegati per la valutazionedelle opzioni. Il metodo consiste in un diagramma che rappresenta i possibilicammini seguiti dal prezzo del sottostante durante la vita dell’opzione.

L’assunzione alla base di questo metodo di valutazione e non ci sianoopportunita di arbitraggio.

Si consideri il caso di un portafoglio (privo di rischio) composto da posi-zione lunga su ∆ azioni e da una posizione corta su una opzione.

Si immagini ad esempio che il prezzo dell’opzione, trascorso un istantetemporale, possa assumere solo due valori, Su e Sd. Il payoff di una opzioneche scade dopo un unico istante temporale e noto e pari a fu o a fd. Il valoredi ∆ che soddisfa la seguente equazione rappresenta la quantita di azioni dadetenere per immunizzare il portafoglio:

Su∆− fu = Sd∆− fd

∆ =fu − fd

Su − Sd

2

In assenza di opportunita di arbitraggio qualunque portafoglio privo dirischio deve avere un tasso di rendimento pari a r (tasso risk-free).

Calcolando il valore del suddetto portafoglio a scadenza, ad esempioSu∆ − fu, e attualizzandolo al tasso privo di rischio, otteniamo il valoreattuale del portafoglio.

Dato il valore attuale del portafoglio, la sua composizione e il prezzo delsottostante e sufficiente esplicitare l’equazione per il valore dell’opzione.

Generalizzando, il valore dell’opzione f e pari a:

f = e−rT [pfu + (1− p)fd]

dove:

p =e−rT − d

u− d

con u > 1 e d < 1 che indicano rispettivamente di quanto il sottostantepuo aumentare o diminuire in un intervallo temporale e p che rappresenta laprobabilita neutrale al rischio di un aumento del prezzo dell’azione.

Secondo il modello proposto da Cox, Ross e Rubinstein nel 1979 (CRR)per rendere coerente la generazione dei sentieri del sottostante con la volati-lita dello stesso, i valori di u e d devono essere calcolati come segue:

u = eσ√

∆t

d = e−σ√

∆t = 1/u

Quando si considerano piu time steps il funzionamento del metodo e ana-logo a quanto appena descritto. A partire dall’ultimo step, in cui il valoredell’opzione e noto, si calcolano i valori dell’opzione ai nodi precedenti comevalore attuale della media dei payoff, ponderati per le rispettive probabilita(neutrali al rischio).

fu = e−r(tn−tn−1)[pfuu + (1− p)fud]

/* ALBERI BINOMIALI */

proc albino(S,k,sigma,T,r,tipo,step);

local u,d,a,b,espod,c,espou,e,f,sale,scende,prezzi,final,;

local nomi,p,q,i,actu,actd,prezzo,dati,info,payoff,disc,y,n,cap;

3

n=step+1;

u=exp(sigma*sqrt(T/step));

d=exp(-sigma*sqrt(T/step));

a=seqa(0,1,n);

b=ones(1,n);

espod=upmat(a.*b);

c=ones(n,1);

e=seqa(0,1,n)’;

f=(c.*e)-seqa(0,1,n);

espou=upmat(abs(f));

format /lds 1,1;

sale=u.^espou;

scende=d.^espod;

prezzi=upmat(S.*sale.*scende);

final=(prezzi[.,cols(prezzi)])’;

if tipo$=="call";

payoff=maxc((final-k)|zeros(1,rows(prezzi)));

elseif tipo$=="put";

payoff=maxc((k-final)|zeros(1,rows(prezzi)));

else;

4

print "Errore: tipo di opzione non riconosciuto!!";

endif;

disc=exp(-r*(T/step));

cap=exp(r*(T/step));

p=(cap-d)./(u-d);

q=1-p;

for i(1,n-1,1);

actu=payoff[1:(rows(payoff)-1),1];

actd=payoff[2:(rows(payoff)),1];

payoff=disc.*((actu.*p)+(actd.*q));

endfor;

prezzo=payoff;

print "ALBERO BINOMIALE CRR";

print "Powered by Daniele Poiega"

print " DATI OPZIONE:";

print;

let nomi[5,1]= S0 K Vol T r;

dati=s|k|sigma|T|r;

info=nomi~dati;

y=printfmt(info,0~1);

print;

5

print " Option type: " tipo;

print; format /rds 3,1;

print " Number of steps: " step;

print; format /lds 10,5;

print " PREZZO: " prezzo;

retp(prezzo);

endp;

Nel caso di opzioni americane il valore di fu e uguale al

max{e−r(tn−tn−1)[pfuu + (1− p)fud], Su −K} opz. call

max{e−r(tn−tn−1)[pfuu + (1− p)fud], K − Su} opz. put

Si dimostra che all’aumentare del numero dei passi temporali il prezzo del-le opzioni europee fornito dagli alberi binomiali converge al prezzo ottenutocon la formula di Black & Scholes:

CALL −→ limn→∞

f = S0 ·N(d1)−K · e−r·T ·N(d2)

PUT −→ limn→∞

f = K · e−r·T ·N(−d2)− S0 ·N(−d1)

dove:

d1 =ln(S0/K) + (r + σ2/2)T

σ√

T

d2 =ln(S0/K) + (r − σ2/2)T

σ√

T= d1 − σ

√T

Greche

Le greche misurano la sensitivita del prezzo dell’opzione al variare dei fattoridi rischio che concorrono a formarne il prezzo e si rivelano particolarmenteutili per immunizzare un portafoglio comprendente opzioni.

6

Ciascuna greca misura una diversa dimensione del rischio di una posizionesu opzioni e in generale l’obiettivo degli operatori e quello di gestire le grechein modo che ciascuna fonte di rischio sia accettabile.

Nel caso in cui il sottostante sia rappresentato da azioni che non paganodividendi le greche si calcolano nel modo seguente:

Delta Sensitivita del prezzo dell’azione ad una variazione del sottostante.

∆ =∂c

∂S

∆call = N(d1) ∆put = N(d1)− 1

Gamma Sensitivita del prezzo dell’azione ad una variazione del delta (∆).

Γ =∂2c

∂S2

Γcall = Γput =N ′(d1)

S0σ√

T

Vega Sensitivita del prezzo dell’azione ad una variazione della volatilita.

V =∂c

∂σ= S0

√TN ′(d1)

Rho Sensitivita del prezzo dell’azione ad una variazione del tasso d’interesse.

ρ =∂c

∂r

ρcall = XTe−rT N(d2) ρput = −XTe−rT N(−d2)

Theta Sensitivita del prezzo dell’azione ad una variazione del tempo

Θ =∂c

∂t

Θcall = −S0N′(d1)σ

2√

T− rXe−rT N(d2)

Θput = −S0N′(d1)σ

2√

T+ rXe−rT N(−d2)

7

dove:

N ′(x) =1√2π

e−x2/2

Per maggiori informazioni si invita alla consultazione di Opzioni, futurese altri derivati, di John Hull (Prentice Hall, Quarta Edizione).

Monte Carlo

L’utilizzo del metodo Monte Carlo nel pricing di opzioni si rende necessarioquando le caratteristiche dell’opzione escludono una forma analitica per ilprezzo. Il metodo di simulazione, come altri metodi numerici, permette larisoluzione di problemi complessi purche il modo con cui sono generati ipercorsi dell’attivita sottostante sia coerente con il modello.

Nel caso di prezzi azionari il processo stocastico impiegato e un motobrowniano geometrico:

dS = µSdt + σSdz

dS

S= µdt + σdz

d ln S =

(µ− 1

2σ2

)dt + σdz

S(t + δt) = S(0) exp(µ− 12σ2)δt+σε

√δt

dove ε ∼ N(0, 1) e una estrazione casuale da una normale standardizzata.In Gauss:

/* SIMULAZIONE PREZZI AZIONARI */

new; cls;

print "INPUT ORDER:

S(t0),

Mu,

Sigma,

Maturity(in years),

Number of Steps,

8

Nr. Simulations

";

proc simasset(s,mu,sigma,t,steps,nsim);

local a, paths, dt, drift, vola, i, j, b, c, tempo, fmt,y,x;

library pgraph;

graphset;

a=time;

paths=zeros(nsim,steps+1);

paths[.,1]=s*ones(nsim,1);

dt=t/steps;

drift=(mu-0.5*sigma^2)*dt;

vola=sigma*sqrt(dt);

for i(1,nsim,1);

for j(1,steps,1);

paths[i,j+1]=paths[i,j]*exp(drift+vola*rndn(1,1));

endfor;

endfor;

x=seqa(1,1,rows(paths’)).*ones(1,cols(paths’));

xy(x,paths’);

b=time;

c=b-a;

let tempo[4,1]="ORE" "MINUTI" "SECONDI" "CENT/SEC";

let fmt[2,3] = "-*.*s" 8 8 "*.*lf," 12 9;

y=printfm(tempo~c,0~1,fmt);

retp(paths);

endp;

La procedura per la simulazione dei prezzi azionari tuttavia puo es-sere migliorata nel senso che e possibile eliminare l’impiego dei cicli for

vettorizzando la procedura.

9

Il processo stocastico dei prezzi azionari puo essere riscritto in questomodo:

ln S(t + δt)− ln S(t) =

(µ− 1

2σ2

)δt + σε

√δt

Nella procedura simastop, anziche generare ogni singolo elemento, l’inte-ra matrice di estrazioni casuali e campionata in un’unica soluzione. La som-matoria cumulata degli incrementi e infine trasformata attraverso la funzioneesponenziale.

Se si confrontano i risultati delle funzioni simasset e simastop in terminidi tempi di esecuzione e possibile apprezzare il miglioramento dell’efficienzadella routine.

Si ricorda che la versione light di Gauss non ammette la creazione dimatrici di dimensioni superiori di 10′000 elementi o il superamento di 1.5Mbdi workspace.

print "INPUT ORDER:

S(t0),

Mu,

Sigma,

Maturity(in years),

Number of Steps,

Nr. Simulations

";

proc simastop(s,mu,sigma,t,steps,nsim);

local a,paths,dt,drift,vola,increments;

local start,logpaths,b,c,tempo,fmt,y,x;

library pgraph;

graphset;

a=time;

paths=zeros(nsim,steps+1);

paths[.,1]=s*ones(nsim,1);

dt=t/steps;

drift=(mu-0.5*sigma^2)*dt;

10

vola=sigma*sqrt(dt);

increments=drift+vola*rndn(steps,nsim);

start=ln(s).*ones(1,nsim);

logpaths=cumsumc(start|increments);

paths=exp(logpaths’);

b=time;

c=b-a;

let tempo[4,1]="ORE" "MINUTI" "SECONDI" "CENT/SEC";

let fmt[2,3] = "-*.*s" 12 8 "*.*lf," 16 16;

y=printfm(tempo~c,0~1,fmt);

x=seqa(1,1,rows(paths’)).*ones(1,cols(paths’));

xy(x,paths’);

retp(paths);

endp;

/* ESEMPIO (CW) */

new;

run a:\simastop.prg;

run a:\simasset.prg;

prezzi1=simastop(40,0.2,0.1,1.5,30,300);

ORE 0.000000000,

MINUTI 0.000000000,

SECONDI 0.000000000,

CENT/SEC 1.000000000,

prezzi2=simasset(40,0.2,0.1,1.5,30,300);

ORE 0.000000000,

MINUTI 0.000000000,

SECONDI 0.000000000,

CENT/SEC 4.000000000,

La valutazione di una opzione su azioni europea con strike K e condi-

11

zionata al calcolo del valore atteso (sotto la misura neutrale al rischio) delpayoff finale dell’opzione, scontato per il tasso privo di rischio r:

ft = e−r(T−t)EQ(fT )

fT = max(ST −K, 0) opzione Call

fT = max(K − ST , 0) opzione Put

Il processo seguito dai prezzi delle azioni sotto la misura neutrale al rischioe il seguente.

S(t + δt) = S(0) exp(r− 12σ2)δt+σε

√δt

il cambio di drift deriva dal cambio della misura di probabilita utilizzatanella valutazione.

Il payoff di una opzione call diventa quindi:

max{S(0) exp(r− 12σ2)T+σε

√T −K, 0}

In Gauss:

proc (2)=simasbs(s,k,r,sigma,T,nsim);

local a,drift,vola,stdevprice,payoff;

local discpayoff,price,b,c,tempo,fmt,y;

a=time;

drift=(r-0.5*sigma^2)*T;

vola=sigma*sqrt(T);

payoff=maxc((-k+(s.*exp(drift+vola.*rndn(1,nsim))))|(zeros(1,nsim)));

discpayoff=(exp(-r*T)).*payoff;

price=meanc(discpayoff);

stdevprice=stdc(discpayoff);

12

b=time;

c=b-a;

let tempo[4,1]="ORE" "MINUTI" "SECONDI" "CENT/SEC";

let fmt[2,3] = "-*.*s" 12 8 "*.*lf," 12 9;

y=printfm(tempo~c,0~1,fmt);

print;

print "The price is: " price;

print;

print "Stand. Dev.: " stdevprice;

retp(price,stdevprice);

endp;

Nel caso in cui si debbano simulare delle traiettorie per diversi asset enecessario tenere in considerazione la struttura delle correlazioni osservatenelle serie storiche.

Per generare traiettorie correlate e necessario operare una trasformazionedelle estrazioni indipendenti generate dalle funzioni rndn e rndu.

Sia X (n × 1) il vettore colonna di estrazioni da una normale standard.Il vettore rappresenta una singola simulazione di n shocks, ognuno dei qualiassociato ad uno degli n asset.

Sia Σ la matrice varianza-covarianza degli n stock. Applicando la de-composizione di Cholesky (chol) alla matrice Σ e moltiplicando il risultato,una matrice triangolare inferiore LT (n × n), per il vettore delle estrazioniindipendenti si ottiene un vettore di estrazioni correttamente correlato.

La matrice (m×n), contenente m estrazioni per ciascun asset, puo quindiessere utilizzata nelle procedure precedentemente descritte per la simulazionedelle traiettorie.

Formalmente, data Σ matrice varianza-covarianza e X = [x1, x2, ..., xn]T

con xi ∼ N(0, 1)

- Calcolare LT tale che Σ = LT L con chol(Σ)

13

- Operare la trasformazione delle variabili indipendenti X = LT X

/* ESEMPIO */

sigma={4 1 -2, 1 3 1, -2 1 5};

sigma;

4.0000000 1.0000000 -2.0000000

1.0000000 3.0000000 1.0000000

-2.0000000 1.0000000 5.0000000

cs=(chol(sigma))’;

cs;

2.0000000 0.00000000 0.00000000

0.50000000 1.6583124 0.00000000

-1.0000000 0.90453403 1.7837652

sample=cs*rndn(3,3333);

campio=sample’;

rows(campio);

3333.0000

meanc(campio);

0.0013346375

0.065330153

-0.0057817066

corrvc(sigma);

1.0000000 0.28867513 -0.44721360

0.28867513 1.0000000 0.25819889

-0.44721360 0.25819889 1.0000000

corrx(campio);

14

1.0000000 0.28176455 -0.43706166

0.28176455 1.0000000 0.26321590

-0.43706166 0.26321590 1.0000000

Monte Carlo con riduzione della varianza

La simulazione dei prezzi azionari puo beneficiare delle tecniche di riduzionedella varianza descritte nella dispensa precedente.

L’applicazione della tecnica delle variabili antitetiche al pricing delle op-zioni prevede di estrarre da una normale standardizzata un campione consi-stente e di generare una seconda serie, a partire dalla prima, invertendone ilsegno.

Il campione da utilizzare per la simulazione e il risultato della mediadi ciascuna coppia di valori. Si ricorda che, se la seconda serie e generataopportunamente, la varianza della media e inferiore alla media delle varianzeper effetto della correlazione negativa.

La stima del prezzo dell’opzione beneficia della riduzione di varianza nelsenso che la variabilita del risultato e inferiore, a parita di numerosita delleestrazioni, rispetto al tradizionale metodo Monte Carlo.

In Gauss:

proc (2)=simasAV(s,k,r,sigma,T,nsim);

local a,drift,stdevprice,vola,estr1,estr2,payoff1;

local payoff2,discpayoff,price,b,c,tempo,fmt,y;

a=time;

drift=(r - 0.5 .* (sigma^2))*T;

vola=sigma*sqrt(T);

estr1=rndn(1,nsim);

estr2=-estr1;

payoff1=maxc((-k+(s.*exp(drift+vola.*estr1)))|(zeros(1,nsim)));

payoff2=maxc((-k+(s.*exp(drift+vola.*estr2)))|(zeros(1,nsim)));

15

discpayoff=(exp(-r*T)) .* 0.5 .* (payoff1+payoff2);

price=meanc(discpayoff); stdevprice=stdc(discpayoff);

b=time;

c=b-a;

let tempo[4,1]="ORE" "MINUTI" "SECONDI" "CENT/SEC";

let fmt[2,3] = "-*.*s" 12 8 "*.*lf," 12 9;

y=printfm(tempo~c,0~1,fmt);

print;

print "The price is: " price;

print;

print "Stand. Dev.: " stdevprice;

retp(price,stdevprice);

endp;

Come misura di dispersione dei risultati attorno alla media si puo pren-dere in considerazione la standard deviation dei prezzi scontati dell’opzioneo alternativamente, fissando un α, l’intervallo di confidenza costruito con iquantili [fα/2, f1−α/2] della distribuzioni dei prezzi.

L’applicazione del metodo delle variabili antitetiche risulta per costru-zione meno efficiente del Monte Carlo tradizionale, ma i risultati in terminidi deviazione standard del prezzo dell’opzione evidenziano un miglioramentonell’applicazione del metodo.

Si fa notare comunque che il numero delle simulazioni non e sufficiente agarantire una buona approssimazione.

/* ESEMPIO (CW)*/

16

{pbs,sbs}=simasbs(50,52,0.1,0.4,(5/12),4000);

The price is: 5.1479631

Stand. Dev.: 8.9080590

{pav,sav}=simasbs(50,52,0.1,0.4,(5/12),4000);

The price is: 5.2292150

Stand. Dev.: 8.7699062

/* Prezzo Black-Scholes */

c = EuropeanBSCall(50,52,0.1,0,(5/12),0.4);

c;

5.1910814

Si propone infine a titolo di esempio il risultato ottenuto applicando ilmetodo di Halton (sequenze a bassa discrepanza).

Il metodo genera sequenze di estrazioni indipendenti nell’itervallo [0, 1].La trasformazione del campione generato in una distribuzione normale stan-dardizzata puo avvenire applicando diversi metodi.

Nella procedura seguente si e utilizzato il metodo della trasformazioneinversa che, in Gauss, si ottiene con il comando cdfni(x), dove x e unvettore di elementi compresi nell’intervallo [0, 1].

Tra gli input della seguente procedura ci sono le funzioni hmh e halton1

(Dispense del corso - Parte IV) ovvero le procedure che generano le sequenzea bassa discrepanza di Halton.

Si ricorda che, prima di poter richiamare la procedura simashal dal CW,le procedure hmh e halton1 devono essere compilate e residenti in memoria.

proc (2)=simashal(s,k,r,sigma,T,nsim,base,&hmh,&halton1);

local drift,vola,stdevprice,payoff,discpayoff,price;

local hmh:proc,halton1:proc,campio,estraz;

17

drift=(r-0.5*(sigma^2))*T;

vola=sigma*sqrt(T);

estraz=hmh(&halton1,nsim,base);

campio=cdfni(estraz’);

payoff=maxc((-k+(s.*exp(drift+vola.*campio)))|(zeros(1,nsim)));

discpayoff=(exp(-r*T)).*payoff;

price=meanc(discpayoff);

stdevprice=stdc(discpayoff);

print;

print "The price is: " price;

print;

print "Stand. Dev.: " stdevprice;

retp(price,stdevprice);

endp;

Si verifichino i risultati di simashal con quelli ottenuti precedentementedalle procedure simasbs, simasav e EuropeanBScall.

/* HALTON con base 7 */

{phal,shal}=simashal(50,52,0.1,0.4,(5/12),4000,7,&hmh,&halton1);

The price is: 5.13871232

Stand. Dev.: 8.68574011

18

/* HALTON con base 2 */

{phal,shal}=simashal(50,52,0.1,0.4,(5/12),4000,2,&hmh,&halton1);

The price is: 5.16721438

Stand. Dev.: 8.74680221

/* HALTON con base 19 */

{phal,shal}=simashal(50,52,0.1,0.4,(5/12),4000,19,&hmh,&halton1);

The price is: 5.12634835

Stand. Dev.: 8.65625580

Selezione del portafoglio

La selezione del portafoglio affronta il problema della ripartizione delle risorsedi finanziarie tra diverse possibilita di investimento con rendimento aleatorio(F.Rossi, Matematica Finanziaria, Monduzzi Editore).

Uno dei metodi di selezione del portafoglio e il criterio media-varianza(E-V), proposto da Markowitz nel 1952.

Il criterio ipotizza che la scelta del portafoglio sia guidata dalla massi-mizzazione del rendimento e dalla minimizzazione del rischio.

Dato un ammontare unitario di risorse disponibili da investire in n atti-vita, si assume che tutte le risorse siano impiegate (vincolo di bilancio)

n∑i=1

xi = 1

in forma matriciale

19

(1 1 · · · 1

x1

x2

. . .xn

= 1

Nel caso in cui non siano ammesse vendite allo scoperto i pesi relativia ciascun investimento devono essere compresi tra zero e uno. Non e cioepossibile investire piu di una unita di risorse in alcune attivita vendendo alloscoperto le altre (quote minori di zero).

0 ≤ xi ≤ 1

Data una composizione di portafoglio ripartito in n attivita, il rendimentoatteso di portafoglio e pari alla media dei rendimenti di ciascuna attivitapesati per le rispettive quote xi.

Rp = x1 · R1 + x2 · R2 + · · ·+ xn · Rn

in forma matriciale

Rp =(

R1 R2 · · · Rn

x1

x2

. . .xn

mentre la varianza di portafoglio e:

σ2p =

n∑i=1

x2i · σ2

i + 2 ·n∑

i=1

n∑j=i+1

xixjσi,j

in forma matriciale

σ2p = x′Qx =

(x1 x2 · · · xn

σ2

11 σ12 · · · σ1n

σ21 σ222 · · · σ2n

......

. . ....

σn1 · · · · · · σ2nn

·

x1

x2

. . .xn

con σ12 = σ21 = ρ12 · σ1 · σ2

Uno dei tipici problemi di programmazione quadratica relativa alla sele-zione del portafoglio e la minimizzazione della varianza di portafoglio, σ2

p,dato un certo Rp con vincoli di bilancio (tutte le risorse investite), vincoli di

20

non-negativita dei pesi (vendite allo scoperto non ammesse) ed eventualmentelimiti inferiori o superiori per ciascuno dei pesi di portafoglio.

Formalizzando il problema di programmazione quadratica si ha:

min x′Qx

soggetto ai vincoli di uguaglianza:(R′

1′

)· x =

(Rp

1

)a vincoli di disuguaglianza:

1′︸︷︷︸(1×n)

·(n×1)︷︸︸︷x ≥ cost.︸︷︷︸

(1×1)

Comando Qprog

Il comando Qprog si utilizza per risolvere un problema di programmazionequadratica del tipo

min1

2x′Qx− x′R

soggetto a vincoli di uguaglianza e/o disuguaglianza in cui le soluzionipossono essere limitate inferiormente e superiormente.

Ax = B

Cx ≥ D

xlow ≤ x ≤ xup

La sintassi del comando e la seguente:

{x,u1,u2,u3,u4,ret}=qprog(start,q,r,a,b,c,d,bounds)

dove:

INPUT:

start (k × 1), inizializzazione incognite

q (k × k), matrice simmetrica del modello

21

r (k × 1), vettore di costanti del modello

a (m× k), coefficienti del vincolo di uguaglianza

b (m× 1), parametri del vincolo di uguaglianza

c (n× k), coefficienti del vincolo di disuguaglianza

d (n× 1), parametri del vincolo di disuguaglianza

bounds (k× 2) limiti inferiori (prima colonna) e superiori (seconda colonna)delle soluzioni.

OUTPUT:

x (k × 1), vettore delle soluzioni

u1 (m× 1), coefficienti Lagrangiani dei vincoli di uguaglianza

u2 (n× 1), coefficienti Lagrangiani dei vincoli di disuguaglianza

u3 (k × 1), coefficienti Lagrangiani dei limiti inferiori

u4 (k × 1), coefficienti Lagrangiani dei limiti superiori

ret 0 ottimizzazione conclusa con successo

1 numero massimo di iterazioni superato

2 precisione-macchina insufficiente per mantenere valori decrescentidella funzione da ottimizzare

3 matrici non conformabili

<0 vincoli non consistenti

VARIABILI GLOBALE:

qprog maxit scalare, numero massimo di iterazioni

/* ESEMPIO QPROG */

minr=10;

22

maxr=25;

y=50;

fronteff=zeros(y,2);

returns=seqa(minr,(maxr-minr)/y,y);

rendimenti={15 15 17 20 12};

Q={2 -0.4286 2.2857 0.1429 -0.2857,

-0.4286 4 -0.2857 1.1429 1.1429, 2.2857 -0.2857 2.8571 0.7143

-0.5714, 1.1429 1.1429 0.7143 3.4286 0.1429, -0.2857 1.1429

-0.5714 1.1429 1.1429}; /* var covar */

k=rows(Q);

start=(1/k)*ones(k,1);

for o(1,y,1);

rendatteso=returns[o,1];

i=zeros(k,1);

h=ones(1,k);

a=h|rendimenti;

b=1|rendatteso;

c=0;

d=0;

bounds=0;

{sol,u1,u2,u3,u4,ret}=qprog(start,Q,i,a,b,c,d,bounds);

fronteff[o,1]=rendimenti*sol;

23

fronteff[o,2]=sqrt((sol’)*Q*sol);

print "Rendimento di Portafoglio" fronteff[o,1];

print;

print "Volatilit di Portafoglio" fronteff[o,2];

print "Soluzioni" sol;

endfor;

print " Rendimento Varianza"; print fronteff;

Funzioni di Gauss

AmericanBinomCall

AmericanBinomCall Greeks

AmericanBinomCall ImpVol

AmericanBinomPut

AmericanBinomPut Greeks

AmericanBinomPut ImpVol un’American Put (metodo binomiale)

AmericanBSCall A

AmericanBSCall Greeks

AmericanBSCall ImpVol

AmericanBSPut

AmericanBSPut Greeks

AmericanBSPut ImpVol

annualTradingDays

elapsedTradingDays

24

EuropeanBinomCall

EuropeanBinomCall Greeks

EuropeanBinomCall ImpVol

EuropeanBinomPut

EuropeanBinomPut Greeks

EuropeanBinomPut ImpVol

EuropeanBSCall

EuropeanBSCall Greeks

EuropeanBSCall ImpVol

EuropeanBSPut

EuropeanBSPut Greeks

EuropeanBSPut ImpVol

getNextTradingDay

getNextWeekDay

getPreviousTradingDay

getPreviousWeekDay

date

dtdate

time

Esercizi

1. Si crei una procedura che, dato il prezzo di una opzione europea (callo put), calcoli la volatilita implicita secondo il modello di Black &Scholes. (Hint: si utilizzi la funzione eqsolve e un valore inizialedi volatilita). Si verifichi quindi il risultato con le funzioni di GaussEuropeanBSCall_ImpVol e EuropeanBSPut_ImpVol.

25

2. Si implementi una procedura che, utilizzando il metodo Monte Carlo, cal-coli la sensitivita del prezzo di un’opzione europea ad una variazioneinfinitesimale dei fattori di rischio. Si verifichi inoltre il risultato ot-tenuto con le greche calcolate con B&S (EuropeanBSCall_Greeks eEuropeanBSPut_Greeks). Ripetere la verifica n volte.

3. Dopo aver scaricato 4 serie di prezzi azionari (Yahoo Finance, 400 osserva-zioni giornaliere), possibilmente correlate in maniera inversa, si calcoli-no i rendimenti, i rendimenti medi e la matrice varianza-covarianza uti-lizzando 3/4 delle osservazioni. Utilizzando il criterio E-V di Markovitzsi determini la composizione del portafoglio a varianza minima (vincolodi bilancio, vendite allo scoperto non consentite, bounds inferiori: datox1 = 0.05 i pesi xi = 1.245 · xi con i = 2, 3, ..n).

opz A) Utilizzando il metodo Monte Carlo, si calcoli il Var (Valueat risk) a uno, cinque e dieci giorni, al 95% e al 99% (usando lafunzione quantile) e si verifichi l’efficienza della stima del Varutilizzando le rimanenti osservazioni del campione.

opz B) Siano date le seguenti condizioni: Capitale iniziale 1’000’000di dobloni, orizzonte di investimento 1 anno, massimo 6 ribilancia-menti equidistanziati, possibilita di investire al piu in 4 stock (coni vincoli posti in precedenza) e in due opzioni contemporaneamen-te (call put lunghe o corte). Si decida la strategia di investimentocon l’obiettivo di massimizzare il guadagno alla fine. Si verifichila performace dell’investimento simulando le vere traiettorie deglistock con seeds forniti dal docente.

4. Utilizzando una serie storiche scaricate da Yahoo Finance si implementiuna procedura per il pricing con metodo Monte Carlo per una opzionedi tipo path dependent il cui payoff a scadenza:

max{ST −K∗}

dove:

K∗ =T∑

i=1

Si

n

26