library(timeSeries) library(MTS) library(Rblpapi) blpConnect(host='192.168.9.61') data <- feather::read_feather("/home/serenitas/CorpCDOs/data/index_returns.fth") data$date <- as.Date(data$date) df <- bdh(paste("VIX", "Index"), "PX_LAST", start.date=as.Date("2009-03-20")) df <- as.tibble(df) R <- na.omit(returns) R <- scale(R, scale=F) chol <- MCholV(na.omit(returns)) ema <- function(x, alpha=0.1, init=x[1]){ ## exponential moving average with parameter lambda=1-beta filter(alpha*x, filter = 1-alpha, method = "recursive", init = init) } ema.slow <- function(y, lambda, init=y[1]) { # slower but more explicit mu <- init mu <- vapply(y, function(x) mu <<- mu*lambda + x*(1 - lambda), numeric(1)) return( mu ) } cov.ewm <- function(X, lambda, init=X[1,]) { ema(X beta.ewm <- function(R, lambda, span) { # computes beta between two assets using exponential moving averages if(ncol(R) != 2) { stop("only works for two assets") } if(missing(lambda)) { alpha <- 2/(span+1) } else { alpha <- 1-lambda } R <- scale(R, scale=F) cov12 <- ema(R[,1] * R[,2], alpha) var1 <- ema(R[,1] * R[,1], alpha) return ( cov12/var1 ) } ## library(rugarch) ## spec <- ugarchspec(variance.model=list(model="sGARCH"), ## mean.model = list(armaOrder=c(0,0), include.mean = TRUE)) ## fit.ig <- ugarchfit(spec, na.omit(df$ig), solver='hybrid') ## fit.hy <- ugarchfit(spec, na.omit(df$hy), solver='hybrid')