Estoy trabajando con 10 bonos con diferentes vencimientos y quiero obtener la curva cero. He probado el quantlib. Sin embargo, no puedo entender el parámetro en FixedRateBondHelper. Aquí está mi código:
def bootstrap(ytm_data):
calc_date = ql.Date(13, 4, 2020)
ql.Settings.instance().evaluationDate = calc_date
ytm_data['ytm'] = (1+ytm_data['ytm']/2).pow(2)-1 # annulize YTM
calendar = ql.UnitedStates()
bussiness_convention = ql.Unadjusted
#day_count_bill = ql.Actual360()
day_count = ql.ActualActual(ql.ActualActual.Bond)
end_of_month = False
settlement_days = 2
face_amount = 100
coupon_frequency = ql.UnitedStates.GovernmentBond
depo_helper = []
bond_helper = []
for date,rate,quote in ytm_data.values.tolist():
timedelta = date - calc_date
period = ql.Period('%dd'%timedelta)
if timedelta<365:
depo_helper.append(ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(rate)), period, settlement_days, calendar, bussiness_convention, end_of_month, day_count))
if timedelta>365:
schedule = ql.Schedule(calc_date, date,
coupon_frequency,
calendar,
bussiness_convention,
bussiness_convention,
ql.DateGeneration.Backward,
end_of_month)
helper = ql.FixedRateBondHelper(ql.QuoteHandle(ql.SimpleQuote(quote)),
settlement_days,
face_amount,
schedule,
[rate],
day_count,
bussiness_convention,
)
bond_helper.append(helper)
rate_helper = depo_helper + bond_helper
yieldcurve = ql.PiecewiseLogCubicDiscount(calc_date,
rate_helper,
day_count)
spots = []
tenors = []
for d in yieldcurve.dates():
yrs = day_count.yearFraction(calc_date, d)
compounding = ql.Compounded
freq = ql.Semiannual
zero_rate = yieldcurve.zeroRate(yrs, compounding, freq)
tenors.append(yrs)
eq_rate = zero_rate.equivalentRate(day_count,
compounding,
freq,
calc_date,
d).rate()
spots.append(eq_rate)
return spots,tenors,yieldcurve
Estos son los datos del mercado Aquí está ytm_data
He calculado el YTM de cada bono. Esta es la pregunta:
- ¿cuáles son los datos que debo poner en el ql.QuoteHandle(ql.SimpleQuote(rate))? Sólo uso YTM anulado como tasa
- cuál es la [tasa] en ql.FixedRateBondHelper, la tasa del cupón nuestra tasa YTM.
- Qué precio debo poner en ql.QuoteHandle(ql.SimpleQuote(quote)), precio limpio o precio completo.
- después del cálculo, el nodo en yieldcurve tiene una fecha diferente con los datos originales del mercado. ¿Por qué ocurre esto?
Soy bastante nuevo en quantlib. Gracias de antemano.