1 votos

Reevaluación de precios de flujos de efectivo con QuantLib - Python

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:

  1. Tomo los factores de descuento y construyo mi objeto Term structure
  2. Construyo la serie de objetos ql.SimpleCashFlow(monto, fecha)
  3. 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!

2voto

Tex Puntos 39

Resuelto: Recalculé manualmente los factores de descuento a futuro y el VPN que obtengo coincide con el que obtengo con

P = ql.CashFlows.npv(cfs, discountTermStructure, True, reference_date)

Tenga en cuenta que en lo anterior he cambiado el valor booleano False a True, ya que en mi caso, el activo (préstamo o bono) se emitió en una fecha anterior. En este caso, desea incluir el flujo de efectivo que ocurre en la fecha de liquidación.

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