程式
單調三次樣條插值QuantLib python
我是 QuantLib-Python 的新手,我正在嘗試使用 QuantLib-Python 複製雙曲線引導程序的實現。我已按照 QuantLib Python Cookbook 第 9 章中的步驟進行操作。也就是說,我已經初始化了 Deposits+OIS 的助手來建構 Eonia 曲線,然後將其傳遞給 Tenor Curve (Euribor 6M) 的助手。
我的理解是,在 QuantLib 中,插值方法的選擇由稱為 PiecewiseLogCubicDiscount 的對像給出。在這種情況下,三次插值是在對數折扣因子上執行的。
我想在對數折扣因子上使用單調三次樣條進行插值。我看到在這個文件中導出了一些插值。我在 interpolation.i 文件中看到其他插值方法可用。我只是不知道如何訪問這些。謝謝你。
你是對的。在 QuantLib python 中,您應該選擇適當的類來獲得所需的插值方法和變數。
以下是一些方法的範例:
import QuantLib as ql market_data = [ ('DEPOSIT', '6M', -0.114), ('FRA', '6M', -0.252), ('FRA', '12M', -0.306), ('SWAP', '2Y', -0.325), ('SWAP', '3Y', -0.347) ] helpers = ql.RateHelperVector() index = ql.Euribor6M() for instrument, tenor, rate in market_data: rate /= 100 if instrument == 'DEPOSIT': helpers.append(ql.DepositRateHelper(rate, index)) if instrument == 'FRA': monthsToStart = ql.Period(tenor).length() helpers.append(ql.FraRateHelper(rate, monthsToStart, index)) if instrument == 'SWAP': helpers.append( ql.SwapRateHelper( rate, ql.Period(tenor), ql.TARGET(), ql.Annual, ql.Following, ql.Thirty360(), index ) ) params = [2, ql.TARGET(), helpers, ql.ActualActual()] curves = { "PiecewiseFlatForward": ql.PiecewiseFlatForward(*params), "LogLinearDiscount": ql.PiecewiseLogLinearDiscount(*params), "LogCubicDiscount": ql.PiecewiseLogCubicDiscount(*params), "LinearZero": ql.PiecewiseLinearZero(*params), "CubicZero": ql.PiecewiseCubicZero(*params), "LinearForward": ql.PiecewiseLinearForward(*params), "SplineCubicDiscount": ql.PiecewiseSplineCubicDiscount(*params) }
如果您檢查曲線節點的折扣因子,它們將是相同的:
import pandas as pd df = pd.DataFrame(index=[row[0] for row in curves['LogLinearDiscount'].nodes()]) for curve in curves: dfs = [curves[curve].discount(idx) for idx in df.index] df[curve] = dfs
但是,如果您從用於建構曲線的工具未給出的日期中獲得折扣因子,您將獲得不同的值,因為您對不同的變數使用不同的插值方法:
new_df = pd.DataFrame(index=[idx + ql.Period('15d') for idx in df.index]) for curve in curves: curves[curve].enableExtrapolation() dfs = [curves[curve].discount(idx) for idx in new_df.index] new_df[curve] = dfs