第十章
利率期限结构传统理论
学习目标
理解利率期限结构的基本理论
能够利用利率期限结构理论解释不同类型的收益率曲线
能够选用合适的平滑方法构建到期收益率曲线
利率期限结构理论
利率期限结构:没有违约风险的不同期限的零息债券到期收益率(即期利率)之间的关系。
利率期限结构基本理论:
无偏预期理论
风险溢价理论
市场分割理论
流动性偏好理论
传统利率期限结构理论
构建到期收益率曲线
靶靴法:核心思想是通过把附息债券各期现金流看成不同期限的零息债券,利用已知的较短期限的收益率推得新的到期收益率
传统利率期限结构理论
对到期收益率曲线进行平滑
三次样条插值法
传统利率期限结构理论
对中国债券市场,如果考虑30年期的折现因子函数, 贴现因子有如下形式
传统利率期限结构理论
指数样条法
传统利率期限结构
考虑30年期的折现因子函数 ,则
传统利率期限结构
Nelson-Siegel 模型
传统利率期限结构
Nelson-Siegel Svensson扩展模型
传统利率期限结构
例:现有2003年3月28日交易的15只附息国债相关数据,试确定利率期限结构。
传统利率期限结构
首先,我们把债券相关数据按照上表的顺序输入excel,保存文件
利用靶靴法确定给定到期时间的到期收益率,
clear;
[Numeric,Txt]=xlsread('d:\\mfile\data');
a=Numeric;
b=Txt(:,1);
c=b(2:16);
Bonds=[datenum(c),a(:,[1:5])];
Settle=datenum('03/28/2003')
OutputCompounding=-1;
[ZeroRates,CurveDates]=zbtprice(Bonds,a(:,6),Settle,OutputCompounding)
传统利率期限结构
使用内插值法对收益率曲线进行平滑
matlab自带的平滑零息债券到期收益率的函数:Termfit ,应用样条插值的方法对收益率曲线进行平滑,[ZeroRates, CurveDates, BootZeros, BootDates, BreakDates] = termfit (Smoothing , Bonds ,Prices ,Settle ,OutputCompounding ),其中0<Smoothing<1,它取值的代表曲线的拟和程度。
传统利率期限结构
利用termfit得到的到期收益率曲线,图中*表示数据表中15只债券的到期收益率。
传统利率期限结构-多项式插值
目标函数:
function F = myfunpoly(x)
global d ZeroRates f T t b a;
[Numeric,Txt]=xlsread('d:\\mfile\book4');
a=Numeric;
b=Txt(:,1);
c=b(2:16);
Bonds=[datenum(c),a(:,[1:5])];
传统利率期限结构-多项式插值
s=a(:,6);
Settle=datenum('03/18/2003');
OutputCompounding=-1;
[ZeroRates,CurveDates]=zbtprice(Bonds,a(:,6),Settle,OutputCompounding);
d=date2time(Settle,c,1);
for i=1:15
if d(i)<=5
f(i)=1+x(1)*d(i)+x(2)*d(i)^2+x(3)*d(i)^3;
f(i)=-log(f(i))/d(i);
else if 5<d(i)<=10
传统利率期限结构-多项式插值
f(i)=1+x(1)*d(i)+x(2)*d(i)^2+x(3)*(d(i)^3-(d(i)-5)^3)+x(4)*(d(i)-5)^3;
f(i)=-log(f(i))/d(i);
else if 10<d(i)<=30
f(i)=1+x(1)*d(i)+x(2)*d(i)^2+x(3)*(d(i)^3-(d(i)-5)^3)+x(4)*((d(i)-5)^3-(d(i)-10)^3)+x(5)*(d(i)-10)^3;
f(i)=-log(f(i))/d(i);
end
end
end
end
F=Dot(f-ZeroRates',f-ZeroRates');
传统利率期限结构-多项式插值
主程序::
clear;
global f d T t b a ZeroRates;
x0=[ ]
[x,fval] = fminsearch(@myfunpoly,x0)
figure
plot(d,f,'-rs',d,ZeroRates,'-g')
%datetick('x',2)
xlabel('到期时间')
ylabel('收益率')
title('poly fit approximation')
传统利率期限结构-多项式插值
legend(' curve (ZeroRates Curve as of 03/28/2003)', ...
['PL(c_{0} = ' sprintf('%',x(1)) ',' ...
'b_{0} = ' sprintf('%',x(2)) ',' ...
'a_{0} = ' sprintf('%',x(3)) ',' ...
'a_{1}= ' sprintf('%',x(4)) ',' ...
'a_{2}= ' sprintf('%',x(5)) ')'])
legend(gca,'boxoff')
输出结果:x =
fval =
传统利率期限结构-多项式插值
多项式插值法的到期收益率曲线
传统利率期限结构-指数样条插值
指数样条插值法得到的到期收益率曲线
传统利率期限结构- Nelson-Siegel 模型
function[par] = nelsonfit(x,y)
= fminbnd(@(tau) nelson(tau),0,10);
= lsbetas();
function[f] = nelson(tau)
[b,f] = lsbetas(tau);
end
function[b,varargout] = lsbetas(tau)
i = x(:)/tau;
j = 1-exp(-i);
n = length(x);
z = [ones(n,1) j./i (j./i)+j-1];
b = (z'*z)\(z'*y(:));
e = y(:) - z*b;
varargout(1) = {e'*e};
end
end
传统利率期限结构- Nelson-Siegel 模型
function[y] = nelsonfun(x,par)
i = x(:)/;
j = 1-exp(-i);
y = (1) + (2)*j./i + (3)*((j./i)+j-1);
传统利率期限结构- Nelson-Siegel 模型
clear;
[Numeric,Txt]=xlsread('d:\\mfile\book4');
a=Numeric;
b=Txt(:,1);
c=b(2:16);
Bonds=[datenum(c),a(:,[1:5])];
Settle=datenum('03/28/2003')
OutputCompounding=-1;
[ZeroRates,CurveDates]=zbtprice(Bonds,a(:,6),Settle,OutputCompounding)
y=ZeroRates';
x=date2time(Settle,c,1);
y=y';
传统利率期限结构- Nelson-Siegel 模型
par = nelsonfit(x,y);
p = nelsonfun(x,par);
figure
set(gcf,'Color','w')
plot(x,y,'-rs'); hold on
plot(x,p,'-g' )
title('Nelson-Siegel 模拟')
xlabel('Maturity, years')
legend(' curve (ZeroRates Curve as of 03/28/2003)', ...
['NS(\beta_{0} = ' sprintf('%',(1)) ',' ...
'\beta_{1} = ' sprintf('%',(2)) ',' ...
'\beta_{2} = ' sprintf('%',(3)) ',' ...
'\tau = ' sprintf('%',) ')'])
legend(gca,'boxoff')
传统利率期限结构- Nelson-Siegel 扩展模型
Nelson-Siegel 扩展模型得到的到期收益率曲线
传统利率期限结构
nss拟和的债券价格与债券真实价格最接近,nss方法次之,指数样条函数法拟和结果差异最大;
多项式样条函数与指数样条函数法拟和结果类似对最短期限的债券价格拟和不好;
多项式样条函数与指数样条函数法对最短期限的债券价格和超过20年期债券拟和不好,收益率出现负值。