2012-01-16 7 views
1

Я разместил это на Wilmott тоже, не был уверен, что получит больше ответа.Цены на Swaption в QuantLib

Я относительно новичок в мире Quantlib (и C++ ...), поэтому, возможно, это совершенно очевидно. Я пытаюсь выяснить, может ли Quantlib оценивать форвардную премиальную конвертацию ванили (дисконтирование OIS, кривая 3 мл для оценки). Все, что я могу видеть в Quantlib в файлах Swaption, - это входные данные для одной временной структуры для дисконтирования. Использует ли это это также для оценки? Или есть способ переопределить его, чтобы я мог ввести две кривые.

Любая помощь, примеры и т. Д. Были бы очень признательны (и сэкономит мне много времени, глядя на те же файлы, надеясь, что что-то выскочит на меня ...)!

Большое спасибо

ответ

6

Это зависит. Если вы хотите оценить перекрестки Бермудских островов, вам не повезло; QuantLib может оценивать их только по дереву, и нет возможности использовать две кривые.

Если вы хотите оценить европейские свопции, вы можете использовать две кривые в формуле Черного, хотя я согласен, что это не очевидно, чтобы найти это, посмотрев на код. Как вы уже видели, вам придется создать экземпляр как инструмента (класс Swaption), так и соответствующего движка (класс BlackSwaptionEngine). Конструктор BlackSwaptionEngine использует кривую дисконта помимо других аргументов, поэтому вы пройдете здесь кривую OIS. С другой стороны, конструктор Swaption берет подкачку, лежащую в основе опции в качестве экземпляра VanillaSwap. В свою очередь, конструктор VanillaSwap принимает экземпляр IborIndex, представляющий индекс плавающей скорости, который должен быть оплачен; и, наконец, конструктор IborIndex берет кривую, которая будет использоваться для прогнозирования ее фиксации, поэтому это место, где вы можете пройти кривую 3mL. Подводя итог:

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.

+0

Awesome - спасибо за ответ Luigi, очень полезно. Книга QL также очень удобна. – keynesiancross

+0

Привет Луиджи - быстрый вопрос для новичка. Где в этой ссылке около версии 1.2? И будет ли я загрузить его и построить его, как 1.1? (Для некоторого контекста мне потребовалось 4 часа, чтобы понять, что мне нужно было создать 1.1, прежде чем я смогу использовать его ха-ха). Еще раз спасибо – keynesiancross

+1

Эта ссылка _is_ версия 1.2. Если у вас установлен Subversion, вы можете проверить его с этого адреса. Если вы не знаете, о чем я говорю, перейдите на http://quantlib.svn.sourceforge.net/viewvc/quantlib/branches/R01020x-branch/QuantLib и нажмите «Загрузить архив GNU» в нижней части страница. Если вы работаете в Windows, вы построите его как 1.1; если вы находитесь на Linux или Mac OS, вам сначала нужно запустить скрипт autogen.sh (некоторые подробности об этом и о Subversion находятся по адресу http://quantlib.org/svn.shtml) –

 Смежные вопросы

  • Нет связанных вопросов^_^