相似文件
换一批
经管之家送您一份
应届毕业生专属福利!
求职就业群
感谢您参与论坛问题回答
经管之家送您两个论坛币!
+2 论坛币
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三叉树实现分为两阶段
第一阶段:
本帖隐藏的内容 %% 函数构建Hull_White三叉树
%% Hull_White三叉树的第一步构建
%% 监控步骤请参考Hull的期权期货和其他衍生品
%% by fantuanxiaot
function [InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(T,N,Sigma,A)
%% InitialTree是HullWhite第一步建模的初始树
%% ProTree是概率树
%% DisplayMatrix是显示树结点
%% IdTree是树的地址
%% T是利率树的时间
%% N,Sigma,A都是参数
%% 举例:[InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(3,3,0.01,0.1)
%% [InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(3,6,0.01,0.1)
% 最大的结点
deltaT=T/N;
MaxBin=ceil(0.184/(A*(deltaT)));
%% 构建初始的利率树
InitialTree=zeros(2*MaxBin+1,N);
deltaR=Sigma*sqrt(3*deltaT);
ProTree=cell(2*MaxBin+1,N);
% ProTree内存储Pu/Pm/Pd的三个元素
IdTree=cell(2*MaxBin+1,N);
DisplayMatrix=cell(N,4);
%% 构建树
Index=1;
for i=1:N
if i<=MaxBin
RateV=i-1:-1:1-i;
for j=1:2*(i-1)+1
% 第一棵树
InitialTree(j,i)=RateV(j)*deltaR;
Pu=1/6+1/2*((A*RateV(j)*deltaT)^2-A*RateV(j)*deltaT);
Pm=2/3-(A*RateV(j)*deltaT)^2;
Pd=1/6+1/2*((A*RateV(j)*deltaT)^2+A*RateV(j)*deltaT);
% 第二棵树
ProTree{j,i}=[Pu;Pm;Pd];
% 第三棵树
IdTree{j,i}=[i-1,RateV(j)]' ;
% 第四棵树
DisplayMatrix(Index,:)=num2cell([Index Pu Pm Pd]);
Index=Index+1;
end
end
if i>=MaxBin+1
RateV=MaxBin:-1:-MaxBin;
for j=1:2*MaxBin+1
% 第一棵树
InitialTree(j,i)=RateV(j)*deltaR;
% 第三棵树
IdTree{j,i}=[i-1,RateV(j)]';
if j==1
Pu=7/6+0.5*((A*RateV(j)*deltaT)^2-3*(A*RateV(j)*deltaT));
Pm=-1/3-(A*RateV(j)*deltaT)^2+2*(A*RateV(j)*deltaT);
Pd=1/6+0.5*((A*RateV(j)*deltaT)^2-A*RateV(j)*deltaT);
elseif j==2*MaxBin+1
Pu=1/6+1/2*((A*RateV(j)*deltaT)^2+A*RateV(j)*deltaT);
Pm=-1/3-(A*RateV(j)*deltaT)^2-2*(A*RateV(j)*deltaT);
Pd=7/6+0.5*((A*RateV(j)*deltaT)^2+3*(A*RateV(j)*deltaT));
else
Pu=1/6+1/2*((A*RateV(j)*deltaT)^2-A*RateV(j)*deltaT);
Pm=2/3-(A*RateV(j)*deltaT)^2;
Pd=1/6+1/2*((A*RateV(j)*deltaT)^2+A*RateV(j)*deltaT);
end
ProTree{j,i}=[Pu;Pm;Pd];
% 第四棵树
DisplayMatrix(Index,:)=num2cell([Index Pu Pm Pd]);
Index=Index+1;
end
end
end
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 复制代码
实现初步树
Hull期权期货结果:
[InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(3,3,0.01,0.1) (deltaT=1年)
Hull书籍结果 (deltaT=1年)
:
Matlab结果 (deltaT=1年) :
另外一个例子(deltaT=半年):
[InitialTree,ProTree,IdTree,DisplayMatrix]=HullWhiteTree_First(3,6,0.01,0.1)
第二阶段:
第二 阶段 依据第一 阶段 构建的初始树与当前的利率期限结构建模:
本帖隐藏的内容 %% HullWhite三叉树的第二阶段
%% 第一阶段得到了初始的树
%% 第二阶段拟合当前的利率期限结构
function [FirstTree,SecondTree,ProTree,QTree]=HullWhiteTree_Second(T,N,Sigma,A,RateTerm)
%% 举例:[FirstTree,SecondTree,~,QTree]=HullWhiteTree_Second(3,3,0.01,0.1,[3.824/100 4.512/100 5.086/100])
%% [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])
%% RateTerm是利率的期限结构
%% 利率树采用连续利率
%% 先得到第一棵树
if length(RateTerm)~=N
error('Reset Your RateTerm');
end
deltaT=T/N;
MaxBin=ceil(0.184/(A*(deltaT)));
[FirstTree,ProTree,~,~]=HullWhiteTree_First(T,N,Sigma,A);
SecondTree=FirstTree;
%% 构建二期树
QTree=zeros(2*MaxBin+1,N);
Alpha=zeros(length(RateTerm),1);
for i=1:N
% 第一列
if i==1
QTree(i,1)=1;
Alpha(i)=RateTerm(i);
SecondTree(i,1)=SecondTree(i,1)+Alpha(i);
end
% 第二列
if i==2
Price=exp(-RateTerm(i)*i);
Sum=0;
for j=1:3
Probability=ProTree{1,1};
QTree(j,i)=QTree(1,1)*Probability(j)*exp(-SecondTree(1,1)*deltaT);
Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
end
Alpha(i)=(log(Sum)-log(Price))/deltaT;
SecondTree(1:3,i)=SecondTree(1:3,i)+Alpha(i);
end
% 三列以后
if i>=3
if i<=MaxBin+1
Price=exp(-RateTerm(i)*i);
Sum=0;
for j=1:2*(i-1)+1
% 顶端
if j==1
Probability=ProTree{j,i-1};
QTree(j,i)=Probability(1)*QTree(j,i-1)*exp(-SecondTree(j,i-1)*deltaT);
Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
% 最下端
elseif j==2*(i-1)+1
Probability=ProTree{j-2,i-1};
QTree(j,i)=Probability(3)*QTree(j-2,i-1)*exp(-SecondTree(j-2,i-1)*deltaT);
Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
% 上一端
elseif j==2
Probability1=ProTree{j-1,i-1};
Probability2=ProTree{j,i-1};
QTree(j,i)=QTree(j,i)+Probability1(2)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
QTree(j,i)=QTree(j,i)+Probability2(1)*QTree(j,i-1)*exp(-SecondTree(j,i-1)*deltaT);
Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
% 下一端
elseif j==2*(i-1)
Probability1=ProTree{j-2,i-1};
Probability2=ProTree{j-1,i-1};
QTree(j,i)=QTree(j,i)+Probability1(3)*QTree(j-2,i-1)*exp(-SecondTree(j-2,i-1)*deltaT);
QTree(j,i)=QTree(j,i)+Probability2(2)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
else
Probability1=ProTree{j-2,i-1};
Probability2=ProTree{j-1,i-1};
Probability3=ProTree{j,i-1};
QTree(j,i)=QTree(j,i)+Probability1(3)*QTree(j-2,i-1)*exp(-SecondTree(j-2,i-1)*deltaT);
QTree(j,i)=QTree(j,i)+Probability2(2)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
QTree(j,i)=QTree(j,i)+Probability3(1)*QTree(j,i-1)*exp(-SecondTree(j,i-1)*deltaT);
Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
end
end
Alpha(i)=(log(Sum)-log(Price))/deltaT;
SecondTree(1:2*(i-1)+1,i)=SecondTree(1:2*(i-1)+1,i)+Alpha(i);
end
% 到了横列
if i>MaxBin+1
Price=exp(-RateTerm(i)*i);
Sum=0;
for j=1:2*MaxBin+1
% 顶端
if j==1
Probability1=ProTree{j,i-1};
Probability2=ProTree{j+1,i-1};
QTree(j,i)=QTree(j,i)+Probability1(2)*QTree(j,i-1)*exp(-SecondTree(j,i-1)*deltaT);
QTree(j,i)=QTree(j,i)+Probability2(3)*QTree(j+1,i-1)*exp(-SecondTree(j+1,i-1)*deltaT);
Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
% 底端
elseif j==2*MaxBin+1
Probability1=ProTree{j-1,i-1};
Probability2=ProTree{j,i-1};
QTree(j,i)=QTree(j,i)+Probability1(3)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
QTree(j,i)=QTree(j,i)+Probability2(2)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
else
Probability1=ProTree{j-1,i-1};
Probability2=ProTree{j,i-1};
Probability3=ProTree{j+1,i-1};
QTree(j,i)=QTree(j,i)+Probability1(3)*QTree(j-1,i-1)*exp(-SecondTree(j-1,i-1)*deltaT);
QTree(j,i)=QTree(j,i)+Probability2(2)*QTree(j,i-1)*exp(-SecondTree(j,i-1)*deltaT);
QTree(j,i)=QTree(j,i)+Probability3(1)*QTree(j+1,i-1)*exp(-SecondTree(j+1,i-1)*deltaT);
Sum=Sum+QTree(j,i)*exp(-SecondTree(j,i)*deltaT);
end
end
Alpha(i)=(log(Sum)-log(Price))/deltaT;
SecondTree(1:2*MaxBin+1,i)=SecondTree(1:2*MaxBin+1,i)+Alpha(i);
end
end
end
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 复制代码
具体实现:
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])
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