债券计息基准为年化时间的计算基准,应计利息则描述了持有债券期间(年化时间)获得利息的金额。本章主要介绍在计息基准的基础上,计算债券在持有期内获得利息金额的具体方法。在计算利息金额之前,需要知道上一计息计划结束日(首期则为起息日)至计算日之间的间隔天数,这又需得知债券整个计息间隔计划的日期。下面将用实例来讲解如何生成计息间隔计划的日期。
【实例2-1】 08国债02债券的基本信息如表2-1所示,请计算该债券的计息间隔计划。
表2-1 08国债02债券的基本信息
数据来源:中国货币网
【分析解答】由于08国债02的起息日为2008-2-28,付息频率为每半年付息一次,所以计息间隔计划为按半年频率增加的日期计划。由此可知08国债02的计息日期计划应当为:
2008-2-28,2008-8-28,2009-2-28,……,2022-8-28,2023-2-28。
下面采用Python编写生成债券计息计划的日期函数(coupon_schedule):
#加载需要使用的库
from datetime import date
from dateutil import relativedelta
#用于生成债券计息计划的日期的函数
def coupon_schedule(start_date,yearlenth,fre):
'''
:param start_date: 债券起息日;
:param yearlenth: 债券的发行年限;
:param fre: 债券的付息频率;
:return: 返回债券的计息间隔计划。
'''
schedule=[start_date]
if fre == 0: #付息频率为0,通常为零息或贴现债
schedule.append(start_date+relativedelta.relativedelta(months=12*yearlenth))
elif fre == 4: #付息频率为4
for i in range(3,int(yearlenth*3*4+1), 3):
schedule.append(start_date+relativedelta.relativedelta(months=i))
elif fre == 2: #付息频率为2
for i in range(6,int(yearlenth*6*2+1), 6):
schedule.append(start_date+relativedelta.relativedelta(months=i))
else: #付息频率为1
for i in range(12,int(yearlenth*12*1+1), 12):
schedule.append(start_date+relativedelta.relativedelta(months=i))
return schedule
调用coupon_schedule函数,输入起息日、发行年限、付息频率参数,进行计算。
#测试案例
schedule_test=coupon_schedule(start_date=date(2008,2,28),yearlenth=15,fre=2)
print("计息间隔计划:\n",schedule_test)
输出结果:
将上述计息间隔计划汇总整理成表2-2。
表2-2 08国债02债券的计息与付息时间
【注】计息天数算头不算尾。
需要注意的是,在不考虑节假日情况下,计息计划结束日和付息日是一致的。而国内的债券大部分是在遇到节假日时将付息日顺延至下一营业日。有了计息间隔计划,就可以判断起息日或上一计息计划结束日(未进行节假日调整)至计算日之间的年化时间,后续百元面值应计利息可以采用一个通用的思路进行计算,即 。