我的Matlab代码是否正确实现了这个给定的算法?

时间:2011-03-31 00:15:41

标签: algorithm matlab backwards-compatibility

我得到了一些错误的结果,我在代码中找不到任何错误,所以我在想是否有人能够弄清楚我是否正确实现了这个Binomial-Lattice算法。以下是我得到的结果以及我对结果的期望:

实际结果 我从[S0,K,sigma,r,T,nColumn]=[1.5295e+009,6e+008,0.0023,0.12,20,15]开始,我得到p=32.5955price=-6.0e+18BLOV_lattice,如图1所示。

预期结果:

  1. p是概率,所以它不应该大于1.即使我将nColumn增加到1000,在上述实际结果中仍然p大于1。
  2. price应该与S0相同,即我在第一列中开始的数字,在向后归纳之后,即应该向后兼容。
  3. 图1:BLOV_lattice enter image description here

    我的Matlab代码是:

    function [price,BLOV_lattice]=BLOV_general(S0,K,sigma,r,T,nColumn)
    
    % BLOV stands for Binomial Lattice Option Valuation
    
    %% Constant parameters
    del_T=T./nColumn; % where n is the number of columns in binomial lattice
    u=exp(sigma.*sqrt(del_T));
    d=1./u;
    p=(exp(r.*del_T)-d)./(u-d);
    a=exp(-r.*del_T);
    
    %% Initializing the lattice
    Stree=zeros(nColumn+1,nColumn+1);
    BLOV_lattice=zeros(nColumn+1,nColumn+1);
    
    %% Developing the lattice
    
    %# Forward induction
    
    for i=0:nColumn
        for j=0:i
            Stree(j+1,i+1)=S0.*(u.^j)*(d.^(i-j));
        end
    end
    for i=0:nColumn
        BLOV_lattice(i+1,nColumn+1)=max(Stree(i+1,nColumn+1)-K,0);
    end
    
    %# Backward induction
    
    for i=nColumn:-1:1
        for j=0:i-1
            BLOV_lattice(j+1,i)=a.*(((1-p).*BLOV_lattice(j+1,i+1))+(p.*BLOV_lattice(j+2,i+1)));
        end
    end
    price=BLOV_lattice(1,1);
    
    %% Converting the lattice of upper traingular matrix to a tree format
    
    N = size(BLOV_lattice,1);  %# The size of the rows and columns in BLOV_lattice
    BLOV_lattice = full(spdiags(spdiags(BLOV_lattice),(1-N):2:(N-1),zeros(2*N-1,N)));
    

    参考文献:

    • Cox,John C.,Stephen A. Ross和Mark Rubinstein。 1979.“期权定价:简化方法”。金融经济学杂志7:229-263。

    • 电子。 Georgiadis,“二项式期权定价没有封闭式解决方案”。算法财务即将发布(2011年)。

    • Richard J. Rendleman,Jr。和Brit J. Bartter。 1979.“两国期权定价”。 Journal of Finance 24:1093-1110。 DOI:10.2307 / 2327237

1 个答案:

答案 0 :(得分:1)

据我所知,p p=(exp(r.*del_T)-d)./(u-d)的表述在您的参考文献中的任何位置都没有定义(显然是这样)。

从您的代码中推断您尝试评估哪种选项并不是那么简单。

我能得到的最接近的是解释p(在您的情况下)简单归结为p= (1- d)/ (u- d),其参数将为0.49934。 (至少一个合理的值被解释为概率!)