aboutsummaryrefslogtreecommitdiffstats
path: root/python/yieldcurve.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/yieldcurve.py')
-rw-r--r--python/yieldcurve.py38
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()