Yield to Maturity Function
def yield_to_maturity(contract, curve, cleanprice:float|None=None, dirtyprice:float|None=None):
if isinstance(contract, ct.FixedRateBond):
fbond : ct.FixedRateBond = contract
term_structure_handle = ql.YieldTermStructureHandle(get_curve(curve))
day_count = ct.translate_daycount(fbond.day_count)
frequency = ct.translate_frequency(fbond.schedule.frequency)
bondvalue = value(contract, curve)
if cleanprice == None and dirtyprice == None:
ytm = bondvalue.bondYield(
day_count,
ql.Compounded,
frequency
)
return ytm
#market_clean_price = bondvalue.cleanPrice()
if cleanprice != None:
clean_market_price = ql.BondPrice(cleanprice, ql.BondPrice.Clean)
# 6. Calculate Yield To Maturity (YTM)
ytm = bondvalue.bondYield(
clean_market_price,
day_count,
ql.Compounded,
frequency
)
return ytm
clean_market_price = ql.BondPrice(dirtyprice, ql.BondPrice.Dirty)
# 6. Calculate Yield To Maturity (YTM)
ytm = bondvalue.bondYield(
clean_market_price,
day_count,
ql.Compounded,
frequency
)
return ytm
pass