aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/load_cf.R15
-rw-r--r--sql/et_tables.sql13
2 files changed, 21 insertions, 7 deletions
diff --git a/R/load_cf.R b/R/load_cf.R
index 7703e87f..22c5386a 100644
--- a/R/load_cf.R
+++ b/R/load_cf.R
@@ -178,7 +178,8 @@ getcusipcf <- function(cusips, cfdata, workdate=Sys.Date()){
for(field in fields){
cleanfield <- tryCatch(sanitize.column(data[,field]),
warning = function(w)w)
- if(inherits(cleanfield, "warning")){
+ if(inherits(cleanfield, "warning")||any(is.na(cleanfield))){
+ cat(sprintf("file: %s is messed up", filename), "\n")
flag <- TRUE
break
}else{
@@ -232,11 +233,21 @@ getcusipcf <- function(cusips, cfdata, workdate=Sys.Date()){
cfdata <- getdealcf(dealnames, workdate)
availablecusips <- cusips[dealnamefromcusip(cusips) %in% names(cfdata)]
cusipdata <- getcusipcf(availablecusips, cfdata, workdate)
+## upload wapbasis
+for(dealname in names(cfdata)){
+ sqlstring <- sprintf(paste0("UPDATE et_deal_model_numbers SET ",
+ "wapbasis = '%s' WHERE dealname= '%s' AND updatedate = '%s'"),
+ cfdata[[dealname]]$wapbasis*100,
+ dealname,
+ strftime(workdate))
+ dbSendQuery(dbCon, sqlstring)
+}
+## upload model data
for(cusip in names(cusipdata)){
columns <- c("Cusip", "price", "wal", "duration", "updatedate")
values <- c(cusip, cusipdata[[cusip]]$price, cusipdata[[cusip]]$wal,
- cusipdata[[cusip]]$duration, workdate)
+ cusipdata[[cusip]]$duration, strftime(workdate))
colstring <- paste(columns[!is.na(values)], collapse=",")
valstring <- paste(values[!is.na(values)], collapse="','")
sqlstring <- sprintf(paste0("INSERT INTO et_cusip_model_numbers",
diff --git a/sql/et_tables.sql b/sql/et_tables.sql
index a26ad542..069f0c66 100644
--- a/sql/et_tables.sql
+++ b/sql/et_tables.sql
@@ -452,18 +452,20 @@ CREATE OR REPLACE FUNCTION et_cusip_details(p_cusips VARIADIC varchar(10)[])
manager text, empty2 unknown, spread float, issuedate date,
reinvenddate date, maturity date, stale_percentage float,
cdo_percentage float, wap_basis float, portfolio_spread float,
- subordination float, thickness float ) AS $$
+ subordination float, thickness float, empty3 unknown, pricingdate date,
+ delta float, duration float, wal float, price float) AS $$
BEGIN
RETURN QUERY SELECT a.Orig_Moody, a.Curr_Moody, NULL, b."Deal Name", b.manager, NULL,
a.Spread/100, b."Deal Issue Date", b."Reinv End Date", b.Maturity,
- e.stalepercentage, greatest(b."CDO Percentage"/100, e.cdopercentage), CAST(NULL AS float), e.dealspread,
- d.subordination, d.thickness
- FROM cusip_universe a LEFT JOIN latest_clo_universe b
+ e.stalepercentage, greatest(b."CDO Percentage"/100, e.cdopercentage), e.wapbasis, e.dealspread,
+ a.subordination, a.thickness, NULL, d.updatedate, d.delta, d.duration, d.wal, d.price
+ FROM latest_cusip_universe a LEFT JOIN latest_clo_universe b
ON a.dealname = b.dealname
LEFT JOIN latest_deal_model_numbers e
ON a.dealname = e.dealname
RIGHT JOIN (SELECT unnest($1) AS cusip, generate_subscripts(p_cusips, 1) AS id) c
- ON c.cusip = a.cusip LEFT JOIN et_model_numbers d ON d.cusip = c.cusip ORDER BY c.id;
+ ON c.cusip = a.cusip
+ LEFT JOIN latest_cusip_model_numbers d ON d.cusip = c.cusip ORDER BY c.id;
END;
$$ LANGUAGE plpgsql;
@@ -553,6 +555,7 @@ CREATE TABLE et_deal_model_numbers(
dealspread float,
marketvalue float,
updatedate date,
+ wapbasis float,
PRIMARY KEY(dealname, updatedate)
);