aboutsummaryrefslogtreecommitdiffstats
path: root/python/yieldcurve.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/yieldcurve.py')
-rw-r--r--python/yieldcurve.py63
1 files changed, 43 insertions, 20 deletions
diff --git a/python/yieldcurve.py b/python/yieldcurve.py
index e956e216..69120d74 100644
--- a/python/yieldcurve.py
+++ b/python/yieldcurve.py
@@ -18,28 +18,51 @@ import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from quantlib.quotes import SimpleQuote
+from db import dbconn
-def getMarkitIRData(date = datetime.date.today() - datetime.timedelta(days = 1),
- currency="USD"):
- basedir = os.path.join(root, "data", "Yield Curves")
- filename = "InterestRates_{0}_{1:%Y%m%d}".format(currency, date)
- if not os.path.exists(os.path.join(basedir, filename + '.xml')):
- r = requests.get('http://www.markit.com/news/{0}.zip'.format(filename))
- if "zip" in r.headers['content-type']:
- with zipfile.ZipFile(BytesIO(r.content)) as z:
- z.extractall(path = os.path.join(root, "data", "Yield Curves"))
- else:
- return getMarkitIRData(date-datetime.timedelta(days=1))
+def getMarkitIRData(effective_date = datetime.date.today(),
+ currency = "USD"):
+ download_date = effective_date - datetime.timedelta(days = 1)
+ conn = dbconn("serenitasdb")
+ sql_str = "SELECT * FROM {}_rates WHERE effective_date = %s".format(currency)
+ with conn.cursor() as c:
+ c.execute(sql_str, (effective_date,))
+ col_names = [c[0] for c in c.description]
+ r = c.fetchone()
+ if r:
+ MarkitData = {'effectiveasof': r[0],
+ 'deposits': [(t, r[i]) for i, t in \
+ enumerate(col_names[1:7], 1) if r[i] is not None],
+ 'swaps': [(t, r[i]) for i, t in enumerate(col_names[7:], 7)]}
+ else:
+ basedir = os.path.join(root, "data", "Yield Curves")
+ filename = "InterestRates_{0}_{1:%Y%m%d}".format(currency, download_date)
+ if not os.path.exists(os.path.join(basedir, filename + '.xml')):
+ r = requests.get('http://www.markit.com/news/{0}.zip'.format(filename))
+ if "zip" in r.headers['content-type']:
+ with zipfile.ZipFile(BytesIO(r.content)) as z:
+ z.extractall(path = os.path.join(root, "data", "Yield Curves"))
+ else:
+ return getMarkitIRData(download_date-datetime.timedelta(days=1))
- tree = ET.parse(os.path.join(root, "data", "Yield Curves", filename + '.xml'))
- deposits = zip([e.text for e in tree.findall('./deposits/*/tenor')],
- [float(e.text) for e in tree.findall('./deposits/*/parrate')])
- swaps = zip([e.text for e in tree.findall('./swaps/*/tenor')],
- [float(e.text) for e in tree.findall('./swaps/*/parrate')])
- effectiveasof = tree.find('./effectiveasof').text
- MarkitData = {'deposits': list(deposits),
- 'swaps': list(swaps),
- 'effectiveasof': pd.Timestamp(effectiveasof).date()}
+ tree = ET.parse(os.path.join(root, "data", "Yield Curves", filename + '.xml'))
+ deposits = zip([e.text for e in tree.findall('./deposits/*/tenor')],
+ [float(e.text) for e in tree.findall('./deposits/*/parrate')])
+ swaps = zip([e.text for e in tree.findall('./swaps/*/tenor')],
+ [float(e.text) for e in tree.findall('./swaps/*/parrate')])
+ effectiveasof = tree.find('./effectiveasof').text
+ MarkitData = {'deposits': list(deposits),
+ 'swaps': list(swaps),
+ 'effectiveasof': pd.Timestamp(effectiveasof).date()}
+ instruments = MarkitData['deposits'] + MarkitData['swaps']
+ names = ",".join(['"{}"'.format(r[0]) for r in instruments])
+ values = ",".join(["%s"] * (len(instruments) + 1)) # +1 for effective_date
+ insert_str = ("INSERT INTO {0}_rates(effective_date, {1}) VALUES({2})".
+ format(currency, names, values))
+ with conn.cursor() as c:
+ c.execute(insert_str, [MarkitData['effectiveasof']] +[r[1] for r in instruments])
+ conn.commit()
+ conn.close()
return MarkitData
def get_futures_data(date = datetime.date.today()):