楼主: fantuanxiaot
11310 223

[源码分享] [原创]基于Matlab的Hull-White三叉树实现[by fantuanxiaot]   [分享]

助理

Ψ▄┳一大卫卍卐席尔瓦

大师

9%

还不是VIP/贵宾

-

威望
7
论坛币
-235060 个
通用积分
15.3381
学术水平
3780 点
热心指数
3816 点
信用等级
3451 点
经验
150465 点
帖子
7694
精华
32
在线时间
1323 小时
注册时间
2013-2-3
最后登录
2019-10-31

初级学术勋章 初级热心勋章 中级热心勋章 中级学术勋章 初级信用勋章 中级信用勋章 高级热心勋章 高级学术勋章 特级学术勋章 特级热心勋章 高级信用勋章 特级信用勋章

fantuanxiaot 发表于 2015-5-5 20:10:11 |显示全部楼层
        In financial mathematics, the Hull–White model is a model of future interest rates. In its most generic formulation, it belongs to the class of no-arbitrage models that are able to fit today's term structure of interest rates. It is relatively straightforward to translate the mathematical description of the evolution of future interest rates onto a tree or lattice and so interest rate derivatives such as bermudan swaptions can be valued in the model.
        The first Hull–White model was described by John C. Hull and Alan White in 1990. The model is still popular in the market today.

        来源:Hull的《期权期货与其他衍生品》
Hull-White三叉树实现分为两阶段
第一阶段:

HullBook_II.jpg



HullBook_III.jpg


本帖隐藏的内容

  1. %%  函数构建Hull_White三叉树
  2. %%  Hull_White三叉树的第一步构建
  3. %%  监控步骤请参考Hull的期权期货和其他衍生品
  4. %%  by fantuanxiaot
  5. function [InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(T,N,Sigma,A)
  6. %%  InitialTree是HullWhite第一步建模的初始树
  7. %%  ProTree是概率树
  8. %%  DisplayMatrix是显示树结点
  9. %%  IdTree是树的地址
  10. %%  T是利率树的时间
  11. %%  N,Sigma,A都是参数
  12. %%  举例:[InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(3,3,0.01,0.1)
  13. %%  [InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(3,6,0.01,0.1)
  14. %  最大的结点
  15. deltaT=T/N;
  16. MaxBin=ceil(0.184/(A*(deltaT)));
  17. %%  构建初始的利率树
  18. InitialTree=zeros(2*MaxBin+1,N);
  19. deltaR=Sigma*sqrt(3*deltaT);
  20. ProTree=cell(2*MaxBin+1,N);
  21. %  ProTree内存储Pu/Pm/Pd的三个元素
  22. IdTree=cell(2*MaxBin+1,N);
  23. DisplayMatrix=cell(N,4);
  24. %%  构建树
  25. Index=1;
  26. for i=1:N
  27.     if i<=MaxBin
  28.         RateV=i-1:-1:1-i;
  29.         for j=1:2*(i-1)+1
  30.             %  第一棵树
  31.             InitialTree(j,i)=RateV(j)*deltaR;
  32.             Pu=1/6+1/2*((A*RateV(j)*deltaT)^2-A*RateV(j)*deltaT);
  33.             Pm=2/3-(A*RateV(j)*deltaT)^2;
  34.             Pd=1/6+1/2*((A*RateV(j)*deltaT)^2+A*RateV(j)*deltaT);
  35.             %  第二棵树
  36.             ProTree{j,i}=[Pu;Pm;Pd];
  37.             %  第三棵树
  38.             IdTree{j,i}=[i-1,RateV(j)]' ;
  39.             %  第四棵树
  40.             DisplayMatrix(Index,:)=num2cell([Index Pu Pm Pd]);
  41.             Index=Index+1;
  42.         end
  43.     end
  44.     if i>=MaxBin+1
  45.         RateV=MaxBin:-1:-MaxBin;
  46.         for j=1:2*MaxBin+1
  47.             %  第一棵树
  48.             InitialTree(j,i)=RateV(j)*deltaR;
  49.             %  第三棵树
  50.             IdTree{j,i}=[i-1,RateV(j)]';
  51.             if j==1
  52.                 Pu=7/6+0.5*((A*RateV(j)*deltaT)^2-3*(A*RateV(j)*deltaT));
  53.                 Pm=-1/3-(A*RateV(j)*deltaT)^2+2*(A*RateV(j)*deltaT);
  54.                 Pd=1/6+0.5*((A*RateV(j)*deltaT)^2-A*RateV(j)*deltaT);
  55.             elseif j==2*MaxBin+1
  56.                 Pu=1/6+1/2*((A*RateV(j)*deltaT)^2+A*RateV(j)*deltaT);
  57.                 Pm=-1/3-(A*RateV(j)*deltaT)^2-2*(A*RateV(j)*deltaT);
  58.                 Pd=7/6+0.5*((A*RateV(j)*deltaT)^2+3*(A*RateV(j)*deltaT));
  59.             else
  60.                 Pu=1/6+1/2*((A*RateV(j)*deltaT)^2-A*RateV(j)*deltaT);
  61.                 Pm=2/3-(A*RateV(j)*deltaT)^2;
  62.                 Pd=1/6+1/2*((A*RateV(j)*deltaT)^2+A*RateV(j)*deltaT);
  63.             end
  64.             ProTree{j,i}=[Pu;Pm;Pd];
  65.             %  第四棵树
  66.             DisplayMatrix(Index,:)=num2cell([Index Pu Pm Pd]);
  67.             Index=Index+1;
  68.         end
  69.     end
  70. end
  71. %%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  72. %%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
复制代码


实现初步树
Hull期权期货结果:
[InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(3,3,0.01,0.1)

(deltaT=1年)


Hull书籍结果

(deltaT=1年)



HullBook_I.jpg


Matlab结果(deltaT=1年)


I_FirstHWTotalTree.jpg


I_FirstHWProbTree.jpg


I_FirstHWijTree.jpg


另外一个例子(deltaT=半年):

[InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(3,6,0.01,0.1)


II_FirstHWTotalTree.jpg


II_FirstHWProbTree.jpg


II_FirstHWProbMatrix.jpg


II_FirstHWijTree.jpg


第二阶段:
第二阶段 依据第一阶段 构建的初始树与当前的利率期限结构建模:

HullBook_IIIII.jpg


本帖隐藏的内容

  1. %%  HullWhite三叉树的第二阶段
  2. %%  第一阶段得到了初始的树
  3. %%  第二阶段拟合当前的利率期限结构
  4. function [FirstTree,SecondTree,ProTree,QTree]=HullWhiteTree_Second(T,N,Sigma,A,RateTerm)
  5. %%  举例:[FirstTree,SecondTree,~,QTree]=HullWhiteTree_Second(3,3,0.01,0.1,[3.824/100 4.512/100 5.086/100])
  6. %%  [FirstTree,SecondTree,~,QTree]=HullWhiteTree_Second(3,6,0.01,0.1,[0.0343 0.03824 0.04183 4.512/100 0.04812 5.086/100])
  7. %%  [FirstTree,SecondTree,~,QTree]=HullWhiteTree_Second(4,8,0.01,0.1,[0.03 0.0343 ...
  8. %%  0.03824 0.04183 4.512/100 0.04812 5.086/100 0.056])
  9. %%  RateTerm是利率的期限结构
  10. %%  利率树采用连续利率
  11. %%  先得到第一棵树
  12. if length(RateTerm)~=N
  13.     error('Reset Your RateTerm');
  14. end
  15. deltaT=T/N;
  16. MaxBin=ceil(0.184/(A*(deltaT)));
  17. [FirstTree,ProTree,~,~]=HullWhiteTree_First(T,N,Sigma,A);
  18. SecondTree=FirstTree;
  19. %%  构建二期树
  20. QTree=zeros(2*MaxBin+1,N);
  21. Alpha=zeros(length(RateTerm),1);
  22. for i=1:N
  23.     %  第一列
  24.     if i==1
  25.         QTree(i,1)=1;
  26.         Alpha(i)=RateTerm(i);
  27.         SecondTree(i,1)=SecondTree(i,1)+Alpha(i);
  28.     end
  29.     %  第二列
  30.     if i==2
  31.         Price=exp(-RateTerm(i)*i);
  32.         Sum=0;
  33.         for j=1:3
  34.             Probability=ProTree{1,1};
  35.             QTree(j,i)=QTree(1,1)*Probability(j)*exp(-SecondTree(1,1)*deltaT);
  36.             Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
  37.         end
  38.         Alpha(i)=(log(Sum)-log(Price))/deltaT;
  39.         SecondTree(1:3,i)=SecondTree(1:3,i)+Alpha(i);
  40.     end
  41.     %  三列以后
  42.     if i>=3
  43.         if i<=MaxBin+1
  44.             Price=exp(-RateTerm(i)*i);
  45.             Sum=0;
  46.             for j=1:2*(i-1)+1
  47.                 %  顶端
  48.                 if j==1
  49.                     Probability=ProTree{j,i-1};
  50.                     QTree(j,i)=Probability(1)*QTree(j,i-1)*exp(-SecondTree(j,i-1)*deltaT);
  51.                     Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
  52.                     %  最下端
  53.                 elseif j==2*(i-1)+1
  54.                     Probability=ProTree{j-2,i-1};
  55.                     QTree(j,i)=Probability(3)*QTree(j-2,i-1)*exp(-SecondTree(j-2,i-1)*deltaT);
  56.                     Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
  57.                     %  上一端
  58.                 elseif j==2
  59.                     Probability1=ProTree{j-1,i-1};
  60.                     Probability2=ProTree{j,i-1};
  61.                     QTree(j,i)=QTree(j,i)+Probability1(2)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
  62.                     QTree(j,i)=QTree(j,i)+Probability2(1)*QTree(j,i-1)*exp(-SecondTree(j,i-1)*deltaT);
  63.                     Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
  64.                     %  下一端
  65.                 elseif j==2*(i-1)
  66.                     Probability1=ProTree{j-2,i-1};
  67.                     Probability2=ProTree{j-1,i-1};
  68.                     QTree(j,i)=QTree(j,i)+Probability1(3)*QTree(j-2,i-1)*exp(-SecondTree(j-2,i-1)*deltaT);
  69.                     QTree(j,i)=QTree(j,i)+Probability2(2)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
  70.                     Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);                    
  71.                 else
  72.                     Probability1=ProTree{j-2,i-1};
  73.                     Probability2=ProTree{j-1,i-1};     
  74.                     Probability3=ProTree{j,i-1};
  75.                     QTree(j,i)=QTree(j,i)+Probability1(3)*QTree(j-2,i-1)*exp(-SecondTree(j-2,i-1)*deltaT);
  76.                     QTree(j,i)=QTree(j,i)+Probability2(2)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
  77.                     QTree(j,i)=QTree(j,i)+Probability3(1)*QTree(j,i-1)*exp(-SecondTree(j,i-1)*deltaT);
  78.                     Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);   
  79.                 end
  80.             end
  81.             Alpha(i)=(log(Sum)-log(Price))/deltaT;
  82.             SecondTree(1:2*(i-1)+1,i)=SecondTree(1:2*(i-1)+1,i)+Alpha(i);      
  83.         end
  84.         %  到了横列
  85.         if i>MaxBin+1
  86.             Price=exp(-RateTerm(i)*i);
  87.             Sum=0;           
  88.             for j=1:2*MaxBin+1
  89.                 %  顶端
  90.                 if j==1
  91.                     Probability1=ProTree{j,i-1};
  92.                     Probability2=ProTree{j+1,i-1};
  93.                     QTree(j,i)=QTree(j,i)+Probability1(2)*QTree(j,i-1)*exp(-SecondTree(j,i-1)*deltaT);
  94.                     QTree(j,i)=QTree(j,i)+Probability2(3)*QTree(j+1,i-1)*exp(-SecondTree(j+1,i-1)*deltaT);  
  95.                     Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);   
  96.                     %  底端
  97.                 elseif j==2*MaxBin+1
  98.                     Probability1=ProTree{j-1,i-1};
  99.                     Probability2=ProTree{j,i-1};  
  100.                     QTree(j,i)=QTree(j,i)+Probability1(3)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
  101.                     QTree(j,i)=QTree(j,i)+Probability2(2)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);      
  102.                     Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);   
  103.                 else
  104.                     Probability1=ProTree{j-1,i-1};
  105.                     Probability2=ProTree{j,i-1};     
  106.                     Probability3=ProTree{j+1,i-1};  
  107.                     QTree(j,i)=QTree(j,i)+Probability1(3)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
  108.                     QTree(j,i)=QTree(j,i)+Probability2(2)*QTree(j,i-1)*exp(-SecondTree(j,i-1)*deltaT);
  109.                     QTree(j,i)=QTree(j,i)+Probability3(1)*QTree(j+1,i-1)*exp(-SecondTree(j+1,i-1)*deltaT);
  110.                     Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);   
  111.                 end  
  112.             end
  113.             Alpha(i)=(log(Sum)-log(Price))/deltaT;
  114.             SecondTree(1:2*MaxBin+1,i)=SecondTree(1:2*MaxBin+1,i)+Alpha(i);  
  115.         end
  116.     end
  117. end
  118. %%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  119. %%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
