也就是说在任何一个时期,股票都有两个可能的价值,如图19.1所示。
Su4
SuSu3
pSu2Su2
SuSu
SSSS
SdSd
1-pSd2Sd2
SdSd3Sd4
图19.1股票价值变化的可能性图19.2二叉树模型
例如,我们假定将期权的有效期分成4个时期,在任何一个时期,股票都有两种可能的价值,即每个时间段都假定是一个两状态过程。
当N=4时,我们有以下结点图19.2。
在风险中性概率Q下,P=
且有,f0=
[pfu+(1-p)fd]
其中fu和fd是在△t期后的期权可能的价格分布,分别为期权价格高点和低点。
令u=1/d,根据股票回报率的方差
,我们有u=
和d=
若每个股票价格路径的样本点个数为N+1,那么欧式看涨期权的到期收益的样本路径为:
fN,=max[0,SujdN-j-X],j=0,1,…,N
向后递归可得:
fij=
[pfi+1,j+1+(1-p)fi+1,j]
相应欧式看跌期权的到期收益表示:
fN,j=max[0,X-SujdN-j],j=0,1,…,N
美式看涨期权的到期收益与欧式看涨期权是一致的,因此我们下面仅考虑美式看跌期权的格子(Lattice):
fN,j=max[0,X-SujdN-j],j=0,1,…,N
向后递归可得:
max{X-Sujdi-j,
[pfi+1,j+1+(1-p)fi+1,j]}。
i=N-1,N-2,…,0;j=0,1,…i
19.5实验过程
我们首先给出欧式期权的二叉树定价的MATLAB代码,然后给出美式期权的二叉树定价的代码。
19.5.1欧式看涨期权
1)欧式看涨期权的二叉树定价
下面的函数LatticeEurCall()给出了利用二叉树的方法给欧式看涨期权定
%欧式看涨期权的二叉树定价价:
%LatticeEurCall.m
function[price,lattice]=LattceEurCall(SO,E,r,T,sigma,N)
%S0:
股票现价,E:
执行价格,r:
利率,T:
期权的有效期限,sigma:
波动率,N:
结点数
deltaT=T/N;%日期步长
u=exp(sigma*sqrt(deltaT);
d=1/u;
p=(exp(r*deltaT)/(u-d);%凤险中性概率
lattice=zeros(N+1,N+1)
forj=0,N
lattice(N+1,j+1)=max(0,S0*(u^j)*(d^(N-j))-E);
end
fori=N-1:
-1:
0
forj=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=lattice1,1);
假设存在有效期为1年的欧式看涨期权,股票初始价格为50,利率为0.03,波动率为0.2,执行价格为40,且令结点数N为10,在命令窗口中输人:
[price,lattice]=LatticeEurCall(50,40,0.03,1,0.2,10)
就可以得到一个以下三角矩阵表示二叉树的格子以及欧式看涨期权的价格11.6145,如图19.3所示。
2)欧式看涨期权的二叉树的收敛性质
Gox,Ross&Rubinstein(1979)证明了二叉树收敛于Black-Scholes期权定价公式。
取当前时刻为t一△t,在给定参数p,u和d的条件下将二叉树公式:
f(S,t一△t)=[pf(Su,t)+(1-p)f(Sd,t)]
在(S,t)处进行泰勒展开,可以得到:
当△t→0时,二叉树模型收敛于Black-Scholes偏微分方程。
下面给出一个二叉树收敛的直观结果,给出代码CompLatticeBls.m。
%二叉树期权定价的收敛性质
%CompLatticeBls.m
S0=50;
E=50;%执行价格
r=0.1;%年利率
sigma=0.4;%波动率
T=5/12;%有效期限为5个月
N=50;
BlasC=blsprice(S0,E,r,T,sigma);
LatticeC=zeros)1,N);
fori=1:
N
LatticeC(i)=LatticeEurCall(S0,E,r,T,sigma,i);
end
plot(1:
N,ones(1,N)*BlsC);
holdon;
plot(1:
N,LatticeC);
xlabel('N')
ylabel('二叉树价格')
运行CompLatticeBls.m,可以得到图19.4。
从图19.4可以看出,随着区间长度的缩小,二叉树定价收敛于B一S公式确定的价格。
19.5.2欧式看跌期权
与欧式看涨期权类似,我们只需将欧式看涨期权的代码稍做改动即可。
%欧式看跌期权的二叉树定价
%LatticeEurPut.m
function[price,lattice]=LatticeEurPut(S0,E,r,T,sigma,N)
%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);
forj=0:
N
lattice(N+1,j+1)=max(0,E-S0*(u^j)*(d^(N-j)));
end
fori=N-1:
-1:
0
forj=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);
19.5.3美式看跌期权的二叉树定价
根据美式看跌期权的递归公式:
fij=max{X-Sujdi-j,
[pfi+1,j+1+(1-p)fi+1,j]}
i=N-1,N-2,…,0;j=0,1,…,i
可以编写一下代码:
%美式看跌期权的二叉树定价
%LatticeAmPut.m
Function[price,lattice]=LatticeAmPut(S0,E,r,T,sigma,N0
%S0股票现价,E:
执行价格,r:
利率期权的有效期限,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);
forj=0;N;
Lattice(N+1,j+1)=max(0,E-S0*u^j)*(d^(N-j)));
end
fori=N-1:
-1:
0
forj=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);
假设存在有效期为1年的美式看跌期权,股票初始价格为50,利率为0.03,波动率为0.2,执行价格为60,且令结点数N为100,在命令窗口中输人:
LatticeAmPut(50,60,0.03,1,0.2,100),
得到美式看跌期权的价格为10.3056。
比较标准Black-Scholes欧式期权定价公式的结果9.6100,显然美式期权的价格要大。
此外,MATLAB7.0金融工具箱还提供了为美式期权二叉树定价的binprice()函数:
[Stockprice,Optionprice]=binprice(S0,E,r,T,dt,sigma,FLAG,q)
其中,FLAG取1时为看涨期权,取0时为看跌期权。
q为红利率,可缺省。
运行binprice,返回的是股票和期权在每个节点的价值的矩阵。
在命令窗口输人:
[Stockprice,Optionprice]=binprice(50,60,0.03,1,0.01,0.2,0);
和Optionprice(-1,1)
得到美式看跌期权的价格为10.3056。
这与我们用LatticeAmPut()运行的结果是一致的。
19.6实验报告
在实验报告的撰写上,建议按照标准的实验参考格式。
主要应包括:
实验室名称、实验项目名称、实验原理、实验目的、实验内容、实验器材、实验步骤、实验数据及结果分析、实验结论等方面,可根据实际需要进行灵活调整。
要求实验结论严谨、可靠、可验证,格式规范、工整。
19.7习题
(1)考虑如何编写百慕大期权定价的二叉树代码。
(2)利用二叉树方法计算美式看跌期权的价格,其中期权所依附的股票价格为50元,波动率为30%,无风险利率为10%,期权有效期限为14个月,执行价格为66元。