【发布时间】:2012-10-10 15:51:26
【问题描述】:
我想计算一组指数的滚动 20 天实际波动率。这是我用来下载指数价格、计算每日收益和 20 天实际波动率的代码。
library(quantmod)
library(PerformanceAnalytics)
tickers = c("^RUT","^STOXX50E","^HSI", "^N225", "^KS11")
myEnv <- new.env()
getSymbols(tickers, src='yahoo', from = "2003-01-01", env = myEnv)
index <- do.call(merge, c(eapply(myEnv, Ad), all=FALSE))
#Calculate daily returns for all indices and convert to arithmetic returns
index.ret <- exp(CalculateReturns(index,method="compound")) - 1
index.ret[1,] <- 0
#Calculate realized volatility
realizedvol <- rollapply(index.ret, width = 20, FUN=sd.annualized)
在最后一行之前,一切都运行得很快。我没有计时,但它是在几分钟的范围内,而我希望它只需要几秒钟。是否有更快的方法来计算已实现的波动率?
谢谢。
【问题讨论】:
-
我建议使用
ROC来计算回报; PerformanceAnalytics 无法决定如何设置默认值。index.ret <- ROC(index, type='discrete', na.pad=FALSE) -
感谢您的提示。我尝试将我的大部分功能限制在尽可能少的库中,以防在我开始混合来自不同库的功能时出现不兼容或不一致的情况。我的这种想法是不是完全被误导了?
-
一点也不。您必须加载的库越少,加载库所需的时间就越少,您的代码就越不可能从上游中断,并且其他人无需安装新包即可使用您的代码的可能性就越大。