В этой статье я расскажу об API агрегатора финансовых данных Yahoo! Finance. В рассказе есть один нюанс — официальное API Яху Финанс было закрыто три года назад, однако практически сразу же появилась его недокументированная работоспособная версия, которая жива до сих пор. Хочу в исследовательских целях рассказать об использовании этой работоспособной версии подробнее.
Тем более, что список рынков, данные с которых можно получать через Яху Финанс огромен. На текущий момент в нем 79 стран, включая и Россию.
![](https://habrastorage.org/getpro/habr/post_images/742/4f8/f9e/7424f8f9e3d6390abf981ad4bbef5d9c.gif)
Apple Inc. (AAPL) на сайте и в API Яху Финанс
Ниже рассмотрю получение только тех параметров, которые, на мой взгляд, могут быть интересны долгосрочному частному инвестору:
API Яху Финанс предоставляет ответы в формате JSON. На скриншотах с использованием API я использую расширение для браузера Google Chrome: JSON-handle.
Имея только тикер всегда можно получить огромное число параметров, первым в списке, на мой взгляд стоит наименование инструмента. Сначала найдем его на сайте на примере SPDR S&P 500 ETF Trust (SPY):
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/047/108/17d/04710817dd2109d0f630e3bd836ecfd4.png)
Имя ETF на сайте Яху Финанс
После этого найдем имя уже через API — в формате JSON оно выводится в двух вариантах:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/4ff/72a/1b2/4ff72a1b242b8baec72c57d39767ef8b.png)
Имя ETF через API Яху Финанс
Свойство с именем
Путь для получения этого ключа:
Следующий важный параметр — конечно цена. Найдем её для акций Berkshire Hathaway Inc. (BRKA):
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/51e/409/a24/51e409a244ed28b549d0b02596d3c18a.png)
Цена акций на сайте Яху Финанс
Дальше получим цену через API. Раздел где содержится цена, аналогичен получению имени:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/6ab/4ff/772/6ab4ff77245fb6e8c1d7d6368d7b6d7d.png)
Цена акций через API Яху Финанс
Ключ с именем
Этот параметр можно посмотреть только для фондов. На примере Vanguard Total Stock Market Index Fund ETF Shares (VTI):
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/8fd/a4c/a0a/8fda4ca0a55c8790ea551fce240514bc.png)
Доход с начала года на сайте Яху Финанс
Посмотрим этот параметр через API. Раздел где содержится доход с начала года:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/c27/135/73b/c2713573bedd959e0bc40f202eea0aa1.png)
Доход с начала года через API Яху Финанс
Свойство с именем
Важный параметр, финансовые консультанты даже складывают доходность бумаги с дивидендной доходностью и показывают получившуюся цифру как потенциал роста бумаги. Найдем её для VanEck Vectors Russia ETF (RSX):
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/8d5/4f0/370/8d54f03705eb66cb2a5fab493cf7ea40.png)
Дивидендная доходность ETF на сайте Яху Финанс
Получим этот параметр через API. Раздел где содержится дивидендная доходность:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/abe/cc2/98e/abecc298e099f3d412da8162169fab8c.png)
Дивидендная доходность ETF через API Яху Финанс
Свойство с именем
Найдем дату последней выплаты дивиденда. Для этого придется обращаться к истории и можно будет получить все дивидендные выплаты. На сайте эти данные в разделе Historical Data, возьмем например акции Microsoft Corporation (MSFT):
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/454/d7b/c97/454d7bc974d88ab7aec01677dfe48ff2.png)
Дата предыдущего дивиденда акции на сайте Яху Финанс
Получить их через API задача уже немного сложнее, потому что ссылка будет иметь вид:
https://query1.finance.yahoo.com/v8/finance/chart/MSFT?symbol=MSFT&period1=1559457037&period2=1591079437&interval=1mo&includePrePost=true&events=div%7Csplit
Где:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/c66/014/0b2/c660140b27253d77e5f1feafa7cb6512.png)
Дата предыдущего дивиденда акции через API Яху Финанс
Для получения даты возможны два варианта:
Полностью аналогично предыдущему разделу. Только ищем не дату, а значение. Найдем значение прошлого дивиденда для ETF iShares MSCI Mexico Capped ETF (EWW):
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/d45/f4c/086/d45f4c086e4d86ee89fc4956decfe46f.png)
Значение предыдущего дивиденда ETF на сайте Яху Финанс
В API ссылка будет выглядеть:
Расшифровка запроса аналогична получению даты выше.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/0a6/1e9/4cd/0a61e94cdd892d56b41ed8d52bc6536f.png)
Значение предыдущего дивиденда ETF через API Яху Финанс
Годовая плата, которую все фонды или ETF взимают со своих акционеров. На сайте можно посмотреть в разделе Summary:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/be0/f60/7ec/be0f607ecf54b974ec60d68e6516050a.png)
Годовая плата, которую все фонды или ETF взимают со своих акционеров на сайте Яху Финанс
В API ссылка будет выглядеть:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/cee/c6d/739/ceec6d739a754102b4457058898ae881.png)
Годовая плата, которую все фонды или ETF взимают со своих акционеров через API Яху Финанс
Свойство с именем
На сайте можно посмотреть в разделе Profile. Для примера возьмем Cisco Systems, Inc. (CSCO):
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/e32/c1c/0b7/e32c1c0b7608a331650a09b0b3e14a08.png)
Категория акции на сайте Яху Финанс
Эти данные можно посмотреть только для акций и возможных вариантов секторов не так уж и много:
Подкатегории для секторов — Industry.
В API ссылка будет выглядеть:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/ec7/daa/a75/ec7daaa75d84f62c6815155193acd725.png)
Категория акции через API Яху Финанс
Свойство с ключом
(замените
Входные данные для
и возможно что-то ещё…
Пример URL:
Запрос для:
Интервалы:
Добавить данные до и после рынка:
Добавить дивиденды и сплиты:
Пример полного запроса:
Приведенный выше запрос вернет все данные о цене тикера
Всю информацию об API можно получить изучая код страницы Яху Финанс, но первоначально информация была взята с Stack Overflow и GitHub.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/0a0/a53/6ff/0a0a536ff92544a72360a6b35e75e86f.png)
→ Можно посмотреть на GitHub
Я написал эту статью, желая в исследовательских целях разобраться в работающем API Яху Финанс, содержащем подробные данные о десятках тысяч ценных бумаг по всему миру, включая Россию.
Автор: Михаил Шардин,
8 июня 2020 г.
Тем более, что список рынков, данные с которых можно получать через Яху Финанс огромен. На текущий момент в нем 79 стран, включая и Россию.
![](https://habrastorage.org/getpro/habr/post_images/742/4f8/f9e/7424f8f9e3d6390abf981ad4bbef5d9c.gif)
Apple Inc. (AAPL) на сайте и в API Яху Финанс
Взгляд на данные с позиции долгосрочного частного инвестора
Ниже рассмотрю получение только тех параметров, которые, на мой взгляд, могут быть интересны долгосрочному частному инвестору:
- Название бумаги
- Цена бумаги
- Доход с начала года
- Дивидендная доходность
- Дата предыдущего дивиденда
- Значение предыдущего дивиденда
- Годовая плата для фондов
- Категория бумаг
API Яху Финанс предоставляет ответы в формате JSON. На скриншотах с использованием API я использую расширение для браузера Google Chrome: JSON-handle.
Название бумаги / Name
Имея только тикер всегда можно получить огромное число параметров, первым в списке, на мой взгляд стоит наименование инструмента. Сначала найдем его на сайте на примере SPDR S&P 500 ETF Trust (SPY):
![](https://habrastorage.org/getpro/habr/post_images/047/108/17d/04710817dd2109d0f630e3bd836ecfd4.png)
Имя ETF на сайте Яху Финанс
После этого найдем имя уже через API — в формате JSON оно выводится в двух вариантах:
shortName
и longName
. Ссылка на данные, включающая в себя имя выглядит следующим образом:https://query1.finance.yahoo.com/v10/finance/quoteSummary/SPY?modules=price
![](https://habrastorage.org/getpro/habr/post_images/4ff/72a/1b2/4ff72a1b242b8baec72c57d39767ef8b.png)
Имя ETF через API Яху Финанс
Свойство с именем
longName
содержит строковое значение SPDR S&P 500 ETF Trust
.Путь для получения этого ключа:
JSON.quoteSummary.result[0].price.longName
Цена бумаги / Price
Следующий важный параметр — конечно цена. Найдем её для акций Berkshire Hathaway Inc. (BRKA):
![](https://habrastorage.org/getpro/habr/post_images/51e/409/a24/51e409a244ed28b549d0b02596d3c18a.png)
Цена акций на сайте Яху Финанс
Дальше получим цену через API. Раздел где содержится цена, аналогичен получению имени:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/BRKA?modules=price
![](https://habrastorage.org/getpro/habr/post_images/6ab/4ff/772/6ab4ff77245fb6e8c1d7d6368d7b6d7d.png)
Цена акций через API Яху Финанс
Ключ с именем
raw
для regularMarketPrice
можно получить как с форматированием, так и без него. Путь для получения этого свойства: JSON.quoteSummary.result[0].price.regularMarketPrice.raw
Доход с начала года / YTD Daily Total Return
Этот параметр можно посмотреть только для фондов. На примере Vanguard Total Stock Market Index Fund ETF Shares (VTI):
![](https://habrastorage.org/getpro/habr/post_images/8fd/a4c/a0a/8fda4ca0a55c8790ea551fce240514bc.png)
Доход с начала года на сайте Яху Финанс
Посмотрим этот параметр через API. Раздел где содержится доход с начала года:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/VTI?modules=defaultKeyStatistics
![](https://habrastorage.org/getpro/habr/post_images/c27/135/73b/c2713573bedd959e0bc40f202eea0aa1.png)
Доход с начала года через API Яху Финанс
Свойство с именем
fmt
для ytdReturn
можно получить как с форматированием, так и без. Путь для получения этого свойства: JSON.quoteSummary.result[0].defaultKeyStatistics.ytdReturn.fmt
Дивидендная доходность / Dividend Yield
Важный параметр, финансовые консультанты даже складывают доходность бумаги с дивидендной доходностью и показывают получившуюся цифру как потенциал роста бумаги. Найдем её для VanEck Vectors Russia ETF (RSX):
![](https://habrastorage.org/getpro/habr/post_images/8d5/4f0/370/8d54f03705eb66cb2a5fab493cf7ea40.png)
Дивидендная доходность ETF на сайте Яху Финанс
Получим этот параметр через API. Раздел где содержится дивидендная доходность:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/RSX?modules=defaultKeyStatistics
![](https://habrastorage.org/getpro/habr/post_images/abe/cc2/98e/abecc298e099f3d412da8162169fab8c.png)
Дивидендная доходность ETF через API Яху Финанс
Свойство с именем
fmt
для yield
можно получить как с форматированием, так и без. Путь для получения этого свойства: JSON.quoteSummary.result[0].defaultKeyStatistics.yield.fmt
Дата предыдущего дивиденда / Dividend Date
Найдем дату последней выплаты дивиденда. Для этого придется обращаться к истории и можно будет получить все дивидендные выплаты. На сайте эти данные в разделе Historical Data, возьмем например акции Microsoft Corporation (MSFT):
![](https://habrastorage.org/getpro/habr/post_images/454/d7b/c97/454d7bc974d88ab7aec01677dfe48ff2.png)
Дата предыдущего дивиденда акции на сайте Яху Финанс
Получить их через API задача уже немного сложнее, потому что ссылка будет иметь вид:
https://query1.finance.yahoo.com/v8/finance/chart/MSFT?symbol=MSFT&period1=1559457037&period2=1591079437&interval=1mo&includePrePost=true&events=div%7Csplit
Где:
period1
начальная дата в виде Unix Timestamp.period2
— конечная дата в виде Unix Timestamp.interval=1mo
— укрупненные свечи, меня интересуют только дивиденды.events=div%7Csplit
— добавляет информацию о дивидендах и сплитах в вывод.
![](https://habrastorage.org/getpro/habr/post_images/c66/014/0b2/c660140b27253d77e5f1feafa7cb6512.png)
Дата предыдущего дивиденда акции через API Яху Финанс
Для получения даты возможны два варианта:
- Считывать ключи
JSON.chart.result[0].timestamp
и перебирать по этим ключам даты дивидендов. - Более предпочтительный — получать массив значений перечисляемых свойств объекта
JSON.chart.result[0].events.dividends
.
Значение предыдущего дивиденда / Next Dividend
Полностью аналогично предыдущему разделу. Только ищем не дату, а значение. Найдем значение прошлого дивиденда для ETF iShares MSCI Mexico Capped ETF (EWW):
![](https://habrastorage.org/getpro/habr/post_images/d45/f4c/086/d45f4c086e4d86ee89fc4956decfe46f.png)
Значение предыдущего дивиденда ETF на сайте Яху Финанс
В API ссылка будет выглядеть:
https://query1.finance.yahoo.com/v8/finance/chart/EWW?symbol=MSFT&period1=1559457037&period2=1591079437&interval=1mo&includePrePost=true&events=div%7Csplit
Расшифровка запроса аналогична получению даты выше.
![](https://habrastorage.org/getpro/habr/post_images/0a6/1e9/4cd/0a61e94cdd892d56b41ed8d52bc6536f.png)
Значение предыдущего дивиденда ETF через API Яху Финанс
Годовая плата / Expense Ratio
Годовая плата, которую все фонды или ETF взимают со своих акционеров. На сайте можно посмотреть в разделе Summary:
![](https://habrastorage.org/getpro/habr/post_images/be0/f60/7ec/be0f607ecf54b974ec60d68e6516050a.png)
Годовая плата, которую все фонды или ETF взимают со своих акционеров на сайте Яху Финанс
В API ссылка будет выглядеть:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/HYD?modules=fundProfile
![](https://habrastorage.org/getpro/habr/post_images/cee/c6d/739/ceec6d739a754102b4457058898ae881.png)
Годовая плата, которую все фонды или ETF взимают со своих акционеров через API Яху Финанс
Свойство с именем
fmt
для annualReportExpenseRatio
можно получить как с форматированием, так и без. Путь для получения этого свойства: JSON.quoteSummary.result[0].fundProfile.feesExpensesInvestment.annualReportExpenseRatio.fmt
Категория акций / Sector и Industry
На сайте можно посмотреть в разделе Profile. Для примера возьмем Cisco Systems, Inc. (CSCO):
![](https://habrastorage.org/getpro/habr/post_images/e32/c1c/0b7/e32c1c0b7608a331650a09b0b3e14a08.png)
Категория акции на сайте Яху Финанс
Эти данные можно посмотреть только для акций и возможных вариантов секторов не так уж и много:
- Basic Materials
- Consumer Cyclical
- Financial Services
- Real Estate
- Consumer Defensive
- Healthcare
- Utilities
- Communication Services
- Energy
- Industrials
- Technology
Подкатегории для секторов — Industry.
В API ссылка будет выглядеть:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/CSCO?modules=assetProfile
![](https://habrastorage.org/getpro/habr/post_images/ec7/daa/a75/ec7daaa75d84f62c6815155193acd725.png)
Категория акции через API Яху Финанс
Свойство с ключом
sector
можно получить по следующему пути: JSON.quoteSummary.result[0].assetProfile.sector
Общие правила работы с API Яху Финанс
Хост
query1.finance.yahoo.com
для HTTP / 1.0query2.finance.yahoo.com
для HTTP / 1.1Основные данные
/v10/finance/quoteSummary/GOOGL?modules=
(Полный список модулей ниже)(замените
GOOGL
на любой символ)Входные данные для
?modules=
запроса:- assetProfile
- incomeStatementHistory
- incomeStatementHistoryQuarterly
- balanceSheetHistory
- balanceSheetHistoryQuarterly
- cashflowStatementHistory
- cashflowStatementHistoryQuarterly
- defaultKeyStatistics
- financialData
- calendarEvents
- secFilings
- recommendationTrend
- upgradeDowngradeHistory
- institutionOwnership
- fundOwnership
- majorDirectHolders
- majorHoldersBreakdown
- insiderTransactions
- insiderHolders
- netSharePurchaseActivity
- earnings
- earningsHistory
- earningsTrend
- industryTrend
- indexTrend
- sectorTrend
и возможно что-то ещё…
Пример URL:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/GOOGL?modules=assetProfile%2CearningsHistory
Запрос для:
assetProfile
и earningsHistory
.История цен, сплитов и дивидендов
/v8/finance/chart/GOOGL?symbol=GOOGL&period1=0&period2=9999999999&interval=3mo
Интервалы:
&interval=3mo
это 3 месяца.&interval=1d
это 1 день.&interval=5m
это 5 минут, возвращает 80 дней.&interval=1m
это 1 минута, возвращает 4-5 дней.period1=
unix timestamp представление даты, с которой вы хотите начать. Значения ниже начальной торговой даты будут округлены до начальной торговой даты.period2=
unix timestamp представление даты, на которой вы хотите закончить. Значения, превышающие последнюю торговую дату, будут округлены до последней доступной отметки времени.Добавить данные до и после рынка:
&includePrePost=true
Добавить дивиденды и сплиты:
&events=div%2Csplit
Пример полного запроса:
https://query1.finance.yahoo.com/v8/finance/chart/GOOGL?symbol=AAPL&period1=0&period2=9999999999&interval=1d&includePrePost=true&events=div%2Csplit
Приведенный выше запрос вернет все данные о цене тикера
GOOGL
с интервалом в 1 день, включая данные до и после рынка, а также дивиденды и сплиты.Всю информацию об API можно получить изучая код страницы Яху Финанс, но первоначально информация была взята с Stack Overflow и GitHub.
Пример кода на Node.js
![](https://habrastorage.org/getpro/habr/post_images/0a0/a53/6ff/0a0a536ff92544a72360a6b35e75e86f.png)
const fetch = require('node-fetch');
async function USAStockGetName(ID) { //получаем имя бумаги
const url = `https://query1.finance.yahoo.com/v10/finance/quoteSummary/${ID}?modules=price`
// console.log("USAStockGetName. url для %s: %s", ID, url);
try {
const response = await fetch(url)
const json = await response.json()
const value = json.quoteSummary.result[0].price.longName
console.log("USAStockGetName. Название для %s: %s", ID, value)
if (value == 0) return 'нет'
return value
} catch (e) {
console.log('Ошибка в USAStockGetName')
}
}
module.exports.USAStockGetName = USAStockGetName
Пример кода на Python
→ Можно посмотреть на GitHub
Итог
Я написал эту статью, желая в исследовательских целях разобраться в работающем API Яху Финанс, содержащем подробные данные о десятках тысяч ценных бумаг по всему миру, включая Россию.
Автор: Михаил Шардин,
8 июня 2020 г.
Only registered users can participate in poll. Log in, please.
Используете финансовые API?
65.91% Да58
29.55% Нет26
4.55% Что это?4
88 users voted. 18 users abstained.