如何合并股票价格?

时间:2020-04-26 08:21:31

标签: r matrix merge finance

我下载了50只股票及其价格。我想将所有这50只股票合并为一个样本。我怎样才能做到这一点?我当前的代码是(3只股票):

library("PerformanceAnalytics")
library("tseries")
library("zoo")
library("quantmod")
#
getSymbols("AAPL")
getSymbols("ABBV")
getSymbols("ABT")
... etcetera
#
price_AAPL <- AAPL$AAPL.Close
price_ABBV <- ABBV$ABBV.Close
price_ABT <- ABT$ABT.Close
... etcetera
###

因此,我想合并那些“ price_xxx”。我怎样才能做到这一点 ? Here is what price_AAPL looks like

非常感谢!

4 个答案:

答案 0 :(得分:1)

您可以将Reducemerge结合使用:

out <- Reduce(merge, mget(ls(pattern = "price_")))
out

#           AAPL.Close ABBV.Close ABT.Close
#2007-01-03   11.97143         NA  23.49581
#2007-01-04   12.23714         NA  23.94202
#2007-01-05   12.15000         NA  23.94202
#2007-01-08   12.21000         NA  24.02838
#2007-01-09   13.22429         NA  24.23950
#2007-01-10   13.85714         NA  24.17712
#...
#...

答案 1 :(得分:1)

1)将报价下载到环境stockEnv中,然后在eapply之上使用Cl提取收盘价,并使用merge将结果合并在一起,得到xts对象stockCl。请注意,与基础merge不同,这里支持多路合并。

(此外,可以使用stockEnv$AAPL来访问特定股票的全部报价数据。如​​果要调整收盘价,请使用Ad代替Cl。)

library(quantmod)

symbolList <- c("AAPL","ABBV","ABT","IBM","MSFT","GOOG")
getSymbols(symbolList, env = stockEnv <- new.env())
stockCl <- do.call("merge", eapply(stockEnv, Cl))

2)或者将符号直接下载到工作区中,将Cl分别应用于merge

library(quantmod)

symbolList <- c("AAPL","ABBV","ABT","IBM","MSFT","GOOG")
getSymbols(symbolList)
stockCl <- do.call("merge", lapply(mget(symbolList), Cl))

答案 2 :(得分:0)

这是一种Base R解决方案,可自动下载一组符号,合并并重命名price_symbol

library("PerformanceAnalytics")
library("tseries")
library("zoo")
library("quantmod")
#
symbolList <- c("AAPL","ABBV","ABT","IBM","MSFT","GOOG")
prices <- lapply(symbolList,function(x){
     getSymbols(x,auto.assign = FALSE)[,4]
})
priceData <- do.call(merge,prices)
names(priceData) <- paste0("price_",symbolList)
head(priceData)

...以及输出:

> head(priceData)
           price_AAPL price_ABBV price_ABT price_IBM price_MSFT price_GOOG
2007-01-03   11.97143         NA  23.49581     97.27      29.86   232.9220
2007-01-04   12.23714         NA  23.94202     98.31      29.81   240.7277
2007-01-05   12.15000         NA  23.94202     97.42      29.64   242.6853
2007-01-08   12.21000         NA  24.02838     98.90      29.93   240.8871
2007-01-09   13.22429         NA  24.23950    100.07      29.96   241.8435
2007-01-10   13.85714         NA  24.17712     98.89      29.66   243.8161
>

答案 3 :(得分:0)

默认情况下,getSymbols返回的数据将返回到默认环境。但是,对于auto.assign = FALSE,结果将作为xts时间序列显式返回。使用这种方法,可能的解决方案是:

library(quantmod)
tickers <- c("AAPL", "ABBV", "ABT")
prices <- xts()
for( ticker in tickers) prices <- merge(prices, getSymbols(ticker, auto.assign = FALSE)[,4])

使用Reduce而不是for循环的变体:

library(quantmod)
tickers <- c("AAPL", "ABBV", "ABT")
prices <- Reduce(f = function(x,y) { xx = getSymbols(y, auto.assign = FALSE)[,4]; merge(x, xx) },
  x = tickers, init = xts())