В частности, трейдерам бывает интересно автоматически анализировать биржевой стакан текущих цен. Им нужно получать оперативные оповещения о появлении в нём аномальных (относительно других значений) объёмов предложений продавцов или покупателей. Существует гипотеза о том, что если на рынке в текущий момент времени преобладают объёмы покупателей, а также появились большие или сверхбольшие предложения на покупку, то цена инструмента будет расти в краткосрочной перспективе, или, как минимум, не будет падать ниже этих предложений. И, тоже самое, но наоборот: если преобладают объёмы продавцов и в них присутствуют аномальные значения, то цена будет снижаться или не будет расти.
Следующий скриншот иллюстрирует стакан цен с объёмами предложений продавцов и покупателей, которые трейдер визуально может принять за аномалии:
Но как же их определять автоматически?
Теоретические основы детектирования аномалий можно изучить в предыдущей статье: «Как быстро найти аномалии в числовых рядах с помощью метода Хампеля», а также посмотреть практические примеры в юпитер-ноутбуке. Этот метод хорошо себя зарекомендовал на практике для быстрого анализа числовых рядов на наличие в них аномальных выбросов. Объёмы предложений в стакане цен — это тоже числовые ряды, а значит метод Хампеля может быть применён и к ним.
Для автоматизации поиска аномалий в объёмах понадобятся: Python (3.9, либо старше), библиотека TKSBrokerAPI (для работы с API брокера Тинькофф Инвестиции) и известная сетевая библиотека requests (для отправки сообщений через API Телеграм). На выходе может получиться, например, такой скрипт: TKSAVDetector.py.
Детектор аномальных объёмов — это простой Телеграм бот для анализа объёмов спроса и предложения покупателей и продавцов.
Бот следит за объёмами покупателей и продавцов в биржевом стакане, ищет аномалии в числовом ряду объёмов и оповещает о них в Телеграм. Оповещение содержит: текущую цену инструмента и цены с аномальными объёмами.
Концепция
Основные шаги работы детектора аномальных объёмов:
- Скрипт выходит на рынок по расписанию, например, в формате crontab:
timeToWork: "*/2 10-21 * * 1-5"
что означает, c 10:00 утра до 22:00 вечера (включительно) в будние дни, каждые 2 минуты. Можно посмотреть другие примеры по ссылке. - В параллельном (мультипроцессном) конвейерном режиме скрипт запрашивает данные по состоянию биржевого стакана по указанным инструментам и с указанной глубиной стакана (depth <= 50).
- Для каждого стакана скрипт ищет все текущие аномалии в объёмах продавцов и покупателей (фильтрация методом Хампеля по всей длине числового ряда текущего стакана).
- Если список аномалий по инструменту получился не пустой, то скрипт формирует оповещение, например, такого вида:
Обнаружены аномальные объёмы
продавцов и покупателей:
- [YNDX] [Shares] [Yandex]
- Время обнаружения:
2023-01-29 14:49:31 UTC
- Есть в портфеле: Нет
- Текущая цена/объём/стоимость
- Купить:
[0] 1927.6/4/7710.4 руб
- Продать:
[0] 1915.9/4/7663.6 руб
- Аномалии
- в объёмах продавцов:
[0] 1927.6/4/7710.4 руб
[3] 1928.2/6/11569.2 руб
- в объёмах покупателей:
[0] 1915.9/4/7663.6 руб
[1] 1915.7/6/11494.2 руб
Сгенерировано ⚙️ TKSBrokerAPI - Скрипт подключается к указанному ТГ-боту по токену и отправляет через него оповещение (не обязательно, так как можно следить за информацией в логах и без оповещений):
Подробнее о настройке и запуске бота вы можете прочитать в инструкции. На этом пример анализа объёмов закончен, а в следующих статьях расскажу, какие ещё биржевые операции можно автоматизировать при помощи модуля TKSBrokerAPI.
- Статья «Как быстро найти аномалии в числовых рядах с помощью метода Хампеля»:
https://forworktests.blogspot.com/2022/12/blog-post.html - (EN) «How to quickly find anomalies in number series using the Hampel method»:
https://forworktests.blogspot.com/2023/01/how-to-quickly-find-anomalies-in-number.html - Юпитер-ноутбук с практическими примерами детектирования аномалий методом Хампеля:
https://nbviewer.org/github/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/HampelFilteringExample.ipynb - (EN) Jupyter Notebook:
https://nbviewer.org/github/Tim55667757/TKSBrokerAPI/blob/develop/docs/examples/HampelFilteringExample_EN.ipynb - TKSBrokerAPI — это платформа для упрощения автоматизации торговых сценариев на Python и работы с Tinkoff Invest API сервером через REST-протокол:
https://github.com/Tim55667757/TKSBrokerAPI/tree/develop - Детектор аномальных объёмов (Anomaly Volumes Detector):
https://github.com/Tim55667757/TKSBrokerAPI/tree/develop/docs/examples/AnomalyVolumesDetector