пятница, 17 ноября 2017 г.

API мониторинга цен финансовых инструментов. Бесплатно и из командной строки Windows

Если начать искать API для получения информации о финансовых инструментах (акциях, валюте и т.п.), быстро обнаруживаешь: выбор богат, но всё стоит сотни нефти. Дорого, то есть. Или сервис предоставляет совсем невнятная контора, вроде форекс-кухонь, где курсы соответствуют рынку чуть более чем никак.
Конечно, в первую очередь имеет смысл узнать, что предоставляет ваш брокер. Но обычно это стандартный (и сложный) инструмент вроде QUICK. Накосячить в нём легче лёгкого, надо сказать. Для позиционной торговли или инвестиций это явный overkill.
Что, если нужно просто вовремя узнать о важном изменении цены? Не в течение долей секунды, а в течение дня.
До последнего времени API предоставляли Google Finance и Yahoo Finance. Сейчас оба сервиса уже не работают. Есть ли альтернатива?



Как мы сейчас убедимся, альтернатива Google и Yahoo finance API есть. И зачем было закрывать API, непонятно, всё же доступно. Как обычно :)
Откроем finance.google.com и возьмём любой тикер (обозначение фирмы на бирже). Например, Tesla (TSLA). Можем, конечно, каждую минуту истерически проверять сайт, но зачем? Вот наши данные, качай не хочу. Обновляются несколько раз в минуту, на глазок.
Попробуем:

wget "https://finance.google.com/finance?q=NASDAQ:TSLA"


Как видим, фигу нам лысую. Несмотря на присутствие цены аж в html тэге <title>, на деле цифры появляются там, только когда отработает скрипт в браузере. Хм... можно открывать браузер со ссылкой из cmd (да, опять cmd) и набросать программу, которая будет получать title определённого окна xD Кошмарный костыль, да и лень. Подумаем в другую сторону.
Скрипт на странице получает данные. Что мешает попробовать обратиться к этим данным самим?
Смотрим на страницу и видим, что обновления происходят постоянно. А поскольку браузеры нынче похожи на полноценную ОС, у нас уже есть отладчик, где всё видно. Нажимаем F12, идём в Network и смотрим, куда ломится скрипт из страницы.
Вот и нужный запрос:

wget https://finance.google.com/finance/getprices?q=TSLA&i=120&p=10m&f=d,c,v,o,&df=cpct&auto=1&ts=1510661100685"


В ответ получаем что-то вроде:

EXCHANGE%3DNASDAQ
MARKET_OPEN_MINUTE=570
MARKET_CLOSE_MINUTE=960
INTERVAL=120
COLUMNS=DATE,CLOSE
DATA=
TIMEZONE_OFFSET=-300
a1510865400,312.16
1,311.77
2,312.3143
3,312.5
4,312.68
5,312.5

Никакого html-ада, вполне чёткое форматирование, минимум данных. Служебный сервер, который обрабатывает кучу запросов и не будет терзать нас банами и капчей.
API они закрыли, а XD . Цирк, чесслово.

Единственная проблема – параметры подбираем тыком. Прежде всего, нам нужен timestamp в UNIX формате. Так мы получим текущие, а не архивные данные. В нашем запросе это параметр "ts=". Если пользуем Windows, то можно скачать прогу/написать прогу/написать батник, или просто лениво сграбить таймштамп с интернет-сервиса:

FOR /F "tokens=*" %%T in ('wget --quiet -O - "icanhazepoch.com"') DO SET TMSTP=%%T


Мы ж не скальпингом тут занимаемся. Кстати, тут есть и интервал данных - "i=". И количество строк для вывода – "p="

Другой интересный параметр – "f=". Это поля данных. Там есть:
> d - дата
> v - объём сделок, как я понял
> o - open, цена на момент открытия рынка
> c - цена на момент закрытия рынка. Если рынок открыт, то последняя цена. То, что надо
> h и l - самая высокая и самая низка цены за указанный интервал

Пожалуй, есть всё, что нужно. Бесплатно и без ограничений – отличная альтернатива закрытым API.
Текущую цену Теслы получаем так:

wget --quiet -O - "http://finance.google.com/finance/getprices?q=TSLA&i=5&p=1m&f=d,c&ts=%TMSTP%"


Здоровья Маску и спасибо, Гугл!

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

Отправить комментарий