В Yahoo finance API отсутствуют данные за определенные дни

#python #yahoo-finance

#python #yahoo-финансы

Вопрос:

Я кодирую скрипт, который извлекает информацию из Yahoo finance API, и хотя API довольно медленный, он работает для того, для чего я собираюсь его использовать. Во время тестирования скрипта я обнаружил, что получил исключение IndexOutOfBounds, и в ходе расследования я вижу, что Yahoo Finance возвращает информацию о котировках акций для имеющихся у меня акций, за исключением того, что для одной из акций не хватает одного дня, и я подозреваю, что при использовании более широкого периода времени он пропустит больше днейпоскольку я получал это исключение раньше при использовании более широкого периода времени, но я подумал, что это что-то в моем коде, что я мог бы просто исправить позже.

То, что в Yahoo finance API отсутствует информация о котировках акций на целые дни, делает API бесполезным для меня. Кто-нибудь еще сталкивался с этим, и есть ли какое-либо решение для этого? Я предполагаю, что мне нужно будет использовать другой способ получения данных.

Прямо сейчас я использую этот модуль python https://pypi.python.org/pypi/yahoo-finance .

Yahoo finance — это единственный API, который я нашел на данный момент, который содержит необходимую мне информацию и поддерживает фондовую биржу, для которой мне нужно запрашивать данные.

Обновление: Да, я могу повторно создать проблему. Ниже приведен код для повторного создания:

 >>> import datetime as dt
>>> import yahoo_finance as yf
>>>
>>> quote = yf.Share('GJF.OL')
>>> date_from = str(dt.date.today() - dt.timedelta(days=5))
>>> date_to = str(dt.date.today())
>>> quote_his = quote.get_historical(date_from, date_to)
>>> import pprint
>>> pprint.pprint(quote_his)
[{'Adj_Close': '156.50',
  'Close': '156.50',
  'Date': '2016-10-14',
  'High': '156.50',
  'Low': '153.10',
  'Open': '153.50',
  'Symbol': 'GJF.OL',
  'Volume': '487600'},
 {'Adj_Close': '153.60',
  'Close': '153.60',
  'Date': '2016-10-13',
  'High': '153.60',
  'Low': '152.50',
  'Open': '153.30',
  'Symbol': 'GJF.OL',
  'Volume': '508800'}]
>>>
  

Этот код должен распечатать информацию о запасах за понедельник (2016-10-17), но этого не происходит. Если я выбираю другую акцию, я также получаю информацию о запасах за понедельник в словаре.

Обновление 2: я попробовал другой модуль с именем ystockquote и получил тот же результат. Я получаю информацию за четверг и пятницу, но не за понедельник. Если я запрашиваю другую цитату, я получаю информацию за все три дня. Когда я попал на сайт yahoo finance, на нем есть информация о запасах с понедельника в графиках и т. Д.

Обновление 3: теперь найдены данные для GJF.OL, что, вероятно, было бы связано с задержкой цен на акции для исторических таблиц в API, как указано ниже в ответе. Тем не менее, я все еще мог получать информацию о ценах на акции от других акций за те даты, когда я не получал информацию о ценах на акции для GJF.СТАРЫЙ запас.

Сейчас я получаю информацию о ценах на акции для GJF.OL stock Я пытался получить информацию о ценах на акции за последние 165 дней из акций, но в NAS отсутствует 1 день.OL stock означает, что возвращаемый словарь не содержит никаких данных за этот день, в то время как другие акции имеют эту информацию. Запас — NAS.OL и дата — 3 августа 2016 года, где данные отсутствуют. Есть идеи, почему эти данные отсутствуют?

Комментарии:

1. Не могли бы вы привести нам пример, в какие дни и какие акции? Ссылка на API или фрагмент кода для ее воспроизведения были бы идеальными. Если рынок был закрыт на выходные или праздничные дни, это может объяснить это.

2. Да, я обновил ответ. API на самом деле достаточно умен, чтобы не включать выходные дни в словарь, чтобы они не отображались как пустые словари, они просто пропускаются из словаря.

