债券标的为170005,我的python代码如下:
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 frequency = ql.Semiannual 12 compounce = ql.Compounded 13 dayCounter = ql.ActualActual(ql.ActualActual.ISMA) 14 15 accuracy=1.0e-8 16 maxNum = 500 17 today = calendar.adjust(ql.Date(14, 9, 2018)) 18 ql.Settings.evaluationDate = today 19 settlementDays = 0 20 settlementDate = calendar.advance( 21 today, 22 ql.Period(settlementDays, ql.Days)) 23 24 discountingTermStructure = ql.RelinkableYieldTermStructureHandle() 25 flatTermStructure = ql.FlatForward(settlementDate, 26 ytm, 27 dayCounter, 28 compounce, 29 frequency) 30 31 discountingTermStructure.linkTo(flatTermStructure) 32 bondEngin = ql.DiscountingBondEngine(discountingTermStructure) 33 34 schedule = ql.Schedule(issueDate, 35 maturity, 36 ql.Period(frequency), 37 ql.China(ql.China.IB), 38 ql.Following, 39 ql.Following, 40 ql.DateGeneration.Backward, 41 False) 42 fixedRateBond = ql.FixedRateBond(settlementDays, 43 faceAmount, 44 schedule, 45 coupons, 46 dayCounter, 47 ql.Following, 48 redemption, 49 issueDate) 50 fixedRateBond.setPricingEngine(bondEngin) 51 52 print(fixedRateBond.cleanPrice()) 53 print(fixedRateBond.cleanPrice(0.04245,dayCounter,compounce,frequency,ql.Date(14,9,2018))) 54 print(fixedRateBond.dirtyPrice(0.04245,dayCounter,compounce,frequency)) 55 print(fixedRateBond.bondYield(95,dayCounter,compounce,frequency,ql.Date(14,9,2018),accuracy,maxNum)) 56 print(flatTermStructure.zeroRate(ql.Date(14,9,2018),dayCounter,compounce, frequency).rate())
输出结果为:
92.25734945596061
92.19752850225078
92.45364263268556
0.04068211793899536
0.0424500000008563
1、两种pricevalue的计算结果不一样,是我理解错了嘛?
2、NPV和cleanprice的区别是啥?