simulazione di numeri casuali - elearning.unimib.it

Post on 31-Jul-2022

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Simulazione di numeri casuali

Il metodo Montecarlo si basa sulla simulazione di numeri casuali, cioe direalizzazioni di variabili casuali con una distribuzione fissata.Il primo problema e simulare numeri casuali che abbiano una distribuzioneuniforme U(0, 1); non entriamo nel dettaglio dei metodi con cui si ottienequesto risultato; l’idea generale e utilizzare sequenze deterministiche cheabbiano delle proprieta statistiche non distinguibili da una successione divariabili casuali uniformi e identicamente distribuite.In Matlab uno dei modi di generare variabili casuali uniformi e attraverso ilcomando unifrnd.

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 1 / 25

Il comando unifrnd

>> help unifrnd

unifrnd Random arrays from continuous uniform distribution.

R = unifrnd(A,B) returns an array of random numbers chosen

from the continuous uniform distribution on the

interval from A to B. The size of R is the common size

of A and B if both are arrays. If either parameter is

a scalar, the size of R is the size of the other parameter.

R = unifrnd(A,B,M,N,...) or R = unifrnd(A,B,[M,N,...])

returns an M-by-N-by-... array.

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 2 / 25

Esempio

>> X=unifrnd(0,1,10000,1);

figure

subplot(1,2,1)

plot(X)

subplot(1,2,2)

histogram(X,50)

>>

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 3 / 25

Esempio

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 4 / 25

Simulazione di numeri casuali

Consideriamo ora una generica variabile casuale X con funzione didistribuzione

FX (t) = P(X ≤ t).

Se definiamo la inversa generalizzata di F come

F−1X (α) = inf{t ∈ R | F (t) ≥ α}, con α ∈ (0, 1),

e possibile dimostrare che se U ha una distribuzione uniforme, allora

F−1(U)d= X .

Per simulare qualsiasi variabile casuale di cui sia nota F−1 e quindisufficiente simulare una variabile casuale uniforme.

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 5 / 25

Simulazione di numeri casuali

Non avremo bisogno di applicare questo risultato in quanto nella toolbox“Statistics and Machine Learning” di Matlab troviamo gia implementatenumerose funzioni per la simulazione di numeri casuali, ad esempio

Random Number Generators.

....

normrnd - Normal (Gaussian) random numbers.

lognrnd - Lognormal random numbers.

....

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 6 / 25

Esempio

>> X=normrnd(0,1,10000,1);

figure

subplot(1,2,1)

plot(X)

subplot(1,2,2)

histfit(X,50)

>>

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 7 / 25

Esempio

0 5000 10000

-4

-3

-2

-1

0

1

2

3

4

-4 -2 0 2

0

100

200

300

400

500

600

700

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 8 / 25

Simulazione di processi stocastici

Creiamo una funzione simbm che simuli e disegni N traiettorie di un motobrowniano, ciascuna di lunghezza n, relative a un time-step ∆t.

function [X] = simbm(N,n,delta_t)

% ciascuna traiettoria sara una riga della matrice X

X0=zeros(N,1);

% tutte le traiettorie partono da 0

Y=normrnd(0,delta_t^0.5,N,n);

% simuliamo gli incrementi

X=[X0, cumsum(Y,2)];

% calcoliamo la traiettoria

t=0:delta_t:n*delta_t;

% calcoliamo il vettore dei tempi

plot(t,X)

grid on

end

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 9 / 25

Esempio

>> X = simbm(100,1000,0.1);

0 10 20 30 40 50 60 70 80 90 100

-30

-20

-10

0

10

20

30

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 10 / 25

Processo mean reverting

Vogliamo ora simulare un processo mean reverting come quello dello shortrate nel modello di Vasicek

dXt = k[θ − Xt ] dt + σdBt , X0 = x0

che discretizzando possiamo scrivere come

Xt+∆t = Xt + k[θ − Xt ] ∆t + σYt , X0 = x0,

con Yt variabili casuali i.i.d. di media nulla e varianza pari a ∆t.

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 11 / 25

Processo mean reverting

function [X] = simmr(N,n,delta_t,kappa,theta,sigma,x0)

Y=normrnd(0,delta_t^0.5,N,n);

i=1;

X(:,1)=x0*ones(N,1);

while i<=n

X(:,i+1)=X(:,i)+kappa*(theta-X(:,i))*delta_t+sigma*Y(:,i);

i=i+1;

end

t=0:delta_t:n*delta_t;

plot(t,X)

grid on

end

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 12 / 25

Esempio

>> figure

subplot(2,2,1)

X=simmr(10,1000,0.1,0.5,0.03,0.01,0.06);

subplot(2,2,2)

X=simmr(10,1000,0.1,0.5,0.03,0.001,0.06);

subplot(2,2,3)

X=simmr(10,1000,0.1,0.5,0.03,0.01,0.00);

subplot(2,2,4)

X=simmr(10,1000,0.1,0.5,0.03,0.001,0.00);

>>

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 13 / 25

