Как объединить цены на акции? - PullRequest
0 голосов
/ 26 апреля 2020

Я скачал 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

Большое спасибо!

Ответы [ 4 ]

1 голос
/ 26 апреля 2020

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))
1 голос
/ 26 апреля 2020

Вы можете использовать Reduce с merge:

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
#...
#...
0 голосов
/ 26 апреля 2020

По умолчанию данные, возвращаемые 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])

Вариант, использующий Уменьшение, а не для l oop:

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())
0 голосов
/ 26 апреля 2020

Вот решение 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
>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...