A continuación se muestran los pasos que seguí para valorar unos swaps. Solo quiero saber si he incluido los pasos clave en las definiciones anteriores. En algunos ejemplos encontré que también estamos agregando indexcurve.linkTo(). Creo que la vinculación no es necesaria ya que mi estructura de términos de rendimiento ya está vinculada a yts_discount. Por favor sugiera.
#tasas como sigue
tasas = Fecha_Vencimiento Tasa_Cero
8/25/2022 0.000556
8/31/2022 0.000580
9/7/2022 0.000569
9/14/2022 0.000573
9/23/2022 0.000577
def ConstruirCurva(clave_valor):
dc = ql.ActualActual()
crv = ql.ZeroCurve(
fechas, tasas, dc, ql.NullCalendar(), ql.Linear(), ql.Compounded, ql.Annual)
crv.enableExtrapolation()
desplazada = ql.ZeroSpreadedTermStructure(ql.YieldTermStructureHandle(crv),ql.QuoteHandle(desplazamiento))
return ql.YieldTermStructureHandle(desplazada)
def ConstruirSwap():
yts = curvas.get(floatindex)
yts_descuento = curvas.get(disc_curve)
fixingCalendar = index.fixingCalendar()
fixedSchedule = ql.MakeSchedule(effectiveDate, terminationDate, fixed_leg_tenor)
floatSchedule = ql.MakeSchedule(effectiveDate, terminationDate, float_leg_tenor,
convention=ql.ModifiedFollowing, endOfMonth=True
,calendar=fixingCalendar)
swap = ql.VanillaSwap(
ql.VanillaSwap.Receptor, nominal,
fixedSchedule, fixedRate, fixed_leg_daycount,floatSchedule, index, spread, float_leg_daycount)
engine = ql.DiscountingSwapEngine(yts_descuento)
swap.setPricingEngine(engine)
return swap, tenor_original
#dataframe de unos pocos swaps
for idx, row in df.iterrows():
swap, tenor_original = ConstruirSwap()
vn = swap.VN()