Esempio

0 50 100

-0.02

0

0.02

0.04

0.06

0.08

0 50 100

0.02

0.03

0.04

0.05

0.06

0 50 100

0

0.02

0.04

0.06

0 50 100

0

0.01

0.02

0.03

0.04

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 14 / 25

Moto browniano geometrico

Simuliamo adesso un moto browniano geometrico

dSt = µStdt + σStdBt .

Anche in questo caso, scriviamo

St+∆t = St + µStdt + σStdBt

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 15 / 25

Moto browniano geometrico

function [X] = simgbm(N,n,delta_t,mu,sigma,S0)

Y=normrnd(0,delta_t^0.5,N,n);

i=1;

X(:,1)=S0*ones(N,1);

while i<=n

X(:,i+1)=X(:,i)+mu*X(:,i)*delta_t+sigma*X(:,i).*Y(:,i);

i=i+1;

end

t=0:delta_t:n*delta_t;

plot(t,X)

grid on

end

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 16 / 25

Esempio

>> X = simgbm(50,100,0.1,0.01,0.05,100);

0 1 2 3 4 5 6 7 8 9 10

70

80

90

100

110

120

130

140

150

160

170

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 17 / 25

Il metodo Montecarlo

Sia X una variabile casuale con funzione di densita f e sia g : R → R unafunzione. Come noto,

E [g(X )] =

∫ +∞

−∞g(x)f (x) dx .

L’idea del metodo Montecarlo e approssimare numericamente questointegrale, simulando un certo numero di realizzazioni della variabile X , ecalcolando poi la media aritmetica della funzione f :

E [g(X )] ≈ 1

N

N∑i=1

g(xi ),

dove le xi sono appunto simulazioni indipendenti della variabile casuale X .

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 18 / 25

Prezzo di uno strumento derivato

Possiamo utilizzare il metodo Montecarlo per calcolare il prezzo di ungenerico strumento derivato di stile europeo, che come noto e dato dalvalore attuale del valore atteso neutrale al rischio del payoff:

P0 = exp(−rT )E [g(ST )].

Consideriamo il caso di una opzione call nel modello di Black-Scholes, percui g(x) = (x − K )+ e

ST = S0 exp

((r − σ2

2

)T + σBT

),

con BT ∼ N(0,T ).

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 19 / 25

Prezzo di una call

A titolo di esempio, sia S0 = 100, K = 100, r = 0.01, σ = 0.1, T = 0.25anni. Iniziamo a simulare i valori del sottostante a scadenza:

>> Y=normrnd(0,0.25^0.5,10000,1);

ST=100*exp((0.01-0.1^2/2)*0.25+0.1*Y);

e ne controlliamo la distribuzione

>> histogram(ST,50)

Possiamo anche verificare che la media

>> mean(ST)=100.2769

sia non lontana dal prezzo forward F = 100 ∗ exp(0.01× 0.25) ' 100.25.

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 20 / 25

La distribuzione di ST

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 21 / 25

Prezzo di una call

Determiniamo la distribuzione del payoff della call

>> Z=max(ST-100,0);

>> hist(Z,50)

Contiamo in quanti casi la call finisce in the money

>> length(nonzeros(Z)) = 5138

da cui possiamo dedurre che la probabilita di esercizio e circa

5138

10000= 51, 38%

e infine calcoliamo il prezzo Montecarlo

>> exp(-0.01*0.25)*mean(Z) = 2.1072

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 22 / 25

La distribuzione del payoff della call

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 23 / 25

Confronto con il valore esatto

Nella Financial Toolbox e gia implementata la formula di Black-Scholes

help blsprice

blsprice Black-Scholes put and call option pricing.

Compute European put and call option prices using

a Black-Scholes model.

[Call,Put] = blsprice(Price, Strike, Rate, Time, Volatility)

[Call,Put] = blsprice(Price, Strike, Rate, Time, Volatility,

Yield)

...

>> blsprice(100, 100, 0.01, 0.25, 0.1) = 2.1193

Il valore ottenuto dal metodo Montecarlo e ragionevolmente vicino alvalore esatto; la precisione cresce aumentando il numero delle simulazioni.

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 24 / 25

Calcolo del Delta

Calcoliamo il prezzo per S = 100 e S = 100.1 e il Delta come il rapportotra la variazione del prezzo della call e la variazione del sottostante:

>> Y=normrnd(0,0.25^0.5,10000,1);

ST1=100*exp((0.01-0.1^2/2)*0.25+0.1*Y);

ST2=100.1*exp((0.01-0.1^2/2)*0.25+0.1*Y);

Z1=max(ST1-100,0);

Z2=max(ST2-100,0);

P1=exp(-0.01*0.25)*mean(Z1);

P2=exp(-0.01*0.25)*mean(Z2);

Delta=(P2-P1)/0.1

Otteniamo

>> Delta = 0.5340

Confrontiamo con il valore esatto

>> blsdelta(100, 100, 0.01,0.25, 0.1) = 0.5299

Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 25 / 25

top related