SAS在金融中的应用六

1.某种债券的期限为2年,面值1000元,票面利率5%,每月支付一次利息,假设投资者要求的必要收益率为从2%变化到10%,
请求出不同情况下的债券价格,并作出债券价格随利率变化的图形,写出sas程序。

data a;
array br(9) br1-br9;
do n=1 to 9;
	br(n)=0;
    do i=1 to 24;
	if i<24 then c=50/12;
	else c=1000+50/12;
    br(n)=br(n)+c/(1+((n+1)/100)/12)**i;
	end;
end;
proc print data=a;
run;
data b1;
set a;
keep br1-br9;
run;
proc transpose data=b1 out=c1 prefix=b4;
run;
data c1;
set c1;
c=(_n_+1)/100;
run;
proc print data=c1;
run;
title '债券价格随利率变化的轨迹';
proc gplot data=c1;
plot b41*c/vaxis=axis1 haxis=axis2;
symbol v=* i=join l=1 font=swissb;
axis1 label=('债券价格') order=(900 to 1060 by 20);
axis2 label=('利率') order=(0  to 0.1 by 0.01);
run;
quit;

在这里插入图片描述

2.19太平石化租赁债01 信息如下:票面利率为3.49%,每年付息一次,面值为100,到期日为2022年8月26日。
由于该债券信用评级比较高,某投资者要求的必要收益率为2.5%;
请问该债券价格为多少?请问该债券今天的久期为多少?你能编制一个宏程序完成该过程吗?

/*由题查询可知该债券缴款日和起息日为2019年8月26日,则债券的期限为三年*/
/*计算价格和久期的宏程序*/
%macro jq(n,mpt,fv,r);
data a1;
b=0;
d1=0;
do i=1 to &n.;
	if i<&n. then c=&mpt.;
	else c=&fv.+&mpt.;
	b=b+c/((1+&r.)**i);
	d1=d1+i*c/((1+&r.)**i);
end;
d=d1/b;
dm=d/(1+&r.);
proc print data=a1;
var b d dm;
%mend jq;
%jq(3,3.49,100,0.025);
run;

债券价格为102.827,今天的麦考利久期为2.90147,修正久期为2.83070;

3.某种债券的期限为5年,面值为100元,票面利率为5%,每半年支付一次利息,
如果分别采用3%、4%、5%作为贴现率,那么当t的取值从.5到5时,该债券在第t年初的价格分别为多少?
试绘制在三种贴现率下债券价格的时间轨迹图,观察并总结其规律。

%macro jg(x);
data a&x.;
array b&x.r(10) b&x.r1-b&x.r10;
do t=1 to 10;
	b&x.r(t)=0;
	do n=1 to 11-t;
	if n<11-t then c=2.5;
	else c=102.5;
	b&x.r(t)=b&x.r(t)+c/((1+(&x./2)/100)**n);
	end;
end;
data b&x.;
set a&x.;
drop t n c;
proc transpose data=b&x. out=c&x. prefix=b&x.;
%mend jg;
%jg(3);
%jg(4);
%jg(5);
run;
data c;
merge c3 c4 c5;
t=_n_/2;
title "三种不同折现率下债券价格的时间轨迹图";
proc gplot data=c;
plot b31*t b41*t b51*t/vaxis=axis1 haxis=axis2 overlay;
symbol v=* i=join l=1 font=swissb;
axis1 label=('债券价格') order=(100 to 110 by 1);
axis2 label=('时间') order=(0 to 5 by 0.5);
run;
quit;

规律总结:

当票面利率高于贴现利率时,债券价格高于面值,为溢价债券,溢价债券随着到期日的临近,其价格会逐渐下降,最后等于面值。

票面利率相同时,贴现利率越小,债券价格越高。

当票面利率等于贴现利率时,债券价格始终等于面值。

**4.一个债券组合中包含有三种债券,其期限分别为6年、10年和14年。三种债券都是每年支付一次利息,每种债券的利息都在年末支付,6年期的债券票面利率为5.5%,面值为10000,10年期的债券利率为6.5%,面值为20000;14年期的债券利率为7%,面值为30000,如果该债券组合的市场价格为58500,试计算该债券组合的内生收益率

data a;
input a;
cards;
1
2 
3 
4 
5 
6 
7 
8
 9 
10
11
12
13
14
;
run;
%macro xjl(b,n,x);
data a&n.;
set a;
if   a<&n. then c&n.=&b.*&x./100;
if  a=&n. then  c&n.=&b.+&b.*&x./100;
if   a>&n. then c&n.=0;
%mend xjl;
%xjl(10000,6,5.5);
%xjl(20000,10,6.5);
%xjl(30000,14,7);
run;
data c;
merge a6 a10 a14;
by a;
xjl=c6+c10+c14;
run;
proc transpose data =c out =c1;
var xjl;
run;
data c2;
set c1;
r=irr(1,-58500,col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14);
proc print data=c2;
var r;
run;

计算得该债券的内生收益率为7.01859%。

5.某债券的面值为500元,期限10年,票面利率为6%,利息每半年支付一次,如果市场利率为5%,试计算该债券的修正久期与凸度。
当市场利率从5%上升为5.5%时,试计算该债券价格变化的百分比,并计算修正久期可以解释的价格变化百分比和凸度可以解释的价格变化百分比。

data a;
b=0;
d1=0;
do n=1 to 20;
	if n<20 then c=15;
	else c=515;
	b=b+c/((1+0.025)**n);
	d1=d1+n*c/((1+0.025)**n);
end;
d=(d1/b)/2;
dm=d/(1+0.025);
data b;
set a;
keep b d dm;
run;

由以上程序可得当市场利率为5%时,债券的价格为538.97290571,修正久度为7.5724815788。

data c;
b=538.97290571;
con1=0;
do t=1 to 20;
	if t<20 then c=15;
	else c=515;
	con1=con1+t*(t+1)*c/((1+0.025)**t);
end;
con=(con1/(b*(1+0.025)**2))/4;/*凸度年化为70.649487995*/
data d;
set c;
keep con;
run;

凸度年化为70.649487995

data a1;
b=0;
do n=1 to 20;
	if n<20 then c=15;
	else c=515;
	b=b+c/((1+0.0275)**n);
end;
run;

当市场利率为5.5%时,债券价格为519.03406517,
当市场利率从5%上升为5.5%时,该债券价格变化的百分比=(519.03406517-538.97290571)/538.97290571=-3.7%

修正久期可以解释的价格变化百分比为-7.57248157880.005=-3.79%
凸度可以解释的价格变化百分比为0.5
70.649487995*(0.005^2)=0.0883%
(修正久期+凸度)度量幅度为-3.7017%。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值