diff options
Diffstat (limited to 'python/yieldcurve.py')
| -rw-r--r-- | python/yieldcurve.py | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/python/yieldcurve.py b/python/yieldcurve.py index 91a71b53..7325e6b7 100644 --- a/python/yieldcurve.py +++ b/python/yieldcurve.py @@ -4,11 +4,12 @@ import requests, zipfile from io import BytesIO import xml.etree.ElementTree as ET import datetime -from quantlib.time.date import Date +from quantlib.time.api import Calendar, Date, Period, Days, Following, Schedule, today from quantlib.time import imm -import pdb +from quantlib.util.converter import qldate_to_pydate, pydate_to_qldate from quantlib.market.market import libor_market -from quantlib.time.date import Date +import numpy as np +import matplotlib.pyplot as plt def getMarkitIRData(date): basedir = os.path.join(root, "data", "Yield Curves") @@ -35,13 +36,32 @@ def getMarkitIRData(date): 'effectiveasof': datetime.datetime.strptime(effectiveasof, "%Y-%m-%d").date()} return MarkitData +def get_futures_data(date = datetime.date.today()): + futures_file = os.path.join(root, "data", "Yield Curves", + "futures-{0}.csv".format(str(date))) + with open(futures_file) as fh: + quotes = [float(line.split(",")[1]) for line in fh] + return quotes + if __name__=="__main__": - MarkitData = getMarkitIRData(datetime.date.today()) m = libor_market('USD(NY)') - quotes = [('DEP', k, v) for k, v in MarkitData['deposits'].items()] + calendar = Calendar.from_name(m.calendar) + MarkitData = getMarkitIRData(qldate_to_pydate(today())) + prev_day = calendar.advance(today(), -1, Days, convention=Following) + futures = get_futures_data(qldate_to_pydate(prev_day).date()) + m = libor_market('USD(NY)') + quotes = [('ED',i+1, v) for i, v in enumerate(futures)] quotes += [('SWAP', k, v) for k, v in MarkitData['swaps'].items()] - m.set_quotes(datetime.date.today(), quotes) + m.set_quotes(today(), quotes) m.bootstrap_term_structure() - PiecewiseYieldCurve("discount", "linear", - future_date = Date.from_datetime(datetime.datetime(2017, 10, 5)) - p = m.discount(future_date) + p3 = Period('3Mo') + p2 = Period('2Mo') + p6 = Period('6Mo') + settle_date = calendar.advance(today(), m.settlement_days, Days, convention=Following) + sched = Schedule(settle_date, settle_date+Period('5Yr'), Period('3Mo'), calendar) + days = [qldate_to_pydate(day) for day in sched] + f3 = [m.forward(d, p3, 1) for d in sched] + f6 = [m.forward(d, p6, 1) for d in sched] + f2 = [m.forward(d, p2, 1) for d in sched] + plt.plot(days, f2, days, f3, days, f6) + plt.show() |
