1 / 26

Volatility

Volatility. Downloads. Today’s work is in: matlab_lec04.m Functions we need today: simsec.m, simsecJ.m, simsecSV.m Datasets we need today: data_msft.m. Homework 1. function r=simsec(mu,sigma,T); x=randn(T,1); for t=1:T; r(t,1)=exp(mu+sigma*x(t))-1; end;.

jirair
Download Presentation

Volatility

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Volatility

  2. Downloads • Today’s work is in: matlab_lec04.m • Functions we need today: simsec.m, simsecJ.m, simsecSV.m • Datasets we need today: data_msft.m

  3. Homework 1 function r=simsec(mu,sigma,T); x=randn(T,1); for t=1:T; r(t,1)=exp(mu+sigma*x(t))-1; end;

  4. Simulate Simple Process >>data_msft; >>subplot(2,1,1); hist(msft(:,4),[-.2:.01:.2]); >>sigma=std(msft(:,4)); >>mu=mean(msft(:,4))-.5*sigma^2; T=length(msft); >>r=simsec(mu,sigma,T); >>disp([mean(msft(:,4)) mean(r)]); >>disp([std(msft(:,4)) std(r)]); >>disp([skewness(msft(:,4)) skewness(r)]); >>disp([kurtosis(msft(:,4)) kurtosis(r)]); >>subplot(2,1,2); hist(r,[-.2:.01:.2]);

  5. Compare simulated to actual • Mean, standard deviation, skewness match well • Kurtosis (extreme events) does not match well • Actual has much more mass in the tails (fat tails) • This is extremely important for option pricing! • CLT fails when tails are “too” fat

  6. ModellingVolatility • How to make tales fatter? • Add jumps to log normal distribution to make tails fatter • Jumps also help with modeling default • Make volatility predictable: • Stochastic volatility, governed by state variable • ARCH process (2003 Nobel prize, Rob Engle)

  7. Jumps • R(t)=exp(µ+σ*X(t)+J(t)) • J(t)=J1 with p1, J2 with p2, 0 with 1-p1-p2 >>nlow=sum(msft(:,4)<-.1); >>nhigh=sum(msft(:,4)>.1); >>[T a]=size(msft); >>p1=nlow/T; p2=nhigh/T; >>J1=-.15; J2=.15;

  8. Simulating Jumps function r=simsecJ(mu,sigma,J1,J2,p1,p2,T); x=randn(T,1); y=rand(T,1); for t=1:T; if y(t)<p1; J(t)=J1; elseif y(t)<p1+p2; J(t)=J2; else J(t)=0; end; r(t)=exp(mu+sigma*x(t)+J(t))-1; end;

  9. Simulating Jumps >>r=simsecJ(mu,sigma,J1,J2,p1,p2,T); >>disp([mean(msft(:,4)) mean(r)]); >>disp([std(msft(:,4)) std(r)]); >>disp([skewness(msft(:,4)) skewness(r)]); >>disp([kurtosis(msft(:,4)) kurtosis(r)]); >>subplot(2,1,2); hist(r,[-.2:.01:.2]); %Note that kurtosis of simulated now matches actual

  10. Stochastic Volatility • Suppose volatility was not constant, but changed through time and was predictable • This is very realistic, volatility tends to be much higher during recessions than expansions; high volatility tends to predict high volatility • That is sigma is replaced by sigma(t)=f(Z(t)) where Z(t) is a random variable

  11. Moving Average • When we have a long time series of data we can calculate the local average a few points around each point in time, this is called a moving average • We will write code to calculate a moving average and use it to analyze stochastic volatility (to be used later as well)

  12. Moving Average >>T1=floor(T/7); ma=zeros(T1,2); >>for i=1:T1; in=(i-1)*7+1:(i-1)*7+7; ma(i,1)=std(msft(in,4)); ma(i,2)=mean(msft(in,4).^2); for j=1:7; t=(i-1)*7+j; ma(i,2)=ma(i,2)+(msft(t,4)^2)/7; end; end; >>disp(corrcoef(ma(:,1),ma(:,2)));

  13. >>subplot(3,1,1); plot(ma(:,1)); >>subplot(3,1,2); plot(ma(:,2)); >>WN=exp(randn(T1,1)); subplot(3,1,3); plot(WN);

  14. regress() • regcoef=regress(Y,X) regresses vector time series Y on multiple time series in X • regcoef contains the regression coefficients • Y must be Tx1, X must be TxN where N is the number of regressors • If you want a constant in your regression, first column of X must be all 1’s • ie y(t)=A+B*x(t), than Y=[y(1); y(2); … y(T)], X=[1 x(1); 1 x(2); … 1 x(T)] • [a1 a2]=regress(Y,X) gives coefficients in a1, and 95% bounds in a2 • [a1 a2 a3 a4 a5]=regress(Y,X) gives coefficients in a1, 95% bounds in a2, R2 in a5(1)

  15. No predictability in WN >>X=[ones(T1-1,1) WN(1:T1-1,1)]; >>Y=WN(2:T1,1); >>[regcoef sterr a3 a4 rsq]=regress(Y,X); >>disp([regcoef sterr]); • Note regcoef(2) is close to zero and sterr(2,:) is not significant disp(rsq(1)); • Note, R2 is close to zero

  16. Predictability in Volatility >>X=[ones(T1-1,1) ma(1:T1-1,2)]; >>Y=ma(2:T1,2); >>[regcoef sterr a3 a4 rsq]=regress(Y,X); >>disp([regcoef sterr]); %Note regcoef(2) is positive and significant! >>disp(rsq(1)); %Note, R2 is 14.86%! %Even with a simple linear model we get %predictability! Can you think of better models?

  17. Scatter Plot >>subplot(2,1,1); plot(WN(1:T1-1,1),WN(2:T1,1),'.'); >>subplot(2,1,2); plot(ma(1:T1-1,2),ma(2:T1,2),'.');

  18. Discrete, Markov volatility • sigma(t)=.015 or .025 (daily) • When sigma(t)=.015, it will be .015 with probability .9 tomorrow, and will be .025 with probability .1 tomorrow • When sigma(t)=.025, it will be .025 with probability .9 tomorrow, and will be .015 with probability .1 tomorrow • Transition probability matrix: [.9 .1; .1 .9] • This is a 2-state Markov process, it is predictable, when sigma(t) is high, it is likely to stay high

  19. AR(1) Volatility • Let Z(t) be a normal rv • Let W(t)=ρSW(t-1)+σSZ(t) • This is called an AR(1) process, as you can see it is predictable, W(t) is expected to be high when W(t-1) is high • Let σ(t)=µS+W(t) • Do you see any problems with this process? • If σS=0 than σ(t)=µS so constant vol • If ρS=0 than σ(t) is i.i.d. and there is no persistence in vol

  20. Simulating Stochastic Vol function r=simsecSV(mu,muS,J1,J2,p1,p2,rho,sigmaS,T); x=randn(T,1); y=rand(T,1); z=randn(T+1,1); W(1)=0; J=zeros(T,1); r=zeros(T,1); for t=1:T; W(t+1)=rho*W(t)+sigmaS*z(t+1); sigma(t)=abs(muS+W(t)); if y(t)<p1; J(t)=J1; elseif y(t)<p1+p2; J(t)=J2; else J(t)=0; end; r(t)=exp(mu+sigma(t)*x(t)+J(t))-1; end;

  21. Moving Averageof Simulated sigmaS=.0025; rho=.96; r=simsecSV(mu,sigma,J1,J2,p1,p2,rho,sigmaS,T); T1=floor(T/7); masim=zeros(T1,2); for i=1:T1; in=(i-1)*7+1:(i-1)*7+7; masim(i,1)=std(r(in,1)); masim(i,2)=mean(r(in,1).^2); for j=1:7; t=(i-1)*7+j; masim(i,2)=masim(i,2)+(r(t,1)^2)/7; end; end;

  22. >>X=[ones(T1-1,1) masim(1:T1-1,1)]; Y=masim(2:T1,1); >>[regcoef sterr a3 a4 rsq]=regress(Y,X); >>disp([regcoef sterr]); disp(rsq(1)); >>subplot(2,1,1); plot(ma(:,1)) >>subplot(2,1,2); plot(masim(:,1));

  23. OptionalHomework (2) • Use the function from Homework (1) to simulate Microsoft daily returns for a period of a year many times, over and over again • Each time record the total return for the year • This is called Monte-Carlo simulation • How likely is it that Microsoft loses 30% in one year? How likely is it to lose 40%? • Separate the worst 5% of years from the next 95%. What is the value lost at the 5% break? This is called Value at Risk, it is a commonly used risk measure • How sensitive is Value at Risk to jump parameters? Jump events are quite rare, do you think they are easy to estimate?

  24. OptionalHomework (3) • Extend the model by adding stochastic volatility, try both the discrete Markov and the AR(1) process (AR(1) case done in class in file simsecSV.m) • How does this change kurtosis and likelyhood of tail events? • Plot a time series of squared Microsoft returns and squared simulated returns (with and without stochastic volatility) • Does it look like high times are followed by high times in the data? In the model with no stochastic vol? In the model with stochastic vol? • Do you see any problems with the AR(1) formulation for volatility? • Does Value at Risk change during high volatility and low volatility times?

More Related