Загрузка цен на акции Yahoo в R

Это вопрос новичка в R. Я загружаю данные о ценах акций Yahoo финансирования за месяц, используя R, где имена тикеров читаются из текстового файла. Я использую цикл, чтобы прочитать имена тикеров, чтобы загрузить данные и поместить их в список. Моя проблема в том, что некоторые имена тикеров могут быть неправильными, поэтому мой код останавливается при обнаружении этого случая. Я хочу следующее.

  1. пропустить имя тикера, если оно неверно.
  2. Каждый элемент в списке является фреймом данных. Я хочу, чтобы имена тикеров добавлялись к именам переменных в элементарных данных.
  3. Мне нужен эффективный способ создания информационного кадра, в котором цены закрытия имеют переменные.

Вот пример кода для упрощенной версии моей задачи.

library(tseries)  
tckk <- c("MSFT", "C", "VIA/B", "MMM") # ticker names defined  
numtk <- length(tckk);  
ustart <- "2000-12-30";
uend <- "2007-12-30" # start and end date  
all_dat <- list(); # empty list to fill in the data  
for(i in 1:numtk)  
{  
  all_dat[[i]] <- xxx <- get.hist.quote(instrument = tckk[i], start=ustart, end=uend, quote = c("Open", "High", "Low", "Close"), provider = "yahoo", compression = "m")  
}   

Код останавливается на третьей записи, но я хочу пропустить этот тикер и перейти к «MMM». Я слышал о функции Trycatch (), но не знаю, как ее использовать.

Что касается вопроса 2, я хочу, чтобы имена переменных для первого элемента списка были «MSFTopen», «MSFThigh», «MSFTlow» и «MSFTclose». Есть ли лучший способ сделать это, кроме использования комбинации loop и paste ().

Наконец, к вопросу 3, Мне нужен фрейм данных с тремя столбцами, соответствующими ценам закрытия. Опять же, я пытаюсь избежать петли здесь.

Спасибо.

27
задан Peter Hall 1 July 2017 в 19:30
поделиться

3 ответа

Лучше всего использовать quantmod и сохранять результаты в виде временного ряда (в данном случае это будет xts):

library(quantmod)
library(plyr)
symbols <- c("MSFT","C","VIA/B","MMM")

#1
l_ply(symbols, function(sym) try(getSymbols(sym))) 
symbols <- symbols[symbols %in% ls()]

#2
sym.list <- llply(symbols, get) 

#3
data <- xts()
for(i in seq_along(symbols)) {
    symbol <- symbols[i]
    data <- merge(data, get(symbol)[,paste(symbol, "Close", sep=".")])
}
22
ответ дан 28 November 2019 в 04:52
поделиться

Я немного опоздал на вечеринку, но думаю, это будет очень полезно другим опоздавшим.

Функция stockSymbols в TTR извлекает символы инструментов с сайта nasdaq.com и настраивает символы для совместимости с Yahoo! Финансы. В настоящее время он возвращает ~ 6 500 символов для AMEX, NYSE и NASDAQ. Вы также можете взглянуть на код в stockSymbols , который настраивает тикеры для совместимости с Yahoo! Финансы для возможной корректировки некоторых тикеров в вашем файле.

ПРИМЕЧАНИЕ. stockSymbols в версии TTR на CRAN не работают из-за изменений на сайте nasdaq.com, но это исправлено в версии R-forge TTR .

9
ответ дан 28 November 2019 в 04:52
поделиться

Это тоже немного поздно ... Если вы хотите получать данные только с помощью базовых функций R, не имея дело с какими-либо дополнительными пакетами, просто используйте функцию read.csv (URL) , где URL - это строка, указывающая на нужное место на Yahoo. Данные будут извлечены как фрейм данных, и вам нужно будет преобразовать Date из строки в тип Date, чтобы любые графики выглядели красиво. Ниже приведен простой фрагмент кода.

URL <- "http://ichart.finance.yahoo.com/table.csv?s=SPY"
dat <- read.csv(URL)
dat$Date <- as.Date(dat$Date, "%Y-%m-%d")

Использование базовых функций R может дать вам больше контроля над манипуляциями с данными.

22
ответ дан 28 November 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: