Как вернуть только одну цену акций? - PullRequest
0 голосов
/ 05 марта 2020

Исходный набор данных У меня более тысячи биржевых тикеров и соответствующих дат IPO. Я хотел бы использовать al oop до go через каждый тикер акций и найти цену открытия на дату IPO. В настоящее время я могу сделать это с помощью QuantMod. getSymbols (), но он загружает весь набор данных, я могу ограничить данные временным интервалом, но он не позволит мне сделать это, например.

getSymbols('AAPL', from = '2017-02-02', to = '2017-02-02')

По какой-то причине это не вернет первую цену. Это требует больших временных рамок, и я забочусь только о первой цене открытия. Конечным результатом будет добавление третьего столбца в мой существующий фрейм данных, третий столбец будет первой ценой. Я действительно стараюсь не загружать тысячи данных Акций, потому что тогда они будут работать вечно. Будем весьма благодарны за любую помощь в загрузке первой цены открытия и последующем помещении этой цены во фрейм данных для всех тикеров.

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Некоторые из ваших акций не американские! Это проблематично c, поскольку Yahoo Finance использует расширение страны для рынков акций за пределами Америки. Например, в Америке нет акции с символом 1810, поэтому это возвращает ошибку. Есть несколько за пределами Америки, я выбрал один из Гонконга. Чтобы загрузить эти данные, вам нужно поставить .HK после символа Гонконга. Для LSE (Лондон) это .L

Как только я исправил это, код работает. Все тикеры имеют открытую цену на дату IPO. Однако, если они в разных валютах, я не уверен, насколько это полезно.


xy <- data.frame(`IPO Date` = c("7/9/2018", "9/21/2018", "6/30/2017", "9/28/2017",
                                "9/12/2018", "8/1/2018", "4/3/2018", "6/19/2018",
                                "6/29/2017", "9/28/2018"), `Stock Symbol` = 
                                c("1810.HK", "FTCH", "DHER.DE", "ROKU", "NIO", 
                                  "CWK", "SPOT", "4385.T", "APRN", "FCH.L"))

colnames(xy) <- gsub('\\.', ' ', colnames(xy))

library(lubridate)
library(quantmod)

xy$`IPO Date` <- mdy(xy$`IPO Date`)
xy$`IPO Open Price` <- NA

for (i in 1:nrow(xy)) {

  ticker <- as.character(xy[i, 'Stock Symbol'])

  ipo_date <- as.character(xy[i, 'IPO Date'])

  next_date <- as.character(xy[i, 'IPO Date']+7)

  xy[i, 'IPO Open Price'] <- getSymbols(ticker, from = ipo_date, to = next_date, 
                                   auto.assign = FALSE)[1,1]

}
0 голосов
/ 05 марта 2020

Поскольку вы не представили пример своих данных, я сделал свои собственные. В следующий раз, пожалуйста, не используйте скриншот объекта. Вместо этого используйте dput().

library(quantmod)
library(lubridate)

getSymbols(c('AAPL', 'GOOG', 'MSFT', 'TSLA', 'FB'))
tickers <- data.frame(ticker = c('AAPL', 'GOOG', 'MSFT', 'TSLA', 'FB'),
                      date = sapply(mget(setdiff(ls(),"B")), function(x) as.character(index(x[1,]))))

tickers$open <- NA
tickers$date <- ymd(tickers$date)

. В приведенном выше коде я загружаю данные по нескольким акциям, получаю первую дату данных и использую ее в качестве даты ipo. Я сделал даты в формате даты, используя lubridate. Это облегчает добавление дат, как вы сказали в комментарии, это невозможно с символами. Однако, если она отформатирована как дата, + 7 перенесет ее на следующий месяц, если дата находится в последний день месяца.

Код ниже очень прост. Я извлекаю тикер, который будет передан аргументу getSymbols в getSymbols(). ipo_date будет передано аргументу from в getSymbols(). next_date составляет 7 дней с даты ipo, все, что меньше 7 дней, не работает.

Я установил auto.assign на FALSE, чтобы getSymbols() не сохранял объект в среде. Это позволяет мне извлечь первую цену открытия, которая всегда находится в первой строке первого столбца, следовательно, [1, 1] сразу после вызова getSymbols().

for (i in 1:nrow(tickers)) {

  ticker <- as.character(tickers[i, 'ticker'])

  ipo_date <- as.character(tickers[i, 'date'])

  next_date <- as.character(tickers[i, 'date']+7)

  tickers[i, 'open'] <- getSymbols(ticker, from = ipo_date, to = next_date, 
                                   auto.assign = FALSE)[1,1]

}
...