Это зависит.Если вы хотите оценить бермудские свопции, вам не повезло;QuantLib может оценивать их только на дереве, и нет никакой возможности использовать две кривые.
Если вы хотите оценить европейские свопсии, вы можете использовать две кривые в формуле Блэка, хотя я согласен, что это не очевидночтобы выяснить это, посмотрев на код.Как вы, наверное, уже видели, вам нужно создать экземпляр как инструмента (класс Swaption), так и соответствующего движка (класс BlackSwaptionEngine).Конструктор BlackSwaptionEngine принимает кривую скидок помимо других аргументов, поэтому здесь вы пройдете кривую OIS.С другой стороны, конструктор Swaption принимает своп, лежащий в основе опции, в качестве экземпляра VanillaSwap.В свою очередь, конструктор VanillaSwap берет экземпляр IborIndex, представляющий индекс с плавающей ставкой, подлежащий оплате;и наконец, конструктор IborIndex берет кривую, которая будет использоваться для прогнозирования его фиксаций, так что это то место, где вы можете пройти кривую 3 мл.Подводя итог:
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();
Также обратите внимание, что в текущей выпущенной версии (QuantLib 1.1) есть ошибка, которая заставляет его использовать неправильную кривую в некоторой точке во время вычислений.Вы захотите использовать версию 1.2, которая еще не выпущена, но может быть извлечена из хранилища Subversion по адресу https://quantlib.svn.sourceforge.net/svnroot/quantlib/branches/R01020x-branch/QuantLib.