固定收益

如何在 QuantLib 中更改 YieldTermStructureHandle 的 referenceDate

  • September 4, 2018

假設我們已經知道即期利率曲線的日期和利率,我將數據傳遞給 ZeroCurve 類以建構債券定價的貼現曲線。我想找到的是如何在不更改原始日期和費率數據的情況下更改折扣曲線的參考日期。我試過如下:

Settings.instance().evaluationDate = Date(11, 12, 2017)

fake_dates = [Date(8, 5, 2017+i) for i in range(5)]
fake_rates = [(1+i)/100 for i in range(5)]

day_counter = ActualActual()

spot_curve = ZeroCurve(fake_dates, fake_rates, day_counter, China(), Linear(), Compounded, Semiannual)     

discount_curve = YieldTermStructureHandle(spot_curve)

print(discount_curve.referenceDate())

# Reset the evaluation date

Settings.instance().evaluationDate = Date(12, 12, 2017)
print(discount_curve.referenceDate())

但是,這行不通!它返回與Date(11, 12, 2017)相同的結果

我是 QuantLib-Python 的新手,如果有人能幫我一個忙,我將不勝感激。非常感謝!

我建議您閱讀 QuantLib Python Cookbook 中的以下章節:

“5. 期限結構及其參考日期”

或者,請參閱此影片:

https://www.youtube.com/watch?v=pc1yOmxU2GQ

作者剝離了期限結構,其參考日期隨評估日期而變化,而另一種方法則不隨評估日期而變化。

我打算根據@Bernd 的連結(thx @Bernd)添加評論來回答我自己的問題,但是評論編輯器對我來說真的不友好。回到問題,有兩種可供選擇的方式。

  1. 使用男高音和費率來建構助手。
helper_= DepositRateHelper(QuoteHandle(SimpleQuote(rate/100)),Period(*tenor),0,China(),Following,False,ActualActual()) for tenor, rate in [((1, Years), 1),((2, Years), 2),((3, Years), 3),((4, Years), 4), ((5, Years), 5)]]

discount_curve = PiecewiseFlatForward(2, TARGET(), helper_, ActualActual())
discount_curve.referenceDate()

現在,我們可以更改 PiecewiseFlatForward 的第一個參數來獲取我們所需的 referenceDate。

  1. 使用日期和匯率直接建構曲線。但是現在如果我們想更改referenceDate,我們必須更改日期。
fake_dates_shift = [date + Period(2, Days) for date in fake_dates]   
spot_curve_shift = ZeroCurve(fake_dates_shift, fake_rates, day_counter, China(), Linear(), Compounded, Semiannual)     
discount_curve_shift = YieldTermStructureHandle(spot_curve_shift)
discount_curve_shift.referenceDate()

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