QuantLib中的Swaption定价

3

我也在Wilmott上发了这个问题,不确定哪个地方会得到更多的回复。

我相对较新于Quantlib(和C++……),所以这可能很显然。我正在尝试弄清楚Quantlib是否可以定价前向溢价普通掉期(OIS折现,使用3mL曲线进行估计)。在Swaption文件中,我能看到的只有一个贴现期限结构的输入。它是否也用于估计?或者有没有一种方法可以覆盖它,使我可以输入两个曲线。

任何帮助、示例等都将不胜感激(并且将节省我大量时间盯着同样的文件希望有所发现……)!

非常感谢!

1个回答

8
这要看情况。如果你想定价百慕大式掉期,那么QuantLib无法直接按两条曲线进行计算,只能在树上进行计算。如果你想定价欧式掉期,可以使用Black公式中的两条曲线,但是通过代码查找并不容易发现。 你需要实例化一个工具(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)存在一个错误,会在计算过程中的某个时刻使用错误的曲线。建议使用尚未发布但可以从Subversion存储库检出的版本1.2,存储库位于https://quantlib.svn.sourceforge.net/svnroot/quantlib/branches/R01020x-branch/QuantLib


太棒了 - 谢谢你的回复Luigi,非常有帮助。你的QL书也非常实用。 - keynesiancross
嗨,Luigi - 有一个新手问题需要问一下。那个链接中的1.2版本在哪里?我需要像构建1.1版本一样下载并构建它吗?(为了上下文,我用了4个小时才弄清楚我必须先构建1.1版本才能使用它哈哈)。再次感谢。 - keynesiancross
1
那个链接就是1.2版本。如果你已经安装了Subversion,可以从该地址检出它。如果你不知道我在说什么,请转到http://quantlib.svn.sourceforge.net/viewvc/quantlib/branches/R01020x-branch/QuantLib,然后在页面底部单击“下载GNU tarball”。如果你使用的是Windows,你将像1.1一样构建它;如果你使用的是Linux或Mac OS,则必须先运行autogen.sh脚本(有关此和Subversion的详细信息,请参见http://quantlib.org/svn.shtml)。 - Luigi Ballabio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接