如何合并股票价格?

问题描述 投票:0回答:1

我下载了50只股票和它们的价格,我想把这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". 我怎么做呢?下面是 price_AAPL 的样子。

谢谢你!我下载了50只股票和它们的价格。

r matrix merge finance
1个回答
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) 将报价下载到环境中 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))

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
>

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())
© www.soinside.com 2019 - 2024. All rights reserved.