尽管我可以手动使用Quantmod逐个库存地收集波动率,例如:
library(quantmod)
library(TTR)
getSymbols("SPY",from="2010-01-02", to="2020-01-02")
vol=volatility(SPY,n=252,N=252,calc="close"),
这需要我手动将符号(在上面的例子中是SPY
)复制到波动率函数。
我一直在尝试为符号向量生成波动率,但是如果不必在波动率函数中手动输入每个符号就无法使其正常工作。
如何将getsymbols中的xts zoo输出传递给波动率函数?
[创建一个新环境,将在其中保存下载的库存数据。循环浏览该环境中的对象,然后在每个对象上运行volatility
函数。将结果保存在列表中,以免覆盖值。然后取消列表。
stockEnv <- new.env()
stocks <- c("AAPL", "AMZN", "FB", "GOOG", "JNJ")
getSymbols(stocks, src='yahoo', env=stockEnv)
vol <- vector("list", length = length(stocks))
names(vol) <- stocks
for (stock in ls(stockEnv)){
x <- get(stock, envir = stockEnv)
if(is.xts(x)) vol[[stock]] <- volatility(x,n=252,N=252,calc="close")
}
vol <- do.call(cbind, vol)
tail(vol)
AAPL AMZN FB GOOG JNJ
2020-04-02 0.3942074 0.2847975 0.3764976 0.3471883 0.2944110
2020-04-03 0.3944644 0.2847008 0.3773450 0.3477343 0.2944769
2020-04-06 0.4028379 0.2884106 0.3840943 0.3564780 0.2973116
2020-04-07 0.4030194 0.2883778 0.3843052 0.3564362 0.2977434
2020-04-08 0.4037249 0.2887164 0.3856355 0.3569687 0.3005816
2020-04-09 0.4036574 0.2887087 0.3856682 0.3569642 0.3009180