全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 金融工程(数量金融)与金融衍生品
3393 1
2012-02-26
悬赏 10 个论坛币 未解决
源于Michael Monoyio 2004年在Journal of Economic Dynamics & Control杂志上发表的一篇论文Option pricing with transaction costs using a Markov chain approximation,本人利用文中的算法编了一个matlab程序,利用最大化到期财富的效用来计算套期保值策略,可惜屡战屡败,编出的程序与结论相差太远,不知哪位高手编过类似相关问题的程序,烦请指点一二!附上本人程序求教。
    %编写求t=M*deltat时刻价值函数的文件(就不采取买卖交易的情形),之后就可调用
     %不带期权的
  function f=cfv(n,y)
  global p gama S M;
     f=p*(-exp(-gama*y*S(M+1,n+1)))+(1-p)*(-exp(-gama*y*S(M+1,n)));
   return;

%带期权的
function f=cfvw(n,y)
  global p gama S K M;
if K<S(M+1,n)
     f=p*(-exp(-gama*(y*S(M+1,n+1)+S(M+1,n+1)-K)))+(1-p)*(-exp(-gama*(y*S(M+1,n)+S(M+1,n)-K)));
elseif K>=S(M+1,n+1)
     f=p*(-exp(-gama*y*S(M+1,n+1)))+(1-p)*(-exp(-gama*y*S(M+1,n)));
else
     f=p*(-exp(-gama*(y*S(M+1,n+1)+S(M+1,n+1)-K)))+(1-p)*(-exp(-gama*y*S(M+1,n)));
end
   return;
%编写一个求两个变量差的正部的函数
  function f=Identifyf(a,b)
     if a>b
        f=a-b;
     else
        f=0;
     end
   return;

以上都是M文件。

global p gama S K M;
T=1;M=50;deltat=T/M;sigma=0.25;S0=15;K=15;r=0.15;mu=0.15;
lamda=0.005;gama=0.1;R=exp(r*deltat);
II=ones(M+1,M+1);S=II;
deltay=1*deltat;
p=0.5*(1+mu/sigma*deltat^0.5);
u=exp(sigma*deltat^0.5);d=exp(-sigma*deltat^0.5);
%将S二叉树划
for m=1:(M+1)
   for n=1:m
    S(m,n)=S0*u^(2*n-m-1);
   end
end
%求t=M*deltat时的买卖NT边界上的价值函数
yu0=-3*II;yl0=-3*II;yuw=-3*II;ylw=-3*II;yu=-3*II;yl=-3*II;
for n=1:M
      %不带期权

      yu0(M,n)=(gama*S(M,n)*(u-d))^(-1)*log((p*(u-R*(1-lamda)))/((1-p)*(R*(1-lamda)-d)));
      yl0(M,n)=(gama*S(M,n)*(u-d))^(-1)*log((p*(u-R*(1+lamda)))/((1-p)*(R*(1+lamda)-d)));

      Ql0(M,n)=cfv(n,yl0(M,n));
      Qu0(M,n)=cfv(n,yu0(M,n));

      %带期权
yuw(M,n)=(gama*S(M,n)*(u-d))^(-1)*(log((p*(u-R*(1-lamda)))/((1-p)*(R*(1-lamda)-d)))+(Identifyf(S(M+1,n+1),K)-Identifyf(S(M+1,n),K))*gama);
ylw(M,n)=(gama*S(M,n)*(u-d))^(-1)*(log((p*(u-R*(1+lamda)))/((1-p)*(R*(1+lamda)-d)))+(Identifyf(S(M+1,n+1),K)-Identifyf(S(M+1,n),K))*gama);


      Qlw(M,n)=cfvw(n,ylw(M,n));
      Quw(M,n)=cfvw(n,yuw(M,n));
     
end


miny0=min(yl0(M,1:M));maxy0=max(yu0(M,1:M));
minyw=min(ylw(M,1:M));maxyw=max(yuw(M,1:M));

