Supongamos que tenemos un bono de cupón semestral. La fecha de cálculo es el 5/8 de 2017. La fecha ex-cupón es el 20/4 de 2017 y la siguiente fecha de cupón es el 20/10 de 2017.
issue_date= Date(20,10,2001)
maturity_date=Date(20, 10, 2021)
tenor=Period(2)
calendar=China()
business_convention=Unadjusted
date_generation=DateGeneration.Backward
month_end=False
schedule=Schedule(issue_date,maturity_date,tenor,calendar,business_convention,business_convention,date_generation,month_end)
day_count= ActualActual(ActualActual.ISMA,schedule)
Cuando defino el day_count
, especifico el tipo y el horario del cupón. Hay 165 días entre el 5/8 2017 y el 10/20 2017, y 183 días en este período. Esto debería ser 0,4508 (que se divide por la frecuencia). En realidad, puedo obtener esto definiendo el periodo del cupón:
day_count.yearFraction(calc_date,Date(20,10,2017),Date(20,4,2017),Date(20,10,2017))
Out[1]: 0.45081967213114754
Sin embargo, cuando introduzco directamente el calc_date
, devuelve un resultado extraño.
day_count.yearFraction(calc_date,Date(20,10,2017))
Out[2]: 0.4166666666666667
Creo que esto cambiará el npv cuando construya FlatForward
curva de rendimiento y FixedRateBond
.