Разработка AI-бота для высокочастотной торговли (HFT)

Стратегия теряет результат, когда отклик запаздывает на пиковой нагрузке, а риск остаётся без контроля. Мы разрабатываем HFT ботов под ключ: разбираем логику стратегии, собираем торговый модуль и настраиваем защиту от отказов. Обсудим задачу — вернёмся с оценкой, планом и составом работ.

Разработка AI-бота для высокочастотной торговли (HFT)

Отраслевые AI-решенияСложныйот 2 недель до 3 месяцев
Часто задаваемые вопросы

Почему HFT бот теряет результат на пиковой нагрузке

HFT бот не «ломается» целиком — он теряет результат постепенно, по мере роста нагрузки. Пока поток котировок умеренный, задержка отклика бота держится в привычных рамках, и модель исполнения заявок совпадает с расчётной. На пиковой нагрузке на площадке — выход статистики, аукцион открытия, каскад срабатываний по стопам — время между сигналом и постановкой заявки растёт в разы, и стратегия начинает работать по устаревшей картине рынка.

Вторая точка отказа — проскальзывание заявок. В момент резкого движения плотность в стакане падает: цена проходит несколько уровней, пока заявка доходит до площадки, и исполнение приходит хуже расчётного. Чем выше частота решений, тем сильнее расхождение между модельной и фактической ценой входа — позиция уже открыта, а ожидаемое преимущество съедено движением.

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

Разбираем, как это закрывается: где измерять задержку по этапам — от приёма котировки до подтверждения исполнения, как переподключаться без потери состояния книги и какие ограничения по риску останавливают бота раньше, чем расхождение превращается в потерю.

Что даёт внедрение: скорость отклика, отказы, контроль риска

Торговый модуль оценивают не по скорости отправки заявки, а по тому, сколько заявок доходит до сделки. Доля исполненных заявок зависит от актуальности локальной копии книги заявок и от обработки частичных исполнений: если состояние расходится с биржевым, часть заявок отклоняется уже на площадке. После переработки очереди и сверки состояния доля исполненных заявок выросла с 78% до 94% на том же потоке сигналов.

Снижение просадки даёт не скорость сама по себе, а порядок в риск-лимитах. Когда лимиты по позиции, по убытку на сделку и по убытку за интервал проверяются до отправки заявки, а не после ответа площадки, модуль перестаёт догонять рынок серией запоздалых срабатываний. Предсказуемое поведение лимитов убрало всплески, из-за которых просадка на интервале доходила до 9%.

Отдельный класс отказов — разрыв канала. HFT-бот обменивается с площадкой служебными пакетами, при обрыве автоматически переподключается, снимает неактуальные заявки и сверяет позицию по протоколу FIX. Раньше после обрыва модуль мог открыть вторую позицию по тому же сигналу — теперь этот класс отказов закрыт.

Мониторинг торгового модуля строится на четырёх метриках: время отклика, глубина очереди заявок, расхождение локальной и биржевой позиции, число отклонённых заявок. Алерт приходит до того, как расхождение превращается в незапланированную позицию, — контроль риска перестаёт быть реактивным.

Режимы работы: автономный, полуавтономный, арбитражный

Режим определяется не столько стратегией, сколько точкой, в которой принимается решение: кто выставляет заявку в момент срабатывания сигнала и сколько шагов остаётся до сделки. Один и тот же расчётный модуль в автономном и полуавтономном контуре даёт разный профиль риска, поэтому режим мы фиксируем до разработки — иначе изменения приходится вносить в уже работающую логику.

Вариант Когда подходит Ограничения
Автономный режим торговли Стратегия формализована до правил: вход, размер позиции, стоп считаются по котировкам без участия человека Ошибка в логике тиражируется с той же скоростью, что и результат; нужен внешний контур контроля, жёсткие лимиты и аварийный останов
Полуавтономный режим Сигналы считает система, решение подтверждает человек — либо бот подстраховывает ручную позицию Реакция ограничена скоростью оператора: часть сигналов уходит, статистика смещается в сторону более спокойных сценариев
Кросс-площадочный арбитраж Одна и та же пара торгуется на нескольких площадках, и расхождение цен перекрывает издержки входа и выхода Требует синхронного доступа к нескольким источникам котировок и резервов на каждой площадке; окно расхождения живёт недолго

Что проверяем до выбора режима

Общий знаменатель для всех трёх контуров — ограничения ликвидности. Заявка, которая на истории исполнялась мгновенно, на живом рынке двигает цену, и часть прибыли съедает проскальзывание. Поэтому расчётный модуль прогоняем на записи котировок с реалистичной глубиной, а размер позиции ограничиваем долей от оборота площадки, а не только математическим оптимумом стратегии.

