Всем привет, меня зовут Егор. По профессии я программист, но уже давно занимаюсь торговлей на рынке акций. Соответственно, ряд моих pet-проектов был связан именно с этой сферой. К примеру, в 2020 году я делал сервис для ведения инвесторской бухгалтерии Reagle.net, но до ума проект я так и не довёл, хотя он рабочий и им можно пользоваться — лично я использую его до сих пор.
Следующим проектом в сфере инвестиций и трейдинга стал бот, о котором я расскажу в данном материале. Это бот отслеживающий события, которые сильно выбиваются из общего количества данных. К примеру, особо крупные сделки покупки/продажи, повышенные объемы и изменения цены за интервал или появление большой заявки в стакане. Через бота можно подписаться на отдельно взятые акции или на целый сегмент вроде сектора экономики и индекса, а бот в свою очередь в режиме реального времени будет отслеживать данные тикеры и сообщать о произошедших событиях.
На скриншотах можно увидеть примеры сообщений с событиями, которые отслеживает бот.
Как вообще я пришел к этой идее? Изначально я не планировал доводить проект до выхода на рынок. Это была просто разработка ради интереса. Я такое периодически делаю. К примеру, я как-то написал пиратский онлайн-кинотеатр за 8 часов, правда, после первой же претензии от Роскомнадзора я отключил проект с концами, но это отдельная история. Тут ситуация сложилась следующим образом: долгое время в телеграм-каналах мелькал похожий бот, но с мягко говоря невменяемым ценником (на тот момент более 70000 рублей в год). Таким образом появился спортивный интерес сделать аналог для себя. И в последствии процесс разработки разделился на две части. Давайте я расскажу подробнее об этих этапах включая в рассказ в том числе упоминания технологий и алгоритмов, которые я использовал.
Разработка первой версии
Первая версия проекта была сделана буквально за один день на языке программирования Go. Данная версия фактически ещё не включала в себя бота. Я сделал телеграм-канал, в который просто кучей скидывал аномальные события по всем акциям Мосбиржи. Как это происходило? С помощью
API Мосбиржи я выгружал каждые 10 минут
10-минутные свечи за полгода и среди них выбирал самые большие отклонения, которые входят в
97.5% самых больших значений. То есть фактически брался топ
2.5% самых больших объемов или изменений цены за интервал и этот диапазон считался
аномальным. Это решение соответственно я подглядел у конкурентов, но с самого начала я считал его неудачным — определение аномальности таким образом очень негибкое, но разберем эту проблему и её решение немного позже.
Как я упомянул ранее данные брались из
MOEX API, которое имеет бесплатную версию и платную по подписке. Отличия в том, что в бесплатной версии доступно меньше функций, что довольно очевидно, но и данные отдаются с задержкой в 15 минут, а также нет возможности выгрузки данных в рамках стрима по подписке — это когда вы, допустим, подписываетесь на событие с минутными свечами GAZP и вам каждую минуту в рамках этого соединения автоматически отдаются новые свечи. Ряд подобных ограничений не позволяет делать production-ready решение на данном тарифе MOEX API, поэтому раз изначально это был просто pet-проект я решил зайти с другого угла и поискать других вендоров, через которых можно получать данные о рынке. И я нашел
Tinkoff Invest API.
MOEX API vs T-Invest API
Основная направленность Tinkoff Invest API — это создание торговых роботов для клиентов. Тут есть странная система грейдов, которая увеличивает лимиты, но по большому счету достаточно и базовой версии. Здесь уже есть возможность выгружать данные по подписке в рамках стрима по gRPC, чего нельзя в базовой версии MOEX API; плюс нет никаких искуссвенных задержек в 15 минут. В общем, одни плюсы. Однако при коммерческом использовании выглядит так, что лучше отдавать предпочтение платному тарифу MOEX API, потому что T-Invest запрещает ретрансляцию данных.
Монетизация
Почти сразу пришла идея попытаться монетезировать эту историю, поэтому я сделал второй канал прикрутил к нему платную подписку и начал отправлять туда аномальные события по
1-минутным свечам за
3 месяца. Первый канал соответственно стал считаться бесплатным с событиям по
10-минутным свечам за
6 месяцев. И примерно на этом этапе все заглохло на полгода — все как всегда в подобных начинаниях уперлось в маркетинг, которым нужно заниматься. Поэтому спустя время перед тем как начинать продвигать этот проект было решено его допилить до более удобного продукта. Потому что в тысячах сообщений, которые китаются в одну кучу довольно сложно разобраться. И на этом этапе бот становится настоящим ботом.
Разработка финальной версии
На данном этапе было проделано самое большое количество работы. Во-первых, были добавлены функции отслеживания новых событий — это
аномальные сделки и
заявки в стаканах, в дополнение к уже существующим
объемам и
изменениям цены. Во-вторых, был сделан сам бот для удобного управления подписками на события. Логика работы получилось примерно такой: каналы с событиями остались существовать как есть, туда как и прежде скидывается множество событий происходящих на рынке; бот в свою очередь в зависимости от того, на что подписан пользователь пересылает ему только нужные события из каналов. Зачем это сделано? Это открывает удобную возможность мониторить события, которые происходят параллельно событиям, которые интересуют пользователя. То есть канал — это
таймлайн, а пользователь при необходимости может перейти по пересланному сообщению и увидеть на таймлайне, что за события происходят параллельно. Само собой это не киллер-фича, а просто дополнительная полезность.
Также важным моментом разработки финальной версии стало изменение алгоритма определения аномалии.
Алгоритм определения аномалии
Как я сказал ранее, определение аномальности за счет вхождения значения в
топ 2.5% самых больших значений — это решение крайне негибкое. К примеру, какие ситуации я наблюдал. В начале лета 2024 были активные торги акциями Алросы и соответственно происходило большое количество аномальных событий, из-за которых подобный алгоритм перестал замечать события по этой акции вплоть до окончания периода выборки в
3 месяца. То есть появление каждого нового аномального события не дает обнаружиться новому событию в будущем, грубо говоря.
Но после перебора разных алгоритмов я нашел хорошее решение, которое на данный момент меня полностью устраивает — это анализ по
Z-Score (стандартизированная оценка или Z-оценка). Фактически Z-Score используется для определения отклонений от среднего значения. Собственно это нам и нужно. Сначала считаем, допустим, средний объем по 1-минутным свечам произвольной акции, затем определяем, какое отклонение от этого среднего значения можно считать аномальным. Само собой со значением отклонения можно ещё долго экспериментировать, но у меня получилось подобрать оптимальное значение, при котором событий не слишком много, чтобы в них не запутаться, но при этом не упускалось ничего важного для торговли.
Следующие шаги
Уже на этом этапе сервис включает в себя основные фичи, которые могут понадобится трейдеру, но все равно хочется заниматься дальнейшим расширением. Правда, тут уже нужен фидбек от целевой аудитории. К примеру, я могу добавить сигналы для технического анализа, я уже провел предварительное исследование, и это относительно несложно. Или добавить сигналы при повышенном интересе к активу в течение суток. Также можно отрисовывать графики с шкалой интереса институциональных инвесторов или наоборот толпы физиков — это можно относильно легко реализовать имея набор сделок за период. В общем, есть множество потенциально интересных идей, нужно только определить интересы целевой аудитории.
Заключение
Надеюсь, данный рассказ был вам интересен. Самого бота можно посмотреть здесь —
https://t.me/reagle_signals_bot?start=c21hcnRsYWIx. Там есть отдельная команда с описанием и инструкциями, где можно получить всю дополнительную информацию для понимания принципов работы бота. В следующих статьях могу рассказать подробнее про более специфичные моменты разработки проекта. А на этом я закончу. Всем пока.
цыгане?
А судьи яйцами трясут:
«ПОЛГОДА, бля, ПОЛГОДА, бля,
ПОЛГОДА!»
Бот в свою очередь может помогать в принятии решений в трейдинге: повышенный объем указывает на интерес к активу, а, допустим, аномальные заявки в стакане на возможность появления нового уровня поддержки или сопротивления. Ряд подобных индикаторов в совокупности может уже с большей вероятностью указывать на потенциальное движение цены актива.
Надеюсь, я ответил на ваш вопрос.
Нужно смотреть на события в совокупности и уже на основе многих факторов принимать решение — это же очевидно, что нет волшебной таблетки.
В боте бесплатно доступна возможность подписаться на все события по всем голубым фишкам Мосбиржи. То есть человеку может даже не потребоваться платная подписка, если он не торгует условно вторым эшелоном. Условия максимально демократичные. Человек, который знает что делает легко найдет применение инструменту или просто не будет его использовать — никто никому ничего не впаривает.
У вас какой-то бзик на инфоцыганах, судя по всему, раз вы и меня к ним приплели. Первую статью написал, чтобы рассказать о своем проекте, и уже инфоцыган.
EgorRepnikov, Спасибо. Я бы попробовал поискать ещё большие объёмы в сделках в области уровня. К примеру, многократно видел, как большие аски стояли на протяжении нескольких дней. К ним подходили, разбирали. Но не проносили. Айсберги только в путь так ставят, особенно их двигают туда сюда, чтоб не так очевидно было.
И вот однажды приходит покупатель, который разбирает все эти аски, и цена просто улетает. Глазами такое можно искать, но трудоёмко, а вот робота было б неплохо. Но вот конкретный алгоритм надо думать.
Ну и много чего ещё поискать можно.
Вообщем, рекомендую продолжать, тема интересная, но долгая)