使用 lapply 和股票代码列表

Using lapply with a list of stock symbols

我正在尝试使用 lapply,将函数应用于列表中的所有符号。这些符号是以下形式的股票价格数据:

Date Open High Low Close

我已经能够使用这种格式做到这一点:

require(TTR)
require(quantmod)

symbols <- c("XLF", "XLK", "XLU")

StartDate = '2015-01-01'
Stocks = lapply(symbols, function(sym, column) {
  SMA(na.omit(getSymbols(sym, from=StartDate, auto.assign=FALSE))[,4],20)
})

但是我无法锻炼如何简单地使用 lapply 将函数应用于我已有数据的符号列表。我不想使用 getSymbols 下载数据,我想为那些相同的符号使用我自己的数据。

在下面的示例中,我只是为了生成可重现的示例而下载它,但实际上我将符号的数据存储为 XTS 对象。

我不明白为什么这行不通,或者它与第一个示例有何不同:

require(TTR)
require(quantmod)

symbols <- c("XLF", "XLK", "XLU")
getSymbols(symbols, src='yahoo', from = '2015-01-01')

SMA_Symbols <- lapply(symbols, function(sym, column) {
SMA(sym[,4],20)
})

我收到错误:

Error in sym[, 4] : incorrect number of dimensions Called from: inherits(x, "xts")

你的第二种方法不起作用的原因是getSymbol将符号对应的数据加载到全局环境中,符号仍然是字符类型的向量。因此 sym 只是一个字符,并不真正包含数据。

您可以使用get函数来访问带有相应交易品种名称的数据。像这样:

require(TTR)
require(quantmod)

symbols <- c("XLF", "XLK", "XLU")
getSymbols(symbols, src='yahoo', from = '2015-01-01')

SMA_Symbols <- lapply(symbols, function(sym, column) {
    SMA(na.omit(get(sym))[,4],20)
})

head(SMA_Symbols[[1]][-(1:19)])
               SMA
2015-01-30 23.7580
2015-02-02 23.6905
2015-02-03 23.6685
2015-02-04 23.6620
2015-02-05 23.6550
2015-02-06 23.6395