各位高手,大家好!
小妹在作毕业论文时遇到点问题,向大家请教:
在MATLAB中基于GARCH模型得到的美式期权价格,与基于固定波动率得到期权价格的差距很大,瞑思苦想,都不知道程序错在哪里,请指教!
我的程序是:(期权定价时采用的最小二乘蒙特卡罗模拟)
close all
clear all
% 用最小二乘蒙特卡洛模拟美式看涨期权定价
S0=90;
% SO 股票初始价格
K=100;
% K 股票执行价格
r=.04;
% r 无风险利率
D=0;
% D 红利
T=1;
% T 到期时间
dt=1/1000;
sigma=.2 ;
% 标的资产波动率
M=2000;
% M 模拟路径
N=T/dt;
% N 模拟步
%GARCH(1,1)
omega=4.0977e-006;
alpha=0.10331;
bita=0.88872;
C=0.00027838;
H=zeros(M,N);
Y=zeros(M,N);
SPOT=zeros(M,N);
H(:,1)=(omega/(1-alpha-bita))*ones(M,1);
Y(:,1)=zeros(M,1);
e=randn(M,N);
SPOT(:,1)=S0*exp((r-D-.5*sigma^2)*dt*ones(M,1)+sigma*sqrt(dt)*Y(:,1));
for i=2:N;
H(:,i)=omega*ones(M,1)+alpha*(Y(:,i-1).^2)+bita*H(:,i-1);
Y(:,i)=e(:,i).*H(:,i-1);
SPOT(:,i)=SPOT(:,i-1).*exp((r-D-.5*sigma^2)*dt+sigma*sqrt(dt)*Y(:,i));
end
SSit=SPOT;
% 更名
M=size(SSit,1);
% 模拟路径数
MM=NaN*ones(M,N);
MM(:,N)=max(K-SSit(:,N),0);
% 得到到期日美式期权的价值
for tt=N:-1:3;
% 当tt=N时,选择得出在T-1日期权处于实值(in the money)的股票路径:
I=find(K-SSit(:,tt-1)>0);
ISize=length(I);
if tt==N
% 当tt=N时,把T期期权现金流按照无风险利率贴现到T-1期的值:
YY=(ones(ISize,1)*exp(-r*[1:N-tt+1]*dt)).*MM(I,tt:N);
else
YY=sum(((ones(ISize,1)*exp(-r*[1:N-tt+1]*dt)).*MM(I,tt:N))')';
end
% 循环
SSb=SSit(I,tt-1);
XX=[ones(ISize,1),SSb,SSb.^2,SSb.^3];
BB=inv(XX'*XX)*XX'*YY;
% 建立方程 f=a+bs(t-1)+cs^2(t-1)+ds^3(t-1)+u
% 运用最小二乘法得出这个方法的参数估计,得出参数重新代入T-1期的各个路径的股票价格,然后在各个路径比较持有期权的期望收益与执行期权的收益
SSb2=SSit(:,tt-1);
XX2=[ones(M,1),SSb2,SSb2.^2,SSb2.^3];
IStop=find(K-SSit(:,tt-1)>=max(XX2*BB,0));
% 执行期权收益大于持有期权期望收益
ICon=setdiff([1:M],IStop);
% 找出不执行的路径
% 更替收益函数,当值为0时不执行,当值不为0时执行
MM(IStop,tt-1)=K-SSit(IStop,tt-1);
MM(IStop,tt:N)=zeros(length(IStop),N-tt+1);
MM(ICon,tt-1)=zeros(length(ICon),1);
end
YY=sum(((ones(M,1)*exp(-r*[1:N-1]*dt)).*MM(:,2:N))')';
value=mean(YY)
% 该美式期权的价值
sterr=std(YY)/sqrt(M)
% 误差范围
请问程序错在哪里?希望高手来指教!