aboutsummaryrefslogtreecommitdiffstats
path: root/python/intex_scenarios.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/intex_scenarios.py')
-rw-r--r--python/intex_scenarios.py45
1 files changed, 25 insertions, 20 deletions
diff --git a/python/intex_scenarios.py b/python/intex_scenarios.py
index 0a4182d5..e948ead5 100644
--- a/python/intex_scenarios.py
+++ b/python/intex_scenarios.py
@@ -8,7 +8,7 @@ import re
import psycopg2
import common
import sys
-import ConfigParser
+import yaml
pattern1 = re.compile("REINVEST\[\w+::REINV_TBA(\d)\]\[DEAL,(\d+)\]=.*$")
# reinv end date
@@ -19,6 +19,7 @@ pattern5 = re.compile("STANDARD_VAR\[\w+::#REINVPCT_TBA(\d),(\d+)\]=")
pattern7 = re.compile("KINGS3")
pattern8 = re.compile("(#COLLATREINV_REINV_PCT_EXT\[)\w+(::\*\]\[DEAL,\d+\])=100")
pattern9 = re.compile("(?P<a>SEVERITY\[\w+,\d+\]=)mkt\(70\)")
+
# we use 84 so that it's both dividable by 2 and 3
global_reinvfloatpercentage = 84
global_reinvfixedpercentage = 16
@@ -57,23 +58,24 @@ def generate_scenarios(workdate, dealnames, conn, cursor):
prometheus = os.path.join(common.root, "Scenarios", "prometheus.sss")
n_scenarios = 100
basedir = os.path.join(common.root, "Scenarios", "Intex curves_" + workdate)
- config = ConfigParser.ConfigParser()
for dealname in dealnames:
- reinvenddate = get_reinvenddate(dealname, cursor)
defaultedprice = get_recovery(dealname, workdate, cursor)
replace = "\g<a>{0:.3f}".format(defaultedprice)
- config.read(os.path.join(basedir, "csv", dealname + ".config"))
- reinvflag = config.getboolean('config', 'reinvflag')
- rollingmat = config.getint('config', 'rollingmat')
- reinv_assets = get_reinv_assets(dealname, workdate, cursor)
- 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'])
- if n_fixed_assets == 0:
- reinvfixedpercentage = 0
- else:
- reinvfixedpercentage = global_reinvfixedpercentage / n_fixed_assets
- if n_float_assets > 0:
- reinvfloatpercentage = (100 - n_fixed_assets * reinvfixedpercentage)/n_float_assets
+ with open(os.path.join(basedir, "csv", dealname + ".config")) as fh:
+ config = yaml.load(fh)
+ reinvflag = config['reinvflag']
+ if reinvflag:
+ reinvenddate = get_reinvenddate(dealname, cursor)
+ reinv_assets = get_reinv_assets(dealname, workdate, cursor)
+ 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']
+ if n_fixed_assets == 0:
+ reinvfixedpercentage = 0
+ else:
+ reinvfixedpercentage = global_reinvfixedpercentage / n_fixed_assets
+ if n_float_assets > 0:
+ reinvfloatpercentage = (100 - n_fixed_assets * reinvfixedpercentage)/n_float_assets
try:
with open(os.path.join(basedir, "csv", dealname + "-reinvprices.csv"), "rb") as fh:
@@ -113,8 +115,11 @@ def generate_scenarios(workdate, dealnames, conn, cursor):
line = re.sub(pattern8, r"\1{0}\2=0".format(dealname.upper()), line)
fhsss.write(line + "\r\n")
continue
+ if not reinvflag and "DO_REINV" in line:
+ fhsss.write("DO_REINV=0" + "\r\n")
+ continue
m = pattern1.match(line)
- if m:
+ if reinvflag and m:
reinv_number, scen_number = m.groups()
key = "REINV_TBA" + reinv_number
if key in reinv_assets:
@@ -129,12 +134,12 @@ def generate_scenarios(workdate, dealnames, conn, cursor):
rollingmat)
fhsss.write(line + "\r\n")
continue
- if pattern2.match(line):
+ if reinvflag and pattern2.match(line):
line = re.sub(pattern2, r"\1{0}\2{1}", line).format(dealname.upper(), reinvenddate)
fhsss.write(line + "\r\n")
continue
m = pattern3.match(line)
- if m:
+ if reinvflag and m:
reinv_number, scen_number = m.groups()
if dealname=="litpt3" and reinv_number=="1":
line = "STANDARD_VAR[LITPT3::#REINVLOANP100,{0}]".format(scen_number) + \
@@ -151,7 +156,7 @@ def generate_scenarios(workdate, dealnames, conn, cursor):
fhsss.write(line + "\r\n")
continue
m = pattern5.match(line)
- if m:
+ if reinvflag and m:
reinv_number, scen_number = m.groups()
reinv_name = "REINV_TBA" + reinv_number
if reinv_number=="1":
@@ -160,7 +165,7 @@ def generate_scenarios(workdate, dealnames, conn, cursor):
fhsss.write(line + "\r\n")
continue
if dealname=="flags4":
- line = "STANDARD_VAR[LITPT3::#PCT100_TBA1,{0}]=100".format(scen_number)
+ line = "STANDARD_VAR[FLAGS4::#PCT100_TBA1,{0}]=100".format(scen_number)
fhsss.write(line + "\r\n")
continue
if reinv_name in reinv_assets: