aboutsummaryrefslogtreecommitdiffstats
path: root/python/yieldcurve.py
blob: 5b12499529a3c3acaaabae8d44d9ec640df7769a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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()))