diff options
Diffstat (limited to 'python/load_cf.py')
| -rw-r--r-- | python/load_cf.py | 58 |
1 files changed, 21 insertions, 37 deletions
diff --git a/python/load_cf.py b/python/load_cf.py index df892eea..c5d3971e 100644 --- a/python/load_cf.py +++ b/python/load_cf.py @@ -81,13 +81,15 @@ def getdealcf(dealnames, zipfiles, workdate = datetime.date.today()): sqlstr = "select \"Curr Collat Bal\", \"Reinv End Date\", \"Deal Next Pay Date\"," \
"maturity, \"Principal Bal\", \"Pay Day\" from historical_clo_universe(%s, %s)"
sqldata = query_db(sqlstr, (dealname, str(workdate)))
- if sqldata["Pay Day"]:
+ if not sqldata["Pay Day"]:
sqldata["Pay Day"] = sqldata["Deal Next Pay Date"] + relativedelta(months=-3)
+ if abs((sqldata["Deal Next Pay Date"]- sqldata["Pay Day"]).days-90)>10:
+ sqldata["Pay Day"] = sqldata["Deal Next Pay Date"] + relativedelta(months=-6)
cfdata[dealname] = {"mv":mv, "currbal": sqldata["Curr Collat Bal"]}
config = get_configfile(dealname, workdate)
sched = Schedule(pydate_to_qldate(sqldata["Pay Day"]), pydate_to_qldate(sqldata["maturity"]),
- Period('1Mo'), us_cal, Unadjusted)
+ Period('1Mo'), us_cal, Unadjusted, Unadjusted)
pd_sched = [pd.to_datetime(str(day), format="%d/%m/%Y") for day in sched]
discounts = pd.Series([m.discount(day) if day > m.settle_date else 1 for day in sched],
@@ -99,52 +101,34 @@ def getdealcf(dealnames, zipfiles, workdate = datetime.date.today()): tranches = ["COLLAT_INITIAL", "COLLAT_REINVEST"]
cf = {}
- for tranche in tranches:
- scen = {}
- for i in range(1, n_scenarios+1):
- filename = "{0}-{1}-CF-Scen{2}.txt".format(dealname.upper(), tranche, i)
- with ZipFile(zip) as myzip:
+ with ZipFile(zip) as myzip:
+ for tranche in tranches:
+ scen = {}
+ for j in range(1, n_scenarios+1):
+ filename = "{0}-{1}-CF-Scen{2}.txt".format(dealname.upper(), tranche, j)
data = pd.read_table(myzip.open(filename), skiprows=[1, 2], parse_dates=[0],
thousands=",",
date_parser = lambda x: datetime.datetime.strptime(x, "%b %d, %Y"),
index_col=0)
- for c in fields:
- if data.dtypes[c] != np.dtype('float64'):
- data[c] = data[c].apply(sanitize_float)
- data = data[fields].join(discounts)
- scen[i] = np.dot(data["df"], data[fields])
- cf[tranche] = pd.DataFrame(scen).T
- cf[tranche].columns = fields
- pdb.set_trace()
- pdb.set_trace()
+ for c in fields:
+ if data.dtypes[c] != np.dtype('float64'):
+ data[c] = data[c].apply(sanitize_float)
+ data = data[fields].join(discounts)
+ scen[j] = np.dot(data["df"], data[fields])
+ cf[tranche] = pd.DataFrame(scen).T
+ cf[tranche].columns = fields
cfdata[dealname]["panel"] = pd.Panel(cf)
cf = cfdata[dealname]["panel"].minor_xs("Cashflow").T.sum()
cfdata[dealname]["wapbasis"] = (cf.mean() - mv)/mv
- pdb.set_trace()
- program = KLfit(cf.T/1e8, np.ones(n_scenarios)/n_scenarios, mv/1e8)
+ program = KLfit(cf.values/1e8, np.ones(n_scenarios)/n_scenarios, mv/1e8)
cfdata[dealname]["weight"] = program["weight"]
print(dealname)
return cfdata
-# fields = ["Price", "WAL", "Market Value", "Modified Duration"]
-# dealdata = {}
-# workdate = '2013-01-09'
-# for dealname in ["abcl071", "ammcclo5"]:
-# tranches = os.listdir(os.path.join(root, "Scenarios", "Prices_" + workdate, dealname))
-# d = {}
-# for tranche in tranches:
-# data = pd.read_table(os.path.join(root, "Scenarios", "Prices_" + workdate, dealname, tranche))
-# datamod = data[data.columns[2:-1]].T
-# datamod.columns = data[data.columns[1]]
-# for field in fields:
-# datamod[field] = datamod[field].apply(sanitize_float)
-# d[tranche[:-7]] = datamod[fields]
-# dealdata[dealname] = pd.concat(d)
-
-# dealdata = pd.concat(dealdata)
-
if __name__=="__main__":
- workdate = datetime.date.today()
- params = processzipfiles()
+ #workdate = datetime.date.today()
+ workdate = datetime.datetime.strptime("2014-03-19", "%Y-%m-%d").date()
+ params = processzipfiles(workdate)
pomme = getdealcf(params["dealnames"], params["zipfiles"], workdate)
+ pdb.set_trace()
|
