aboutsummaryrefslogtreecommitdiffstats
path: root/python/load_cf.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/load_cf.py')
-rw-r--r--python/load_cf.py62
1 files changed, 46 insertions, 16 deletions
diff --git a/python/load_cf.py b/python/load_cf.py
index c5d3971e..13be9cd3 100644
--- a/python/load_cf.py
+++ b/python/load_cf.py
@@ -15,6 +15,7 @@ from yieldcurve import YC
import numpy as np
from optimization import KLfit
import pdb
+import ryp2.robjects as ro
if os.name =='nt':
root = "//WDsentinel/share/CorpCDOs"
@@ -62,14 +63,34 @@ def get_configfile(dealname, workdate):
config = {"reinvflag": True}
return config
-def basic_schedule(day_of_month, enddate, startdate=datetime.date.today()):
- return Schedule(startdate, enddate, Period('1Mo'), Unadjusted)
- #return pd.date_range(startdate, end=enddate, freq='MS') + datetime.timedelta(days=day_of_month-1)
+def get_dist(workdate):
+ distfile = os.path.join(root, "Scenarios", "marketdata-{0}.RData".format(str(workdate)))
+ dist = ro.r.load(distfile)
+ return {"L": np.array(dist[0]),"R": np.array(dist[1])}
+
+def get_dealdata(dealname, workdate):
+ 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)))
+ return sqldata
+
+def get_cusipdata(cusip, workdate):
+ sqlstring = "select curr_balance, spread from historical_cusip_universe(%s, %s)"
+ sqldata = query_db(sqlstr, (cusip, str(workdate)))
+ return sqldata
+
+def get_dealschedule(dealdata, freq='1Mo'):
+ us_cal = Calendar.from_name('USA')
+ if not dealdata["Pay Day"]:
+ dealdata["Pay Day"] =dealdata["Deal Next Pay Date"] + relativedelta(months=-3)
+ if abs((dealdata["Deal Next Pay Date"]- dealdata["Pay Day"]).days - 90)>10:
+ dealdata["Pay Day"] = dealdata["Deal Next Pay Date"] + relativedelta(months=-6)
+ return Schedule(pydate_to_qldate(dealdata["Pay Day"]), pydate_to_qldate(dealdata["maturity"]),
+ Period(freq), us_cal, Unadjusted, Unadjusted)
def getdealcf(dealnames, zipfiles, workdate = datetime.date.today()):
fiels = ["Cashflow", "Principal", "Interest"]
n_scenarios = 100
- us_cal = Calendar.from_name('USA')
cfdata = {}
m = YC(workdate)
fields = ["Cashflow", "Principal", "Interest"]
@@ -78,20 +99,12 @@ def getdealcf(dealnames, zipfiles, workdate = datetime.date.today()):
cfdata[dealname]={}
mv = query_db("select marketvalue from latest_deal_model_numbers where dealname = %s",
(dealname,))[0]
- 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 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, Unadjusted)
+ dealdata = get_dealdata(dealname, workdate)
+ cfdata[dealname] = {"mv":mv, "currbal": dealdata["Curr Collat Bal"]}
+ config = get_configfile(dealname, workdate)
+ sched = get_dealschedule(dealdata)
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],
index = pd_sched, name='df')
@@ -126,6 +139,23 @@ def getdealcf(dealnames, zipfiles, workdate = datetime.date.today()):
print(dealname)
return cfdata
+def getcusipcf(dealnames, cusip, cfdata, workdate):
+ dist = get_dist(workdate)
+ cusipdata = {}
+ n_scenarios = 100
+ m = YC(workdate)
+ for i, cusip in enumerate(cusips):
+ zip = zipfiles[i]
+ dealname = dealnames[i]
+ dealdata = getdealdata(dealname)
+ sched = getdealschedule(dealdata)
+ 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],
+ index = pd_sched, name='df')
+ for j in range(1, n_scenarios):
+
+
+
if __name__=="__main__":
#workdate = datetime.date.today()
workdate = datetime.datetime.strptime("2014-03-19", "%Y-%m-%d").date()