25
Simulazione di numeri casuali Il metodo Montecarlo si basa sulla simulazione di numeri casuali, cio` e di realizzazioni di variabili casuali con una distribuzione fissata. Il primo problema ` e simulare numeri casuali che abbiano una distribuzione uniforme U (0, 1); non entriamo nel dettaglio dei metodi con cui si ottiene questo risultato; l’idea generale ` e utilizzare sequenze deterministiche che abbiano delle propriet` a statistiche non distinguibili da una successione di variabili casuali uniformi e identicamente distribuite. In Matlab uno dei modi di generare variabili casuali uniformi ` e attraverso il comando unifrnd. Fabio Bellini (DISMEQ) Il metodo Montecarlo 6 aprile 2020 1 / 25

Simulazione di numeri casuali - elearning.unimib.it

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Simulazione di numeri casuali - elearning.unimib.it

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

Page 2: Simulazione di numeri casuali - elearning.unimib.it

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

Page 3: Simulazione di numeri casuali - elearning.unimib.it

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

Page 4: Simulazione di numeri casuali - elearning.unimib.it

Esempio

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

Page 5: Simulazione di numeri casuali - elearning.unimib.it

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

Page 6: Simulazione di numeri casuali - elearning.unimib.it

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

Page 7: Simulazione di numeri casuali - elearning.unimib.it

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

Page 8: Simulazione di numeri casuali - elearning.unimib.it

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

Page 9: Simulazione di numeri casuali - elearning.unimib.it

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

Page 10: Simulazione di numeri casuali - elearning.unimib.it

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

Page 11: Simulazione di numeri casuali - elearning.unimib.it

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

Page 12: Simulazione di numeri casuali - elearning.unimib.it

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

Page 13: Simulazione di numeri casuali - elearning.unimib.it

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

Page 14: Simulazione di numeri casuali - elearning.unimib.it

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

Page 15: Simulazione di numeri casuali - elearning.unimib.it

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

Page 16: Simulazione di numeri casuali - elearning.unimib.it

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

Page 17: Simulazione di numeri casuali - elearning.unimib.it

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

Page 18: Simulazione di numeri casuali - elearning.unimib.it

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

Page 19: Simulazione di numeri casuali - elearning.unimib.it

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

Page 20: Simulazione di numeri casuali - elearning.unimib.it

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

Page 21: Simulazione di numeri casuali - elearning.unimib.it

La distribuzione di ST

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

Page 22: Simulazione di numeri casuali - elearning.unimib.it

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

Page 23: Simulazione di numeri casuali - elearning.unimib.it

La distribuzione del payoff della call

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

Page 24: Simulazione di numeri casuali - elearning.unimib.it

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

Page 25: Simulazione di numeri casuali - elearning.unimib.it

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