QuantLib中的掉期定价

Swaption pricing in QuantLib

本文关键字:QuantLib      更新时间:2023-10-16

我也在Wilmott上发布了这篇文章,不确定哪一个会得到更多的回应。

我对Quantlib(和C++…)的世界还比较陌生,所以这一点可能很明显。我正试图弄清楚Quantlib是否可以为远期优质香草掉期定价(OIS折扣,3mL曲线用于估计)。我在交换文件中的Quantlib中看到的只是一个术语结构的折扣输入。它是否也将此用于估计?或者有没有一种方法可以覆盖它,这样我就可以输入两条曲线。

任何帮助、例子等都将不胜感激(这将节省我很多时间盯着同样的文件,希望有什么东西能跳出来…)!

非常感谢

这取决于情况。如果你想给百慕大群岛的swaptions定价,那你就太倒霉了;QuantLib只能在树上对它们进行定价,并且无法使用这两条曲线。

如果你想对欧洲掉期期权进行定价,你可以使用布莱克公式中的两条曲线,尽管我同意通过查看代码并不明显。正如您可能已经看到的,您必须实例化一个工具(Swaption类)和一个相应的引擎(BlackSwaptionEngine类)。BlackSwaptionEngine的构造函数除了使用其他参数外,还使用了一条折扣曲线,因此您将在此处传递OIS曲线。另一方面,交换选项的构造函数将该选项的交换作为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.