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"
Ad() 的帮助确认它适用于“合适的 OHLC 对象”,而不适用于 OHLC 对象列表。在这种特殊情况下,我如何指定 lapply 应将 monthlyReturn 函数应用于 Adjusted 列?
更一般地说,在 quantmod 中处理多个符号的最佳实践是什么?是使用列表,还是其他更适合的方法?
回答monthlyReturn
:
所有 **Return
功能均基于 periodReturn
。 periodReturn
的默认检查是确保它是一个 xts objects 然后以开盘价作为起始值,收盘价作为最后一个值并计算 return。如果这些至少可用。如果这些不可用,它将根据时间序列的第一个值和时间序列的最后一个值计算 return,同时考虑所需的时间间隔(月、日、年等)。
lapply
的答案:
您想对列表 object 执行 2 次操作,因此应使用 lapply
中的函数:
lapply(prices.list, function(x) monthlyReturn(Ad(x), leading = FALSE))
这将得到你想要的。
多个符号的答案:
做你正在做的事。
运行 和 lapply 获取符号时:
stock_prices <- lapply(symbols, getSymbols, auto.assign = FALSE)
使用包 tidyquant 或 BatchGetSymbols 获取大标题中的所有数据。
...大概忘了几个。关于这个有多个 SO 答案。
我正在使用 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"
Ad() 的帮助确认它适用于“合适的 OHLC 对象”,而不适用于 OHLC 对象列表。在这种特殊情况下,我如何指定 lapply 应将 monthlyReturn 函数应用于 Adjusted 列?
更一般地说,在 quantmod 中处理多个符号的最佳实践是什么?是使用列表,还是其他更适合的方法?
回答monthlyReturn
:
所有 **Return
功能均基于 periodReturn
。 periodReturn
的默认检查是确保它是一个 xts objects 然后以开盘价作为起始值,收盘价作为最后一个值并计算 return。如果这些至少可用。如果这些不可用,它将根据时间序列的第一个值和时间序列的最后一个值计算 return,同时考虑所需的时间间隔(月、日、年等)。
lapply
的答案:
您想对列表 object 执行 2 次操作,因此应使用 lapply
中的函数:
lapply(prices.list, function(x) monthlyReturn(Ad(x), leading = FALSE))
这将得到你想要的。
多个符号的答案:
做你正在做的事。
运行 和 lapply 获取符号时:
stock_prices <- lapply(symbols, getSymbols, auto.assign = FALSE)
使用包 tidyquant 或 BatchGetSymbols 获取大标题中的所有数据。
...大概忘了几个。关于这个有多个 SO 答案。