2 votos

Curva de rendimiento Bootstrap con QLNet / Quantlib

Estoy tratando de entender QLNet (versión en C# de Quantlib, todas las funciones de Quantlib tienen el mismo nombre y funcionan de la misma manera, así que si sólo conoce Quantlib, todavía puede ayudarme), especialmente para la fijación de precios de los bonos. Así que me metí en los ejemplos oficiales, descargados al mismo tiempo que la dll de QLNet. El ejemplo llamado "Bonds" valora tres tipos de bonos: cupón cero, tasa de cupón fijo y tasa de cupón flotante.

Para los dos últimos tipos, este ejemplo utiliza dos curvas de rendimiento diferentes: - La primera llamada discountingTermStructure para el bono de tipo fijo, compuesta por bonos de cupón cero para el extremo corto y por bonos (no estoy seguro aquí de lo que son estos bonos simples) para el extremo largo - La segunda llamada forecastingTermStructure para el bono de tipo flotante, formada por depósitos para el extremo corto y por swaps para el extremo largo

Mi primera pregunta es ¿por qué utilizan una curva de rendimiento diferente?

También estoy tratando de devolver un rendimiento de una curva de rendimiento bootstrapped. Por ejemplo, si construyo la curva de rendimiento con 3 bonos ZC con vencimientos a 3 meses, 6 meses y 1 año, quiero obtener el rendimiento interpolado a 9 meses. ¿Cómo puedo hacerlo?

Muchas gracias por su ayuda

5voto

Aunque @Baruch Youssin responde correctamente en el sentido general, la primera parte de su respuesta no es lo que ocurrió en el código de ejemplo.

Aunque QLNet es un port de QuantLib, no es un port directo. Su ejemplo citado no aparece en QLNet. El ejemplo en QuantLib fue escrito de manera muy complicada, de hecho es un ejemplo simple.

discountingTermStructure es simplemente una variable en el código. Puedo nombrarla como otra cosa. Se vincula a estructura del plazo de descuento de los bonos una curva de rendimiento derivada de las comillas del mercado actual. La curva de rendimiento se deriva de los tipos de cupón cero y de los bonos de tipo fijo.

     // Adding the ZC bonds to the curve for the short end
     bondInstruments.push_back(zc3m);
     bondInstruments.push_back(zc6m);
     bondInstruments.push_back(zc1y);

     // Adding the Fixed rate bonds to the curve for the long end
     for (Size i=0; i<numberOfBonds; i++) {
         bondInstruments.push_back(bondsHelpers[i]);
     } 

     boost::shared_ptr<YieldTermStructure> bondDiscountingTermStructure(
             new PiecewiseYieldCurve<Discount,LogLinear>(
                     settlementDate, bondInstruments,
                     termStructureDayCounter,
                     tolerance));

Esta curva puede utilizarse para el descuento en el precio de los bonos.

     boost::shared_ptr<PricingEngine> bondEngine(
             new DiscountingBondEngine(discountingTermStructure));

DiscountingBondEngine pediría al bono subyacente de tipo fijo el importe del flujo de caja. Esta cantidad tendría que ser descontada. El tipo de descuento es suministrado por el discountingTermStructure curva de rendimiento.

A continuación, querríamos fijar el precio de un bono de tipo flotante. Esto requiere una curva a plazo. En concreto, necesitamos una curva a plazo del LIBOR 3M USD porque el bono está vinculado al índice LIBOR 3M.

    FloatingRateBond floatingRateBond(
             settlementDays,
             faceAmount,
             floatingBondSchedule,
             libor3m,
             Actual360(),
             ModifiedFollowing,
             Natural(2),
             // Gearings
             std::vector<Real>(1, 1.0),
             // Spreads
             std::vector<Rate>(1, 0.001),
             // Caps
             std::vector<Rate>(),
             // Floors
             std::vector<Rate>(),
             // Fixing in arrears
             true,
             Real(100.0),
             Date(21, October, 2005));

Esta curva hacia delante se ha establecido por:

     // A depo-swap curve
     std::vector<boost::shared_ptr<RateHelper> > depoSwapInstruments;
     depoSwapInstruments.push_back(d1w);
     depoSwapInstruments.push_back(d1m);
     depoSwapInstruments.push_back(d3m);
     depoSwapInstruments.push_back(d6m);
     depoSwapInstruments.push_back(d9m);
     depoSwapInstruments.push_back(d1y);
     depoSwapInstruments.push_back(s2y);
     depoSwapInstruments.push_back(s3y);
     depoSwapInstruments.push_back(s5y);
     depoSwapInstruments.push_back(s10y);
     depoSwapInstruments.push_back(s15y);
     boost::shared_ptr<YieldTermStructure> depoSwapTermStructure(
             new PiecewiseYieldCurve<Discount,LogLinear>(
                     settlementDate, depoSwapInstruments,
                     termStructureDayCounter,
                     tolerance));

La relación entre los tipos cero y los tipos swap nos indicará los tipos a plazo.

2voto

Stramato Puntos 116

Todavía no conozco QuantLib pero una pregunta es general y fácil de responder:

Mi primera pregunta es ¿por qué utilizan una curva de rendimiento diferente?

Estas dos curvas se diferencian por los niveles de riesgo inherentes a ellas: los diferenciales de crédito sobre la curva de rendimiento sin riesgo (por ejemplo, la curva OIS).

La curva de descuento, discountingTermStructure, incorpora el riesgo de que este bono concreto no pague a tiempo. Alternativamente, puede ser la curva libre de riesgo si el riesgo de impago del bono se tiene en cuenta de otro modo y no se incorpora a su precio.

La curva de previsión, forecastingTermStructure, incorpora el riesgo del tipo variable subyacente. Supongamos que los pagos de su bono a tipo flotante están vinculados al Libor en USD; es el tipo al que los grandes bancos de Londres intercambian los depósitos/préstamos en USD. Este tipo incluye la prima por el riesgo de que el banco prestatario no pague a tiempo.

También he encontrado la respuesta a la segunda pregunta:

Quiero obtener el rendimiento interpolado a los 9 meses. ¿Cómo puedo hacerlo?

Según Cogito Learning QuantLib: Curvas de rendimiento El método YieldTermStructure::zeroRate devuelve el tipo de interés de cupón cero para cualquier momento.

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