aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--R/beta_trade.R48
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')