使用 QLNet / Quantlib 引導收益率曲線
我正在嘗試掌握 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));
零利率和掉期利率之間的關係將告訴我們遠期利率。