实验19 期权定价的二叉树方法
19. 1 实验概述
本实验首先介绍了二叉树方法的来源和主要理论基础,然后给出期权的二叉树定价方法的基本过程和MATLAB7. 0实现的过程。
19. 2 实验目的
(1)了解二叉树的定价机理;
(2)掌握用MATLAB7. 0生成股票价格的二叉树格子方法;
(3)掌握欧式期权和美式期权的二叉树定价方法。
19. 3 实验工具
MATLAB 7. 0。
19. 4 理论要点
构造二叉树图(Binomial Tree)是期权定价方法中最为常见的一种。这个树图表示了在期权有效期内股票价格可能遵循的路径。二叉树定价方法与风险中性定价理论是紧密联系的。Cox, Ross & Rubinstein (1979)首次提出了构造离散的风险中性概率可以给期权定价,在此基础上他们给出了二叉树定价方法。
1)一个简单的例子
假设当前(3月份)股票的价格So =50元,月利率是25%。 4月份股票价格有两种可能:S高=100元,S低=25元。有一份看涨期权合约,合约约定在4月份
可以以50元价格买进一股股票。现在考虑一个投资组合,进行几项操作:以价格
C卖出3份看涨期权合约;以50元购入2股股票;以25%的月利率借人40元现金,借期为一个月。
根据上述组合,我们可以得到以下到期收益分布表,如表19. 1所示。
表19.1 投资组合的到期收益分布表
四月份
三月份 S低=25元 S高=100元
卖出3份看涨期权合约 3C 0 -150
买人两股股票 -100 50 200
借人现金 40 -50 -50
总计 0 0 0
由一价定律3C-100+40=0,可得C= 20元,即为期权的价格。这个例子说明,可以用一个相当简单的方法为期权定价,唯一需要做的是假设对投资者而言不存在套利机会。我们可以通过某种方式构造一个股票和期权的组合,使得在4月份该组合的价值是确定的。于是我们可以说该组合无风险,它的收益率一定等于无风险收益率。二叉树方法正是基于上述思想构造了二项分布下的风险中性概率。
2)二叉树模型
考虑一个不支付红利的股票期权价格估值。我们把期权的有效期分为很多很小的时间间隔 Δt。假设在每一个时间段内股票价格从开始的价格S以概率p上升到Su,以概率1-p下降到Sd,其中,u>1,O<d<l。也就是说在任何一个时期,股票都有两个可能的价值,如图
Su4
Su Su3
p Su2 Su2 Su Su
S
1-p Sd2 Sd2 Sd Sd3 Sd4 19. 1所示。
图19. 1股票价值变化的可能性 图19. 2 二叉树模型 例如,我们假定将期权的有效期分成4个时期,在任何一个时期,股票都有两种可能的价值,即每个时间段都假定是一个两状态过程。当N=4时,我们有以下结点图19. 2。
e?r?t?d在风险中性概率Q下,P= u?d
且有,f0=e?r?t[pfu+(1-p)fd]
其中fu和fd是在△t期后的期权可能的价格分布,分别为期权价格高点和低点。
令u=1/d,根据股票回报率的方差?2?t,我们有u=e??t和d=e???t
若每个股票价格路径的样本点个数为N+1,那么欧式看涨期权的到期收益的样本路径为:f N, = max [0,SujdN-j-X], j=0,1,…,N
向后递归可得:fij=e???t[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,e??
i=N-1,N-2,…,0;j=0,1,…i
[pfi+1,j+1+(1-p)fi+1,j]}。
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)
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)=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. 614 5,如图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)]e?r?t
在(S, t)处进行泰勒展开,可以得到:
?f?f122?2f(S,t)?rS(S,t)??S(S,t)??(?t)?0 2?t?S2?S
当△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);
for i=1:N
LatticeC(i)=LatticeEurCall(S0,E,r,T,sigma,i); end
plot(1:N,ones(1,N)*BlsC);
hold on;
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);
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)=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,e?r?t[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);
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);
假设存在有效期为1年的美式看跌期权,股票初始价格为50,利率为0. 03,波动率为0. 2,执行价格为60,且令结点数N为100,在命令窗口中输人:
LatticeAmPut ( 50,60,0. 03,1,0. 2,100),
得到美式看跌期权的价格为10. 3056。比较标准Black-Scholes欧式期权定价公式的结果9. 610 0,显然美式期权的价格要大。
此外,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. 305 6。这与我们用LatticeAmPut ( )运行的结果是一致的。
19. 6 实验报告
在实验报告的撰写上,建议按照标准的实验参考格式。主要应包括:实验室名称、实验项目名称、实验原理、实验目的、实验内容、实验器材、实验步骤、实验数据及结果分析、实验结论等方面,可根据实际需要进行灵活调整。要求实验结论严谨、可靠、可验证,格式规范、工整。
19. 7 习题
(1)考虑如何编写百慕大期权定价的二叉树代码。
(2)利用二叉树方法计算美式看跌期权的价格,其中期权所依附的股票价格为50元,波动率为30%,无风险利率为10%,期权有效期限为14个月,执行价格为66元。