彭博債券淨價和應計金額與 Quantlib 不同
我從 Bloomberg 和 QL 獲得了不同的債券清潔價格,但令人驚訝的是 Bloomberg 價格與 excel price() 函式匹配
我有以下債券:GETC21117030。參數如下:
如果您查看參數,您會注意到到期日只剩下一筆付款。如果我計算 QLXL 的價格和應計利息,我會從彭博得到不同的結果。但令人驚訝的是,如果我使用 excel 原生價格計算功能,彭博數字會匹配。
我查看了 excel 公式,當只剩下一筆付款時,價格計算公式看起來是不同的(見下文)
當 N > 1 時(N 為結算日與贖回日之間的應付票面數),PRICE 計算如下:
當 N = 1 時(N 為結算日和贖回日之間應付的票面數量),PRICE 計算如下:
DSR = 從結算到下一個付息日的天數。
E = 結算日所在的票息期天數。
A = 從息票期開始到結算日的天數。
似乎對於最後一次付款計算,excel 正在從復合收益率轉向簡單收益率。
我用複合收益率和簡單收益率計算了淨價格。雖然簡單收益率的淨價接近彭博/Excel 價格,但仍不匹配。
收益率為 7.95%,結算日期為 2020 年 12 月 30 日:
Bloomberg/Excel 淨價為 99.953226,應計金額 3.270380
QLXL(半年復利)淨價為99.95983172,應計金額3.288251366
QLXL(simple yield)淨價99.95278714,應計金額3.288251366
我不是 C++ 專家,但是當只剩下一筆付款時,我檢查的 QL 程式碼不會改變價格計算算法。
問題是:目前 QuantLib 的實施是否有可能匹配上述債券的價格和應計金額(一般來說,當只剩下一個現金流時,所有息票債券)?
有幾件事可能會影響您的結果。檢查所有約定是否正確,即daycount。
關於上一期的複利,我可以使用
SimpleThenCompounded
參數在 QuantLib 中複製彭博社對該債券的價格。import QuantLib as ql settlementDate = ql.Date(30,12,2020) issueDate = ql.Date(17,1,2019) maturityDate = ql.Date(17,1,2021) coupon = 0.0725 freq = ql.Period('6M') dayCount = ql.ActualActual(ql.ActualActual.ISMA) yld = 0.0795 bbgPrice = 99.953226 bond = ql.FixedRateBond(0, ql.TARGET(), 100.0, issueDate, maturityDate, freq, [coupon], dayCount, ql.Unadjusted, ql.Unadjusted) print(f"BBG Price: {bbgPrice}") px = bond.cleanPrice(yld, dayCount, ql.SimpleThenCompounded, ql.Annual, settlementDate) print(f"QuantLib Price: {px:.6f}\n")
BBG 價格:99.953226
QuantLib 價格:99.953226