Pregunta

Publiqué esto en Wilmott también, no estaba seguro de cuál obtendría más respuesta.

Soy relativamente nuevo en el mundo de Quantlib (y C ++ ...), así que tal vez esto sea bastante obvio. Estoy tratando de averiguar si Quantlib puede fijar el precio de los intercambios de vainilla premium (descuento de OIS, curva de 3 ml para su estimación). Todo lo que puedo ver en Quantlib en los archivos de intercambio son entradas para una estructura de un término para el descuento. ¿Utiliza esto también para la estimación? ¿O hay alguna manera de anularlo, de modo que pueda ingresar dos curvas?

¡Cualquier ayuda, ejemplos, etc. sería muy apreciado (y me ahorraría mucho tiempo mirando los mismos archivos con la esperanza de que algo me salga ...)!

Muchas gracias

¿Fue útil?

Solución

Eso depende. Si desea fijar el precio de los intercambios de Bermudan, no tiene suerte; Quantlib solo puede fijarlos en un árbol y no hay forma de usar las dos curvas.

Si desea fijar el precio de los intercambios europeos, puede usar las dos curvas en la fórmula negra, aunque estoy de acuerdo en que no es obvio descubrirlo mirando el código. Como probablemente ya haya visto, tendrá que instanciar tanto un instrumento (la clase de intercambio) como un motor correspondiente (la clase BlackSwaptionEngine). El constructor de BlackSwaptionEngine toma una curva de descuento además de los otros args, por lo que pasará la curva OIS aquí. El constructor del intercambio, por otro lado, toma el intercambio subyacente a la opción como una instancia de Vanillaswap. A su vez, el constructor Vanillaswap toma una instancia de IborIndex que representa el índice de tasa flotante a pagar; Y finalmente, el constructor de IborIndex toma la curva para usarse para pronosticar sus fijaciones, por lo que ese es el lugar donde puede pasar la curva de 3 ml. Para resumir:

shared_ptr<IborIndex> libor(new GBPLibor(3*Months, forecastCurve));
shared_ptr<VanillaSwap> swap(new VanillaSwap(..., libor, ...));
shared_ptr<Instrument> swaption(new Swaption(swap, ...));
shared_ptr<PricingEngine> engine(new BlackSwaptionEngine(discountCurve, ...));
swaption->setPricingEngine(engine);
double price = swaption->NPV();

Además, tenga en cuenta que la versión actual lanzada (Quantlib 1.1) tiene un error que hace que use la curva incorrecta en algún momento durante los cálculos. Querrá usar la versión 1.2, que aún no se ha lanzado pero se puede ver desde el repositorio de subversión en https://quantlib.svn.sourceforge.net/svnroot/quantlib/branches/r01020x branch/quantlib.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top