t0=ceil((maxy0-miny0)/deltay)+1;tw=ceil((maxyw-minyw)/deltay)+1;
%求t=M*deltat时刻,最大NT区域的价值函数
II0=ones(M,t0);Q0=II0;Q1=II0;IIw=ones(M,tw);Qw=IIw;Q2=IIw;
%不带期权
for n=1:M
      for t=1:t0
         y=miny0+(t-1)*deltay;
         if yl0(M,n)<=y<=yu0(M,n)
            Q0(n,t)=cfv(n,y);
         elseif yl0(M,n)>y
            Q0(n,t)=exp(gama*R*(1+lamda)*S(M,n)*(yl0(M,n)-y))*Ql0(M,n);
         else
            Q0(n,t)=exp(gama*R*(lamda-1)*S(M,n)*(y-yu0(M,n)))*Qu0(M,n);
         end
      end

end
%带期权
for n=1:M
      for t=1:tw
         y=minyw+(t-1)*deltay;
         if ylw(M,n)<=y<=yuw(M,n)
            Qw(n,t)=cfvw(n,y);
         elseif ylw(M,n)>y
            Qw(n,t)=exp(gama*R*(1+lamda)*S(M,n)*(ylw(M,n)-y))*Qlw(M,n);
         else
            Qw(n,t)=exp(gama*R*(lamda-1)*S(M,n)*(y-yuw(M,n)))*Quw(M,n);
         end
      end

end
%依次用后向递推探测任一时刻的NT下界、NT上界以及最大NT区域内的价值函数
%不带期权
for m=(M-1):(-1):1
   R1=exp(r*(M+1-m)*deltat);
   for n=1:m
         %NT下界
         for t=1:t0
         Q(t)=exp(gama*R1*(1+lamda)*t*deltay*S(m,n))*(p*Q0(n+1,t)+(1-p)*Q0(n,t));
         end
         [QQ,l]=max(Q);
         Ql0(m,n)=QQ;yl0(m,n)=miny0+(l-1)*deltay;
         clear QQ,y;
         %NT上界
         for t=1:t0
         Q(t)=exp(gama*R1*(lamda-1)*(t0+1-t)*deltay*S(m,n))*(p*Q0(n+1,t)+(1-p)*Q0(n,t));
         end
         [QQ,u]=max(Q);
         Qu0(m,n)=QQ;yu0(m,n)=miny0+(u-1)*deltay;
         clear QQ,y;


      %最大NT区域的价值函数
        for t=1:t0
             y=miny0+(t-1)*deltay;
             if yl0(m,n)<=y<=yu0(m,n)
                Q1(n,t)=p*Q0(n+1,t)+(1-p)*Q0(n,t);
             elseif yl0(m,n)>y
                Q1(n,t)=exp(gama*R1*(1+lamda)*S(m,n)*(yl0(m,n)-y))*Ql0(m,n);
             else
                Q1(n,t)=exp(gama*R1*(lamda-1)*S(m,n)*(y-yu0(m,n)))*Qu0(m,n);
             end
        end

     end
     Q0=Q1;
end   

%带期权
for m=(M-1):(-1):1
   R1=exp(r*(M+1-m)*deltat);
   for n=1:m
         %NT下界
         for t=1:tw
         Q(t)=exp(gama*R1*(1+lamda)*t*deltay*S(m,n))*(p*Qw(n+1,t)+(1-p)*Qw(n,t));
         end
         [QQ,l]=max(Q);
         Qlw(m,n)=QQ;ylw(m,n)=minyw+(l-1)*deltay;
         clear QQ,l;
         %NT上界
         for t=1:tw
         Q(t)=exp(gama*R1*(lamda-1)*(tw+1-t)*deltay*S(m,n))*(p*Qw(n+1,t)+(1-p)*Qw(n,t));
         end
         [QQ,u]=max(Q);
         Quw(m,n)=QQ;yuw(m,n)=minyw+(u-1)*deltay;

         clear Q,u;
      %最大NT区域的价值函数
        for t=1:tw
             y=minyw+(t-1)*deltay;
             if ylw(m,n)<=y<=yuw(m,n)
                Q2(n,t)=p*Qw(n+1,t)+(1-p)*Qw(n,t);
             elseif ylw(m,n)>y
                Q2(n,t)=exp(gama*R1*(1+lamda)*S(m,n)*(ylw(m,n)-y))*Qlw(m,n);
             else
                Q2(n,t)=exp(gama*R1*(lamda-1)*S(m,n)*(y-yuw(m,n)))*Quw(m,n);
             end
        end
     end
     Qw=Q2;
end   

clear tw t0 y Q0 Q1 Q2 Qw;
yl=ylw-yl0;yu=yuw-yu0;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-3-14 00:45:23
good
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群