Bond

使用 QLNet / Quantlib 引導收益率曲線

  • May 17, 2015

我正在嘗試掌握 QLNet(C# 版本的 Quantlib,Quantlib 的所有功能都具有相同的名稱和工作方式,所以如果您只是了解 Quantlib,您仍然可以幫助我),尤其是對債券定價。於是我鑽研了官方的例子,下載的時間比QLNet的dll還快。名為“債券”的範例對三種債券類型進行定價:零票面利率、固定票面利率和浮動票面利率。

對於最後兩種類型,此範例使用兩條不同的收益率曲線: - 第一條稱為 discountingTermStructure 的固定利率債券,由短期零息債券和債券組成(我不確定這些簡單債券是什麼是)用於長端 - 第二個稱為浮動利率債券的預測期限結構,由短期存款和長期掉期組成

我的第一個問題是為什麼他們使用不同的收益率曲線?

我還試圖從自舉收益率曲線返回收益率。例如,如果我用 3 個 3 個月、6 個月和 1 年到期的 ZC 債券建構收益率曲線,我想得到 9 個月的插值收益率。我怎麼能那樣做?

非常感謝您的幫助

雖然@Baruch Youssin 在一般意義上回答正確,但他回答的第一部分並不是範常式式碼中發生的情況。

雖然 QLNet 是 QuantLib 的一個埠,但它不是直接埠。您引用的範例未出現在 QLNet 中。QuantLib中的例子寫得很複雜,其實就是一個簡單的例子。

discountingTermStructure只是程式碼中的一個變數。我可以把它命名為別的東西。它連結到bondDiscountingTermStructure,這是由今天的市場報價得出的收益率曲線。收益率曲線是由零息票利率和固定利率債券得出的。

    // Adding the ZC bonds to the curve for the short end
    bondInstruments.push_back(zc3m);
    bondInstruments.push_back(zc6m);
    bondInstruments.push_back(zc1y);

    // Adding the Fixed rate bonds to the curve for the long end
    for (Size i=0; i<numberOfBonds; i++) {
        bondInstruments.push_back(bondsHelpers[i]);
    } 

    boost::shared_ptr<YieldTermStructure> bondDiscountingTermStructure(
            new PiecewiseYieldCurve<Discount,LogLinear>(
                    settlementDate, bondInstruments,
                    termStructureDayCounter,
                    tolerance));

該曲線可用於債券定價中的貼現。

    boost::shared_ptr<PricingEngine> bondEngine(
            new DiscountingBondEngine(discountingTermStructure));

DiscountingBondEngine 將詢問基礎固定利率債券的現金流量。這個數額需要打折。貼現率由discountingTermStructure收益率曲線提供。

接下來,我們要為浮動利率債券定價。它需要一個前向曲線。特別是,我們需要 3M USD LIBOR 的遠期曲線,因為該債券與 3M LIBOR 指數掛鉤。

   FloatingRateBond floatingRateBond(
            settlementDays,
            faceAmount,
            floatingBondSchedule,
            libor3m,
            Actual360(),
            ModifiedFollowing,
            Natural(2),
            // Gearings
            std::vector<Real>(1, 1.0),
            // Spreads
            std::vector<Rate>(1, 0.001),
            // Caps
            std::vector<Rate>(),
            // Floors
            std::vector<Rate>(),
            // Fixing in arrears
            true,
            Real(100.0),
            Date(21, October, 2005));

這條正向曲線由以下因素引導:

    // A depo-swap curve
    std::vector<boost::shared_ptr<RateHelper> > depoSwapInstruments;
    depoSwapInstruments.push_back(d1w);
    depoSwapInstruments.push_back(d1m);
    depoSwapInstruments.push_back(d3m);
    depoSwapInstruments.push_back(d6m);
    depoSwapInstruments.push_back(d9m);
    depoSwapInstruments.push_back(d1y);
    depoSwapInstruments.push_back(s2y);
    depoSwapInstruments.push_back(s3y);
    depoSwapInstruments.push_back(s5y);
    depoSwapInstruments.push_back(s10y);
    depoSwapInstruments.push_back(s15y);
    boost::shared_ptr<YieldTermStructure> depoSwapTermStructure(
            new PiecewiseYieldCurve<Discount,LogLinear>(
                    settlementDate, depoSwapInstruments,
                    termStructureDayCounter,
                    tolerance));

零利率和掉期利率之間的關係將告訴我們遠期利率。

引用自:https://quant.stackexchange.com/questions/17002