美式看跌期权二叉树数值算法比较
作者:***
来源:《商情》2014年第07期
        【摘要】美式期权的特征赋予其投资者可以选择是否提前执行期权,在什么情况下执行期权便成了主要考虑的问题。当股票不存在分红时,其他参数均相同,那么美式看涨期权与欧式看涨期权的价值相同,即不存在提前执行。然而,不付红利的美式看跌期权却可以提前执行。本文着重分析在为美式看跌期权定价时,二叉树二叉树法中的两种不同的matlab代码的其各自特点。
        【关键词】美式看跌期权;二叉树
        现今金融创新技术日新月异,金融衍生产品无论从种类还是数量上都已经获得了极大的发展,随着“火箭科学家”的加入,产品的独特性与复杂性也越来越高。但期权依然是其中最基础也是最重要的一种,也依然是学界研究的重点。期权在风险管理和投资理财等领域有着无可替代的重要作用,获得合理地期权定价就成为发挥其功能的主要前提,由此才能进一步促进全球
金融市场的健康与稳定发展。1973年,Black和Scholes给出了欧式看涨期权的解析价格,用评价公式可以很简单的得到欧式看跌期权的价格,后续研究者进一步推广了BS定价公式,从而使欧式期权的定价问题得以比较完备的解决。而具有可提前执行特性的美式期权,其定价问题从数学角度看,是一个在随机微分方程下含有自由边界的求值问题,即无法获得封闭解。在无法获得封闭解的情况下,以二叉树为代表的数值方法为美式期权定价就成了可行之道。
        1 二叉树法A
        针对美式看涨/看跌期权的特点,matlab中的金融工具箱已给出公式——binprice。输入各参数,可得到股票价格的二叉树路径和相应的期权价格。针对美式看跌期权,其代码并不复杂,即:(使用CRR模型)
        function price = Binprice(s0,k,r,T,sigma,n)
        tt=T/n;
        u=exp(sigma*sqrt(tt));
        d=exp(-sigma*sqrt(tt));
        p=(exp(r*tt)-d)/(u-d);
        price=zeros(n+1);
        price(1,1)=s0;
        for i=1:n+1;
        for j=1:n+1;
        if j>=i;
        price(i,j)=price(1,1)*u^(j-i)*d^(i-1);
        end
        end
        end
        opition=zeros(n+1);
        opition(:,n+1)=max(k-price(:,n+1),0);
        for j=n:-1:1;
        for i=1:n;
        if i
        opition(i,j)=max(k-price(i,j),exp(-r*tt)*((1-p)*opition(i+1,j+1)+p*opition(i,j+1)));
        end
        end
        end
完全二叉树算法        opition
        此种方法的有点在于操作简单,结果明显,并输出了股票价格矩阵,令使用者可以非常直观的美式看跌期权的最佳执行边界。并且,稍做修改便可适用于非CRR的其他二叉树模型。然而,其缺点在于当二叉树层数n较大时(例如n=10000),由于要生成n+1阶矩阵,此程序往往不能胜任(matlab会显示out of memory)。根据此特点,我们需要优化代码。
        2 二叉树法B
        function price = AmPutLattice(S0,K,r,T,sigma,N)
        tic
        deltaT = T/N;
        u=exp(sigma * sqrt(deltaT));
        d=1/u;
        p=(exp(r*deltaT) - d)/(u-d);
        discount = exp(-r*deltaT);
        p_u = discount*p;
        p_d = discount*(1-p);
        SVals = zeros(2*N+1,1);
        SVals(N+1) = S0;
        for i=1:N
        SVals(N+1+i) = u*SVals(N+i);
        SVals(N+1-i) = d*SVals(N+2-i);
        end
        PVals = zeros(2*N+1,1);
        for i=1:2:2*N+1
        PVals(i) = max(K-SVals(i),0);
        end
        for tau=1:N
        for i= (tau+1):2:(2*N+1-tau)
        hold = p_u*PVals(i+1) + p_d*PVals(i-1);
        PVals(i) = max(hold, K-SVals(i));
        end
        end
        price = PVals(N+1);
        toc
        此代码计算速度快的主要原因在于利用了CRR模型中上升比例与下降比例乘积为1(u*d=1)这一特点。
        其优点在于只需生成一个列向量来表示股价并进行迭代,计算期权价格,运算速度较快。数值算例:S=52;k=52;r=0.1;sigma=0.4;T=5/12;n=10000;
        输出结果 price=4.4555
        运行时间 1.897011 seconds
        其缺点在于,只输出期权价格,并不能得到最佳执行边界,并且不适用于非CRR模型。
        参考文献:
        [1]姜礼尚.期权定价的数学模型和方法
        [2]约翰·赫尔.