Ошибка "Векторы индекса имеют разные классы: числовая дата" - PullRequest
4 голосов
/ 14 сентября 2011

Я пытаюсь реализовать следующий код со следующего сайта:

library(quantmod)
library(tseries)
library(timeDate)

symbols <- read.csv("sp500.csv", header = F, stringsAsFactors = F)
nrStocks <- length(symbols[,1])

z <- zoo()
for (i in 1:nrStocks) {
  cat("Downloading ", i, " out of ", nrStocks , "\n")
  x <- get.hist.quote(instrument = symbols[i,], start = dateStart,
    quote = "AdjClose", retclass = "zoo", quiet = T)
  z <- merge(z, x)
}

но я получаю сообщение об ошибке:

Error in download.file(url, destfile, method = method, quiet = quiet) : 
  cannot open URL 'http://chart.yahoo.com/table.csv?s=MFE&a=0&b=01&c=2008&d=8&e=12&f=2011&g=d&q=q&y=0&z=MFE&x=.csv'
In addition: There were 50 or more warnings (use warnings() to see the first 50)

In merge.zoo(z, x) : Index vectors are of different classes: numeric Date

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 14 сентября 2011

Вот список возможных проблем:

  • "sp500.csv": Вам необходимо получить этот файл откуда-нибудь.Если вы взяли этот код из здесь , то одна из возможностей - этот , но этот список устарел

  • z <- zoo(): это будетне имеет индекса в формате даты и поэтому вызывает предупреждения о слиянии, поэтому может разумно следовать строка вроде index(z) <- as.Date(format(time(z)),tz="")

  • start = dateStart,: вы не указали dateStart.Если вы хотите последний месяц или около того, тогда может работать что-то вроде start = Sys.Date() - 30,

  • Неправильные символы тикера: в сообщении об ошибке в качестве одного из символов отображается ваш список, содержащий MFE.MFE была McAfee Inc, которая была передана Intel Corp и поэтому больше не имеет котировок акций.

2 голосов
/ 17 июля 2012
  1. Википедия позволяет вам составить более точный список для sp500.csv

  2. Существует проблема с датами Yahoo

а. Это будет работать, когда рынки в США открыты.

б. Это, вероятно, не будет работать, когда рынки в США закрыты

Полная ссылка на get.hist.quote может быть найдена здесь http://rgm2.lab.nig.ac.jp/RGM2/func.php?rd_id=tseries:get.hist.quote, это мне тоже не помогло, После этого я посмотрел данные вне часов работы рынка: Первый загруженный инструмент - МММ, первые несколько строк здесь (когда рынок закрыт):

:Date,Open,High,Low,Close,Volume,Adj Close
2012-07-16,88.10,88.55,87.78,88.10,2120700,88.10
2012-07-16,88.12,88.65,87.77,88.10,2848100,88.10
2012-07-13,86.32,87.83,86.32,87.59,2599300,87.59

первые две строки кажутся идентичными. Для другого инструмента, пока рынки открыты (европейский инструмент), это не было проблемой.

x <- get.hist.quote(instrument = "^GDAXI", start = dateStart,
    quote = "AdjClose", retclass = "zoo", quiet = T)

Для DAX данные ниже (сейчас 11H45 CET):

Date,Open,High,Low,Close,Volume,Adj Close
2012-07-17,6583.77,6610.26,6583.57,6593.82,000,6565.72
2012-07-16,6550.95,6577.06,6511.18,6565.72,20388100,6565.72

Просмотр руководства zoo.pdf (от 14 февраля 2012 г.):

Они предлагают решить эту проблему, добавив строку:

x <- aggregate(x, identity, mean) # for an average

или

x <- aggregate(x, identity, tail) # for the last observation

Я еще не закончил тестирование, но, похоже, пока что он работает без предупреждений и ошибок

0 голосов
/ 02 апреля 2016

Код для составления точного списка символов S & P500 на основе информации Википедии:

library(XML)
library(RCurl)

url <- "https://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
sp500html <- getURL(url)
sp500 <- readHTMLTable(sp500html, stringsAsFactors = F)[[1]][,1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...