1 votos

Fijación de precios de bonos próximos al vencimiento con QuantLib

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))

1voto

Brad Tutterow Puntos 5628

Un día antes del vencimiento, el bono sigue teniendo valor para usted (porque recibirá el pago final mañana), pero ya no se puede negociar, porque la operación se liquidaría después de dos días de liquidación, cuando el bono ya no existe. Por lo tanto, puede llamar a bond.NPV() que le dará el valor del pago final descontado un día, pero si llama a bond.cleanPrice() obtendrá ese error.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X