Может ли функция getSymbols() принимать переменную вместо самого тикера?

Я хочу просмотреть CSV-файл некоторых тикеров компаний и загрузить их соответствующие данные тикера.

До сих пор я определил переменную «тикер» следующим образом:

ticker <- companyList[1, 'Symbol']

когда я печатаю «тикер» на экране, он отлично показывает тикер 1-й акции, но когда я пытаюсь передать переменную тикера в функцию getSymbols quantmod, я получаю сообщение об ошибке.

getSymbols(ticker)
Error in do.call(paste("getSymbols.", symbol.source, sep = ""), list(Symbols =   current.symbols;  : 
 could not find function "getSymbols.940"

Есть ли ошибка в моем синтаксисе? Есть ли другой способ сделать это? Есть рекомендации по книгам?


person Brandon Williams    schedule 15.10.2013    source источник


Ответы (1)


Самый простой способ — указать среду, например, предполагая, что у вас есть вектор с тиккерами, после чего вы можете сделать следующее:

# tickers example
tik <- c("MMM", "ABT", "ABBV", "ANF", "ACT")

# new environment
stockData <- new.env() 

# download data
getSymbols(tik, env = stockData)

Чем вы можете индексировать для доступа к акциям: например:

stockData$MMM

           MMM.Open MMM.High MMM.Low MMM.Close MMM.Volume MMM.Adjusted
# 2007-01-03    77.53    78.85   77.38     78.26    3781500        65.42
# 2007-01-04    78.40    78.41   77.45     77.95    2968400        65.16
# 2007-01-05    77.89    77.90   77.01     77.42    2765200        64.72
# 2007-01-08    77.42    78.04   76.97     77.59    2434500        64.86
# 2007-01-09    78.00    78.23   77.44     77.68    1896800        64.93
# 2007-01-10    77.31    77.96   77.04     77.85    1787500        65.07

то же самое для всех остальных акций.

См. также здесь: Quantmod

чт

ИЗМЕНИТЬ:

для экспорта вы можете использовать что-то вроде этого:

# this will export 
lapply(stockData, function(x){
  write.csv(x, file=paste0(gsub(".Open", "", names(x)[1]), ".csv"))
    })

# the data can be found in the folder (execute the function!!!)
getwd()
person holzben    schedule 15.10.2013
comment
Спасибо за ответ! Но я хочу просмотреть свой CSV и загрузить данные из всех сотен тикеров в моем CSV. - person Brandon Williams; 15.10.2013
comment
Как выглядит ваш CSV? ... Небольшой пример был бы полезен. Вы должны иметь возможность извлечь имена тикеров из CSV. Затем вы можете загрузить данные так же, как указано выше (вам не нужен цикл, R векторизован). После этого вам просто нужна функция для записи CSV, например. write.table - person holzben; 15.10.2013
comment
Он структурирован как ИМЯ СИМВОЛА. Например, если я делаю тикер ‹- companyList[1:5, 'Symbol'], а затем печатаю тикер, он показывает все первые 5 тикеров компании. Я хочу передать эту переменную в getSymbols, но ваш пример кода у меня не работает. Я не хочу вводить бегущие строки вручную. - person Brandon Williams; 15.10.2013
comment
Я не уверен в этом, но попробуй ticker <- unlist(companyList[1:5, 'Symbol']) - person holzben; 15.10.2013
comment
Спасибо! Это все еще не работает, так что, думаю, я стисну зубы и наберу их вручную. Ваш первоначальный пост работает, но я хотел не печатать сотни бегущих строк. Я очень ценю ваш пост!! - person Brandon Williams; 15.10.2013
comment
Последнее предложение... попробуйте ticker <- as.vector(companyList[1:5, 'Symbol']) или ticker <- as.vector(as.character(companyList[1:5, 'Symbol')) - person holzben; 15.10.2013
comment
Это сработало!! Но единственная проблема заключается в том, что теперь, когда я делаю getSymbols(ticker), он загружает данные, но когда я в следующий раз запускаю ticker[1], он просто показывает тикер компании вместо данных. Я мог бы просто задать еще один вопрос. Но спасибо за ответ, я на шаг ближе к завершению этого проекта, ха. - person Brandon Williams; 15.10.2013
comment
Посмотрите на мой пример сверху... или ссылку. Обычно они загружаются в так называемую среду... Затем вы можете проиндексировать свои акции на $. - person holzben; 15.10.2013