• 签到
• 苹果/安卓/wp

• 苹果/安卓/wp

客户端

11310 223

# [源码分享] [原创]基于Matlab的Hull-White三叉树实现[by fantuanxiaot] [分享] Ψ▄┳一大卫卍卐席尔瓦

9%

-

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三叉树实现分为两阶段  #### 本帖隐藏的内容

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年) Matlab结果(deltaT=1年)   [InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(3,6,0.01,0.1)     #### 本帖隐藏的内容

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
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(第二阶段利率树)  [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]) [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]) ### 回帖推荐

Crsky7 发表于12楼 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 精彩帖子

### 本帖被以下文库推荐  学习一下

### 回帖奖励 +3

 楼主太赞了~

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

 多谢分享

### 回帖奖励 +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 回帖后跳转到最后一页