【问题标题】:Using get() to reference columns in quantmod arrays with R?使用 get() 在 R 中引用 quantmod 数组中的列?
【发布时间】:2023-03-05 11:11:01
【问题描述】:

我是 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)。谢谢。

【问题讨论】:

  • s$s.Open 不起作用,因为列名称基于对象中存储的数据的股票代码,而不是基于对象名称本身。如果您考虑一下,getSymbols 无法知道您将其输出分配给的对象的名称。

标签: r get finance quantmod trading


【解决方案1】:

使用提取函数Op 等通常更容易。见?OHLC.Transformations。此外,如果您只有一个符号,您可以在对 getSymbols 的调用中使用 auto.assign=FALSE 来避免同时调用 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.callcbind 将它们放入一个对象中。

rsi_all <- do.call(cbind, rsi)

【讨论】:

  • Joshua,这(全部)在getSymbols 帮助页面中将是完美的。当前的示例都有些人为,只是展示了使用参数的各种方法。他们都没有使用eapply,正如您在此处展示的那样,它似乎与getSymbols 搭配,就像葡萄酒和奶酪一样:-)
  • @DarrenCook: 要是有好心人提供补丁文件就好了…… ;)
猜你喜欢
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多