When we price a fixed rate bond using Quantlib
, we generally take below approach -
import QuantLib as ql
import pandas as pd
todaysDate = ql.Date(31, 8, 2019)
ql.Settings.instance().evaluationDate = todaysDate
spotDates = [ql.Date(1,9,2019), ql.Date(5,9,2019), ql.Date(7,9,2019)]
spotRates = [0.066682, 0.067199, 0.067502]
dayCount = ql.Actual365Fixed()
calendar = ql.SouthAfrica()
interpolation = ql.Linear()
compounding = ql.Compounded
compoundingFrequency = ql.Semiannual
spotCurve = ql.ZeroCurve(spotDates, spotRates, dayCount, calendar, interpolation, compounding, compoundingFrequency)
spotCurveHandle = ql.YieldTermStructureHandle(spotCurve)
issueDate = ql.Date(20, 4, 2017)
maturityDate = ql.Date(20, 4, 2019)
tenor = ql.Period(ql.Semiannual)
calendar = ql.SouthAfrica()
bussinessConvention = ql.Following
dateGeneration = ql.DateGeneration.Backward
monthEnd = False
schedule = ql.Schedule(issueDate, maturityDate, tenor, calendar, bussinessConvention, bussinessConvention, dateGeneration, monthEnd)
dayCount = ql.Actual365Fixed()
couponRate = 0.0925
coupons = [couponRate]
settlementDays = 3
faceValue = 100
fixedRateBond = ql.FixedRateBond(settlementDays, faceValue, schedule, coupons, dayCount)
bondEngine = ql.DiscountingBondEngine(spotCurveHandle)
fixedRateBond.setPricingEngine(bondEngine)
fixedRateBond.NPV()
However my question is - instead of a typical bond if I need to price the Annuity
(i.e. there is no Principal payment at the maturity), how can I modify above codebase?
Any pointer will be highly appreciated.