[R-SIG-Finance] Rolling functions on matrices

Murali Menon feanor0 at hotmail.com
Mon Sep 24 18:45:32 CEST 2007


I'm a bit stymied by the following problem. I have a matrix of returns for various equities, and a matrix of implied vols for these equities. So, e.g.:

returns <- matrix(runif(40), ncol = 4)
colnames(returns) <- c("IBM", "MOT", "NOK", "INTC")
vols <- matrix(rnorm(40, 7, 1), ncol = 4)
colnames(vols) <- colnames(returns)

#I need weighted MA over lags of 2, 16, 32

lagvals <- c(2, 16, 32)
coeff <- sapply(lagvals , function(n) c(rep(0, max(lagvals ) - n), 1 : n))
colnames(coeff) <- as.character(paste("MA", lagvals , sep = ""))

Now I'd like to compute weighted returns for each equity i and each lag index j such that at each point in time (t), I have:

wtRet[t, i, j] = returns[t, i] / vols[t, i] * average.vol.over.past.lag.days

So for lag = 32, i would compute average.vol.over.past.lag.days = mean(vols[(t - 32 + 1) : t, i]),

and so on for the other lags.

And then, finally, do a rolling weighted mean where the weighting for each lag is given by the coeff matrix above.

I hope this is not incomprehensible!

Any suggestions? I'm getting lost with all the indexation required between equity and lags, and
indeed the rolling function to apply.

Also, for my real application, the matrices are biggish (10-20 years), so if I can minimise any computational time, that would be an added bonus.

Thanks very much,

 Hotmail®. NOW with 5GB storage.


More information about the R-SIG-Finance mailing list