aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/intex_scenarios.py139
1 files changed, 60 insertions, 79 deletions
diff --git a/python/intex_scenarios.py b/python/intex_scenarios.py
index f675b07d..7ed9ab2a 100644
--- a/python/intex_scenarios.py
+++ b/python/intex_scenarios.py
@@ -9,49 +9,30 @@ import psycopg2
import common
import sys
import ConfigParser
+import pdb
-pattern11 = re.compile("(REINVEST\[)\w+(::REINV_TBA1\]\[DEAL,\d+\]=)(.*$)")
-pattern12 = re.compile("(REINVEST\[)\w+(::REINV_TBA2\]\[DEAL,\d+\]=)(.*$)")
+pattern1 = re.compile("REINVEST\[\w+::REINV_TBA(\d)\]\[DEAL,(\d+)\]=.*$")
# reinv end date
pattern2 = re.compile("(STANDARD_VAR\[)\w+(::#REINV_END,\d+\]=)(\d.*$)")
-# reinvprices float
-pattern3 = re.compile("(STANDARD_VAR\[)\w+(::#PRICE100_TBA1,\d+\]=)(.*$)")
-# reinvprices fixed
-pattern4 = re.compile("(STANDARD_VAR\[)\w+(::#PRICE100_TBA2,\d+\]=)(.*$)")
-# reinv float percentage
-pattern5 = re.compile("(STANDARD_VAR\[)\w+(::#REINVPCT_TBA1,\d+\]=)(.*$)")
-# reinv fixed percentage
-pattern6 = re.compile("(STANDARD_VAR\[)\w+(::#REINVPCT_TBA2,\d+\]=)(.*$)")
-pattern7 = re.compile("GOLDL3")
+# reinvprices 1
+pattern3 = re.compile("STANDARD_VAR\[\w+::#PRICE100_TBA(\d),(\d+)\]=")
+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")
-reinvfloatpercentage = 85
-reinvfixedpercentage = 15
+
+# we use 84 so that it's both dividable by 2 and 3
+global_reinvfloatpercentage = 84
+global_reinvfixedpercentage = 16
def get_reinv_assets(dealname, workdate, cursor):
- d = {'REINV_TBA1': None, 'REINV_TBA2': None}
sqlstr = 'select * from et_historicaldealinfo(%s, %s) where ReinvFlag IS TRUE'
cursor.execute(sqlstr, (dealname, workdate))
reinvassets = cursor.fetchall()
+ d = {}
for line in reinvassets:
d[line[3]] = line[22]
return d
-def convert_reinvtoperct(d):
- newd = {'REINV_TBA1': None, 'REINV_TBA2': None}
- if not d['REINV_TBA2']:
- newd['REINV_TBA1'] = 100
- return newd
- if d['REINV_TBA1'] == d['REINV_TBA2']: # case when we have two float or two fixed assets
- newd['REINV_TBA1'] = reinvfloatpercentage
- newd['REINV_TBA2'] = reinvfixedpercentage
- elif d['REINV_TBA1'] == 'FLOAT':
- newd['REINV_TBA1'] = reinvfloatpercentage
- newd['REINV_TBA2'] = reinvfixedpercentage
- elif d['REINV_TBA1'] == 'FIXED':
- newd['REINV_TBA1'] = reinvfixedpercentage
- newd['REINV_TBA2'] = reinvfloatpercentage
- return newd
-
def generate_scenarios(workdate, dealnames, conn, cursor):
prometheus = os.path.join(common.root, "Scenarios", "prometheus.sss")
n_scenarios = 100
@@ -70,7 +51,11 @@ def generate_scenarios(workdate, dealnames, conn, cursor):
reinvflag = config.getboolean('config', 'reinvflag')
rollingmat = config.getint('config', 'rollingmat')
reinv_assets = get_reinv_assets(dealname, workdate, cursor)
- perct_reinv_assets = convert_reinvtoperct(reinv_assets)
+ if len([v for v in reinv_assets.values() if v == 'FIXED']) == 0:
+ reinvfixedpercentage = 0
+ else:
+ reinvfixedpercentage = global_reinvfixedpercentage
+ reinvfloatpercentage = (100-reinvfixedpercentage)/len([v for v in reinv_assets.values() if v == 'FLOAT'])
floatreinvprices = []
fixedreinvprices = []
try:
@@ -117,62 +102,58 @@ def generate_scenarios(workdate, dealnames, conn, cursor):
line = re.sub(pattern8, r"\1{0}\2=0".format(dealname.upper()), line)
fh2.write(line + "\r\n")
continue
- if pattern11.match(line):
- # pdb.set_trace()
- line = re.sub(pattern11, r"\1{0}\2", line).format(dealname.upper())
-
- if reinv_assets["REINV_TBA1"] == "FLOAT":
- coupon = 4
- elif reinv_assets["REINV_TBA1"] == "FIXED":
- coupon = 7
- line = line + \
- "COUP_SPR={0}|AMORT=Bullet|USE_REINVEST_PIP=1|MAT_DATE={1}|".format(coupon,
- rollingmat)
- fh2.write(line + "\r\n")
- continue
- if pattern12.match(line):
- line = re.sub(pattern12, r"\1{0}\2", line).format(dealname.upper())
- if reinv_assets["REINV_TBA2"] == "FLOAT":
- coupon = 4
- elif reinv_assets["REINV_TBA2"] == "FIXED":
- coupon = 7
- line = line + \
- "COUP_SPR={0}|AMORT=Bullet|USE_REINVEST_PIP=1|MAT_DATE={1}|".format(coupon,
- rollingmat)
+ m = pattern1.match(line)
+ if m:
+ reinv_number, scen_number = m.groups()
+ key = "REINV_TBA" + reinv_number
+ if key in reinv_assets:
+ if reinv_assets[key] == "FLOAT":
+ coupon = 4
+ elif reinv_assets[key] == "FIXED":
+ coupon = 7
+ line = "REINVEST[{0}::REINV_TBA{1}][DEAL,{2}]=".format(dealname.upper(),
+ scen_number,
+ reinv_number)
+ line += "COUP_SPR={0}|AMORT=Bullet|USE_REINVEST_PIP=1|MAT_DATE={1}|".format(coupon, rollingmat)
fh2.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")
continue
- if pattern3.match(line):
- if reinv_assets['REINV_TBA1'] == 'FIXED':
- line = re.sub(pattern3, r"\1{0}\2{1}", line).format(dealname.upper(),
- " ".join(fixedreinvprices))
- elif reinv_assets['REINV_TBA1'] == 'FLOAT':
- line = re.sub(pattern3, r"\1{0}\2{1}", line).format(dealname.upper(),
- " ".join(floatreinvprices))
+ 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")
continue
- if pattern4.match(line):
- if reinv_assets['REINV_TBA2'] == 'FIXED':
- line = re.sub(pattern4, r"\1{0}\2{1}", line).format(dealname.upper(),
- " ".join(fixedreinvprices))
- elif reinv_assets['REINV_TBA2'] == 'FLOAT':
- line = re.sub(pattern4, r"\1{0}\2{1}", line).format(dealname.upper(),
- " ".join(floatreinvprices))
- fh2.write(line + "\r\n")
- continue
- if pattern5.match(line):
- if reinv_assets['REINV_TBA1']:
- line = re.sub(pattern5, r"\1{0}\2{1}", line).format(
- dealname.upper(), perct_reinv_assets['REINV_TBA1']).rstrip()
- fh2.write(line + "\r\n")
- continue
- if pattern6.match(line):
- if reinv_assets['REINV_TBA2']:
- line = re.sub(pattern6, r"\1{0}\2{1}", line).format(
- dealname.upper(), perct_reinv_assets['REINV_TBA2']).rstrip()
+ m = pattern5.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}::#REINVPCT_TBA{1},{2}]={3}".format(dealname.upper(),
+ reinv_number,
+ scen_number,
+ reinvfixedpercentage)
+ elif reinv_assets['REINV_TBA' + reinv_number] == 'FLOAT':
+ line = "STANDARD_VAR[{0}::#REINVPCT_TBA{1},{2}]={3}".format(dealname.upper(),
+ reinv_number,
+ scen_number,
+ reinvfloatpercentage)
+
fh2.write(line + "\r\n")
continue
if pattern7.search(line):