【问题标题】:Applying RSI function to a list of Dataframes将 RSI 函数应用于数据帧列表
【发布时间】:2018-09-26 17:39:24
【问题描述】:

我创建了一个包含所有标准普尔 500 指数公司收盘价的数据框列表。我想计算每家公司的 RSI。

library(BatchGetSymbols)

first.date <- Sys.Date()-365
last.date <- Sys.Date()

df.SP500 <- GetSP500Stocks()
tickers <- df.SP500$tickers

l.out <- BatchGetSymbols(tickers = tickers,
                         first.date = first.date,
                         last.date = last.date)

l.out$df.tickers$price.open <- NULL
l.out$df.tickers$price.high  <- NULL
l.out$df.tickers$price.low <- NULL
l.out$df.tickers$volume <- NULL
l.out$df.tickers$price.adjusted <- NULL
l.out$df.tickers$ret.adjusted.prices <- NULL
l.out$df.tickers$ret.closing.prices <- NULL


SP <- l.out$df.tickers

mylist <- split(SP, SP$ticker)

我尝试使用 lapply 但失败了:

rsi <- lapply(names(mylist$price.close), RSI)

它会生成一个 0 的列表。感谢我在这方面获得的任何帮助!谢谢。

【问题讨论】:

  • 不幸的是,没有。还会生成一个“0 列表”。

标签: r dataframe lapply finance


【解决方案1】:

将lapply 与匿名函数一起使用,以使用price.close 调用RSI 函数。默认情况下,rsi 的前 14 个值将是 NA,因为它会计算 14 天的 rsi。

library(BatchGetSymbols)
library(TTR)

# your code ...
rsi <- lapply(mylist, function(x) RSI(x$price.close))

head(rsi$ABT, 20)
 [1]       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA 63.69235
[16] 66.10698 69.69120 70.76959 72.24900 69.41154

【讨论】:

  • 非常感谢您的评论。但是,当我运行您的代码时,我得到了这个输出: naCheck(x, n) 中的错误:系列包含非领先的 NAs
【解决方案2】:

考虑by,它紧凑地替换了split 和lapply,以便按ticker 等因素对操作进行分组。对于一个因子,输出是一个命名列表,该列表包含函数返回的任何内容,等于因子的唯一数量:

RSI_list <- by(SP, SP$ticker, function(sub) TTR::RSI(sub$price.close))

如果其中一个代码没有保持有效的收盘价,请在tryCatch 中封装调用并针对这些问题情况返回 NA:

RSI_list <- by(SP, SP$ticker, function(sub) 
                    tryCatch(TTR::RSI(sub$price.close),
                             error = function(e) return(NA)))

【讨论】:

  • 非常感谢您的评论。但是,当我运行 phiver 的代码时,我得到了相同的输出: naCheck(x, n) 中的错误:系列包含非领先的 NA。
  • 请参阅tryCatch 中的编辑包装电话,了解任何价格有问题的代码。
猜你喜欢
  • 1970-01-01
  • 2017-03-29
  • 2017-03-09
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 2014-12-06
  • 2020-04-22
相关资源
最近更新 更多