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)
ans =
1.1610e+005
>> LatticeEurPut(100,100,0.025,1,0.25,100)
price = 8.6145 8.6145
(2) 美式期权的定价
美式期权存在着提前行权问题, 因此要在上述欧式期权定价程序的基础上增加检查提前行权的语句.下面是考虑到提前行权问题后而给出的程序.
程序2.2.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)
例2.2.2 考虑标的资产价格是$100.0, 行权价格是$100.0, 无风险年利率是10%年波动率是25%, 权利期间还有1年的美式看涨期权和美式看跌期权.试用二叉树法计算两者的价格. MATLAB期权数值解算法及股票预测模型(6):http://www.youerw.com/shuxue/lunwen_2320.html