Я хотел бы загружать ежедневные данные из yahoo для S & P 500, DJIA и 30-летних T-Bonds, отображать данные в соответствующий часовой пояс и объединять их с моими собственными данными. У меня есть несколько вопросов.yahoo tickers, часовой пояс и слияние
Моя первая проблема заключается в том, что вы получаете право голоса. С веб-сайта yahoo это похоже на тикеры:^GSPC,^DJI и^TYX. Однако^DJI терпит неудачу. Любая идея почему?
Моя вторая проблема заключается в том, что я хотел бы ограничить часовой пояс GMT (я хотел бы обеспечить, чтобы все мои данные были на одних и тех же часах, GMT по-видимому, является нейтральным выбором), но я не мог его получить работать.
Моя третья проблема заключается в том, что я хотел бы объединить данные yahoo с моими собственными данными, полученными другими способами и доступными в другом формате. Это также ежедневные данные.
Вот моя попытка ограничить данные часовым поясом GMT. Выполнено в верхней части моего сценария R.
Sys.setenv(TZ = "GMT")
# > Sys.getenv("TZ")
# [1] "GMT"
# the TZ variable is properly set
# but does not affect the time zone in zoo objects, why?
Вот мой код, чтобы получить данные Yahoo:
library("tseries")
library("xts")
date.start <- "1999-12-31"
date.end <- "2013-01-01"
# tickers <- c("GSPC","TYX","DJI")
# DJI Fails, why?
# http://finance.yahoo.com/q?s=%5EDJI
tickers <- c("GSPC","TYX") # proceed without DJI
z <- zoo()
index(z) <- as.Date(format(time(z)),tz="")
for (i in 1:length(tickers))
{
cat("Downloading ", i, " out of ", length(tickers) , "\n")
x <- try(get.hist.quote(
instrument = paste0("^",tickers[i])
, start = date.start
, end = date.end
, quote = "AdjClose"
, provider = "yahoo"
, origin = "1970-01-01"
, compression = "d"
, retclass = "zoo"
, quiet = FALSE)
, silent = FALSE)
print(x[1:4]) # check that it's not empty
colnames(x) <- tickers[i]
z <- try(merge(z,x), silent = TRUE)
}
Вот является dput (глава (Df)) моего набора данных:
df <- structure(list(A = c(-0.011489000171423, -0.00020300000323914,
0.0430639982223511, 0.0201549995690584, 0.0372899994254112, -0.0183669999241829
), B = c(0.00110999995376915, -0.000153000000864267, 0.0497750006616116,
0.0337960012257099, 0.014121999964118, 0.0127800004556775), date = c(9861,
9862, 9863, 9866, 9867, 9868)), .Names = c("A", "B", "date"
), row.names = c("0001-01-01", "0002-01-01", "0003-01-01", "0004-01-01",
"0005-01-01", "0006-01-01"), class = "data.frame")
Я хотел бы объединить данные в df с данными в z. Кажется, я не могу заставить его работать.
Я новичок в R и очень открыт для вашего совета об эффективности, лучшей практике и т. Д. Спасибо.
EDIT: SOLUTIONS
На первой задаче: следующие предложения GSEE, в данные Dow Jones Industrial Average может быть загружен с пакетом quantmod: Таким образом, вместо "^ DJI" бегущей строки, который больше не доступен из yahoo, используйте тикер «DJIA». Обратите внимание, что в тике «DJIA» нет каретки.
О второй проблеме, Джошуа Ульрих отмечает в комментариях, что «Даты не имеют временных зон, потому что у дней нет компонента времени».
О третьей проблеме: у фрейма данных есть поврежденные даты, как указано в комментариях.
Мои решения основываются на упаковке quantmod и прилагаемый к нему зоопарк/XTS пакеты:
library(quantmod)
Вот код, который я использовал, чтобы получить соответствующие даты из моего файла CSV:
toDate <- function(x){ as.Date(as.character(x), format("%Y%m%d")) }
dtz <- read.zoo("myData.csv"
, header = TRUE
, sep = ","
, FUN = toDate
)
dtx <- as.xts(dtz)
Даты в файле csv хранятся в одном столбце в формате «19861231». Ключом к получению правильных дат был перенос даты в «as.character()». Часть этого кода была вдохновлена от R - Stock market data from csv to xts. Я также нашел справочники zoo/xts полезными.
я затем извлечь диапазон дат из этого набора данных:
date.start <- start(dtx)
date.end <- end(dtx)
Я буду использовать эти даты с функцией getSymbols quantmod так, чтобы другие данные загрузить будет охватывать тот же период.
Вот код, который я использовал для получения всех трех тикеров.
tickers <- c("^GSPC","^TYX","DJIA")
data <- new.env() # the data environment will store the data
do.call(cbind, lapply(tickers
, getSymbols
, from = date.start
, to = date.end
, env = data # data saved inside an environment
)
)
ls(data) # see what's inside the data environment
data$GSPC # access a particular ticker
Также отметим, что GSEE отметил в комментариях, что опция auto.assign = FALSE не может быть использован в сочетании с опцией окр = данные (в противном случае происходит сбой загрузки).
Большое спасибо за вашу помощь.
Я думаю, что проблема с^DJX, потому что нет исторических данных для него , Вы можете проверить это на странице поставщика, http://finance.yahoo.com/q/hp?s=%5ETYX+Historical+Prices – agstudy
Ваш df имеет соответствующие даты. Таким образом, вы не можете объединить его с вашими тикерами. – agstudy
Даты не имеют временных зон, потому что дни не имеют компонента времени. –