2 votos

Error en QuantLib-Python cuando utilizo la función "Bond"

Estoy utilizando la función "Bond" en QuantLib-Python 1.14.

Estoy planeando utilizarlo de esta manera:

BondPtr::BondPtr(Natural,Calendar const &,Date const &,Leg const &)

He intentado construir el último parámetro como ql.Leg((cf1,cf2,cf3,cf4))

donde cf1=ql.SimpleCashFlow(3,ql.Date(25,1,20XX)) , cf2=... , cf3=... , cf4=...

Finalmente, me ha salido el error:

RuntimeError: no coupons provided

¿Puede alguien decirme cómo hacerlo correctamente? ¡Muchas gracias!

Aquí está mi código como referencia:

import QuantLib as ql cf1=ql.SimpleCashFlow(3,ql.Date(25,1,2019)) cf2=ql.SimpleCashFlow(3,ql.Date(25,1,2020)) cf3=ql.SimpleCashFlow(53,ql.Date(25,1,2021)) cf4=ql.SimpleCashFlow(51.5,ql.Date(25,1,2022)) couponsLeg=ql.Leg() couponsLeg.push_back(cf1) couponsLeg.push_back(cf2) couponsLeg.push_back(cf3) couponsLeg.push_back(cf4) newBond=ql.Bond(0,ql.UnitedStates(),ql.Date(25,1,2018),couponsLeg)

0 votos

Mi propósito es construir un bono con pago anticipado del principio (he añadido mi código como referencia). He leído el código C++, no tengo claro si he utilizado correctamente el ql.Leg().

1voto

Chris Mc Puntos 31

El problema es que el Bond El constructor espera una pata de cupones y tú le estás dando una pata de caja simple.

Puedes construirlo así (los canjes se asumirán a partir de los cupones):

dc = ql.Thirty360()
cf1 = ql.FixedRateCoupon(ql.Date(25,1,2019), 100, 0.03, dc, ql.Date(25,1,2018), ql.Date(25,1,2019))
cf2 = ql.FixedRateCoupon(ql.Date(25,1,2020), 100, 0.03, dc, ql.Date(25,1,2019), ql.Date(25,1,2020))
cf3 = ql.FixedRateCoupon(ql.Date(25,1,2021), 100, 0.03, dc, ql.Date(25,1,2020), ql.Date(25,1,2021))
cf4 = ql.FixedRateCoupon(ql.Date(25,1,2022), 50, 0.03, dc, ql.Date(25,1,2021), ql.Date(25,1,2022))
couponsLeg = ql.Leg([cf1, cf2, cf3, cf4])
newBond=ql.Bond(0,ql.UnitedStates(),ql.Date(25,1,2018),couponsLeg)

O, mejor aún, puede utilizar simplemente el AmortizingFixedRateBond clase:

notionals = [100,100,100,50]
schedule = ql.MakeSchedule(ql.Date(25,1,2018), ql.Date(25,1,2022), ql.Period('1y'))
bond = ql.AmortizingFixedRateBond(0, notionals, schedule, [0.03], ql.Thirty360())

Ambas cosas darían lugar a los mismos flujos de caja, que creo que es lo que quieres:

25 de enero de 2019 3.0
25 de enero de 2020 3.0
25 de enero de 2021 3.0
25 de enero de 2021 50,0
25 de enero de 2022 1,5
25 de enero de 2022 50,0

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