Ответ №1:

Вероятно, это не имеет ничего общего с привязками Python, и это полностью данные Yahoo. Если вы прочитаете привязки, команда, которая выполняется, по сути

 curl -G 'https://query.yahooapis.com/v1/public/yql' 
    --data-urlencode 'env=store://datatables.org/alltableswithkeys' 
    --data-urlencode 'format=json' 
    --data-urlencode 'q=select * from yahoo.finance.historicaldata where symbol = "GJF.OL" and startDate = "2016-10-13" and endDate = "2016-10-18"'
  

Когда я разглагольствую об этом для себя, я получил данные за 13, 14, 17 и 18 числа. Таблица, к которой вы обращаетесь, называется историческими данными, поэтому вполне разумно, чтобы для отображения данных было 24 часа.

Если вы видите несоответствие между этой конечной точкой и привязками Python, возможно, вы на что-то натолкнулись, но код для этих привязок довольно прост, и, похоже, он просто передает диапазон дат.

Комментарии:

1. Да, я тоже думал об этом, что это может быть отложено, но при попытке использовать другую котировку акций я получил информацию о ценах за 17-е число, поэтому я не мог понять, как это может быть проблемой при получении информации о котировках акций от других акций 17-го числа. При этом, когда я пытаюсь сейчас, я получаю информацию о ценах на акции за 17-е и 18-е число для этой конкретной котировки. На самом деле не имеет смысла, что API будет возвращать информацию о ценах на другие акции, но не на GJF. СТАРАЯ цитата, так что, возможно, где-то была какая-то проблема, которая была исправлена. Хм, хорошо, так что это в основном YQL

2. Все еще что-то странное. Если я попытаюсь получить последние 165 дней, я получу 117 дней, когда рынок открыт, но для одного из NAS котировок. У меня есть только 116 дней, в то время как у других акций — 117 дней. После проверки информации о его запасах от 3 августа 2016 года, которая отсутствует в NAS. СТАРЫЙ запас. Есть идеи о том, почему его нет?

3. Я получил ответ 2016-08-03 для этого диапазона дат с curl помощью команды: startDate = "2016-08-01" and endDate = "2016-08-10" . Похоже на ошибку в конце Yahoo. Попробуйте переключить диапазон, если чего-то не хватает; возможно, они кэшируют результаты по символу и временному диапазону.

4. Хм, хорошо. Я пытался просто получить данные с 2016-08-03 по 2016-08-03 и с 2016-08-02 по 2016-08-04, которые дают мне данные для других акций, но не для NAS.OL. Я мог бы реализовать запасной вариант для прямого использования команды curl, но если это то, что модуль уже делает, тогда, я думаю, это было бы бесполезно. Странно, что вы получаете запрошенные результаты.. это действительно похоже на ошибку, которую вы предлагаете. Когда я использовал команду curl и заменил даты на 2016-08-02 в качестве начальной даты и 2016-08-03 в качестве конечной даты, я получил данные только за 2016-08-02. Я также попробовал введенные вами даты, но получил все, кроме 3-го

5. Я только что полностью воспроизвел вашу проблему curl , так что это ошибка на стороне Yahoo. Я ничего не получил за 08-03 — 08-03, один результат (4-й) за 08-03 — 8-04, затем один результат за 08-03 — 08-03. Повторные запросы на 08-03 — 08-04 по-прежнему возвращают только 4-й. Я не смог найти простой шаблон для фиксации одного дня в результирующем наборе. В следующий раз, когда вы увидите это, попробуйте запросить n через n 1, затем запросить n через n для заполнения недостающих данных.

Ответ №2:

Может быть, это разница во времени? Попробуйте поэкспериментировать с различными диапазонами дат YFINANCE. например, добавьте дополнительный день к дате окончания и т. Д… Кажется, что-то странное с возвращаемыми данными. Кроме того, я вижу данные только с 10 утра, а не с 9:30 утра. Это тоже вызывает недоумение.