Estoy construyendo una herramienta con Quantlib (Python) para trabajar en la fijación de precios forward de diferentes tipos de activos (bonos indexados a la inflación, amortizables, vanillas, bonos cupón cero).
Por varias razones, estoy utilizando la serie de flujos de efectivo de los bonos proporcionada por un sistema interno. Del mismo sistema puedo obtener los factores de descuento asociados a cada flujo de efectivo. Así que desde la fecha de inicio hasta el vencimiento del bono tengo la programación de fechas, el monto del flujo de efectivo y los factores de descuento.
En esta etapa hago lo siguiente:
- Tomo los factores de descuento y construyo mi objeto Term structure
- Construyo la serie de objetos ql.SimpleCashFlow(monto, fecha)
- Calculo el VNA de la serie de flujos de efectivo con ql.CashFlows.npv(cfs, discountTermStructure, False, fecha_de_referencia), donde cfs es la serie de ql.SimpleCashflow, discountTermStructure es mi curva de descuento y la fecha de referencia es la fecha de valoración del VNA.
Mi duda es cuando se trata de mover la fecha de referencia hacia adelante. A alto nivel, espero que la discountTermStructure se construya a partir de la curva de descuento actual (factores de descuento tomados del sistema interno en la fecha actual) y luego cuando uso una fecha de referencia igual a la fecha forward, esto hace que la curva de descuento implícita en discountTermStructure sea la curva de descuento forward, de modo que el descuento se realiza solo para los flujos de efectivo posteriores a la fecha de referencia y con los factores de descuento forward (implícitos en las curvas de descuento actuales).
¿Es correcto lo anterior?
Siguiendo mi código (evitaré mostrar las entradas por simplicidad)
'''
mi objeto de curva de descuento
'''
discountCurve = ql.DiscountCurve(dates_schedule, discount_factors, dayCount)
discountTermStructure = ql.RelinkableYieldTermStructureHandle()
discountTermStructure.linkTo(discountCurve)
''' mi serie de flujos de efectivo, leg es una lista de montos de flujo de efectivo'''
cfs = [ql.SimpleCashFlow(flujodecaja, d) for d, flujodecaja in zip(dates, leg) ]
''' Cálculo del VNA, en fecha_de_referencia que puede ser hoy o una fecha hacia adelante '''
P = ql.CashFlows.npv(cfs, discountTermStructure, False, fecha_de_referencia)
¿Debería insertar también?
ql.Settings.instance().setEvaluationDate(fecha_de_referencia)
¿antes del cálculo del VNA?
¡Gracias!