Подтвердить что ты не робот

Получите исторические цены ISIN от yahoo finance

У меня есть следующая проблема:

У меня около 1000 уникальных номеров ISIN на биржевых биржевых компаниях.

  • Мне нужны исторические цены на эти компании, начиная с самого раннего листинга до сегодняшнего дня на ежедневной основе.

Однако, насколько мне известно, yahoo может предоставить только цены на символы биржевого тикера, которых у меня нет.

Есть ли способ получить, например, для ISIN: AT0000609664, который является компанией Porr исторические цены от yahoo автоматически через их api?

Я ценю ваши ответы!

4b9b3361

Ответ 1

Ответ:

Чтобы получить символ тикера Yahoo из ISIN, посмотрите таблицу yahoo.finance.isin, вот пример запроса:

http://query.yahooapis.com:80/v1/public/yql?q=select * from yahoo.finance.isin where symbol in ("DE000A1EWWW0")&env=store://datatables.org/alltableswithkeys

Это возвращает тикер ADS.DE внутри XML:

<query yahoo:count="1" yahoo:created="2015-09-21T12:18:01Z" yahoo:lang="en-US">
    <results>
        <stock symbol="DE000A1EWWW0">
            <Isin>ADS.DE</Isin>
        </stock>
    </results>
</query>
<!-- total: 223 -->
<!-- pprd1-node600-lh3.manhattan.bf1.yahoo.com -->

Я боюсь, что ваш пример ISIN не будет работать, но это ошибка на стороне Yahoos (см. Yahoo Symbol Lookup, введите свои ISIN чтобы проверить, существует ли тикер на Yahoo).

Реализация:

Извините, я больше не владею Java или R, но этот код С# должен быть почти таким же, чтобы скопировать/вставить:

public String GetYahooSymbol(string isin)
{
    string query = GetQuery(isin);
    XDocument result = GetHttpResult(query);
    XElement stock = result.Root.Element("results").Element("stock");
    return stock.Element("Isin").Value.ToString();
}

где GetQuery(string isin) возвращает URI для запроса в yahoo (см. мой пример URI) и GetHttpResult(string URI) извлекает XML из Интернета. Затем вы должны извлечь содержимое Isin node, и все готово.

Я предполагаю, что вы уже реализовали фактическую выборку данных с использованием символов тикера. Также смотрите этот вопрос для обратной задачи (символ → isin). Но для записи:

Запрос для получения исторических данных для символа

http://query.yahooapis.com:80/v1/public/yql?q=select * from yahoo.finance.historicaldata where symbol in ("ADS.DE") and startDate = "2015-06-14" and endDate = "2015-09-22"&env=store://datatables.org/alltableswithkeys

где вы можете передавать произвольные даты и произвольный список символов тикера. Вам нужно построить запрос в коде и вывести результаты из XML, который вы вернетесь. Ответ будет идти по строкам

<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="71" yahoo:created="2015-09-22T20:00:39Z" yahoo:lang="en-US">
  <results>
    <quote Symbol="ADS.DE">
      <Date>2015-09-21</Date>
      <Open>69.94</Open>
      <High>71.21</High>
      <Low>69.65</Low>
      <Close>70.79</Close>
      <Volume>973600</Volume>
      <Adj_Close>70.79</Adj_Close>
    </quote>
    <quote Symbol="ADS.DE">
      <Date>2015-09-18</Date>
      <Open>70.00</Open>
      <High>71.43</High>
      <Low>69.62</Low>
      <Close>70.17</Close>
      <Volume>3300200</Volume>
      <Adj_Close>70.17</Adj_Close>
    </quote>
    ......
  </results>
</query>
<!-- total: 621 -->
<!-- pprd1-node591-lh3.manhattan.bf1.yahoo.com -->

Это должно сделать вас достаточно далеко, чтобы написать собственный код. Обратите внимание, что есть возможности получить данные как .csv-формат с &e=.csv в конце запроса, но я мало знаю об этом или если он будет работать для запросов выше, так что см. здесь для справки.