使用quantlib python的净价格、脏价格和净现值之间的差异

4dbbbstv  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(333)

我使用quantlib python为固定利率债券定价。
我曾经 ql.ActualActual(ql.ActualActual.ISMA, schedule) 确保每个息票支付期的现金流相同。
为了打折,我用了 ql.Actual360() 作为计日惯例。
我的代码如下:

import QuantLib as ql
valuationDate = ql.Date(30, 6, 2020)
ql.Settings.instance().evaluationDate = valuationDate
schedule = ql.Schedule(ql.Date(7, 5, 2016), ql.Date(15, 8, 2024), ql.Period(ql.Semiannual), ql.NullCalendar(), ql.Following, ql.Following, ql.DateGeneration.Forward, True)
fixedRateBond = ql.FixedRateBond(0, 100, schedule, [0.05], ql.ActualActual(ql.ActualActual.ISMA, schedule))
curve = ql.FlatForward(valuationDate, ql.QuoteHandle(ql.SimpleQuote(0.05)), ql.Actual360(), ql.Compounded)
handle = ql.YieldTermStructureHandle(curve)
bondEngine = ql.DiscountingBondEngine(handle)
fixedRateBond.setPricingEngine(bondEngine)
irr = fixedRateBond.bondYield(fixedRateBond.NPV(), ql.Actual360(), ql.Compounded, ql.Semiannual, valuationDate)
print('NPV:', fixedRateBond.NPV())
print('IRR:', irr)
print('Clean Price:', fixedRateBond.cleanPrice(irr, ql.Actual360(), ql.Compounded, ql.Semiannual, valuationDate))
print('Dirty Price:', fixedRateBond.dirtyPrice(irr, ql.Actual360(), ql.Compounded, ql.Semiannual, valuationDate))
print('Accrued Interest:', fixedRateBond.accruedAmount(ql.Date(30, 6, 2020)))

我得到的结果如下:

NPV: 100.59728065053405
IRR: 0.04743504524230957
Clean Price: 100.59728133098947
Dirty Price: 101.3309769831634
Accrued Interest: 0.7336956521739156

据我所知,净现值应该与脏价相同。然而,有一个微小的差异,我无法摆脱。如果有人能解释我错在哪里,我将不胜感激。
当我从脏价中减去净价以手动获得应计利息时,答案是0.7336956521739211,这与quantlib的略有不同 accruedAmount 功能。有人能解释一下我哪里出错了吗?
谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题