Все финансовые рынки мира в API Яху Финанс
В этой статье я расскажу об API агрегатора финансовых данных Yahoo! Finance. В рассказе есть один нюанс — официальное API Яху Финанс было закрыто три года назад, однако практически сразу же появилась его недокументированная работоспособная версия, которая жива до сих пор. Хочу в исследовательских целях рассказать об использовании этой работоспособной версии подробнее.
Тем более, что список рынков, данные с которых можно получать через Яху Финанс огромен. На текущий момент в нем 79 стран, включая и Россию.
Apple Inc. (AAPL) на сайте и в API Яху Финанс
Ниже рассмотрю получение только тех параметров, которые, на мой взгляд, могут быть интересны долгосрочному частному инвестору:
- Название бумаги
- Цена бумаги
- Доход с начала года
- Дивидендная доходность
- Дата предыдущего дивиденда
- Значение предыдущего дивиденда
- Годовая плата для фондов
- Категория бумаг
API Яху Финанс предоставляет ответы в формате JSON. На скриншотах с использованием API я использую расширение для браузера Google Chrome: JSON-handle.
Название бумаги / Name
Имея только тикер всегда можно получить огромное число параметров, первым в списке, на мой взгляд стоит наименование инструмента. Сначала найдем его на сайте на примере SPDR S&P 500 ETF Trust (SPY):
Имя ETF на сайте Яху Финанс
После этого найдем имя уже через API — в формате JSON оно выводится в двух вариантах: shortName
и longName
. Ссылка на данные, включающая в себя имя выглядит следующим образом:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/SPY?modules=price
Имя ETF через API Яху Финанс
Свойство с именем longName
содержит строковое значение SPDR S&P 500 ETF Trust
.
Путь для получения этого ключа: JSON.quoteSummary.result[0].price.longName
Цена бумаги / Price
Следующий важный параметр — конечно цена. Найдем её для акций Berkshire Hathaway Inc. (BRKA):
Цена акций на сайте Яху Финанс
Дальше получим цену через API. Раздел где содержится цена, аналогичен получению имени:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/BRKA?modules=price
Цена акций через API Яху Финанс
Ключ с именем raw
для regularMarketPrice
можно получить как с форматированием, так и без него. Путь для получения этого свойства: JSON.quoteSummary.result[0].price.regularMarketPrice.raw
Доход с начала года / YTD Daily Total Return
Этот параметр можно посмотреть только для фондов. На примере Vanguard Total Stock Market Index Fund ETF Shares (VTI):
Доход с начала года на сайте Яху Финанс
Посмотрим этот параметр через API. Раздел где содержится доход с начала года:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/VTI?modules=defaultKeyStatistics
Доход с начала года через API Яху Финанс
Свойство с именем fmt
для ytdReturn
можно получить как с форматированием, так и без. Путь для получения этого свойства: JSON.quoteSummary.result[0].defaultKeyStatistics.ytdReturn.fmt
Дивидендная доходность / Dividend Yield
Важный параметр, финансовые консультанты даже складывают доходность бумаги с дивидендной доходностью и показывают получившуюся цифру как потенциал роста бумаги. Найдем её для VanEck Vectors Russia ETF (RSX):
Дивидендная доходность ETF на сайте Яху Финанс
Получим этот параметр через API. Раздел где содержится дивидендная доходность:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/RSX?modules=defaultKeyStatistics
Дивидендная доходность ETF через API Яху Финанс
Свойство с именем fmt
для yield
можно получить как с форматированием, так и без. Путь для получения этого свойства: JSON.quoteSummary.result[0].defaultKeyStatistics.yield.fmt
Дата предыдущего дивиденда / Dividend Date
Найдем дату последней выплаты дивиденда. Для этого придется обращаться к истории и можно будет получить все дивидендные выплаты. На сайте эти данные в разделе Historical Data, возьмем например акции Microsoft Corporation (MSFT):
Дата предыдущего дивиденда акции на сайте Яху Финанс
Получить их через 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
— добавляет информацию о дивидендах и сплитах в вывод.
Дата предыдущего дивиденда акции через API Яху Финанс
Для получения даты возможны два варианта:
- Считывать ключи
JSON.chart.result[0].timestamp
и перебирать по этим ключам даты дивидендов. - Более предпочтительный — получать массив значений перечисляемых свойств объекта
JSON.chart.result[0].events.dividends
.
Значение предыдущего дивиденда / Next Dividend
Полностью аналогично предыдущему разделу. Только ищем не дату, а значение. Найдем значение прошлого дивиденда для ETF iShares MSCI Mexico Capped ETF (EWW):
Значение предыдущего дивиденда ETF на сайте Яху Финанс
В API ссылка будет выглядеть:
https://query1.finance.yahoo.com/v8/finance/chart/EWW?symbol=MSFT&period1=1559457037&period2=1591079437&interval=1mo&includePrePost=true&events=div%7Csplit
Расшифровка запроса аналогична получению даты выше.
Значение предыдущего дивиденда ETF через API Яху Финанс
Годовая плата / Expense Ratio
Годовая плата, которую все фонды или ETF взимают со своих акционеров. На сайте можно посмотреть в разделе Summary:
Годовая плата, которую все фонды или ETF взимают со своих акционеров на сайте Яху Финанс
В API ссылка будет выглядеть:
https://query1.finance.yahoo.com/v10/finance/quoteSummary/HYD?modules=fundProfile
Годовая плата, которую все фонды или ETF взимают со своих акционеров через API Яху Финанс
Свойство с именем fmt
для annualReportExpenseRatio
можно получить как с форматированием, так и без. Путь для получения этого свойства: JSON.quoteSummary.result[0].fundProfile.feesExpensesInvestment.annualReportExpenseRatio.fmt
Категория акций / Sector и Industry
На сайте можно посмотреть в разделе Profile. Для примера возьмем Cisco Systems, Inc. (CSCO):
Категория акции на сайте Яху Финанс
Эти данные можно посмотреть только для акций и возможных вариантов секторов не так уж и много:
- 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
Категория акции через API Яху Финанс
Свойство с ключом sector
можно получить по следующему пути: JSON.quoteSummary.result[0].assetProfile.sector
Хост
query1.finance.yahoo.com
для HTTP / 1.0
query2.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.
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
→ Можно посмотреть на GitHub
Я написал эту статью, желая в исследовательских целях разобраться в работающем API Яху Финанс, содержащем подробные данные о десятках тысяч ценных бумаг по всему миру, включая Россию.
Автор: Михаил Шардин,
8 июня 2020 г.