diff options
Diffstat (limited to 'R')
| -rw-r--r-- | R/calibrate_tranches_BC.R | 16 | ||||
| -rw-r--r-- | R/calibration.R | 7 | ||||
| -rw-r--r-- | R/creditIndex.R | 46 |
3 files changed, 33 insertions, 36 deletions
diff --git a/R/calibrate_tranches_BC.R b/R/calibrate_tranches_BC.R index a1ccc1b9..64aad871 100644 --- a/R/calibrate_tranches_BC.R +++ b/R/calibrate_tranches_BC.R @@ -30,8 +30,8 @@ if(!interactive()){ ## args <- list(config=yaml::yaml.load_file(file.path(code.dir, "etc", "runs.yml")), ## until = Sys.Date()-1, ## update = TRUE) - args <- list(update=TRUE, until = Sys.Date()-1) - config <- list(runs=list(c("hy21", "3yr"))) + args <- list(update = F, until = Sys.Date()-1) + config <- list(runs = list(c("hy29", "5yr"))) options(error=recover) } @@ -63,7 +63,7 @@ for(run in config$runs) { hy23 = as.Date("2014-10-16"), hy25 = as.Date("2015-10-01"), hy27 = as.Date("2016-10-04"), - hy29 = as.Date("2016-10-03"), + hy29 = as.Date("2017-10-03"), ig9 = as.Date("2013-01-01"), ig19 = as.Date("2013-05-01"), ig21 = as.Date("2013-09-26"), @@ -112,7 +112,7 @@ for(run in config$runs) { } temp <- BCindex.pv(index) index$EL <- -temp$pl - index$duration <- temp$cl-cdsAccrued(tradedate, 1) + index$duration <- temp$cl - cdsAccrued(tradedate, 1) index$theta <- indextheta(index, tradedate) ## calibrate the tranches using base correlation @@ -130,7 +130,7 @@ for(run in config$runs) { temp <- BCtranche.pv(index, protection=TRUE) index$tranches$duration <- (temp$cl-cdsAccrued(tradedate, index$tranches$running))/index$tranches$running - index$tranches$EL <- -temp$pl*diff(index$K) + index$tranches$EL <- -temp$pl * diff(index$K) ## save the index object save(index, file=file.path(tranchedata.dir, "Objects", @@ -141,9 +141,9 @@ for(run in config$runs) { cat(csvheaders(index), sep="\n", file=filename) } cat(tocsv(index), sep="\n", file=filename, append=TRUE) - r <- with(tosql(index), - tryCatch(dbGetQuery(serenitasdb, stmt, params), - error = function(e) logerror(e$message))) + tryCatch(dbWriteTable(serenitasdb, "risk_numbers_new", + as.data.frame(index), append=TRUE), + error = function(e) logerror(e$message)) loginfo("done") } } diff --git a/R/calibration.R b/R/calibration.R index 38f7d329..b6a05c91 100644 --- a/R/calibration.R +++ b/R/calibration.R @@ -69,7 +69,7 @@ set.tranchedata <- function(index, tradedate){ stop("index is NULL") } temp <- get.tranchequotes(index$name, index$tenor, tradedate) - if(is.null(temp)){ + if(nrow(temp) == 0) { stop(paste(index$name, "no quote for day", as.character(tradedate))) } index$quotes <- data.frame(maturity=index$maturity, @@ -83,7 +83,7 @@ set.tranchedata <- function(index, tradedate){ }else{ index$quotes$price <- snacpv(index$cs, index$quotes$refspread[1]*1e-4, index$quotes$spread, - 0.4, tradedate) + if (index$type %in% c("IG", "EU")) 0.4 else 0.3, tradedate) } if(length(indexpv(index, tradedate=tradedate)) == 1) { stop("why am I stopping?") @@ -135,7 +135,8 @@ set.tranchedata <- function(index, tradedate){ }else{ dirtyquotes <- temp$trancheupfrontmid/100 - accrued } - index$tranches <- data.frame(upfront=temp$trancheupfrontmid, + index$tranches <- data.frame(id = temp$id, + upfront=temp$trancheupfrontmid, running=temp$trancherunningmid * 1e-4, quotes=dirtyquotes, mkt.delta=temp$tranchedelta, diff --git a/R/creditIndex.R b/R/creditIndex.R index 7d8859a3..a2421869 100644 --- a/R/creditIndex.R +++ b/R/creditIndex.R @@ -99,29 +99,25 @@ tocsv <- function(index){ return(paste(row, collapse=",")) } -tosql <- function(index){ - ## write sql representation of the index object - params <- list(index$tradedate, - index$type, - index$series, - index$tenor, - index$quotes$price, - index$basis, - index$EL, - index$duration, - index$theta, - sqlArray(as.integer(index$K.orig*100)), - sqlArray(index$rho[-1]), - sqlArray(index$tranches$mkt.delta), - sqlArray(index$tranches$delta), - sqlArray(index$tranches$fw.delta), - sqlArray(index$tranches$gamma), - sqlArray(index$tranches$theta), - sqlArray(index$tranches$corr01), - sqlArray(index$tranches$duration), - sqlArray(index$tranches$EL)) - dollars <- paste(lapply(1:length(params), function(i)sprintf("$%s",i)), - collapse=",") - return(list(stmt=sprintf("INSERT INTO risk_numbers VALUES(%s)", dollars), - params=params)) +as.data.frame.creditIndex <- function(index) { + data.frame(tranche_id = index$tranches$id, + date = index$tradedate, + index = index$type, + series = index$series, + tenor = index$tenor, + index_price = index$quotes$price, + index_basis = index$basis, + index_el = index$EL, + index_duration = index$duration, + index_theta = index$theta, + attach = as.integer(index$K.orig[-length(index$K.orig)]*100), + detach = as.integer(index$K.orig[-1]*100), + corr_at_detach = index$rho[-1], + delta = index$tranche$delta, + forward_delta = index$tranche$fw.delta, + gamma = index$tranches$gamma, + theta = index$tranches$theta, + corr01 = index$tranches$corr01, + duration = index$tranches$duration, + EL = index$tranches$EL) } |
