Загрузите несколько символов, используя csv с quantmod

Я пытаюсь загрузить несколько символов, используя файл csv, а не загружая их с Yahoo. Исходный код отлично работает и использует

load.packages('quantmod')
tickers = spl('TLT,IWM,GLD')
data <- new.env()
getSymbols(tickers, src = 'yahoo', from = '1980-01-01', env = data,
           auto.assign = T)

однако, когда я пытаюсь использовать приведенный ниже код, это приводит к ошибкам «индекс вне границ» позже в сценарии:

load.packages('quantmod')
tickers = spl('TLT,IWM,GLD')
data <- new.env()
getSymbols(tickers, src="csv", dir= "C:/Users/Admiral/Downloads/",
           env = data, auto.assign = T)

У кого-нибудь есть мысли, почему второй набор кодов не работает? Для проверки я только что загрузил данные csv из Yahoo и сохранил локально (Windows). Я не получаю ошибки нижнего индекса, если я просто использую один CSV-файл. Я также пробовал код ниже, но позже в сценарии получаю те же ошибки:

setSymbolLookup(tickers=list(src="csv", dir= "C:/Users/Admiral/Downloads/"))
getSymbols(tickers, auto.assign = T, from = '1980-01-01', env=data)

person AdmiralF    schedule 02.09.2012    source источник
comment
Это похоже на систематический кодекс инвестора. Запустите rm(index.xts), затем повторите попытку с кодом. (stackoverflow.com/questions/12124683/)   -  person GSee    schedule 02.09.2012
comment
Да, это код SI - я попробовал ваше предложение, и, похоже, оно не имело никакого эффекта.   -  person AdmiralF    schedule 02.09.2012
comment
Если вы хотите, чтобы мы выяснили, почему у вас не работает getSymbols.csv, вам придется показать нам некоторые из ваших CSV-файлов. Или, может быть, вы могли бы просто показать, как вы их создали.   -  person GSee    schedule 02.09.2012
comment
Файлы csv названы по символу и содержат данные, загруженные с Yahoo, т.е. в файле IWM: Дата Открыть Высокий Низкий Закрыть Объем Adj Close 08.08.2012 125,75 126,36 125,59 125,84 3412600 125,84 27.08.2012 125,34 125,8 125,27 125,544 125,84 125,8 125,27 125,54 125,54 24.08.2012 125,47 125,56 124,67 124,81 5001400 124,81 23.08.2012 124,74 125,14 124,65 124,93 7139100 124,93   -  person AdmiralF    schedule 02.09.2012
comment
Ах. Я вижу твою проблему. Дата должна быть в формате %Y-%m-%d, но у вас %m/%d/%Y. Возможно, вам лучше использовать read.zoo из пакета zoo, который гораздо более гибкий, чем getSymbols.csv.   -  person GSee    schedule 02.09.2012


Ответы (1)


Я бы сделал это с помощью пакета FinancialInstrument

require('quantmod')
require('FinancialInstrument')
tickers <- c("TLT", "IWM", "GLD")
data <- new.env()
getSymbols(tickers, src = 'yahoo', from = '1980-01-01', env = data)

# Now save the data in a directory
tmpdir <- tempdir()
saveSymbols.common(tickers, tmpdir, env=data)

#remove the data    
rm(list=tickers, pos=data)
ls(data) # see that there is nothing there
# Now load the data back from disk
getSymbols(tickers, src='FI', dir=tmpdir, env=data, split_method='common')
ls(data)

Если вы хотите использовать getSymbols.csv, ваши данные должны иметь столбцы даты и 6 (OHLCVA).

#write data to csv files on disk
for (i in seq_along(tickers)) {      
  write.zoo(get(tickers[i], pos=data), file=paste0(tmpdir, "/", tickers[i], ".csv"), sep=",")
}
rm(list=tickers, pos=data) #remove from memory
getSymbols(tickers, src='csv', dir=tmpdir)#, env=data)  #load from csv files
person GSee    schedule 02.09.2012
comment
хотя это сохраняет его как файлы rda, а не CSV - person GSee; 02.09.2012
comment
Спасибо за помощь. Вышеприведенное работает, но могу ли я изменить файл rda перед запуском скрипта (т.е. изменить цену закрытия)? Я пытаюсь использовать измененные данные, а не данные Yahoo. - person AdmiralF; 02.09.2012
comment
Да, или вы можете изменить их перед сохранением. - person GSee; 02.09.2012
comment
Ок, отлично. Что я пытаюсь сделать, так это сделать код SI пригодным для торговли, загружая внутридневные данные (скажем, за полчаса до закрытия рынка) на сегодня, чтобы использовать их в сценарии, а не ждать закрытия данных, которые доступны только через несколько часов после закрытия рынка. Любые мысли о том, как я могу использовать ваш код для загрузки текущей цены закрытия для сегодняшних данных? - person AdmiralF; 02.09.2012
comment
Вы можете использовать getQuote, чтобы получить последнюю цитату из Yahoo. Затем вы можете использовать rbind.xts для добавления этих данных к вашим объектам xts. Примерно так: thread.gmane.org/gmane. comp.lang.r.finance/8748/focus=8770 - person GSee; 03.09.2012
comment
Что в творении Пасты есть saveSymbols.common? Это общее меня смущает. - person Gabriel Fair; 24.04.2014
comment
@GabrielFair Я не придумал терминологию - saveSymbols.days и saveSymbols.common сохраняют данные так, как ожидает getSymbols.FI (который появился первым). saveSymbols.days разбивает объекты по дням и сохраняет по одному файлу на каждый день для каждого символа. saveSymbols.common создает один файл (с данными за все дни) для каждого символа. - person GSee; 24.04.2014