Режим не обязательно постоянный: типовой маршрут — старт в полуавтономном контуре, подтверждение статистики на ограниченном объёме, затем перевод в автономный с сохранением ручного останова. Опишите свою стратегию — вернёмся с оценкой, какой контур под неё подходит и какие лимиты закладывать.

Этапы разработки: от разбора стратегии до запуска

Разработка торгового бота начинается не с кода, а с формализации стратегии: пока правило входа и выхода существует только в голове, его нельзя ни проверить, ни ограничить по риску. Ниже — порядок работ, где каждый следующий этап опирается на артефакты предыдущего, поэтому ошибка в расчёте сигнала обнаруживается на ранних шагах, а не на живом счёте.

  1. Разбор стратегии. Фиксируем условия входа и выхода, работу с частичным исполнением и поведение в моменты, когда поток заявок рвётся.
  2. Схема потоков данных. Определяем, откуда приходят котировки, как накапливается история сделок и где проходит граница между расчётным модулем и исполнением.
  3. Сборка модуля. Реализуем расчёт сигналов, управление заявками и журналирование — так, чтобы каждое решение оставляло след для разбора.
  4. Проверка на исторических данных. Прогоняем стратегию на накопленном потоке с учётом комиссий и проскальзывания; смотрим не только результат, но и просадку.
  5. Настройка риск-лимитов. Задаём предельную позицию, дневной стоп, ограничение по числу заявок и автоостановку при отклонении от расчётного поведения.
  6. Тестовый запуск на живом потоке. Работаем в режиме наблюдения без реального исполнения, сверяя расчётные сигналы с фактическим рынком.
  7. Передача и сопровождение. Отдаём конфигурации, журналы, схему потоков и порядок аварийной остановки; далее — регламент обновления стратегии.

Что передаём на выходе: конфигурации, логика риска, регламенты

Проект закрывается не демонстрацией работающего HFT-бота, а передачей комплекта, по которому ваши инженеры смогут сопровождать его и разбирать инциденты без нас. Артефакты лежат рядом с кодом в системе контроля версий и обновляются вместе с ним — иначе документация быстро расходится с реальным поведением системы.

  • Конфигурации всех модулей — параметры стратегии, лимиты, пороги, таймауты — в версионируемых файлах, с пояснением, что меняет каждая настройка и где её рабочий диапазон.
  • Схема потоков данных от источника рыночных данных до выставления заявки: точки, где сообщение может потеряться или прийти с опозданием, и как система это обнаруживает.
  • Логика риск-контроля послойно: лимит на позицию и на инструмент, стоп по дневному результату, автоматическое снятие заявок и полная остановка торговли по заданным условиям.
  • Документация на каждый модуль: назначение, входы и выходы, зависимости, поведение при отказе соседнего узла.
  • Журнал событий: состав записей, детализация, срок хранения, порядок восстановления хронологии инцидента по логу.
  • Регламент при сбое: последовательность действий дежурного, переключение на резервный контур, откат на предыдущую конфигурацию.
  • Стенд приёмочных проверок на исторических данных: набор сценариев, которые обязаны проходить перед каждым обновлением стратегии.

Комплект рассчитан на независимое сопровождение: без доступа к нашей инфраструктуре, без устных договорённостей и с единым порядком разбора любого сбоя. Дальше бота развивает ваша команда — либо мы, если решите оставить поддержку на себе.

Кейс: HFT бот для поддержания котировок — метрики до и после

Что было до

Команда держала котировки по нескольким инструментам сразу на трёх площадках. Торговое ядро работало по таймеру: пересчёт цен и выставление заявок шли одним циклом, без разделения на расчёт и исполнение. На спокойном рынке это не мешало, но на резких движениях проскальзывание доходило до 18–25 базисных пунктов, а число ошибочных срабатываний — до 40–60 в сутки. После разрыва соединения бот поднимали руками, восстановление занимало от 20 до 40 минут.

Узкое место

Расчёт котировки и отправка заявок жили в одном потоке. Если площадка отвечала медленнее, чем шёл пересчёт, очередь заявок копилась, и бот отдавал их по уже устаревшей цене — отсюда проскальзывание и лишние сделки. Автоматической защиты от разрыва не было: только внешний мониторинг, который сообщал о падении постфактум. Ядро собрали на базе Hummingbot, но переписали контур исполнения под свои правила риска.

Что изменили и какие метрики получили

Разделили контур расчёта и контур исполнения, добавили локальный стакан с отметкой времени и правила отмены заявки по возрасту и отклонению от целевой цены. Резервный канал связи переключается автоматически, позиции переносятся без ручного вмешательства.

  • проскальзывание: 18–25 → 3–6 базисных пунктов на сделку;
  • ошибочные срабатывания: 40–60 → 2–4 в сутки;
  • время восстановления после обрыва: 20–40 минут → 40–90 секунд;
  • доля отмен, успевших пройти до исполнения: 88% → 97%.

