diff options
Diffstat (limited to 'python/intex_scenarios.py')
| -rw-r--r-- | python/intex_scenarios.py | 68 |
1 files changed, 26 insertions, 42 deletions
diff --git a/python/intex_scenarios.py b/python/intex_scenarios.py index 1b595f0a..6dc78f3f 100644 --- a/python/intex_scenarios.py +++ b/python/intex_scenarios.py @@ -41,13 +41,11 @@ def generate_scenarios(workdate, dealnames, conn, cursor): for dealname in dealnames:
cursor.execute('SELECT \"Reinv End Date\" from latest_clo_universe where dealname=%s', (dealname,))
reinvenddate = cursor.fetchone()[0]
- config.read(os.path.join(basedir, "csv", dealname + ".config"))
if reinvenddate:
reinvenddate = reinvenddate.strftime("%Y%m%d")
- reinvflag = True
else:
print "missing reinvestment end date"
- reinvflag = False
+ 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)
@@ -59,31 +57,23 @@ def generate_scenarios(workdate, dealnames, conn, cursor): reinvfixedpercentage = global_reinvfixedpercentage / n_fixed_assets
if n_float_assets > 0:
reinvfloatpercentage = (100 - n_fixed_assets * reinvfixedpercentage)/n_float_assets
- floatreinvprices = []
- fixedreinvprices = []
+
try:
- # with open(os.path.join(basedir, "csv", dealname + "-floatreinvprices.csv"), "rb") as fhreinv:
- # for line in fhreinv:
- # floatreinvprices.append(line.rstrip("\n").split(","))
- # with open(os.path.join(basedir, "csv", dealname + "-fixedreinvprices.csv"), "rb") as fhreinv:
- # for line in fhreinv:
- # fixedreinvprices.append(line.rstrip("\n").split(","))
with open(os.path.join(basedir, "csv", dealname + "-reinvprices.csv"), "rb") as fh:
- for line in fh:
- a, b = line.rstrip().split(",")
- floatreinvprices.append(a)
- fixedreinvprices.append(b)
- floatreinvprices = ["{0:.3f}".format(float(p))for p in floatreinvprices]
- fixedreinvprices = ["{0:.3f}".format(float(p)) for p in fixedreinvprices]
+ dr = csv.Dictreader(fh)
+ reinvprices = {f: [] for f in dr.fieldnames}
+ for line in dr:
+ for f in dr.fieldnames:
+ reinprices[f].append("{0:.3f}".format(float(line[f])))
except IOError:
reinvflag = False
- output = os.path.join(basedir, "sss", dealname + ".sss")
+ sssfile = os.path.join(basedir, "sss", dealname + ".sss")
if not os.path.exists(os.path.join(basedir, "sss")):
os.makedirs(os.path.join(basedir, "sss"))
cdrscenarios = os.path.join(basedir, "csv", dealname + "-cdr.csv")
recoveryscenarios = os.path.join(basedir, "csv", dealname + "-recovery.csv")
- fh2 = open(output, "w")
+ fhsss = open(sssfile, "w")
fhcdr = open(cdrscenarios, "r")
fhrecovery = open(recoveryscenarios, "r")
csvcdr = reader(fhcdr)
@@ -99,11 +89,11 @@ def generate_scenarios(workdate, dealnames, conn, cursor): line = line.rstrip()
if "DEAL_NAME" in line:
newline = "DEAL_NAME=" + dealname.upper() + "\r\n"
- fh2.write(newline)
+ fhsss.write(newline)
continue
if not reinvflag and pattern8.match(line):
line = re.sub(pattern8, r"\1{0}\2=0".format(dealname.upper()), line)
- fh2.write(line + "\r\n")
+ fhsss.write(line + "\r\n")
continue
m = pattern1.match(line)
if m:
@@ -119,28 +109,22 @@ def generate_scenarios(workdate, dealnames, conn, cursor): scen_number)
line += "COUP_SPR={0}|AMORT=Bullet|USE_REINVEST_PIP=1|MAT_DATE={1}|".format(coupon,
rollingmat)
- fh2.write(line + "\r\n")
+ fhsss.write(line + "\r\n")
continue
if pattern2.match(line):
line = re.sub(pattern2, r"\1{0}\2{1}", line).format(dealname.upper(), reinvenddate)
- fh2.write(line + "\r\n")
+ fhsss.write(line + "\r\n")
continue
m = pattern3.match(line)
if m:
reinv_number, scen_number = m.groups()
- key = "REINV_TBA" + reinv_number
- if key in reinv_assets:
- if reinv_assets[key] == 'FIXED':
- line = "STANDARD_VAR[{0}::#PRICE100_TBA{1},{2}]={3}".format(dealname.upper(),
- reinv_number,
- scen_number,
- " ".join(fixedreinvprices))
- elif reinv_assets[key] == 'FLOAT':
- line = "STANDARD_VAR[{0}::#PRICE100_TBA{1},{2}]={3}".format(dealname.upper(),
- reinv_number,
- scen_number,
- " ".join(floatreinvprices))
- fh2.write(line + "\r\n")
+ reinv_name = "REINV_TBA" + reinv_number
+ if reinv_name in reinvprices:
+ line = "STANDARD_VAR[{0}::#PRICE100_TBA{1},{2}]={3}".format(dealname.upper(),
+ reinv_number,
+ scen_number,
+ " ".join(reinvprices[key]))
+ fhsss.write(line + "\r\n")
continue
m = pattern5.match(line)
if m:
@@ -158,11 +142,11 @@ def generate_scenarios(workdate, dealnames, conn, cursor): scen_number,
reinvfloatpercentage)
- fh2.write(line + "\r\n")
+ fhsss.write(line + "\r\n")
continue
if pattern7.search(line):
line = re.sub(pattern7, dealname.upper(), line)
- fh2.write(line + "\r\n")
+ fhsss.write(line + "\r\n")
continue
# if "STANDARD_VAR" in line:
# newline = "STANDARD_VAR[REINVEST_PRICE,1]=" + " ".join(reinvprices)
@@ -170,11 +154,11 @@ def generate_scenarios(workdate, dealnames, conn, cursor): # continue
if "LOSS_RATE[DEAL,{0}]".format(i) in line:
newcdrline = "LOSS_RATE[DEAL,{0}]=".format(i) + cdrline
- fh2.write(newcdrline + "\r\n")
+ fhsss.write(newcdrline + "\r\n")
continue
if "LOSS_SEVERITY[DEAL,{0}]".format(i) in line:
newrecoveryline = "LOSS_SEVERITY[DEAL,{0}]=".format(i) + recoveryline
- fh2.write(newrecoveryline + "\r\n")
+ fhsss.write(newrecoveryline + "\r\n")
i = i + 1
if i <= n_scenarios:
cdrline = csvcdr.next()
@@ -183,8 +167,8 @@ def generate_scenarios(workdate, dealnames, conn, cursor): recoveryline = "\t".join(["{0:.3f}".format(float(recovery)) \
for recovery in recoveryline]) + "\r\n"
continue
- fh2.write(line + "\r\n")
- fh2.close()
+ fhsss.write(line + "\r\n")
+ fhsss.close()
fhrecovery.close()
fhcdr.close()
print "generated scenarios for: {0}".format(dealname)
|
