Ответ 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
в конце запроса, но я мало знаю об этом или если он будет работать для запросов выше, так что см. здесь для справки.