【发布时间】:2020-05-13 12:31:23
【问题描述】:
我正在尝试将美国掉期曲线引导成零息曲线(参见彭博屏幕截图)。我有从 1996 年 6 月 21 日到今天的 3M、1Y、2Y、5Y、7Y、10Y 到期日的每日数据(有些日子不见了,请参阅 DataFrame 屏幕截图)。我想为从 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)
使用该代码,我得到以下错误:
RuntimeError: more than one instrument with Pillar 1996 年 7 月 25 日
所以我想我对日期有疑问。我的理解是 SwapRateHelper 具有掉期固定腿的特征。 但是我在哪里输入浮动腿的?
【问题讨论】: