基于交易成本和红利的欧式期权二叉树模型及算法
2018-10-19任芳玲蒋登智
任芳玲,蒋登智
(延安大学数学与计算机科学学院, 陕西 延安 716000)
期权,意为选择权,近年来已成为金融市场最重要的衍生产品,以其灵活多变性备受投资者青睐,因此,有关期权定价问题的模型和方法探讨就成为数理金融领域的热点问题之一。期权定价的常用方法包括B-S期权定价模型和数值计算模型,其中B-S期权定价模型虽有优点,但其复杂的微分方程推导过程难以为金融务实者接受。在数值计算模型中,最为突出的即为二叉树模型,此模型在1979年由Cox等[1]提出,给出了一种简单的离散时间下的期权定价方法,被称为Cox-Ross-Rubinstein二项式期权定价模型,由于其简单直观的构造,不仅可以为欧式期权定价,也可为美式期权定价,应用相当广泛,现已成为期权定价的基本方法之一。
然而,随着经典B-S期权定价模型在实际金融市场中的不断检验和修正,基本的二叉树模型已不能很好地解决相关问题的数值计算,所以许多学者对此问题进行了进一步研究,张铁[2]给出了二叉树模型参数的不同确定方法,刘洪久等[3-4]给出了不确定、随机条件下二叉树期权定价模型,Han等[5-7]都对二叉树模型的参数值进行了估计。Muzzioli等[8]给出了股票价格的行为模式在分数布朗运动下的分数二叉树模型。然而交易成本和红利已经作为常用修正参数被引入到实际金融市场中,但关于此方面的数值计算方法并不多见,万成高等[9]曾将二叉树模型扩展到包含红利的情况,但很少将交易成本和红利共同融入二叉树期权定价模型中。
本文在前人研究的基础上,从引入红利率和交易成本比例以及红利数额和交易成本数额两种情况出发,在支付一次红利和一次交易成本的前提下,推导出含有交易成本和红利的欧式期权的二叉树图法,使其更具有实际意义,也解决了修正后的部分欧式期权的定价问题。但由于二叉树图法在计算上的复杂性,故而使用起来并不方便,对此许多学者尝试了矩阵算法[10-11]研究,以此借助于C语言等程序语言[12-13]去实现。本文在引入交易费和红利的基础上,利用二叉树模型以及矩阵算法和MATLAB算法实现,最后通过简单实例,对文中模型进行应用和检验,体现了此方法的优越便捷性。
1 二叉树期权定价模型
二叉树期权定价模型是将期权的有效期划分为若干时间段,在每个时间段内分析期权价格的上下波动情况,从而对有效期内期权定价进行预测的方法。令期权的有效期为[0,T],将有效期等分为N个长度为Δt的小段,每个时间段为
二叉树期权定价模型是一种特殊的二叉树,即该二叉树共有N层,根结点(0时刻)表示原始股票价格S;第iΔt(1≤i≤N)时刻,即第i层中共有i+1个结点,其第j(0≤j≤i)个点(i,j)表示iΔt时刻股票的一个可能价格,即
Si,j=Sujdi-j,
据此可将期权在有效期内的价格波动情况用图1所示的二叉树表示。
图1 期权定价的二叉树图Fig.1 Binomial tree diagram of option pricing
现在考虑一个不支付红利和交易费用的欧式看跌期权,fi,j表示iΔt时第j个结点的欧式期权价值。那么在期权的到期日T,欧式看跌期权的价值为
fN,j=max(X-SujdN-j,0),j=0,1,2,…,N,
(1)
其中,X为到期日期权的执行价格。
从结点(i,j)向(i+1)Δt时的结点(i+1,j+1)移动的概率为p,而移动到结点(i+1,j)的概率为1-p。在期权不提前执行的情况下,根据风险中性定价公式有:
fi,j=e-rΔt[pfi+1,j+1+(1-p)fi+1,j],
(2)
其中0≤i≤N-1,0≤j≤i。
在期权价格公式(1)、(2)中,普遍使用的二叉树模型参数为[10]:
(3)
2 已知红利率和交易成本收取比例下二叉树模型的建立及算法
假设在期权有效期期间支付的红利数量和支付时刻可以确定地预测,在股权除息这一时间点,股票价格将下降,下降幅度是每股支付的红利的数量。为了便于讨论,“红利”一词指在除息日由于支付红利而导致的股票价格下降的减少量;交易成本可以看作是投资者因买卖股票而产生的直接费用,一般由股票多头支付,假设交易费以交易额的固定比例k来收取。同样假设在期权有效期内支付的交易成本数量和支付时刻也是可以确定地预测,在股权除息这一时点,股票价格将上升,上升幅度是每股支付的交易成本的数量。在这里需要注意的是,由于存在红利和交易成本,会引起股票价格的浮动。根据现实交易规律,由交易成本引起的股票价格上升的幅度要比红利引起的股票价格下降的幅度小。
假设在未来某一确定时间将支付一次红利和交易成本,二叉树图的形状如图2所示,分析方法与刚才描述的方法类似。如果时刻iΔt在除息日之前,则树图上这些结点相应的股票价格为:Sujdi-j,j=0,1,2,…,i。其中u和d与(3)式中的定义相同。
图2 支付已知红利率和交易成本比例的股票的二叉树图Fig.2 Stock’s binomial tree diagram of known dividend rate and transaction costs ratio
如果时刻iΔt在除息日之后,则树图上这些结点的股票价格为:
S(1-δ+k)ujdi-j,j=0,1,…,i,
其中,δ是红利率,如果在期权有效期内有多个已知红利率时,可以进行同样处理。若δi为0时刻之间所有除息日的总红利支付率,则iΔt时刻结点的相应的股票价格为:
S(1-δi+k)ujdi-j,j=0,1,…,i。
对上述模型利用矩阵形式计算可得如下定理1:
定理1 设按已知红利率δ支付一次红利,且按交易额的固定比例k收取一次交易成本的欧式期权在tN时刻期权的N+1种可能价值分别为
fN,1,fN,2,…,fN,N+1。
令行矩阵F=(fN,1,fN,2,…,fN,N+1),并设N+1阶下三角矩阵
则在当前时刻t0期权的价值
fN,j=max(S(1-δ+k)ujdN-j-X,0),j=0,1,2,…,N。
若期权为看跌期权,则
fN,j=max(X-S(1-δ+k)ujdN-j,0),j=0,1,2,…,N。
证明:由二叉树方法易知tN-1时刻在结点(N-1,1)处的期权价值为
fN-1,1=e-rΔt[pfN,1+(1-p)fN,2]=e-rΔt(fN,1,fN,2,…,fN,N+1)(p,1-p,0,…,0)T。
而在结点(N-1,2)处的期权价值为
fN-1,2=e-rΔt[pfN,2+(1-p)fN,3]=e-rΔt(fN,1,fN,2,…,fN,N+1)(0,p,1-p,0,…,0)T。
依此类推知在结点(N-1,N)处的期权价值为
fN-1,N=e-rΔt[pfN,N+(1-p)fN,N+1]=e-rΔt(fN,1,fN,2,…,fN,N+1)(0,0,…,p,1-p,)T。
即有
(fN-1,1,fN-1,2,…,fN-1,N,0)=e-rΔtFG。
再考虑tN-2时刻,对于j=1,2,…,N-1在结点(N-2,j)处期权的价值应为
fN-2,j=e-rΔt[pfN-1,j+(1-p)fN-1,j+1]
=e-rΔt(fN-1,1,fN-1,2,…,fN-1,N,0)(0,…,p,1-p,0,…,0)T。
结合式( 1) 有
(fN-2,1,fN-2,2,…,fN-2,N-1,*,0)=e-rΔt(fN-1,1,fN-1,2,…,fN-1,N,0)G=e-2rΔtFG2。
继续下去可得(f0,*,…,*,0)=e-NrΔtFGN。
以上证明过程中出现的*表示一些不在我们考虑范围内的实数,事实上容易知道
fN,1,fN,2,…,fN,N+1,
可由公式fN,j=max(S(1-δ+k)ujdN-j-X,0)确定;若所考虑的期权为欧式看跌期权,则F由公式fN,j=max(X-S(1-δ+k)ujdN-j,0)确定。
定理1是在假设只支付一次红利和收取一次交易成本的情况下给出的,如果在期权的有效期内按已知红利率δ支付多次红利的话,只需按支付红利的次数计算出新的fN,j即可。
根据二叉树期权定价模型和上述矩阵算法,可以编写出存在红利率和交易成本比例的欧式看涨期权价格的MATLAB程序如下:
function[price,lattice]=latticeecall(S,X,r,q,k,T,sigma,N)
deltaT=T/N;u=exp(sigma*sqrt(deltaT));d=1/u;
p=(exp((r-q)*deltaT)-d)/(u-d);lattice=zeros(N+1,N+1);
for j =0:N
lattice(N+1,j+1)=max(0,S*(1-q+k)*(u^j)*(d^(N-j))-X);
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);
注:为了方便书写,此程序中的红利率用q表示。
3 已知红利数额和交易成本数额下二叉树模型的建立及算法
若事先已知红利数额和交易成本数额。假设股票的标准差σ是常数,则二叉树图的形状如图3所示。树枝不再重合,这意味着如果股票支付多次红利,所要估算的结点的数量可能变得很大。假如只有一次红利和交易成本。除息日τ在lΔt到(l+1)Δt之间,而且红利数额为D,交易成本数额为H。当i≤l,在iΔt时刻,树图中结点对应的股票价格为:
Sujdi-j,j=0,1,2,…,i。
与原来一样,当i=l+1时,树图中结点对应的股票价格为:
Sujdi-j-D+H,j=0,1,2,…,i。
当i=l+2时,树图中结点对应的股票价格为:
(Sujdi-1-j-D+H)u和 (Sujdi-1-j-D+H)d,
其中j=0,1,2,…,i-1,因此将有2i而不是i+1个结点。在(l+m)Δt时刻,将有m(l+1)个而不是l+m+1个结点。
图3 已知红利数额和交易成本数额的二叉树图Fig.3 Binomial tree diagram of known bonus amount and transaction costs amount
假设股票价格由两部分组成:一部分是不确定的,而另一部分是期权有效期内所有未来红利和交易成本的现值。同样假设在期权有效期内只有一个除息日τ,而且lΔt≤τ≤(l+1)Δt。在iΔt时刻,股价不确定部分的价值S*为:
S*=S,iΔt>τ,
S*=S-(D-H)e-r(τ-iΔt),iΔt≤τ。
设σ*为S*的标准差,假设σ*(而不是σ,一般来说,σ*>σ)是常数。用σ*代替(3)式中的σ可计算出参数p、u和d,这样就可用通常的方法构造模拟S*的二叉树图了。通过把未来红利和交易成本的现值加在每个结点的股票价格上,就会使原来的二叉树图转化为另一个模拟S的二叉树图。在iΔt时刻,当iΔt≤τ时,这个树图上的结点所对应的股票价格为:
S*ujdi-j+(D-H)e-r(τ-iΔt),j=0,1,2,…,i。
当iΔt>τ时,这个树图上的结点所对应的股票价格为:
S*ujdi-j,j=0,1,2,…,i。
该方法成功地恢复了树枝重合的状态,这样在iΔt时刻就只有i+1个结点了。此方法可以推广到处理多个红利的情况。
根据以上方法,我们可以恢复树枝重合的状态,而且这种方法还可以直接推广到处理支付多次红利和交易成本的情况。最为重要的是,由于树枝的重合,我们仅须对定理1做适当修正, 就可以得出以下针对按已知红利数额支付红利,和按已知交易成本数额收取交易成本的欧式期权的二叉树模型的矩阵形式算法。
定理2 设按已知红利数额D支付一次红利,按已知交易成本数额H收取一次交易成本的欧式期权在tN时刻期权的N+1 种可能价值分别为
fN,1,fN,2,…,fN,N+1。
行矩阵F和N+1阶下三角矩阵G定义与定理1相同,则在当前时刻t0期权的价值
若期权为看跌期权,则
根据二叉树期权定价模型和上述矩阵算法,可以编写出存在红利数额和交易成本数额的欧式看涨期权价格的MATLAB程序如下:
function[price,lattice]=latticeecall2(S,X,r,D,H,T,τ,sigma,N)
deltaT=T/N;u=exp(sigma*sqrt(deltaT));d=1/u;
p=(exp((r-q)*deltaT)-d)/(u-d);lattice=zeros(N+1,N+1);
(d^(N-j))+(D-H)exp(-r(τ-i*deltaT))*((i*deltaT)<=τ)
for j=0:N
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);
4 实例验证
例1:考虑一个有效期为5个月的股票看跌期权,预计在期权有效期内该股票支付一次$2.06红利和收到$2.06交易成本。初始的股票价格是$50,执行价格是$50,无风险利率为每年10%,波动率为每年40%,除息日是在三个半月的那天。
用我们通常的符号是S=50,X=50,r=0.10,σ=0.40,T=0.416 7。为了构造一个二叉树,假设我们把期权的有效期分成5个时间段,每段长1个月(0.083 3年),则Δt=0.083 3。运用(3)式可得:
我们首先构造一个树图(如图4)来模拟S*,S*为股票价格减去期权有效期内未来红利的现值,再加上期权有效期内未来交易成本的现值。首先,红利的现值是:2.06e-0.2917×0.1=2.00,交易成本的现值是:2.06e-0.2917×0.1=2.00。
因此S*的初始值为$52,假设S*的波动率为每年40%,则图4给出了一个S*的二叉树图。每个结点上价格上升的概率是0.507 6,下降的概率是0.492 4。按通常的方法向后推导就可得到期权的价格是$4.43。
图4 例1中期权定价的二叉树图Fig.4 Binomial tree diagram of option pricing in Example 1
例2:已知一个5个月期的欧式看涨期权,期权是在布朗运动作用下,设股票初始价格为50元,执行价格为50元,无风险利率为每年10%,股票价格波动率为每年40%,交易费比例为2%,时间步长为一个月,考虑连续支付红利,红利率为10%,计算欧式看涨期权价格c。
解:已知S=50,X=50,T=5/12,r=0.1,σ=0.4,k=0.02,q=0.1,δt=1/12。
根据本文编写程序,调用函数c=latticeecall(50,50,0.1,0.1,0,0.4,0.02,1/12,5/12,5),可得欧式看涨期权价格为c=5.799 3。
5 结论
本文构造的新型二叉树模型既克服了原有二叉树无交易成本模型的缺点,又有很高的计算精度,且可以利用矩阵算法和MARTLAB算法方便解出,可应用于各种美式期权的定价。该模型还可推广到三叉树等更高阶的树图中。