## MATLAB期权数值解算法及股票预测模型(6)

function [price,lattice]=LatticeEurCall(S0,E,r,T,sigma,N) deltaT=T/N; u=exp(sigma*sqrt(deltaT)); d=1/u; p=(exp(r*deltaT)-d)/(u-d); lattice=zeros(N+1,N+1); for i=0:N end for j=N-1:-1:0 for i=0:j lattic

function [price,lattice]=LatticeEurCall(S0,E,r,T,sigma,N)
deltaT=T/N;
u=exp(sigma*sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT)-d)/(u-d);
lattice=zeros(N+1,N+1);
for i=0:N
end
for j=N-1:-1:0
for i=0:j
lattice(i+1,N+1)=max(0,S0*(u-i)*(d-(N-i))-E);
lattice(i+1,j+1)=exp(-r*deltaT)*(p*lattice(i+2,j+2)+(1-p)*lattice(i+1,j+2));
end
end
price=lattice(1,1);

function[price,lattice]=LatticeEurPut(S0,E,r,T,sigma,N)
deltaT=T/N;
u=exp(sigma*sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT)-d)/(u-d);
lattice=zeros(N+1,N-1);
for j=0:N
lattice(N+1,j+1)=max(E-S0*(u^j)*(d^(N-j)),0);
end
for i=N-1:-1:0
for j=0:i
lattice(i+1,j+1)=exp(-r*deltaT)*(p*lattice(i+2,j+2)+(1-p)*lattice(i+2,j+1));
end
end
price=lattice(1,1)
例2.2.1  考虑一个标的资产价格是\$100, 行权价格是\$100, 无风险年利率是2.5％, 年波动率是25％, 权利期间还有1年的欧式看涨期权．

根据二叉树法的基本原理计算期权价格, 步骤如下：
①设定时间步数和时间步长．将丁一￡分成i00等份, 步长为
②计算二义树的相关参数

③构建二叉树, 计算标的资产价格；
④通过二叉树倒推汁算欧式看涨期权的价格．
注  由于是欧式期权．故不需要在每个结点检查行权．
//程序调用；
>> LatticeEurCall(100,100,0.025,1,0.25,100) 源￥自%六^^维*论-文+网=www.lwfree.cn

ans =

1.1610e+005
>> LatticeEurPut(100,100,0.025,1,0.25,100)

price =  8.6145   8.6145
(2) 美式期权的定价
美式期权存在着提前行权问题, 因此要在上述欧式期权定价程序的基础上增加检查提前行权的语句．下面是考虑到提前行权问题后而给出的程序．

function[price,lattice]=LatticeAmCall(S0,E,r,T,sigma,N)
deltaT=T/N;
u=exp(sigma*sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT)-d)/(u-d);
lattice=zeros(N+1,N+1);
for j= 0:N
Lattice(N+1,j+1)= max(0,S0*(u^j)*(d^(N-j))-E);
end
for i=N-1:-1:0
for j =0:i
lattice (i+1,j+1)=max(exp(-r*deltaT)*(p*lattice(i+2,j+2)+(1-p)*lattice(i+2,j+1)),S0*u^j*d^(i-j)-E);
end
end
price=lattice(1,1)

function[price,lattice]=LatticeAmPut(S0,E,r,T,sigma,N)
deltaT=T/N;
u=exp(sigma*sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT)-d)/(u-d);
lattice=zeros(N+1,N+1);
for j= 0:N
Lattice(N+1,j+1)= max(0,E-S0*(u^j)*(d^(N-j)));
end
for i=N-1:-1:0
for j =0:i
lattice (i+1,j+1)=max(E-S0*u^j*d^(i-j),exp(-r*deltaT)*(p*lattice(i+2,j+2)+(1-p)*lattice(i+2,j+1)));
end
end
price=lattice(1,1)

------分隔线----------------------------