diff options
Diffstat (limited to 'python/populate_risk_numbers.py')
| -rw-r--r-- | python/populate_risk_numbers.py | 60 |
1 files changed, 37 insertions, 23 deletions
diff --git a/python/populate_risk_numbers.py b/python/populate_risk_numbers.py index 1aede16e..3ab01d39 100644 --- a/python/populate_risk_numbers.py +++ b/python/populate_risk_numbers.py @@ -3,13 +3,15 @@ from db import serenitasdb import datetime basedir = "/home/share/CorpCDOs" -with open(os.path.join(basedir, "code", "etc", "runs.yml")) as fh: - runs = yaml.load(fh) - index_list = [[name[:2].upper(), int(name[2:]), tenor] for name, tenor in zip(runs['name'], runs['tenor'])] +def get_index_list(basedir): + with open(os.path.join(basedir, "code", "etc", "runs.yml")) as fh: + runs = yaml.load(fh) + index_list = [[name[:2].upper(), int(name[2:]), tenor] for name, tenor + in zip(runs['name'], runs['tenor'])] + return index_list -sqlstr1 = "SELECT * from nameToBasketID(%s, %s)" -sqlstr2 = "INSERT INTO risk_numbers VALUES({0},{1})".format(",".join(["%s"] * 10), - ",".join(["%s::float[]"]*9)) +sqlstr = "INSERT INTO risk_numbers VALUES({0},{1})".format(",".join(["%s"] * 10), + ",".join(["%s::float[]"]*9)) def get_attach_from_name(index_type, series): if index_type.lower() == "ig": @@ -24,20 +26,32 @@ def get_attach_from_name(index_type, series): def convert(s): return None if s=="NA" else float(s) -for index_type, series, tenor in index_list: - attach = get_attach_from_name(index_type, series) - with open(os.path.join(basedir, "Tranche_data", "Runs", - "{0}{1}.{2}.csv".format(index_type, series, tenor))) as fh: - csvreader = csv.DictReader(fh) - for line in csvreader: - line['date'] = datetime.datetime.strptime(line['date'], "%Y-%m-%d").date() - with serenitasdb.cursor() as c: - greeks = [] - skew = [convert(line["{0} Corr".format(a)]) for a in attach[1:]] - for k in ["Dealer Delta", "Model Delta", "Forward Deltas", "Gamma", "Theta", - "Corr01", "Dur", "EL"]: - greeks.append([convert(line["{0}-{1} {2}".format(l, u, k)]) - for l, u in zip(attach[:-1], attach[1:])]) - c.execute(sqlstr2, (line['date'], index_type, series, tenor, line['indexprice'], - line['indexBasis'], line['indexEL'], line['indexduration'], - line['indexTheta'], attach) + (skew,) + tuple(greeks)) +def populate_risk(basedir, db): + with db.cursor() as c: + c.execute("DELETE FROM risk_numbers") + db.commit() + for index_type, series, tenor in get_index_list(basedir): + attach = get_attach_from_name(index_type, series) + with open(os.path.join(basedir, "Tranche_data", "Runs", + "{0}{1}.{2}.csv".format(index_type, series, tenor))) as fh: + csvreader = csv.DictReader(fh) + with db.cursor() as c: + toinsert = [] + for line in csvreader: + line['date'] = datetime.datetime.strptime(line['date'], "%Y-%m-%d").date() + greeks = [] + skew = [convert(line["{0} Corr".format(a)]) for a in attach[1:]] + for k in ["Dealer Delta", "Model Delta", "Forward Deltas", "Gamma", "Theta", + "Corr01", "Dur", "EL"]: + greeks.append([convert(line["{0}-{1} {2}".format(l, u, k)]) + for l, u in zip(attach[:-1], attach[1:])]) + toinsert.append((line['date'], index_type, series, tenor, line['indexprice'], + line['indexBasis'], line['indexEL'], line['indexduration'], + line['indexTheta'], attach) + (skew,) + tuple(greeks)) + c.executemany(sqlstr, toinsert) + db.commit() + +if __name__=="__main__": + basedir = "/home/share/CorpCDOs" + populate_risk(basedir, serenitasdb) + serenitasdb.close() |
