aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/yieldcurve.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/python/yieldcurve.py b/python/yieldcurve.py
new file mode 100644
index 00000000..5b124995
--- /dev/null
+++ b/python/yieldcurve.py
@@ -0,0 +1,34 @@
+from common import root
+import os
+import requests, zipfile
+from io import BytesIO
+import xml.etree.ElementTree as ET
+import datetime
+
+def getMarkitIRData(date):
+ basedir = os.path.join(root, "data", "Yield Curves")
+ datestr = datetime.datetime.strftime(date, "%Y%m%d")
+ filename = "InterestRates_USD_{0}.xml".format(datestr)
+ if not os.path.exists(os.path.join(basedir, filename)):
+ r = requests.get('http://www.markit.com/news/InterestRates_USD_{0}.zip'.format(datestr))
+ if "x-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))
+
+ tree = ET.parse(os.path.join(root, "data", "Yield Curves", filename))
+ deposits = {tenor: rate for tenor, rate in \
+ zip([e.text for e in tree.findall('./deposits/*/tenor')],
+ [float(e.text) for e in tree.findall('./deposits/*/parrate')])}
+ swaps = {tenor: rate for tenor, rate in \
+ 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': deposits,
+ 'swaps': swaps,
+ 'effectiveasof': datetime.datetime.strptime(effectiveasof, "%Y-%m-%d").date()}
+ return MarkitData
+
+if __name__=="__main__":
+ print(getMarkitIRData(datetime.date.today()))