alfa <

Transkrypt

alfa <
MONTE CARLO – PROCESY STOCHASTYCZNE
Najprostszym a zarazem często stosowanym procesem stochastycznym jest ruch
Browna.
>
>
>
>
# trajektorie ruchu Browna
br <- matrix(rnorm(500), 100, 5)
brown <- apply(br, 2, cumsum)
matplot(brown, type="l", lty=1)
Polecenie matplot pozwala na umieszczanie kilku krzywych na jednym wykresie.
-10
-20
brown
0
10
Rysunek 1: Wykres 5 trajektorii ruchu Browna
0
50
100
150
200
Źródło: Opracowanie własne
Umiejętność symulacji zmiennych losowych o rozkładzie stabilnym (wymagana
instalacja biblioteki fBasics) pozwala tworzyć trajektorię stabilnego ruchu Lévy’ego.
> # trajektorie stabilnego symetrycznego ruchu Lévy’ego
> alfa <- 1.5
> lv <- matrix(rstable(500, alpha=alfa, beta=0), 100, 5)
> levy <- apply(lv, 2, cumsum)
> matplot(levy, type="l", lty=1)
0
-40
-20
levy
20
Rysunek 2: Wykres 5 trajektorii stabilnego symetrycznego ruchu Lévy’ego
0
20
40
60
80
100
Źródło: Opracowanie własne
W odniesieniu do procesu cen akcji zakłada się często, Ŝe jest geometrycznym
ruchem Browna. Oznacza to, Ŝe proces cen akcji S t spełnia stochastyczne równanie
róŜniczkowe
dS t = µ S t dt + σ S t dBt
gdzie
S t - cena akcji w chwili t,
µ - dryf cen akcji,
σ - zmienność (odchylenie standardowe) cen akcji oraz dBt jest zmienną losową o
rozkładzie normalnym N (0, dt ) .
Korzystając ze schematu Eulera niezaleŜne trajektorie geometrycznego ruch Browna
moŜemy generować za pomocą formuły


1 
Sti = Sti−1 exp  µ − σ 2  dt + σ dt ξi 
2 


gdzie ξ i , i = 1,…, I to zmienne losowe o rozkładzie N (0,1) , dt = T / I oraz
ti = dt ⋅ i ∈ [0, T ], i = 0, … , I .
ZałóŜmy Ŝe w skali jednego roku osiągamy stopę zwrotu na poziomie 20% oraz
zmienność cen akcji w skali jednego roku wynosi 20%. W chwili obecnej akcja
kosztuje 300.
>
>
>
>
>
S0 <- 300 # wartość początkowa
T <- 1 # przedział czasowy [0,T]
I <- 100 # liczba podziałów odcinka [0,T]
N <- 1000 # liczba trajektorii
sigma <- 0.2 # zmienność w skali roku
>
>
>
>
>
>
>
mi <- 0.2 # dryf
dt <- T/I # długość kroku
zeta <- matrix(rnorm(N*I,0,1), I, K)
S <- matrix(nrow=I, ncol=N)
S[1,] <- S0 # wartość początkowa
for(j in 1:N)
for(i in 2:I) {
S[i,j] <- S[i-1,j]*exp((mi-sigma^2/2)*dt +
sigma*sqrt(dt)*zeta[i,j])}
> matplot(S, type="l", lty=1, pch=20)
200
300
400
S
500
600
Rysunek 3: Wykres 1000 trajektorii geometrycznego ruch Browna
0
20
40
60
80
100
Źródło: Opracowanie własne
Schemat symulacji geometrycznego ruchu Browna wykorzystamy do wyceny opcji
waniliowych. Przypuśćmy, Ŝe naszym celem jest wycena europejskich opcji kupna i
sprzedaŜy z ceną wykonania 3000 wygasających za pół roku. ZałóŜmy, Ŝe wolna od
ryzyka stopa procentowa w skali jednego roku 10%. Zmienność instrumentu
bazowego, w skali roku, niech będzie równa 20% oraz jego obecna cena równa
3000.
Zakładamy, Ŝe proces cen instrumentu bazowego jest geometrycznym ruchem
Browna.
Przy wycenie opcji zamiast dryfu stosuje się stopę procentową.
> S0 <- 3000 #obecna cena instrumentu bazowego
> K <- 3000 #cena wykonania opcji
> r <- 0.1 #wolna od ryzyka roczna stopa procentowa
> sigma <- 0.2 #ryzyko instrumentu bazowego (odch.
standardowe)
> T <- 0.5 #czas Ŝycia opcji w latach
> I <- 10 # liczba podziałów odcinka [0,T]
> N <- 10000 # liczba trajektorii
> dt <- T/I # długość kroku
>
>
>
>
>
>
>
>
zeta <- matrix(rnorm(N*I,0,1), I, N)
S <- matrix(nrow=I, ncol=N)
S[1,] <- S0 # wartość początkowa
for(j in 1:N)
for(i in 2:I) {
S[i,j] <- S[i-1,j]*exp((r-sigma^2/2)*dt +
sigma*sqrt(dt)*zeta[i,j])
}
#zdyskontowana średnia arytmetyczna wartości opcji kupna
(Ok <- exp(-r*T)*sum(S[I,S[I,]>K]-K)/N)
#zdyskontowana średnia arytmetyczna wartości opcji sprzedaŜy
(Os <- exp(-r*T)*sum(K-S[I,S[I,]<K])/N)
Obecnie sprawdzimy, czy otrzymane przed momentem wyniki pokrywają się z
wynikami otrzymanymi ze wzorów Blacka-Scholesa.
>
>
>
>
>
>
D1<-(log(S0/K)+(r+0.5*sigma^2)*T)/(sigma*sqrt(T))
D2<-D1-sigma*sqrt(T)
#cena opcji kupna
(Ok<-S0*pnorm(D1)-exp(-r*T)*K*pnorm(D2))
#cena opcji sprzedaŜy (zaleŜności między cenami opcji)
(Os<-Ok-S0+K*exp(-r*T))
Widzimy, Ŝe wyniki otrzymane obiema metodami nieznacznie się róŜnią. Zwiększenie
liczby symulacji i punktów podziału odcinka [0,T] powoduje mniejszą róŜnicę w
wynikach.