今天使用Quantlib计算债券净值,发现了如下几个问题:
1、我针对的债券是170005,我的python代码如下,输出结果为:
92.26311173758944
92.19722044465708
但是使用其他工具,计算出的结果为92.1588
使用到期收益率计算净价的方法是错的嘛?
2、两种pricevalue的结果不一样,是我理解错了嘛?
3、NPV和cleanprice的区别是啥?
1 import QuantLib as ql 2 3 faceAmount = 100.0 4 redemption = 100.0 5 issueDate = ql.Date(20, 2, 2017) 6 maturity = ql.Date(20, 2, 2047) 7 couponRate = 0.0377 8 coupons = [couponRate] 9 ytm = 0.04245 10 calendar = ql.China(ql.China.IB) 11 today = calendar.adjust(ql.Date(13, 9, 2018)) 12 ql.Settings.evaluationDate = today 13 settlementDays = 0 14 settlementDate = calendar.advance( 15 today, 16 ql.Period(settlementDays, ql.Days)) 17 18 discountingTermStructure = ql.RelinkableYieldTermStructureHandle() 19 flatTermStructure = ql.FlatForward(settlementDate, 20 ytm, 21 ql.ActualActual(ql.ActualActual.ISMA), 22 ql.Compounded, 23 ql.Semiannual) 24 discountingTermStructure.linkTo(flatTermStructure) 25 bondEngin = ql.DiscountingBondEngine(discountingTermStructure) 26 27 schedule = ql.Schedule(issueDate, 28 maturity, 29 ql.Period(ql.Semiannual), 30 ql.China(ql.China.IB), 31 ql.Following, 32 ql.Following, 33 ql.DateGeneration.Backward, 34 False) 35 fixedRateBond = ql.FixedRateBond(settlementDays, 36 faceAmount, 37 schedule, 38 coupons, 39 ql.ActualActual(ql.ActualActual.ISMA), 40 ql.Following, 41 redemption, 42 issueDate) 43 fixedRateBond.setPricingEngine(bondEngin) 44 45 print(fixedRateBond.cleanPrice()) 46 print(fixedRateBond.cleanPrice(0.04245,ql.ActualActual(ql.ActualActual.ISMA),ql.Compounded,ql.Semiannual,ql.Date(13,9,2018)))