diff options
| -rw-r--r-- | python/yieldcurve.py | 34 |
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())) |
