Estoy realizando una simulación en la que quiero calcular el VAN de 100 swaps sobre 1000 (o incluso mucho más) curvas de tipos de interés diferentes.
Parece que Quantlib no es realmente rápido en la realización de estos cálculos o simplemente mi código no es óptimo.
El script hace lo siguiente (para todas las curvas):
- Crear objetos de la curva Quantlib (basados en estas curvas de tipos de interés simuladas)
- Crear objeto de intercambio por intercambio
- Establecer swappriceEngine por objeto de intercambio
- Calcular el VAN por swap
Ejemplo de código para cada swap sobre todas las curvas de tipos de interés simuladas:
fixed_schedule = ql.Schedule(settle_date, maturity_date,
fixed_leg_tenor, calendar,
ql.ModifiedFollowing, ql.ModifiedFollowing,
ql.DateGeneration.Forward, False
float_schedule = ql.Schedule (settle_date, maturity_date,
float_leg_tenor, calendar,
ql.ModifiedFollowing, ql.ModifiedFollowing,
ql.DateGeneration.Forward, False
swap = ql.VanillaSwap(ql.VanillaSwap.Payer, notional, fixed_schedule,
fixed_rate, fixed_leg_daycount, float_schedule,
6M_index, float_spread, float_leg_daycount)
swap.setPricingEngine(DiscountingSwapEngine(YieldTermStructureHandle(discount_curve)))
swap.NPV()
Me pregunto si es posible crear sólo 100 objetos swap diferentes y sólo actualizar las curvas de tipos de interés necesarias para calcular el VAN en lugar de crear objetos swap en cada bucle. Así que sólo actualizar el 6M_index en el objeto swap y actualizar la curva de descuento en swap.setPricingEngine.
¿Es eso posible?