diff options
| -rw-r--r-- | R/beta_trade.R | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/R/beta_trade.R b/R/beta_trade.R index c724fbbc..49e8a6b2 100644 --- a/R/beta_trade.R +++ b/R/beta_trade.R @@ -1,7 +1,45 @@ -library(ugarch) -df <- feather::read_feather("/home/share/CorpCDOs/data/index_returns.fth") -df$date <- as.Date(df$date) +library(timeSeries) +library(MTS) +data <- feather::read_feather("/home/share/CorpCDOs/data/index_returns.fth") +data$date <- as.Date(data$date) +returns <- timeSeries(data[,c("ig", "hy")], data$date) +R <- na.omit(returns) +R <- scale(R, scale=F) +chol <- MCholV(na.omit(returns)) -spec <- ugarchspec(mean.model = list(armaOrder=c(0,0), include.mean = TRUE)) -fit <- ugarchfit(spec, na.omit(df$ig), solver='hybrid') +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') |
