aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/yieldcurve.py22
1 files changed, 14 insertions, 8 deletions
diff --git a/python/yieldcurve.py b/python/yieldcurve.py
index 7325e6b7..78ad3801 100644
--- a/python/yieldcurve.py
+++ b/python/yieldcurve.py
@@ -4,14 +4,14 @@ import requests, zipfile
from io import BytesIO
import xml.etree.ElementTree as ET
import datetime
-from quantlib.time.api import Calendar, Date, Period, Days, Following, Schedule, today
+from quantlib.time.api import Calendar, Date, Period, Days, Schedule, today
from quantlib.time import imm
from quantlib.util.converter import qldate_to_pydate, pydate_to_qldate
from quantlib.market.market import libor_market
import numpy as np
import matplotlib.pyplot as plt
-def getMarkitIRData(date):
+def getMarkitIRData(date = datetime.date.today()):
basedir = os.path.join(root, "data", "Yield Curves")
datestr = datetime.datetime.strftime(date, "%Y%m%d")
filename = "InterestRates_USD_{0}.xml".format(datestr)
@@ -43,22 +43,28 @@ def get_futures_data(date = datetime.date.today()):
quotes = [float(line.split(",")[1]) for line in fh]
return quotes
-if __name__=="__main__":
+def YC(date = datetime.date.today()):
m = libor_market('USD(NY)')
calendar = Calendar.from_name(m.calendar)
- MarkitData = getMarkitIRData(qldate_to_pydate(today()))
- prev_day = calendar.advance(today(), -1, Days, convention=Following)
+ MarkitData = getMarkitIRData()
+ prev_day = calendar.advance(today(), -1, Days)
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(today(), quotes)
m.bootstrap_term_structure()
- p3 = Period('3Mo')
+ return m
+
+if __name__=="__main__":
+ m = YC()
+ p1 = Period('1Mo')
p2 = Period('2Mo')
+ p3 = Period('3Mo')
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)
+ p12 = Period('12Mo')
+ calendar = Calendar.from_name(m.calendar)
+ sched = Schedule(m.settle_date, m.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]