r - 在 R 中并行处理多个 quant mod 股票代码

标签 r zoo quantmod stockquotes env

我可能没有在标题中清楚地解释我的问题,抱歉。
这是代码的问题,它会更清楚,

library(zoo);library(quantmod)
stockData <- new.env()#Make a new environment for quantmod to store data in
startDate = as.Date("2006-12-29") #Specify period of time we are interested in
endDate = as.Date("2012-12-31")
monthlyStartDate = as.Date("2007-01-01")

# tickers <- c("AAPL","GOOG", "IBM")
tickers <- c("AAPL","GOOG", "IBM", "MSFT", "INTC", "YHOO", "F", "GS", "UL") 
# The tickers vector could be even larger, i.e.  50 stocks

stockData$AAPL.ret=diff(log(stockData$AAPL$AAPL.Adjusted)) # Compute log returns
stockData$GOOG.ret=diff(log(stockData$GOOG$GOOG.Adjusted)) # Compute log returns
stockData$IBM.ret=diff(log(stockData$IBM$IBM.Adjusted)) # Compute log returns
head(stockData$GOOG.ret)
head(stockData$GOOG$GOOG.Adjusted)

AAPLmonthly<-aggregate.zoo(stockData$AAPL.ret[2:nrow(stockData$AAPL$AAPL.Adjusted),],as.yearmon,sum)
GOOGmonthly<-aggregate.zoo(stockData$GOOG.ret[2:nrow(stockData$GOOG$GOOG.Adjusted),],as.yearmon,sum)
IBMmonthly<-aggregate.zoo(stockData$IBM.ret[2:nrow(stockData$IBM$IBM.Adjusted),],as.yearmon,sum)


head(AAPLmonthly)
stockret = cbind(AAPLmonthly, GOOGmonthly, IBMmonthly)
head(stockret)

上面的代码只用了 3 tickers例如,我想知道如何做 loop在 R 中,使我的整个代码向量变成 stockret zoo对象,有人可以帮助我吗?非常感激。

我正在学习环境,刚刚了解到函数是一个闭包,包括主体、参数及其环境,但我不知道我们可以新建一个环境。所以我被困在这里,stockData$AAPL.ret我该如何放置 stockData$在我的每个元素前面做一个循环来分配值?我应该使用 "["去做这个?
此外,如果我使用 assign在代码中执行此操作的函数
stockData$AAPL.ret=diff(log(stockData$AAPL$AAPL.Adjusted)) # Compute log returns

如何做到这一点,我只是对如何做到这一点感到困惑 stockData$AAPL$AAPL.Adjusted我的 assign 中的一个更一般的论点功能,任何示例将不胜感激!

最佳答案

您可以使用 get从环境中获取数据和 assign将数据分配给环境中的符号。

library(quantmod)
stockData <- new.env()
tickers <- c("AAPL","GOOG", "IBM", "MSFT", "INTC", "YHOO", "F", "GS", "UL") 
getSymbols(tickers, src="yahoo", env=stockData)

for (tick in tickers) {
  x <- get(tick, pos=stockData)  # get data from stockData environment
  x$ret <- diff(log(Ad(x)))      # add a column with returns
  assign(tick, x, pos=stockData) # assign back into stockData environment
  assign(paste0(tick, "monthly"), 
         apply.monthly(x, sum, na.rm=TRUE), 
         pos=stockData) # calc monthly sum and assign in stockData environment
}

或者,您可以使用 eapply 将函数应用于环境中的每个对象
结果将是一个您可以强制回到环境的列表
stockData <- as.environment(eapply(stockData, function(x) {
  x$ret <- diff(log(Ad(x)))
  x
}))

或者您可以创建一个仅包含返回值的列表,然后遍历该列表
计算每月总和
R <- eapply(stockData, function(x) diff(log(Ad(x))))
monthly <- lapply(R, apply.monthly, sum, na.rm=TRUE)

您可以像这样将结果合并到单个对象中
do.call(merge, R)
do.call(merge, monthly)

关于r - 在 R 中并行处理多个 quant mod 股票代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21196593/

相关文章:

r - 在 start= 和 end= 上向量化 window.zoo

R 删除只有 NA 的组

R/quantmod : multiple charts all using the same y-axis

r - 如何在 dplyr 管道中使用 lapply 为特定输入列创建列?

r - 根据另一列的文本,整理 data.table 每行不同列的数据

r - 控制两个 knitr 并排图之间的距离

r - 在 gWidgetsRGtk2 中使用 ggplot2

r - 缺失值 - Arima 模型

r - 如何在一个 ggplot 中绘制标准普尔 500 指数和苏富比时间序列?

r - R 中的 Quantstrat : Setting a date based exit signal