2 votos

Cómo obtener el precio de un bono si se da el rendimiento o viceversa en QuantLib

Por ejemplo enter image description here

Puede u proporcionar con un ejemplo detallado por favor si tengo ( vencimiento, fecha de emisión, cupón, frecuencia, days_countbase, (precio o rendimiento) lo que es el (rendimiento o precio dado esta información.

Por ejemplo, si tengo

vencimiento = 30/enero/2030 cupón del 3% fecha de emisión = 30/enero/2019 (no se sabe si es necesario en quantlib) frecuencia = semestral days_count base= isma-30/360 y un precio= asumiendo que quantlib utiliza cleanprice = 104.5

¿cuál sería el rendimiento al vencimiento de ese bono?

o la otra opción la misma información pero en lugar del precio tengo un rendimiento de 2,45% ¿cuál sería el clean_price?

Aprecio su ayuda, y si pudiera proporcionarme un ejemplo de código se lo agradecería mucho, he visto ejemplos y sus videos de youtube, y parece muy simple mi pregunta pero estoy teniendo un tiempo tan bada tratando de usar quntlib correctamente

Gracias

4voto

Chris Mc Puntos 31

Para obtener el rendimiento del bono a partir del precio:

import QuantLib as ql
maturity = ql.Date(30, 1, 2030)
coupon = 0.03
issueDate = ql.Date(30, 1, 2019)
frequency = ql.Semiannual
dayCount = ql.Thirty360()
price = 104.5

bond = ql.FixedRateBond(2, ql.TARGET(), 100.0, issueDate, maturity, ql.Period(frequency), [coupon], dayCount)
yld = bond.bondYield(price, dayCount, ql.Compounded, ql.Annual)
print(yld)

0.02487635655403138

Entonces, para hacer lo contrario:

cleanPrice = bond.cleanPrice(yld, dayCount, ql.Compounded, ql.Annual)
print(cleanPrice)

104.50000186708574


Para valorar el bono de su foto que es una valoración en el pasado:

ql.Settings.instance().evaluationDate = ql.Date(21,2,2012)
maturity = ql.Date(29, 4, 2016)
coupon = 0.038
issueDate = ql.Date(29, 4, 2006)
frequency = ql.Annual
dayCount = ql.Thirty360()
price = 98.847

bond = ql.FixedRateBond(2, ql.TARGET(), 100.0, issueDate, maturity, ql.Period(frequency), [coupon], dayCount)
yld = bond.bondYield(price, dayCount, ql.Compounded, ql.Annual)
print(yld)

0.04102500295639039

0 votos

Gracias David por tu ayuda, sólo una pregunta más que se me olvidaba, si quiero hacerlo en una fecha de liquidación concreta, digamos hoy ¿cómo se podría hacer?

0 votos

La fecha de evaluación se establece con ql.Settings.instance().evaluationDate. Si no la cambias, será hoy, pero puedes establecer una fecha diferente. He actualizado la respuesta para poner también el precio del bono en su imagen (no estoy seguro de que todas las convenciones sean correctas...)

0 votos

David, no tengo palabras para agradecer toda tu ayuda, esto me ha ayudado mucho, solo me pregunto cuando en el código añades 2 y 100 por defecto, cuales son esas convenciones y por otro lado veo que dentro de este código: bond = ql.FixedRateBond(2, ql.TARGET(), 100.0, issueDate, maturity, ql. Period(frequency), [coupon], dayCount) no hay referencia a la fecha de evaluación, por lo que no la necesita, o es el comando ql.TARGET() el que está haciendo el trabajo. estoy dispuesto a algunas clases David para quantlib, si podemos arreglar algo lo apreciaría

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