我正试图将美国掉期曲线引导成零息票曲线(见彭博社截图)。我有从1996年6月21日到今天的3M、1Y、2Y、5Y、7Y、10Y到期日的每日数据(缺少一些天数,请参见数据框屏幕截图)。我希望获得从3M到10Y的所有到期日的相应零利率
Bloomberg Screenshot of the 5Y US Swap
以下是我编写的一段代码:
zero_rates = {}
helpers_mat =[]
# loop over time
for t in range(irs.shape[0]):
# date of pricing (= DataFrame index line by line)
pricing_date = ql.DateParser.parseFormatted(str(irs.index[t]),'%Y-%m-%d')
# define evaluation date
ql.Settings.instance().evaluationDate = pricing_date
# list of maturities and corresponding swap rates
for m in irs.columns:
helpers_mat.append([(m, ql.Months), irs[m][t]])
# helper function to intput details
helpers = [ql.SwapRateHelper(
ql.QuoteHandle(ql.SimpleQuote(rate/100.0)),
ql.Period(*tenor),
ql.TARGET(),
ql.Semiannual,
ql.ModifiedFollowing,
ql.Thirty360(),
ql.Euribor3M())
for tenor, rate in helpers_mat]
# build zero-coupon curve (cubic spline interpolation)
zc_curve = ql.PiecewiseCubicZero(pricing_date, helpers, ql.Actual360())
# pre-allocate
zero_rate = []
tenors = []
# loop over wanted maturities
for n in np.arange(3, 120+1, 3):
# maturities
yrs = n/12.0
tenors.append(yrs)
# extract zero-coupon rate
zc_rate = zc_curve.zeroRate(yrs, ql.Compounded, ql.Annual).rate()
zero_rate.append(zc_rate*100)
# pandas export
zero_rates[t] = pd.DataFrame(np.transpose(list(zip(zero_rate))), columns = list(zip(tenors)),
index = [irs.index[t]])
zero_rates = pd.concat(zero_rates, axis=0)
使用该代码,我得到以下错误:
运行时错误:超过一台带有支柱的仪器1996年7月25日
所以我想我对日期有意见。我的理解是,掉期辅助工具具有掉期固定分支的特征但在哪里输入浮动支腿的值?
定义存款辅助对象时,有多个选项
假设您有以下参数:
(i)创建自定义索引,而不是使用可用模板。在这里,您必须给出相关参数
(ii)或在文件中定义所有这些参数:
浮动支腿参数来自索引。在您的例子中,似乎您使用的是ql.Euribor3M(),它与您真正想要的美元伦敦银行同业拆借利率3M非常接近。区别基本上是错误的日历
然而,由于不知道数据的形状,很难找出错误所在
有许多不同的方法来构建辅助工具,对于美元曲线,您最好使用USDLibor指数进行存款,使用ql.UsdLiborSwapIsdaFixAm进行掉期
检查我根据您的数据制作的示例是否有帮助
相关问题 更多 >
编程相关推荐