0

我使用 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函数略有不同。有人可以解释我哪里出错了吗?

谢谢。

4

0 回答 0