aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/intex_deal_functions.R47
-rw-r--r--sql/et_tables.sql23
2 files changed, 45 insertions, 25 deletions
diff --git a/R/intex_deal_functions.R b/R/intex_deal_functions.R
index 29573b24..f6fa2c2c 100644
--- a/R/intex_deal_functions.R
+++ b/R/intex_deal_functions.R
@@ -12,17 +12,31 @@ source(file.path(root.dir, "code", "R", "cds_functions_generic.R"))
source(file.path(root.dir, "code", "R", "etdb.R"))
source(file.path(root.dir, "code", "R", "tranche_functions.R"))
-getdealdata <- function(dealnames){
- sqlstring <- sprintf("select * from latest_clo_universe where dealname in ('%s')",
- paste(dealnames, collapse="','"))
+getdealdata <- function(dealnames, date){
+ if(missing(date)){
+ sqlstring <- sprintf("select * from latest_clo_universe where dealname in ('%s')",
+ paste(dealnames, collapse="','"))
+ }else{
+ sqlstring <- paste("SELECT b.* FROM (SELECT MAX(\"Latest Update\") AS latestdate,",
+ "dealname FROM clo_universe WHERE \"Latest Update\"<='%s' AND dealname in ('%s')",
+ "GROUP BY dealname) a JOIN clo_universe b ON a.dealname = b.dealname",
+ "AND a.latestdate= b.\"Latest Update\" ORDER by dealname asc")
+ sqlstring <- sprintf(sqlstring, date, paste(dealnames, collapse="','"))
+ }
+ data <- dbGetQuery(dbCon, sqlstring)
data <- dbGetQuery(dbCon, sqlstring)
data <- data[match(dealnames, data$dealname),]
rownames(data) <- c()
return( data )
}
-getcollateral <- function(dealname, date=Sys.Date()){
- sqlstring <- sprintf("select * from et_aggdealinfo_historical('%s', '%s')", dealname, date)
+
+getcollateral <- function(dealname, date){
+ if(missing(date)){
+ sqlstring <- sprintf("select * from et_aggdealinfo('%s')", dealname, date)
+ }else{
+ sqlstring <- sprintf("select * from et_aggdealinfo_historical('%s', '%s')", dealname, date)
+ }
collatdata <- dbGetQuery(dbCon, sqlstring)
return(collatdata)
}
@@ -32,10 +46,13 @@ listdealnames <- function(){
return( dbGetQuery(dbCon, sqlstring))
}
-cusip.data <- function(){
- sqlstring <- "SELECT a.cusip, b.maturity, a.coupon AS grosscoupon, a.spread,
+cusip.data <- function(date){
+ if(missing(date)){
+ sqlstring <- "SELECT a.cusip, b.maturity, a.coupon AS grosscoupon, a.spread,
CASE WHEN a.floater_index like 'LIBOR%' THEN 'FLOAT' ELSE 'FIXED' END
AS fixedorfloat, a.orig_moody from cusip_universe a LEFT JOIN latest_clo_universe b ON a.dealname = b.dealname"
+ }else{
+ }
data <- dbGetQuery(dbCon, sqlstring)
return( data )
}
@@ -61,13 +78,11 @@ recovery <- function(collateral) {
}
dealnamefromcusip <- function(cusips){
- ## wrapper around the sql procedure, not the fastest probably
- r <- NULL
- for(i in 1:length(cusips)){
- sqlstr <- sprintf("select * from dealname_from_cusip('%s')", cusips[i])
- r <- c(r, as.character(dbGetQuery(dbCon, sqlstr)))
- }
- return( r )
+ ## wrapper around the sql function
+ sqlstr <- sprintf("select * from dealname_from_cusip('%s')",
+ paste(cusips, collapse="','"))
+ r <- dbGetQuery(dbCon, sqlstr)
+ return( r$p_dealname )
}
cusipsfromdealnames <- function(dealnames){
@@ -239,8 +254,8 @@ buildSC <- function(line.item, reinvdate, dealmaturity, global.params, startdate
return( list(SC=SC, notional=line.item$currentbalance, price = line.item$price) )
}
-buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, startdate=today()) {
- collatdata <- getcollateral(dealname)
+buildSC.portfolio <- function(dealname, dealdata, cusipdata, global.params, startdate=Sys.Date()) {
+ collatdata <- getcollateral(dealname, startdate)
index <- hash(cusipdata$cusip, 1:length(cusipdata$cusip))
notionalvec <- c()
SCvec <- c()
diff --git a/sql/et_tables.sql b/sql/et_tables.sql
index 78d660b6..e1647940 100644
--- a/sql/et_tables.sql
+++ b/sql/et_tables.sql
@@ -271,9 +271,8 @@ CREATE VIEW latest_clo_universe AS
JOIN clo_universe b ON a.dealname = b.dealname AND a.latestdate= b."Latest Update"
ORDER by dealname asc;
--- CREATE OR REPLACE FUNCTION historical_clo_universe(p_date date)
--- RETURNS TABLE(dealname varchar(8), "Deal Name" text, varchar
--- GRANT ALL ON latest_clo_universe TO et_user;
+GRANT ALL ON latest_clo_universe TO et_user;
+
CREATE VIEW dealcusipmapping AS
SELECT dealname, unnest("Deal Cusip List") AS Cusip from latest_clo_universe;
@@ -359,12 +358,6 @@ CREATE OR REPLACE FUNCTION et_ReadMapped(p_issuername text, p_maturity date, p_s
END;
$$ LANGUAGE plpgsql;
-CREATE OR REPLACE FUNCTION dealname_from_cusip(p_cusip varchar(9), OUT p_dealname varchar(8)) AS $$
- BEGIN
- SELECT dealname INTO p_dealname from dealcusipmapping where cusip=p_cusip;
- END;
- $$ LANGUAGE plpgsql;
-
CREATE OR REPLACE FUNCTION historical_markit_prices(p_date date)
RETURNS TABLE(loanxid varchar(8), issuer text, dealname text, facility text,
industry text, sp varchar(4), moodys varchar(4), amount float, maturity date,
@@ -449,6 +442,18 @@ CREATE OR REPLACE FUNCTION et_cusip_details(p_cusips VARIADIC varchar(10)[])
ALTER FUNCTION et_cusip_details(varchar(10)[])
OWNER TO et_user;
+CREATE OR REPLACE FUNCTION dealname_from_cusip(p_cusips VARIADIC varchar(10)[])
+ RETURNS TABLE(p_dealname varchar(10)) AS $$
+ BEGIN
+ RETURN QUERY SELECT dealname FROM dealcusipmapping a
+ RIGHT JOIN (SELECT unnest($1) AS cusip, generate_subscripts(p_cusips, 1) AS id) b
+ ON b.cusip = a.cusip ORDER BY b.id;
+ END;
+ $$ LANGUAGE plpgsql;
+
+ALTER FUNCTION dealname_from_cusip(varchar(10)[])
+ OWNER TO et_user;
+
CREATE OR REPLACE FUNCTION et_deal_subordination(p_dealname varchar(10))
RETURNS TABLE(p_cusip varchar(9), p_orig_subordination float, p_curr_subordination float,
p_orig_thickness float, p_curr_thickness float) AS $$