К содержанию

HEAN — автономная торговая система

Собственный продукт: инфраструктура, которая круглосуточно собирает рыночные данные, исполняет заявки и держит риск без человека за пультом.

Год
2026
Роль
Архитектура, разработка, эксплуатация
Стек
Python · Rust · PostgreSQL · Redis · Docker · Prometheus
50
торговых инструментов в реальном времени
11
сервисов в связке
<1 мс
задержка шины событий под нагрузкой
24/7
работа без ручного вмешательства

Что это

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

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

Из чего собрана

Одиннадцать сервисов в Docker: сборщики рыночных данных, шина событий, слой исполнения, учёт, риск-контур, мониторинг и панель наблюдения. Горячие расчёты вынесены в модуль на Rust — там, где Python не успевал за потоком котировок, счёт идёт на десятки микросекунд.

Отдельная часть — риск-контур. Лимиты на позицию, контроль просадки, защита депозита и аварийная остановка, которая срабатывает без спроса. В торговой системе самое дорогое — не упущенная прибыль, а незамеченный отказ ночью.

Где было больно

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

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

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

Что из этого получают клиенты

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

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

Экраны

Снимки рабочей системы, а не макеты. Нажмите на любой — откроется во весь экран.