R 中的 Quantmod - 如何有效地处理多个符号?

Quantmod in R - How to work on multiple symbols efficiently?

我正在使用 quantmod 处理 R 中的多个符号。我的直觉是将这些符号组合成一个 xts 对象列表,然后使用 lapply 做我需要做的事情。然而,一些使 quantmod 变得方便的东西(对于这个新手来说)似乎不能很好地与列表一起玩。一个例子:

> symbols <- c("SPY","GLD")
> getSymbols(symbols)
> prices.list <- mget(symbols)
> names(prices.list) <- symbols
> returns.list <- lapply(prices.list, monthlyReturn, leading = FALSE)

这行得通。但我不清楚它使用的是哪一列价格。如果我尝试指定调整收盘价,它会抛出一个错误:

> returns.list <- lapply(Ad(prices.list), monthlyReturn, leading = FALSE)
Error in Ad(prices.list) :
  subscript out of bounds: no column name containing "Adjusted"

A​​d() 的帮助确认它适用于“合适的 OHLC 对象”,而不适用于 OHLC 对象列表。在这种特殊情况下,我如何指定 lapply 应将 monthlyReturn 函数应用于 Adjusted 列?

更一般地说,在 quantmod 中处理多个符号的最佳实践是什么?是使用列表,还是其他更适合的方法?

回答monthlyReturn:

所有 **Return 功能均基于 periodReturnperiodReturn 的默认检查是确保它是一个 xts objects 然后以开盘价作为起始值,收盘价作为最后一个值并计算 return。如果这些至少可用。如果这些不可用,它将根据时间序列的第一个值和时间序列的最后一个值计算 return,同时考虑所需的时间间隔(月、日、年等)。

lapply的答案:

您想对列表 object 执行 2 次操作,因此应使用 lapply 中的函数:

lapply(prices.list, function(x) monthlyReturn(Ad(x), leading = FALSE))

这将得到你想要的。

多个符号的答案:

  1. 做你正在做的事。

  2. 运行 和 lapply 获取符号时: stock_prices <- lapply(symbols, getSymbols, auto.assign = FALSE)

  3. 使用包 tidyquant 或 BatchGetSymbols 获取大标题中的所有数据。

  4. ...大概忘了几个。关于这个有多个 SO 答案。