复制代码


具体实现:
Hull书籍例子:
[FirstTree,SecondTree,~,QTree]=HullWhiteTree_Second(3,3,0.01,0.1,[3.824/100 4.512/100 5.086/100])结果可见SecondTree(第二阶段利率树)

HullBook_IIII.jpg


SecondHWTotalTree_I.jpg


[FirstTree,SecondTree,~,QTree]=HullWhiteTree_Second(3,6,0.01,0.1,[0.0343 0.03824 0.04183 4.512/100 0.04812 5.086/100])


SecondHWTotalTree_II.jpg


[FirstTree,SecondTree,~,QTree]=HullWhiteTree_Second(4,8,0.01,0.1,[0.03 0.0343 ...
0.03824 0.04183 4.512/100 0.04812 5.086/100 0.056])


SecondHWTotalTree_III.jpg



关键词:fantuanxiaot MATLAB White atlab matla structure interest future

回帖推荐

Crsky7 发表于12楼  查看完整内容

三叉树据说还可以用来value barrier options..
已有 6 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xujingtang + 80 + 1 + 2 精彩帖子
chengzhifu2013 + 60 + 60 + 5 + 5 + 5 好贴!!
jerker + 60 + 60 精彩帖子
zbin7451f + 100 + 5 + 5 + 5 对论坛有贡献
xddlovejiao1314 + 60 + 5 + 1 + 1 精彩帖子
离歌レ笑 + 100 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 360  论坛币 + 220  学术水平 + 21  热心指数 + 18  信用等级 + 16   查看全部评分

