Quiero obtener el precio teórico de un bono cupón cero cada día utilizando quantlib, soy capaz de hacer esto hasta justo antes de la fecha de vencimiento donde me sale el siguiente error: # RuntimeError: non tradable at April 17th, 2023 settlement date (maturity being April 14th, 2023)
No estoy seguro de si esto es un error con quantlib o un malentendido de cómo funcionan las convenciones en renta fija, así que vine aquí para publicar el ejemplo a continuación, ya que no estoy seguro de por qué las fechas de liquidación deben ser negociables.
import QuantLib as ql
settlement_days = 2
eval_date = ql.Date(13, 4, 2023)
rf_rate = 4.75845 / 100.0
def zero_coupon_bond(rf, dt, maturity, settlement_days=2):
ql.Settings.instance().evaluationDate = dt
zcb = ql.ZeroCouponBond(settlement_days, ql.UnitedStates(), 100, maturity)
crv = ql.FlatForward(settlement_days, ql.UnitedStates(), rf, ql.Actual360())
zcb_price = ql.BondFunctions.cleanPrice(zcb, crv)
return zcb_price
# Example showing code working
maturity = ql.Date(19, 4, 2023)
print(zero_coupon_bond(rf_rate, eval_date, maturity, settlement_days))
# Near to maturity QL error
maturity = ql.Date(14, 4, 2023)
print(zero_coupon_bond(rf_rate, eval_date, maturity, settlement_days))