%-------------------output%value——各节点值%avgVinEachPath——各个节点各个路径均值%Asianoption——我不知道这是什么,你们加油~%-------------------input%S——初期股票价格%E——行权值%deltaT——我的理解是每期的时间间隔%sigma——波动率%r——风险率%n——期数%function[valuetree,Asianoption]=AOPBT(S,E,deltaT,sigma,r,n)S=100;E=105;deltaT=0.1;sigma=0.5;r=0.1;n=100;%-------------------------二叉树参数计算(原始公式)u=exp(r*deltaT+sigma*sqrt(deltaT));d=1/u;p=(1+r-d)/(u-d);q=1-p;%-------------------------参数公式一%q=0.5;%a=exp(r*deltaT);%d=a-a*sqrt(exp(sigma^2*deltaT)-1);%u=a+a*sqrt(exp(sigma^2*deltaT)-1);%-------------------------参数公式二%q=0.5;%a=exp(r*deltaT);%d=a-sigma*sqrt(deltaT);%u=a+sigma*sqrt(deltaT);%-------------------------参数公式三%q=0.5;%d=exp((r-sigma^2/2)*deltaT-sigma*sqrt(deltaT));%u=exp((r-sigma^2/2)*deltaT+sigma*sqrt(deltaT));%==========================求各个节点的值S(矩阵形式)=========================valuetree=zeros(n+1);valuetree(1,1)=S;fori=1:nforj=0:ivaluetree(i+1,j+1)=S*u^j*d^(i-j);endend%====================计算各个节点各个路径的均值==============================avgVinEachPath(1,1)=S;fori=2:n+1height=i*(i-1)/2;%每行的第一个节点和最后一个节点avgVinEachPath(height+1,1)=(avgVinEachPath(i-1,1)*(i-1)+valuetree(i,1))/i;avgVinEachPath(height+i,1)=(avgVinEachPath(i-1,1)*(i-1)+valuetree(i,i))/i;%每行中的其他节点forj=2:i-1npLc=(i-1)*(i-2)/2+j-1;npRc=npLc+1;Ll=length(find(avgVinEachPath(npLc,:)0));Rl=length(find(avgVinEachPath(npRc,:)0));count=1;forLk=1:LlavgVinEachPath(height+j,count)=(avgVinEachPath(npLc,Lk)*(i-1)+valuetree(i,j))/i;count=count+1;endforRk=1:RlavgVinEachPath(height+j,count)=(avgVinEachPath(npRc,Rk)*(i-1)+valuetree(i,j))/i;count=count+1;endendend%===========================计算payoff===================================i=n+1;j=n+1;height=i*(i-1)/2;%---------------------------取出默末期节点的路径均值temp=avgVinEachPath(height+1:height+j,:);%---------------------------求max(avg-E,0)temp=temp-E;temp(find(temp0))=0;%---------------------------乘上节点相应的涨跌概率fori=1:n+1temp(i,:)=temp(i,:)*q^(n+1-i)*p^(i-1);end%---------------------------求和并乘上exp(-风险率*期数)Asianoption=sum(sum(temp))*exp(-r*n);