Z Skrypty dla studentów Ekonofizyki UPGOW
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.
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:
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.
Rozważmy przypadek, gdy jako cenę aktualna instrumentu bazowego weżmiemy zdyskontowaną wartość opcji terminie wygaśnięcia. W przypadku braku fluktuacji cen instrumentu bazowego w takim przypadku nasze opcję mają zerową wartość. Jednak pojawienie się fluktuacji wyrażonej przez niezerowe \(\sigma\) powoduje, że opcje zyskują pewną wartość. Można to zobaczyć z powyższych rysunków lub dokładniej na przykładzie:
T=5.0; sigma=0.2; r = 0.1; K = 52.1; BlackScholes( K*exp(-r*T),K,r,T,sigma)
Symulacje Monte Carlo ceny instrumentu pochodnego
Wzory Blacka-Scholesa umożliwiają bardzo szybkie i dokładne obliczenie ceny opcji. Oczywiście w praktyce oczywiście dochodzi element eksperymentalnego wyznaczenia volatility, czyli współczynnika zmienności ceny instrumentu bazowego. Stosowalność wzorów Blacka-Scholesa jest jednak ograniczona do opcji Europejskich, których przypadku możliwość wykupu/sprzedaży opcji dokładnie w terminie wygaśnięcia umożliwia otrzymanie rozwiązania analitycznego. W innych przypadkach, np. gdy dopuścimy sprzedaż w dowolnej chwili przed wygaśnięciem, podejście analityczne staje się niemożliwe. W takich przypadkach popularną i skuteczna metoda jest symulacja numeryczna przebiegu czasowego instrumentu bazowego i wyliczenie odpowiednich statystyk z otrzymanych trajektorii.
Znamy już algorytm generujący geometryczny ruch Browna
clear all close all N=100; M=100000; T=5.1; h=T/N; S0=55; sigma=0.4; K = 50; r = 0.08; x=zeros(M,N); x(:,1)=S0*ones(M,1); for i=2:N x(:,i)=x(:,i-1) + r*x(:,i-1)*h + sigma*sqrt(h)*x(:,i-1).*normrnd (0,1,M,1); endfor call_MC=exp(-r*T)*mean( max(x(:,N)-K,0) ) put_MC=exp(-r*T)*mean( max(K-x(:,N),0) ) [call,put]=BlackScholes(S0,K,r,T,sigma) error_rel_call=abs(call_MC-call)/call_MC*100 error_rel_put=abs(put_MC-put)/put_MC*100