Domanda

L'ho pubblicato anche su Wilmott, non ero sicuro di ciò che avrebbe avuto una risposta più.

Sono relativamente nuovo nel mondo di Quantlib (e C ++ ...), quindi forse questo è abbastanza ovvio. Sto cercando di capire se Quantlib può valutare gli scambi di vaniglia premium in avanti (sconto OIS, curva 3 ml per la stima). Tutto quello che posso vedere in Quantlib nei file di swaption sono input per una struttura a termine per lo sconto. Lo usa anche per la stima? O esiste un modo per prevalerlo, in modo tale da poter inserire due curve.

Qualsiasi aiuto, esempi ecc. Sarebbe molto apprezzato (e mi risparmierebbe molto tempo a fissare gli stessi file sperando che qualcosa mi salti fuori ...)!

Molte grazie

È stato utile?

Soluzione

Dipende. Se vuoi valutare gli scambi di Bermudan, sei sfortunato; Quantlib può valutarli solo su un albero e non c'è modo di usare le due curve.

Se vuoi valutare gli swaption europei, puoi usare le due curve nella formula nera, anche se sono d'accordo sul fatto che non sia ovvio scoprirlo guardando il codice. Come probabilmente hai già visto, dovrai istanziare sia uno strumento (la classe di scambio) sia un motore corrispondente (la classe BlackswaptionEngine). Il costruttore del BlackswaptionEngine prende una curva di sconto oltre agli altri Args, quindi passerai la curva OIS qui. Il costruttore dello scambio, d'altra parte, fa lo scambio al di sotto dell'opzione di istanza di vanillaswap. A sua volta, il costruttore VanillasWap prende un'istanza IborIndex che rappresenta l'indice a tasso mobile da pagare; E infine, il costruttore di IborIndex prende la curva per essere utilizzata per prevedere i suoi fissaggi, quindi questo è il luogo in cui è possibile passare la curva 3 ml. Riassumere:

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();

Inoltre, si noti che la versione di corrente rilasciata (Quantlib 1.1) ha un bug che lo fa usare la curva errata ad un certo punto durante i calcoli. Ti consigliamo di utilizzare la versione 1.2, che non è ancora rilasciata ma può essere verificata dal repository di sovversione all'indirizzo https://quantlib.svn.sourceforge.net/svnroot/quantlib/branches/r01020x-branch/quantlib.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top