diff options
Diffstat (limited to 'python/intex_scenarios.py')
| -rw-r--r-- | python/intex_scenarios.py | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/python/intex_scenarios.py b/python/intex_scenarios.py index 31c5d445..58516799 100644 --- a/python/intex_scenarios.py +++ b/python/intex_scenarios.py @@ -6,8 +6,8 @@ from csv import reader import json
import re
import psycopg2
-import common
-from common import query_db, root
+from common import root
+from db import conn, query_db, with_connection
import sys
import yaml
@@ -25,31 +25,28 @@ pattern9 = re.compile("(?P<a>SEVERITY\[\w+,\d+\]=)mkt\(70\)") global_reinvfloatpercentage = 84
global_reinvfixedpercentage = 16
-def dealname_from_cusip(conn, cusips, distinct=False):
- with conn.cursor() as c:
- if distinct:
- sqlstr = "select distinct *"
- else:
- sqlstr = "select * "
- sqlstr += "from dealname_from_cusip({0})".format(",",join(["%s"]*len(cusip)))
- c.execute(sqlstr, params = cusip)
- dealnames = [d[0] for d in c.fetchall()]
+@with_connection
+def dealname_from_cusip(conn, cusips):
+ c = conn.cursor()
+ c.callproc("dealname_from_cusip", params = cusip)
+ dealnames = [d[0] for d in c.fetchall()]
+ c.close()
return dealnames
-def get_reinv_assets(conn, dealname, workdate):
+def get_reinv_assets(dealname, workdate):
sqlstr = 'select * from et_historicaldealinfo(%s, %s) where ReinvFlag IS TRUE'
- reinvassets = query_db(conn, sqlstr, params = (dealname, workdate), one = False)
+ reinvassets = query_db(sqlstr, params = (dealname, workdate), one = False)
d = {}
for line in reinvassets:
d[line[3]] = line[22]
return d
-def get_recovery(conn, dealname, workdate, defaultrecovery = 50):
+def get_recovery(dealname, workdate, defaultrecovery = 50):
""" compute average price of defaulted assets
"""
sqlstr = "select sum(coalesce(price, %s) * currentbalance)/sum(currentbalance) " + \
"from et_aggdealinfo_historical(%s, %s) where defaultedflag is True"
- recovery = query_db(conn, sqlstr, params = (defaultrecovery, dealname, workdate))
+ recovery = query_db(sqlstr, params = (defaultrecovery, dealname, workdate))
try:
recovery = recovery[0]
@@ -60,27 +57,27 @@ def get_recovery(conn, dealname, workdate, defaultrecovery = 50): recovery = defaultrecovery
return float(recovery)
-def get_reinvenddate(conn, dealname):
+def get_reinvenddate(dealname):
sqlstr = 'SELECT \"Reinv End Date\" from latest_clo_universe where dealname=%s'
- reinvenddate = query_db(conn, sqlstr, params = (dealname,))[0]
+ reinvenddate = query_db(sqlstr, params = (dealname,))[0]
if reinvenddate:
reinvenddate = reinvenddate.strftime("%Y%m%d")
return reinvenddate
else:
raise Exception("missing reinvestment end date")
-def generate_scenarios(conn, workdate, dealname):
+def generate_scenarios(workdate, dealname):
prometheus = os.path.join(root, "Scenarios", "prometheus.sss")
n_scenarios = 100
basedir = os.path.join(root, "Scenarios", "Intex curves_" + workdate)
- defaultedprice = get_recovery(conn, dealname, workdate)
+ defaultedprice = get_recovery(dealname, workdate)
replace = "\g<a>{0:.3f}".format(defaultedprice)
with open(os.path.join(basedir, "csv", dealname + ".config")) as fh:
config = yaml.load(fh)
reinvflag = config['reinvflag']
if reinvflag:
- reinvenddate = get_reinvenddate(conn, dealname)
- reinv_assets = get_reinv_assets(conn, dealname, workdate)
+ reinvenddate = get_reinvenddate(dealname)
+ reinv_assets = get_reinv_assets(dealname, workdate)
n_float_assets = len([v for v in reinv_assets.values() if v == 'FLOAT'])
n_fixed_assets = len([v for v in reinv_assets.values() if v == 'FIXED'])
rollingmat = config['rollingmat']
@@ -236,5 +233,5 @@ if __name__ == "__main__": "Intex curves_" + workdate, "csv"))
if "RData" in d]
for dealname in dealnames:
- generate_scenarios(common.conn, workdate, dealname)
- common.conn.close()
+ generate_scenarios(workdate, dealname)
+ conn.close()
|
