MKZR:Modelowanie dynamiki instrumentów pochodnych

Z Skrypty dla studentów Ekonofizyki UPGOW

(Różnice między wersjami)
m (Własności wzorów Blacka-Scholesa)
(Własności wzorów Blacka-Scholesa)
Linia 81: Linia 81:
-
Można przypuszczać, że wykres wzoru Blacka Scholes-a będzie dążył do kropkownej zależności dla <math>\sigma \to 0</math>. Rzeczywiście, można się o tym przekonać  rysując kilka zależności C(S) dla malejących wartości <math>\sigma</math>. Widać, że
+
Można przypuszczać, że wykres wzoru Blacka Scholes-a będzie dążył do kropkownej zależności dla <math>\sigma \to 0</math>. Rzeczywiście, można się o tym przekonać  rysując kilka zależności C(S) dla malejących wartości <math>\sigma</math>. Na rysunku otrzymanym przez uruchomienie poniższego programu:
[[Plik:BS_formula2.png|thumb|360px|Wykres ceny europejskiej opcji sprzedaży dla  
[[Plik:BS_formula2.png|thumb|360px|Wykres ceny europejskiej opcji sprzedaży dla  
Linia 94: Linia 94:
K = S0*exp(r*T)
K = S0*exp(r*T)
S0_tab = 1:1:60;
S0_tab = 1:1:60;
-
plot(S0_tab, max(S0_tab-K*exp(-r*T),0),'o' );
 
for sigma=[0.01 0.1 0.2 0.3]  
for sigma=[0.01 0.1 0.2 0.3]  
   plot(S0_tab,BlackScholes(S0_tab,K,r,T,sigma) );
   plot(S0_tab,BlackScholes(S0_tab,K,r,T,sigma) );
Linia 104: Linia 103:
 +
otrzymujemy cztery krzywe dla coraz mniejszych wartości volatility.
-
<source lang='matlab'>
 
-
clear all
 
-
close all
 
-
N=303;
 
-
M=32313;
 
-
T=13.1;
 
-
h=T/N;
 
-
x=zeros(M,1);
 
-
S0=11;
 
-
sigma=0.4;
 
-
K = 50;
 
-
r = 0.1;
 
-
x=S0*ones(M,1);
 
-
% integrate in one step 
 
-
y = x .* exp(  (r-0.5*sigma^2)*T + sigma.*sqrt(T).*normrnd (0,1,M,1) ) ;
 
-
 
-
% integrate in N  steps mu=>r
 
-
for i=2:N
 
-
  x =x + r*x*h + sigma*sqrt(h)*x.*normrnd (0,1,M,1);
 
-
endfor
 
-
 
-
 
-
%exp(-r*T)*mean( max(K-x,0) )
 
-
 
-
% Call option value
 
-
Nsteps=exp(-r*T)*mean( max(x-K,0) )
 
-
onestep=exp(-r*T)*mean( max(y-K,0) )
 
-
exact=BlackScholes(S0,K,r,T,sigma)
 
-
</source>
 
<source lang='matlab'>
<source lang='matlab'>
-
% Black Scholes, własności
+
T=5.0;
-
S0 = 1:1:80;
+
sigma=0.2;
-
K = 55;
+
r = 0.1;
-
r = 0.08;
+
K = 52.1;
-
sigma = 0.1;
+
BlackScholes( K*exp(-r*T),K,r,T,sigma)
-
T=5.01
+
-
plot(S0,BlackScholes(S0,K,r,T,sigma), S0, S0-K*exp(-r*T),'o' );
+
-
axis([0 80 -5 35]);
+
-
grid on
+
-
 
+
</source>
</source>

Wersja z 13:05, 7 cze 2010

Spis treści

Wycena opcji: modele z czasem dyskretnym

Binomial options pricing model h

rozdział 7 P.B.

http://gillesdaniel.com/natlab/

Wycena opcji: modele z czasem ciągłym

Model Blacka-Scholesa dla europejskiej opcji kupna

Model Blacka-Scholesa zakłada że, że cena akcji \(\displaystyle S(t)\) ewoluuje zgodnie z geometrycznym ruchem Browna przy ciągłej kapitalizacji z roczną stopą procentową r:

\(dS(t) = r S(t) dt + \sigma S(t) d W(t)\,\).

W chwili \(t_0\) instument bazowy ma wartość \(S0\) a cena wykupu (lub sprzedaży) w chwili T wynosi S(T). Pytamy się o wartość instrumentu pochodnego w dowonej chwili \(t<T\). Zakładając, że chcemy utrzymać portfel bez ryzyka (delta neutralny) można pokazać, że wartość taka jest dana przez równanie Blacka-Scholesa

\( \frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 S^2\frac{\partial^2 V}{\partial S^2} + rS\frac{\partial V}{\partial S} - rV = 0. \)

gdzie r jest stopą procentową wolną od ryzyka.

Równanie to posiada analityczne rozwiązanie i jest to słynny wzór Blacka-Scholesa dla ceny opcji kupna na europejska akcję bez dywidend:

\[ C(S,t) = SN(d_1) - Ke^{-r(T - t)}N(d_2) \, \]

i ceny opcji sprzedaży na europejska akcję bez dywidend:

\[ P(S,t) = Ke^{-r(T-t)} - S + C(S,t). \ \]

gdzie:

\[ d_1 = \frac{\ln(\frac{S}{K}) + (r + \frac{\sigma^2}{2})(T - t)}{\sigma\sqrt{T - t}} \]
\[ d_2 = d_1 - \sigma\sqrt{T - t}. \]


Własności wzorów Blacka-Scholesa

Powyższe wzory można zaimplementować jako funkcje w matlab/GNU Octave w następujący sposób:

function [C,P] = BlackScholes(S0,K,r,T,sigma)
  d1=(log(S0./K)+(r+sigma^2/2)*T)/(sigma*sqrt(T));
  d2=d1-sigma*sqrt(T);
  C = S0.*normcdf(d1)-K*exp(-r*T)*normcdf(d2);
  P = K*exp(-r*T)*normcdf(-d2)-S0.*normcdf(-d1);
end
Warto zwrócić uwagę by ten program został zapisany w pliku o nazwie BlackScholes.m.
Wykres ceny europejskiej opcji sprzedaży dla K=51.11,r=0.1,T=5.0 oraz \(\sigma\)=0.2 od ceny aktualnej S (linia ciągła). Kropkami zaznaczono funkcje \(S-K e^{-r T}\)

Program ten zwraca dla zadanych wartości ceny aktualnej ("spot") S0, cena rozliczenia opcji K w czasie T oraz wysokość rocznej stopy procentowej wolnej od ryzyka dla terminu wygaśnięcia opcji r i volatility \(\sigma\) dwie ceny - opcji kupna C oraz sprzedaży P. Są one zwracane jako dwa argumenty, więc poprawne wywołanie takiej funkcji powinno być np.:

octave:8> [call,put]=BlackScholes(31 ,51.1 ,0.1 ,5 , 0.2)
call =  5.4876
put =  5.4813

Wzór ten ma kilka ciekawych własności. Po pierwsze zauważmy, że gdyby fluktuacje ceny akcji znikły w chwili obserwacji to wartość opcji była by równa różnicy między ceną aktualną a zdyskontowaną ceną wykupu \(S-K e^{-r T}\), gdy tylko taka różnica była by większa od zera. W innym przypadku wartość takiej opcji jest równa zeru. Na rysunku jest umieszczona zależności ceny wykupu od wartości aktualnej opcji wygenerowany następującym skryptem:

clear all
close all
T=5.
S0=31
sigma=0.2
r = 0.1
K = S0*exp(r*T)
S0_tab = 1:1:60;
plot(S0_tab,BlackScholes(S0_tab,K,r,T,sigma), S0_tab, max(S0_tab-K*exp(-r*T),0),'o' );
exact=BlackScholes(S0,K,r,T,sigma)
line([S0,S0],[0,exact])
grid on


Można przypuszczać, że wykres wzoru Blacka Scholes-a będzie dążył do kropkownej zależności dla \(\sigma \to 0\). Rzeczywiście, można się o tym przekonać rysując kilka zależności C(S) dla malejących wartości \(\sigma\). Na rysunku otrzymanym przez uruchomienie poniższego programu:

Wykres ceny europejskiej opcji sprzedaży dla K=51.11,r=0.1,T=5.0 od ceny aktualnej S dla kilku wartości \(\sigma\)=0.01,0.1,0.2 i 0.3
clear all
close all
T=5.
S0=31
r = 0.1
K = S0*exp(r*T)
S0_tab = 1:1:60;
for sigma=[0.01 0.1 0.2 0.3] 
  plot(S0_tab,BlackScholes(S0_tab,K,r,T,sigma) );
  hold on
endfor 
grid on


otrzymujemy cztery krzywe dla coraz mniejszych wartości volatility.



T=5.0;
sigma=0.2;
r = 0.1;
K = 52.1;
BlackScholes( K*exp(-r*T),K,r,T,sigma)