3

我是 R 新手,将quantmod()包用于项目。以下代码块有效:

require(quantmod) 
stocks<-c("MMM", "MSFT", "BP")
for(i in 1:length(stocks)){
getSymbols(stocks[i], from= "2013-07-01")
s<-get(stocks[i])
dr<-dailyReturn(s)
print(paste(dr))
}

但是,我需要参考特定的列来计算 TTR 包中的一些技术分析指标。例如:

open<-MMM$MMM.Open
RSI(open, n=14)

当我检查时:

identical(s, BP) #TRUE

这有效:

BP$BP.Open

但是,这不起作用:

s$s.Open #NULL

为了提供足够的上下文,我的目标是遍历股票向量,检查 ] 条件,然后计算当天的一些技术分析和时间序列数据,并将其复制到 ARFF 文件中,用作机器学习的训练示例环境(Weka)。谢谢。

4

1 回答 1

3

Op使用提取函数等通常更容易。见?OHLC.Transformations。此外,如果您只有一个符号,您可以auto.assign=FALSE在调用中使用getSymbols以避免get一起调用。

s <- getSymbols("BP", auto.assign=FALSE)

如果您有多个符号,则更容易将它们存储在环境中,然后使用以下命令循环它们eapply

e <- new.env()
getSymbols(stocks, env=e)
dr <- eapply(e, dailyReturn)

您也可以通过这种方式将 TTR 函数应用于每个符号。

rsi <- eapply(e, function(x) RSI(Op(x), n=14))

您可以使用do.callwithcbind将它们放入单个对象中。

rsi_all <- do.call(cbind, rsi)
于 2013-08-07T14:38:44.787 回答