I am trying to bootstrap the 6m sterling swap curve using the depos and swap rates codes are below. I am a newbie and have been following (or at least trying to!) the python cookbook. I wanted to know how do I add FRA to the mix?i.e. how do I create helpers for FRAs
assuming I have these FRAs
FRAs = {(1, 7): 0.037125, (2, 8): 0.037125, (3, 9): 0.037125}
(and also wanted to check if the below code makes sense)
import QuantLib as ql
import pandas as pd
today= ql.Date(1,4,2020)
ql.Settings.instance().evaluationDate = today
quote = ql.QuoteHandle(ql.SimpleQuote(0.72863/100))
tenor = ql.Period('6M')
fixingDays = 2
calendar = ql.TARGET()
convention = ql.ModifiedFollowing
endOfMonth = False
dayCounter = ql.Actual365Fixed()
GBPLibor = ql.GBPLibor(ql.Period('6M'))
depo_helper = [ql.DepositRateHelper(quote,tenor,fixingDays,calendar,convention,endOfMonth,dayCounter)]
swap_helpers = [ql.SwapRateHelper(ql.QuoteHandle(ql.SimpleQuote(rate/100.0)), ql.Period(*tenor), calendar,ql.Semiannual,ql.Following,ql.Actual365Fixed(),GBPLibor)
for tenor, rate in [((1,ql.Years),.5635),
((2,ql.Years),0.4929),
((3,ql.Years),.4764),
((4,ql.Years), .4917),
((5,ql.Years), .5007),
((6,ql.Years), .5136),
((7,ql.Years), .5247),
((8,ql.Years), .5331),
((9,ql.Years), .5424),
((10,ql.Years),.5489),
((12,ql.Years),.5647),
((15,ql.Years),.5843),
((20,ql.Years),.5869),
((25,ql.Years),.5690),
((30,ql.Years),.5380),
((40,ql.Years),.4761),
((50,ql.Years),.4381)]]
rate_helpers = depo_helper + swap_helpers
GBP6mLiborCurve = ql.PiecewiseCubicZero(today,rate_helpers,ql.Actual365Fixed())
spots = []
tenors = []
for d in GBP6mLiborCurve.dates():
yrs = ql.Actual365Fixed().yearFraction(today,d)
compounding = ql.Simple
freq = ql.Semiannual
zero_rate=GBP6mLiborCurve.zeroRate(yrs,compounding,freq)
tenors.append(yrs)
eq_rate=zero_rate.equivalentRate(ql.Actual365Fixed(),compounding,freq,today,d).rate()
spots.append(100*eq_rate)
datatable={'Dates':GBP6mLiborCurve.dates(),'Tenors':tenors,'spots':spots}
df=pd.DataFrame.from_dict((datatable))
print(df)
Output
Dates Tenors spots
0 April 1st, 2020 0.000000 0.000000
1 October 5th, 2020 0.512329 0.728645
2 April 1st, 2021 1.000000 0.564059
3 April 1st, 2022 2.000000 0.494446
4 April 3rd, 2023 3.005479 0.478995
5 April 2nd, 2024 4.005479 0.495879
6 April 1st, 2025 5.002740 0.506411
7 April 1st, 2026 6.002740 0.521119
8 April 1st, 2027 7.002740 0.534104
9 April 3rd, 2028 8.010959 0.544392
10 April 3rd, 2029 9.010959 0.555760
11 April 1st, 2030 10.005479 0.564234
12 April 1st, 2032 12.008219 0.584600
13 April 2nd, 2035 15.010959 0.611500
14 April 3rd, 2040 20.019178 0.623278
15 April 3rd, 2045 25.021918 0.610436
16 April 1st, 2050 30.019178 0.580321
17 April 1st, 2060 40.027397 0.516318
18 April 1st, 2070 50.032877 0.479267