![Python金融量化实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/293/51647293/b_51647293.jpg)
2.1 国内债券常见计息基准
2.1.1 附息债券
附息债券,指债券券面上附有利率条款(即具有票息)的债券,包含固定、浮动利率债券和普通资产支持证券。
(1)实际/实际——付息频率小于或等于1年(按平均值付息)。
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000167.jpg?sign=1738855297-aDMwVVxCqyoC0mMAxiWjtjWg5voQxRM0-0-bc30c94d23305d9585456b7bd48a0707)
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000171.jpg?sign=1738855297-JjE18tAwcGZqVk6BuHrsHQFev92cCl6o-0-f6ff4072c3d9a5814dccb96807e7b98b)
:起息日或上一计息计划结束日至计算日的年化时间。
:起息日或上一计息计划结束日至计算日的实际(或自然日)天数,含2月29日。
:计算日所处付息周期的自然日天数,含2月29日。
:债券的付息频率。
:按百元面值计价的债券在计算日的应计利息。
:按百元面值计价的债券年利息。
:按百元面值计价的债券在计算日剩余本金值。
【注】针对付息频率小于等于1年的情况,发行公告中很多未明确约定按照哪种方式付息,通常采用平均值付息的公式。
【实例2-2】债券信息同实例2-1,计算该债券在2020-5-20的日间百元面值应计利息。
【分析解答】由债券信息可以计算得到:
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000243.jpg?sign=1738855297-raXmDC1EMkZNTPEB83pCVpIkgDZ7Wx6a-0-fce940eee8e1179438ce33ba5b896dd7)
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000249.jpg?sign=1738855297-Rx6QLH8P5PtbxMke5Sa8k8bIDntm3mu2-0-742cca43fa8952855855750cfa889dda)
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000258.jpg?sign=1738855297-oZ2DOEkKX2F0vC1PbJ9kNcId4cpIZyom-0-c531dd1731122e611cf3eff89b15b1f7)
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000262.jpg?sign=1738855297-x0uCz6i74p7IzAQgng7VN5z1g4t9skCo-0-596f52b8f4bc4ea7168847b22680bae4)
下面采用Python编写实际/实际(按平均值付息)基准应计利息的函数(ACT_ACT_AVE)。
#加载需要使用的库 from coupon_schedule import * #计息基准为ACT_ACT_AVE的函数 def ACT_ACT_AVE(cal_date,start_date,yearlenth,fre, coupon,m): ''' :param cal_date: 计算日期; :param start_date: 债券的起息日; :param yearlenth: 债券的发行年限; :param fre: 债券的付息频率; :param coupon: 债券的百元票面利息; :param m: 债券的百元剩余本金; :return: 返回债券应计利息的计算结果。 ''' #寻找计算日在哪两个付息日之间 schedule=coupon_schedule(start_date=start_date,yearlenth=yearlenth,fre=fre) for i in range(1, len(schedule)): if schedule[i] >= cal_date: break #实际/实际——付息频率小于等于1年(按平均值付息) yearfactor = (cal_date - schedule[i-1]) / ((schedule[i] - schedule[i-1]) * fre) AI = yearfactor * coupon * m / 100 return AI
调用ACT_ACT_AVE函数,输入计算日、起息日、发行年限、付息频率、百元票面利息(通常为票面利率乘以100)和当前百元剩余本金进行计算。
#测试案例 ACC1=ACT_ACT_AVE(cal_date=date(2020,5,20),start_date=date(2008,2,28), yearlenth=15,fre=2,coupon=4.16,m=100) print("应计利息:",round(ACC1,5))
输出结果:
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000270.jpg?sign=1738855297-AJzq0DoEtsjuaUl7qlYpgFi6PSPQekLv-0-27d9945d5623d8ced509a5c8c7bf0831)
【注】为方便查看,这里应计利息精度统一保留5位小数。
(2)实际/实际——付息频率小于1年(按实际天数付息)。
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000277.jpg?sign=1738855297-53r6cOteDqWDdGYAq0ZWPkr5JkpxZB5g-0-82103e9a78f1f6741cc1827b5bb32428)
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000283.jpg?sign=1738855297-hYJAU90rmVUy0X2C9sHlYK6OW6zovoNz-0-e5f8390ba86fba77494a8e54dfcc6d0f)
:起息日或上一计息计划结束日至计算日的年化时间。
:起息日或上一计息计划结束日至计算日的自然日天数,含2月29日。
:计算日所处付息周期所在计息年度的自然日天数(从起息日起计算的计算日所属的整年度,即债券本身的完整计息年度),含2月29日。
:按百元面值计价的债券在计算日的应计利息。
:按百元面值计价的债券年利息。
:按百元面值计价的债券在计算日剩余本金值。
【注】计息年度是从起息日起,每加1年(即下一年的同月同日)算一个完整的计息年度。如果该完整年度中包含2月29日,无论几次付息,该计息年度分母均按366天计算;若不包含2月29日,采用365天计算。
【实例2-3】债券信息同实例2-1,计算该债券在2020-5-20的日间百元面值应计利息,对比实际/实际中按平均值和实际天数的计算是否存在差异。
【分析解答】依据债券信息可以计算得到:
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000243.jpg?sign=1738855297-raXmDC1EMkZNTPEB83pCVpIkgDZ7Wx6a-0-fce940eee8e1179438ce33ba5b896dd7)
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000345.jpg?sign=1738855297-q4gVTDbn1bqUILJm3OlGWyXQM7vHuqY1-0-2b26f6eeeb7c5f4d426caf89640eb45c)
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000258.jpg?sign=1738855297-oZ2DOEkKX2F0vC1PbJ9kNcId4cpIZyom-0-c531dd1731122e611cf3eff89b15b1f7)
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000355.jpg?sign=1738855297-egB2j0hpCrAQFb4wPMjQQujnDMFtBldI-0-440182cc9fd6fc480cde6bbaecfac608)
下面采用Python编写实际/实际(按实际天数)基准应计利息的函数(ACT_ACT_ACT)。
#加载需要使用的库 from coupon_schedule import * from dateutil import relativedelta #计息基准为ACT_ACT_ACT的函数 def ACT_ACT_ACT(cal_date,start_date,yearlenth,fre, coupon,m): ''' :param cal_date: 计算日期; :param start_date: 债券的起息日; :param yearlenth: 债券的发行年限; :param fre: 债券的付息频率; :param coupon: 债券的百元票面利息; :param m: 债券的百元剩余本金; :return: 返回债券应计利息的计算结果。 ''' #寻找计算日在哪两个付息日之间 schedule=coupon_schedule(start_date=start_date,yearlenth=yearlenth,fre=fre) for i in range(1, len(schedule)): if schedule[i] >= cal_date: break #实际/实际——付息频率小于等于1年(按实际天数付息),包含利随本清债券 schedule_spe = [schedule[0]] if yearlenth < 1: yearlenth = 1 for j in range(12, int(yearlenth * 12 * 1 + 1), 12): schedule_spe.append(schedule[0] + relativedelta.relativedelta(months=j)) for k in range(1, len(schedule_spe)): if schedule_spe[k] >= cal_date: break TY = schedule_spe[k] - schedule_spe[k - 1] yearfactor = (cal_date - schedule[i - 1]) / TY AI = yearfactor * coupon * m / 100 return AI
调用ACT_ACT_ACT函数,输入计算日、起息日、发行年限、付息频率、百元票面利息(通常为票面利率乘以100)和当前百元剩余本金进行计算。
#测试案例 ACC2=ACT_ACT_ACT(cal_date=date(2020,5,20),start_date=date(2008,2,28), yearlenth=15,fre=2,coupon=4.16,m=100) print("应计利息:",round(ACC2,5))
输出结果:
![](https://epubservercos.yuewen.com/829721/30471360703749406/epubprivate/OEBPS/Images/tx000357.jpg?sign=1738855297-JbhcI3VVZ6zK7E5kcVfRKfFLMpJdmJ8x-0-e7ebb17a8a2474f16573f16852641fcd)
可以发现,计息基准不同时,即便债券其他要素及计算日期均相同,计算的结果也有所不同。