衍生品
Quantlib USDLibor() 方法
我正在嘗試同時移動折扣和投影曲線,但由於 Ibor 輸入要求而無法通過 VanillaSwap() - 我正在嘗試計算美元掉期的 dv01,這需要基礎和移位(上、下)3mL曲線和SOFR曲線。如何通過 ql.USDLibor() 方法傳遞移動的 3mL 曲線?我收到一個錯誤。
我從日期和折扣因子開始生成 US3mL 和 SOFR 對象。
然後我使用日期、df 列表創建了 DiscountCurve (US3mL, SOFR) 對象。
US3mL = ql.DiscountCurve(curve_US3mL_dates, curve_US3mL_df, ql.Thirty360(), ql.UnitedStates(ql.UnitedStates.GovernmentBond)) SOFR = ql.DiscountCurve(curve_USSOFR_dates, curve_USSOFR_df, ql.Actual360(), ql.UnitedStates(ql.UnitedStates.GovernmentBond)) shift = 0.0001 discount_curve = ql.YieldTermStructureHandle(SOFR) discount_curve_shiftUp = ql.ZeroSpreadedTermStructure(discount_curve, ql.QuoteHandle(ql.SimpleQuote(shift))) discount_curve_shiftDown = ql.ZeroSpreadedTermStructure(discount_curve, ql.QuoteHandle(ql.SimpleQuote(-shift))) libor_curve = ql.YieldTermStructureHandle(US3mL) libor_curve_shiftUp = ql.ZeroSpreadedTermStructure(libor_curve, ql.QuoteHandle(ql.SimpleQuote(shift))) libor_curve_shiftDown = ql.ZeroSpreadedTermStructure(libor_curve, ql.QuoteHandle(ql.SimpleQuote(-shift))) libor3M_index = ql.USDLibor(ql.Period('3M'),libor_curve) #libor3M_index_shiftUp = ql.USDLibor(ql.Period('3M'), libor_curve_shiftUp) #libor3M_index_shiftDown = ql.USDLibor(ql.Period('3M'), libor_curve_shiftDown)
最後兩行註釋程式碼失敗,但 Ibor 對象必須通過 VanillaSwap() 作為“索引”輸入。
不要更改索引,而是重新連結或修改曲線。
對於第一種方法(重新連結),將索引設置為:
libor_curve = ql.RelinkableYieldTermStructureHandle(US3mL) libor3M_index = ql.USDLibor(ql.Period('3M'), libor_curve)
並使用
libor3M_index
. 當你想上移曲線時:libor_curve.linkTo( ql.ZeroSpreadedTermStructure(ql.YieldTermStructureHandle(US3mL), ql.QuoteHandle(ql.SimpleQuote(shift))))
下次呼叫他們的方法時,索引和間接交換將使用新曲線。完成後打電話
libor_curve.linkTo(US3mL)
將曲線重置為原始水平。
對於第二種方法,設置為:
spread = ql.SimpleQuote(0.0) libor_curve = ql.ZeroSpreadedTermStructure(ql.YieldTermStructureHandle(US3mL), ql.QuoteHandle(spread)) libor3M_index = ql.USDLibor(ql.Period('3M'), libor_curve)
所以擴展曲線等於
US3mL
(因為擴展為 0)。建立交換,當你想向上或向下移動曲線時執行:spread.setValue(shift) # or spread.setValue(-shift)
同樣,曲線將更新,掉期將使用新的水平。要回到第一方,執行
spread.setValue(0.0)
將
ql.ZeroSpreadedTermStructure
返回一個 YieldTermstructure 但對於ql.USDLibor contructor
您需要一個ql.YieldTermStructureHandle
.將最後兩行更改為:
libor3M_index_shiftUp = ql.USDLibor(ql.Period('3M'), ql.YieldTermStructureHandle(libor_curve_shiftUp)) libor3M_index_shiftDown = ql.USDLibor(ql.Period('3M'), ql.YieldTermStructureHandle(libor_curve_shiftDown))