EgorRepnikov
EgorRepnikov личный блог
19 ноября 2024, 12:22

Я сделал бота для отслеживания аномальных событий на фондовом рынке

Всем привет, меня зовут Егор. По профессии я программист, но уже давно занимаюсь торговлей на рынке акций. Соответственно, ряд моих 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. Там есть отдельная команда с описанием и инструкциями, где можно получить всю дополнительную информацию для понимания принципов работы бота. В следующих статьях могу рассказать подробнее про более специфичные моменты разработки проекта. А на этом я закончу. Всем пока.

 

28 Комментариев
  • chizhan
    19 ноября 2024, 12:44
    Народу в основном нужна кнопка бабло, а не аномальщина.
  • ves2010
    19 ноября 2024, 13:31
    проблема в том что это могут быть адресные сделки… их проводят через стакан чисто формально
    • __rtx
      20 ноября 2024, 00:01
        
      • ves2010
        19 ноября 2024, 19:59
        __rtx, ой ну да лана… возьмем интерактив брокерс… там каждый день в 8:00 спайк… на начале торгов в том же qqq или spy например… ну думаю халява… поставлю лимитки в обе стороны и поймаю спайк легко… а никуя… свеча есть а сделок нет… т.е спайк рисуется по адресным сделкам или внебержевым… а реально сделок нет... 

        цыгане? 
        • __rtx
          20 ноября 2024, 00:00
            
  • bohemian rhapsody
    19 ноября 2024, 13:53
    И вот ведут меня на суд,
    А судьи яйцами трясут:
    «ПОЛГОДА, бля, ПОЛГОДА, бля,
    ПОЛГОДА!»
  • Воронов Дмитрий
    19 ноября 2024, 14:25
    Автор, а выявленные аномалии приносят биржевой доход?
      • Воронов Дмитрий
        19 ноября 2024, 14:50
        EgorRepnikov, переформулирую вопрос: кому-либо (может быть Вам) удалось заработать на бирже при помощи Вашего бота?
          • __rtx
            20 ноября 2024, 00:01
              
  • Vadim S
    19 ноября 2024, 15:58
    по MOEX API:  на текущий момент можно бесплатно оформить подписку к ALGOPACK и получать данные без задержки по времени. 
  • Barlo
    19 ноября 2024, 16:41
    Вот это pet-project! Круто! Респектую!
    • __rtx
      20 ноября 2024, 00:00
        
  • __rtx
    20 ноября 2024, 00:00
      
      • __rtx
        20 ноября 2024, 00:00
          
  • shprots
    20 ноября 2024, 15:22
    Это всё очень хорошо. Что у вас подразумевается под сделкой? Скажем одной заявкой на 10000 бьют в аск 250. Она исполняется об цену 250- 2500 штук, потом об 251 5000 штук, и об 252 оставшиеся 2500 штук. Бот мне что покажет? Что была заявка в 10000 кинута в рынок, или одну сделку в 5000 штук? Иначе — аггрегируются ли сделки до заявки?
    • __rtx
      21 ноября 2024, 14:36
        
      • __rtx
        21 ноября 2024, 14:35
          
          • __rtx
            21 ноября 2024, 14:35
              
      • shprots
        20 ноября 2024, 19:12

        EgorRepnikov, Спасибо. Я бы попробовал поискать ещё большие объёмы в сделках в области уровня. К примеру, многократно видел, как большие аски стояли на протяжении нескольких дней. К ним подходили, разбирали. Но не проносили. Айсберги только в путь так ставят, особенно их двигают туда сюда, чтоб не так очевидно было.
        И вот однажды приходит покупатель, который разбирает все эти аски, и цена просто улетает. Глазами такое можно искать, но трудоёмко, а вот робота было б неплохо. Но вот конкретный алгоритм надо думать.

        Ну и много чего ещё поискать можно.

        Вообщем, рекомендую продолжать, тема интересная, но долгая)

      • __rtx
        21 ноября 2024, 14:35
          
  • Бронетемкин Поносец
    21 ноября 2024, 01:51
    Уже есть такой у одного чела в телеге и бесплатный, а идея бесполезная, так как никто сейчас не покупает крупными заявками по рынку, он маскирует их с дневной нормой. И растягивает на долгий срок.
  • Михаил Шардин
    21 ноября 2024, 09:02
    Код в открытом доступе есть?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн