четверг, 10 ноября 2022 г.

Получаем и расширяем биржевые данные с помощью TKSBrokerAPI — платформы для автоматизации торговых сценариев

В прошлый раз я показал, как можно автоматизировать торговый сценарий на Python с помощью TKSBrokerAPI. Это платформа для упрощения автоматизации торгов на бирже, которая работает через Tinkoff Invest REST API. Всё начинается с вашей гениальной торговой идеи и завершается автоматизацией сценария, а TKSBrokerAPI берёт на себя всю работу с инфраструктурой брокера.

Но откуда же взять этот «гениальный торговый алгоритм»? Платформа TKSBrokerAPI поможет и для решения задачи получения первичных, «сырых» данных по торговым инструментам (акции, облигации, фонды, фьючерсы и валюты) с сервера брокера, для их последующего анализа в любом удобном для вас аналитическом инструменте.


Поддержать проект: https://yoomoney.ru/to/410015019068268

Для этого в методах модуля TKSBrokerAPI предусмотрена возможность обогащения, расширения и сохранения данных в классических форматах: XLSX и CSV (для анализа в табличных редакторах), Markdown (для удобства чтения), а также Pandas DataFrame (для датасайнтистов и биржевых аналитиков). Некоторые методы можно найти в разделе «Основные возможности» или в полной «API-документации» на модуль TKSBrokerAPI.

В качестве «сырых» данных может быть всё, что возможно получить с сервера брокера. После обогащения из этих данных можно построить, например, сводный календарь выплат по облигациям и подсчитать их купонные и текущие доходности, или можно сформировать аналитику о состоянии портфеля пользователя и распределении активов по типам, компаниям, отраслям, валютам и странам. Кроме того, можно скачать исторические данные по ценам любого инструмента в виде OHLCV-свечей.

Как обогащаются и используются данные в TKSBrokerAPI:

  1. Вы запрашиваете нужные вам данные с сервера брокера с помощью модуля TKSBrokerAPI:
    • в этом модуле почти все методы возвращают «сырые» данные в виде словаря Python.
  2. Далее происходит их обработка, обогащение и расширение:
    • добавляются различные статистические данные, параметры и некоторые аналитические отчёты.
  3. После обогащения данные сохраняются в пригодном для дальнейшего анализа виде:
    • большинство методов возвращают обогащённые данные в виде словаря Python или Pandas DataFrame;
    • если вы запускали платформу TKSBrokerAPI в консоли, то данные будут сохранены в форматах XLSX, CSV или Markdown.
  4. Далее можно загрузить данные в привычную вам аналитическую систему и использовать различные методы анализа данных для поиска и выделения в них зависимостей, корреляций, делать прогнозы и строить предположения.
  5. Далее, на основе анализа данных, вы придумываете тот самый «гениальный торговый алгоритм».
  6. Автоматизируете торговый сценарий (по предыдущей схеме).
  7. Профит!
Как начать работать с платформой TKSBrokerAPI я уже писал в одной из предыдущих статей, повторно останавливаться на формате команд не буду. Давайте сразу рассмотрим некоторые примеры получения и обогащения данных.

Получить все данные по всем инструментам, доступным на бирже


Используется командаtksbrokerapi -v 10 --list-xlsx

Начиная с TKSBrokerAPI v1.4.90 вы можете использовать ключ --list-xlsx (-x), чтобы сохранить сырые данные по доступным инструментам в формате XLSX, пригодном для дальнейшей обработки датасайнтистами или биржевыми аналитиками. При этом запрашивается вся информация с сервера брокера по инструментам, доступным для текущего пользователя. Также данные по инструментам берутся из локального кеша dump.json, затем они обогащаются и трансформируются в XLSX-формат и сохраняются в файл dump.xlsx.

Пример полученных данных можно посмотреть в файле ./docs/media/dump.xlsx. Что означают заголовки в XLSX-файле, смотрите в разделах документации: «Получить обогащённые данные по облигациям» и «Построить календарь выплат по облигациям».


Получить обогащённые данные по всем облигациям


Используется командаtksbrokerapi -v 10 --bonds-xlsx

TKSBrokerAPI v1.4.90 содержит новую консольную команду --bonds-xlsx (-b). При запуске будут получены все доступные облигации (если указать только ключ) или список облигаций (если перечислить FIGI или тикеры), а затем обогащены данными и преобразованы в более широкий Pandas DataFrame с дополнительной информацией: текущие цены, календарь платежей по облигациям, купонные доходности, текущие доходности (зависящие от цены) и некоторые другие статистические данные.

Затем эти данные экспортируются в XLSX-файл, пригодный для дальнейшего анализа датасайнтистами или биржевыми аналитиками, по умолчанию: ext-bonds.xlsx.

Это достаточно долгая операция, если с сервера брокера запрашивается слишком много или все облигации (ограничение: ~90-120 обогащённых информацией облигаций в минуту, в зависимости от пользовательских лимитов ограничения скорости).

Что означают заголовки в обогащённом XLSX-файле или в Pandas DataFrame смотрите в разделе документации: «Получить обогащённые данные по облигациям».

Пример генерируемого XLSX-файла, с обогащёнными данными по облигациям, можно посмотреть здесь: ./docs/media/ext-bonds.xlsx.


Построить календарь выплат по облигациям


Используется командаtksbrokerapi -v 10 --calendar RU000A1002C2 IBM RU000A101YV8 BBG00JS9D851

В TKSBrokerAPI v1.4.90 имеется консольная команда --calendar (-c). Это действие отображает календарь платежей по облигациям в виде таблицы. Календарь строится для одной облигации или списка заданных тикеров или FIGI, либо для всех облигаций сразу, если после ключа не указывать никаких значений.

Также календарь экспортируется в XLSX-файл для дальнейшего использования датасайнтистами или биржевыми аналитиками, по умолчанию в calendar.xlsx.

Для календаря в виде Pandas DataFrame заголовки данных аналогичны тем, которые описаны в поле calendar в разделе документации «Получить обогащённые данные по облигациям», под спойлером. Заголовки календаря для XLSX-файла перед сохранением приводятся в более человеко-читаемый формат, их можно посмотреть в разделе документации «Построить календарь выплат по облигациям».

Пример генерируемого XLSX-файла с календарём выплат по облигациям, можно посмотреть здесь: ./docs/media/calendar.xlsx, а в виде Markdown-файла, здесь: ./docs/media/calendar.md. В случае, если календарь строится более чем для одной облигации, то платежи в один и тот же месяц группируются.


Получить историю цен заданного инструмента


tksbrokerapi -v 10 --ticker GAZP --history 2022-10-15 2022-10-17 --interval hour --output GAZP_hour.csv --render-chart interact

В TKSBrokerAPI v1.4.90 можно получать исторические данные в формате OHLCV-свечей и дополнительно строить их интерактивные или статические графики (для этого используется библиотека PriceGenerator). Источником цен при этом могут быть как загруженные с сервера данные, так и ранее сохранённые файлы в формате CSV. Для построения графиков цен используется общий ключ --render-chart, который нужно указать совместно с одним из ключей --history (загрузка данных с сервера) или --load-history (загрузка из CSV-файла).

Для получения исторических цен с сервера также нужно указать инструмент с ключами --ticker или --figi (FIGI идентификатор) и задать интервал свечи с помощью ключа --intervalTKSBrokerAPI сохраняет историю в CSV-файл или возвращает Pandas DataFrame. История скачивается между двумя заданными датами: start и end, а также поддерживается докачка данных. Сервер брокера по умолчанию использует время в формате ISO UTC.

Построенные графики различного типа по умолчанию сохраняются в файл index.html. На них дополнительно отображаются некоторые статистические значения и индикаторы, однако они представлены лишь для поверхностного ознакомления с поведением цены в заданном диапазоне. Для проведения полноценных аналитических исследований и технического анализа рекомендуется использовать иные профессиональные средства.

Вопрос, какие методы и инструменты для работы с данными применить для анализа получаемой информации, выходит за рамки этой статьи. Однако, чтобы вы не использовали, платформа TKSBrokerAPI поможет вам и для задачи получения первичных, «сырых» данных, и для задачи автоматизации придуманной вами стратегии.


Поддержать проект: https://yoomoney.ru/to/410015019068268