本帖被以下文库推荐

stata SPSS
怀念kome 发表于 2015-5-5 20:22:35 |显示全部楼层

回帖奖励 +3

学习一下
回复

使用道具 举报

xiang8482890 在职认证  发表于 2015-5-5 20:37:58 |显示全部楼层

回帖奖励 +3

楼主太赞了~
回复

使用道具 举报

heyeping198808 发表于 2015-5-5 20:41:23 |显示全部楼层

回帖奖励 +3

多谢分享
回复

使用道具 举报

飞翼零式 发表于 2015-5-5 20:45:07 |显示全部楼层

回帖奖励 +3

谢谢分享,学习学习
回复

使用道具 举报

zx8387 发表于 2015-5-5 20:47:49 |显示全部楼层

回帖奖励 +3

回复

使用道具 举报

zx8387 发表于 2015-5-5 20:49:23 |显示全部楼层

回帖奖励 +3

回复

使用道具 举报

zx8387 发表于 2015-5-5 20:49:59 |显示全部楼层

回帖奖励 +3

回复

使用道具 举报

33宇智波豚豚 发表于 2015-5-5 20:50:10 |显示全部楼层

回帖奖励 +3

支持楼主哦,感谢楼主分享
回复

使用道具 举报

zx8387 发表于 2015-5-5 20:50:30 |显示全部楼层

回帖奖励 +3

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2019-11-16 00:41