债券报价中的小陷阱
投资者习惯于使用到期收益率作为衡量债券投资价值的标杆,倾向于买入收益率高的债券,卖出收益率低的债券。这里有一个隐含的假设,所有债券的到期收益率都是由同一算法计算而得。但是事实上,真的是这样吗?
上图是在2015年4月21日截取的中债登的实时行情。我们取其中一个债券做示例:
- 代码:080014
- 净价:100.363
- 全价:103.214
- 票息:4.23%
- 到期收益率:3.019%
这个债券是2015年8月18日到期,还有一次付息。存续期不超过1年,为119天,0.326027年
1. 债券的例子
testBond = BuildBond('080014.XIBE')
testBond.bondProfile()
080014.XIBE | |
---|---|
securityID | 080014.XIBE |
issuer | 财政部 |
issueDate | 2008-08-18 |
exchange | XIBE |
shortName | 08国债14 |
maturity | 7Y |
startDate | 2008-08-18 |
maturityDate | 2015-08-18 |
settlementDays | 1 |
coupon | 0.0423 |
frequency | 1 |
dayCounter | Actual/Actual (ISMA) |
cleanPrice = 100.363
settlementDate = Date(2015,4,21)
2. 简单利率算法
print u'到期收益率:%.4f' % (testBond.yieldFromCleanPrice(cleanPrice,'Actual/Actual (ISMA)', Compounding.Simple, Frequency.Annual, settlementDate)*100)
print u'应计利息 :%.4f' % testBond.accruedAmount(Date(2015,4,21))
到期收益率:3.0196
应计利息 :2.8509
3. 复利算法
print u'到期收益率:%.4f' % (testBond.yieldFromCleanPrice(cleanPrice,'Actual/Actual (ISMA)', Compounding.Compounded, Frequency.Annual, settlementDate)*100)
print u'应计利息 :%.4f' % testBond.accruedAmount(settlementDate)
到期收益率:3.0504
应计利息 :2.8509
4. 总结
现阶段大多数行情软件的报价也都是依照中债登类似的做法。存续期少于1年的债券使用简单利率算法,大于1年的债券使用复利算法。同样的债券价格,使用不同的算法,获得的到期收益率会有些微的差异。这个差异在某个债券即将到期是特别明显(可能差几十个bp甚至上一个百分点)。所以投资者在使用到期收益率作为债券投资价值评估标准的时候,要注意这些差异。