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.