I am struggling to get an equivalent of Excel's YIELD function using Quantlib in python. As you can see from the Excel documentation on YIELD here, only a few parameters are needed compared to this example using Quantlib http://gouthamanbalaraman.com/blog/quantlib-bond-modeling.html
Also, if I use the function bondYield, I can't seem to get the same values as in Excel. Take for example this bond:
the YIELD above has the formula
=YIELD(B1,B2,B3/100,B4,100,2,1)*100. The yield is
If I try to set up similar parameters in Quantlib, as shown below
# ql.Schedule calendar = ql.UnitedStates() bussinessConvention = ql.ModifiedFollowing dateGeneration = ql.DateGeneration.Backward monthEnd = False cpn_freq = 2 issueDate = ql.Date(30, 9, 2014) maturityDate = ql.Date(30, 9, 2019) tenor = ql.Period(cpn_freq) schedule = ql.Schedule(issueDate, maturityDate, tenor, calendar, bussinessConvention, bussinessConvention, dateGeneration, monthEnd) # ql.FixedRateBond dayCounter = ql.ActualActual() settlementDays = 1 faceValue = 100 couponRate = 1.75 / 100 coupons = [couponRate] fixedRateBond = ql.FixedRateBond(settlementDays, faceValue, schedule, coupons, dayCounter) # ql.FixedRateBond.bondYield compounding = ql.Compounded cleanPrice = 100.7421875 fixedRateBond.bondYield(cleanPrice, dayCounter, compounding, cpn_freq) * 100
This gives a yield of
1.3784187000852273, which is close, but not the same as the one given by the excel function.