%------------------------------- % SIMULACIA WIENEROVHO PROCESU %------------------------------- T=1; % do casu T dt=0.001; % casovy krok dt t=(0:dt:T); % vektor casov, v ktorych generujeme hodnoty procesu n=length(t); w(1)=0; % Wienerov proces zacina z nuly for i=1:n-1 % prvu hodnotu mame, potrebujeme zvysnych n-1 dw=sqrt(dt)*randn; % prirastok dw; randn ~ N(0,1) => dw ~ N(0,dt) w(i+1)=w(i)+dw; % nova hodnota = povodna + prirastok end; plot(t,w); % vykreslime priebeh
%---------------------------------- % SIMULACIA WIENEROVHO PROCESU II. %---------------------------------- T=1; % do casu T dt=0.001; % casovy krok dt t=(0:dt:T); % vektor casov, v ktorych generujeme hodnoty procesu n=length(t); dw=sqrt(dt)*randn(n-1,1); % vektor prirastkov - nezavisle N(0,dt) w=[0;cumsum(dw)]; % zaciname z nuly, dalej kumulativne sucty dw plot(t,w); % vykreslime priebeh
Ak je parameter nulový, grafom je priamka. Pre nenulovú hodnotu
sa k tomuto lineárnemu trendu pridávajú náhodné fluktuácie.
s=load('goog.txt'); dt=1/252; % denne data, cas sa v modeli pocita v rokochPriebeh ceny je nasledovný:
n=length(s); for i=1:n-1 v(i)=log(s(i+1)/s(i)); end; % alebo vektorovo namiesto cyklu: % v=log(s(2:n)./s(1:n-1));
miDelta=mean(v); % odhad mi*dt s2Delta=var(v); % odhad (sigma^2)*dt
mi=miDelta/dt; % odhad parametra mi sigma=sqrt(s2Delta/dt); % odhad parametra sigma
>> mi mi = 0.3225 >> sigma sigma = 0.2877
% PARAMETRE mi=0.35; % parameter z geom. BP sigma=0.30; % parameter z geom. BP s0=150; % aktualna cena akcie E=175; % expiracna cena opcie tau=1/2; % tau = T-t = cas do expiracie, t.j. pol roka r=0.01 % bezrizikova urokova miera, t.j. 1 percento
Z=randn; % N(0,1) wT=sqrt(tau)*Z; % Wienerov proces v case T % v RN miere, preto "r-0.5*sigma^2" namiesto "mi" sT=s0*exp((r-0.5*sigma^2)*tau+sigma*wT); % akcia v case T vT=max(0,sT-E); % opcia v case T
N=10000; % pocet simulacii sum=0; % pomocna premenna na vypocet priemeru for i=1:N % ------------------------- % z predchadzajuceho bodu: Z=randn; wT=sqrt(tau)*Z; sT=s0*exp((r-0.5*sigma^2)*tau+sigma*wT); vT=max(0,sT-E); % ------------------------- sum=sum+vT; priemer=sum/i; % priemer z prvych i hodnot cena(i)=exp(-r*tau)*priemer; % aprox. na zaklade prvych i hodnot end;
plot(cena); hold on; vPresne=4.8572; plot(vPresne*ones(1,N),'r');Ukážka výstupu: