【问题标题】:Swaption pricing in QuantLibQuantLib 中的掉期定价
【发布时间】:2012-02-11 16:03:35
【问题描述】:

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

我对 Quantlib(和 C++ ......)的世界还比较陌生,所以也许这很明显。我试图弄清楚 Quantlib 是否可以为高级普通掉期期权定价(OIS 贴现,3mL 曲线用于估计)。我在 Quantlib 的 Swaption 文件中看到的所有内容都是用于折扣的一种期限结构的输入。它是否也将其用于估计?或者有没有办法覆盖它,这样我就可以输入两条曲线。

任何帮助、示例等都将不胜感激(并且可以节省我很多时间盯着相同的文件,希望有什么东西能在我身上跳出来......)!

非常感谢

【问题讨论】:

    标签: c++ quantitative-finance quantlib


    【解决方案1】:

    这取决于。如果你想为百慕大掉期期权定价,那你就不走运了; 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) 存在一个错误,导致它在计算过程中的某个时间点使用了错误的曲线。您需要使用尚未发布的 1.2 版,但可以从位于 https://quantlib.svn.sourceforge.net/svnroot/quantlib/branches/R01020x-branch/QuantLib 的 Subversion 存储库中检出。

    【讨论】:

    • 太棒了 - 感谢您的回复 Luigi,非常有帮助。你的QL书也派上用场了。
    • 嗨 Luigi - 初学者的快速问题。该链接中的1.2版本在哪里?我会下载它并像 1.1 一样构建它吗? (在某些情况下,我花了 4 个小时才弄清楚我必须先构建 1.1,然后才能使用它哈哈)。再次感谢
    • 那个链接的1.2版本。如果您安装了 Subversion,您可以从该地址查看它。如果您不知道我在说什么,请转至quantlib.svn.sourceforge.net/viewvc/quantlib/branches/…,然后单击页面底部附近的“下载 GNU tarball”。如果你在 Windows 上,你会像 1.1 一样构建它;如果您使用的是 Linux 或 Mac OS,则必须先运行 autogen.sh 脚本(有关此脚本和 Subversion 的一些详细信息位于 quantlib.org/svn.shtml
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多