Через месяц работы на проде команда перешла на дежурство по отклонениям: ручных перезапусков не потребовалось ни одного.

Что делать, если торговый модуль уже работает на площадке?

Работающий на площадке модуль высокочастотной торговли (HFT) — это не повод переписывать всё заново. Сначала нужен разбор текущей логики: как формируются сигналы, где расставлены предохранители по риску, что происходит при обрыве связи с биржей и как ведёт себя модуль при частичном исполнении заявки.

Аудит торговой логики идёт по фактическому поведению, а не по чужой документации. Мы снимаем журналы заявок и сделок за представительный период, сверяем их с заявленной стратегией и находим места, где решение отклоняется от неё: устаревшие условия входа, обход риск-ограничений, обработка редко повторяющихся ситуаций, после которых позиция остаётся открытой дольше, чем задумано.

Доработка существующего модуля строится так, чтобы не останавливать торговлю. Изменения выносятся в отдельные слои — расчёт сигнала, исполнение, контроль позиции — и включаются переключателем режима. Новая логика сначала идёт параллельно на теневом потоке данных и на исторических прогонах; пока результаты не совпадут с ожидаемыми, в рынок уходит прежняя ветка.

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

На выходе заказчик получает модуль, который можно менять частями, а не целиком, и команду, понимающую, почему в нём принято то или иное решение. Опишите, что уже работает на площадке, — вернёмся с оценкой и планом.

Технические сомнения до старта: задержки, лимиты, надёжность

До старта обычно проверяют четыре вещи: как площадка ограничивает частоту запросов, что делает бот при обрыве канала, кто отвечает за систему после релиза и насколько нестандартно выглядит торговый интерфейс. Ниже — короткие ответы; по каждой площадке они уточняются на этапе доступа к тестовому контуру.

Как бот живёт внутри лимитов площадки?

Лимит площадки — это не только число сообщений в секунду, но и суточные квоты на отмены, ограничение на количество активных заявок и штрафные паузы за их превышение. В ядро закладываем собственный планировщик с весами запросов: при подходе к порогу часть заявок уходит пачками, а избыточные отмены перестраиваются. Ограничение перестаёт быть источником случайных блокировок аккаунта.

Что происходит при разрыве связи?

Бот ведёт локальный журнал состояния и помечает каждую заявку идентификатором, по которому повторная отправка не создаёт дубль. После восстановления канала он сверяет свою картину с биржевой, снимает осиротевшие ордера и только затем возвращается к торговле. Отдельный сценарий — аварийный «плоский режим»: закрытие позиций и остановка стратегии без ручного вмешательства.

Что входит в сопровождение после запуска?

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

А если у площадки нестандартный интерфейс?

Часть площадок вместо FIX отдаёт собственный бинарный формат или ограниченный набор вызовов. Под такое пишем отдельный адаптер и прогоняем его на записях реального трафика, включая ошибки и частичные ответы. Смена интерфейса площадки тогда закрывается правкой одного модуля, а не переписыванием логики.

Обсудим задачу: пришлём оценку, план и состав работ

Оценку и план работ мы собираем из вашей логики торговли, а не из общего описания «нужен HFT-бот». Первый разбор — короткий созвон с вашим трейдером или квантом: инструменты, горизонт удержания позиции, правила входа и выхода, допустимая просадка. Дальше идём по шагам, и на каждом понятно, что требуется от вас и что вы получаете на выходе.

  • Постановка, 1–2 дня. Фиксируем правила входа, выхода и риск-лимиты; на выходе спецификация, которую вы подтверждаете письменно.
  • Данные, 2–3 дня. История сделок и котировок, журналы прошлых версий, описание инструментов. Чего нет — считаем по имеющемуся и помечаем допущения прямо в оценке.
  • Доступы, параллельно. Тестовый контур брокера, ключи только на чтение и на торговлю в песочнице, отдельный счёт для проверок. Боевые ключи не запрашиваем до приёмки.
  • Оценка и план, 3–5 дней. Документ: этапы, результат каждого этапа, состав команды, внешние зависимости и риски с вариантами обхода.
  • Проверка на истории, 2–4 недели. Прогоняем логику на ваших данных и показываем, где расхождение — в правилах, в данных или в исполнении.

Оценка приходит в виде плана работ с составом команды и зоной ответственности каждого. Формат передачи — репозиторий, документация по конфигурации, регламент запуска и отката; данные и доступы остаются у вас. Опишите задачу — вернёмся с оценкой и планом.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142