HEAN — автономная торговая система
Собственный продукт: инфраструктура, которая круглосуточно собирает рыночные данные, исполняет заявки и держит риск без человека за пультом.
- Год
- 2026
- Роль
- Архитектура, разработка, эксплуатация
- Стек
- Python · Rust · PostgreSQL · Redis · Docker · Prometheus
- 50
- торговых инструментов в реальном времени
- 11
- сервисов в связке
- <1 мс
- задержка шины событий под нагрузкой
- 24/7
- работа без ручного вмешательства
Что это
HEAN — моя собственная торговая система, которую я строю и держу в продакшене несколько лет. Это не заказной проект и не витрина: это стенд, на котором я проверяю всё, что потом предлагаю клиентам. Каждое инженерное решение здесь оплачено собственными ошибками, а не прочитано в статье.
Система круглосуточно собирает рыночные данные с биржи, считает по ним показатели, принимает решения по заранее описанным правилам, исполняет заявки, ведёт учёт позиций и следит за риском. Человек нужен только чтобы менять правила, а не чтобы нажимать кнопки.
Из чего собрана
Одиннадцать сервисов в Docker: сборщики рыночных данных, шина событий, слой исполнения, учёт, риск-контур, мониторинг и панель наблюдения. Горячие расчёты вынесены в модуль на Rust — там, где Python не успевал за потоком котировок, счёт идёт на десятки микросекунд.
Отдельная часть — риск-контур. Лимиты на позицию, контроль просадки, защита депозита и аварийная остановка, которая срабатывает без спроса. В торговой системе самое дорогое — не упущенная прибыль, а незамеченный отказ ночью.
Где было больно
Шина событий захлёбывалась. При переходе на пятьдесят инструментов очередь событий накапливала задержку в десятки секунд, и система принимала решения по устаревшим ценам. Помогло схлопывание котировок на публикации — в очереди живёт только последнее состояние по каждому инструменту, а не вся история — и вынос тяжёлых подписчиков в фон. Задержка упала с пятидесяти секунд до долей миллисекунды.
Позиции закрывались молча. Из-за защиты от дублей закрытие блокировало само себя: позиция помечалась как закрываемая до постановки задачи, а сама задача видела эту метку и выходила, ничего не сделав. Стоп-лоссы и тейк-профиты не срабатывали, а в журнале при этом было чисто. Такие отказы не видны в метриках, потому что метрики показывают то, что произошло, а не то, что должно было произойти.
Сверка позиций удаляла живое. Механизм, чистящий рассинхрон с биржей, в тестовом режиме не отличал бумажные позиции от реальных и вычищал их как мусор. Любая автоматическая уборка обязана знать, в каком режиме она работает.
Что из этого получают клиенты
Когда я берусь за торговую или финтех-систему для клиента, я приношу не общие соображения, а список конкретных мест, где такие проекты ломаются: сверка позиций, гонки при исполнении, накопление задержки в очередях, молчаливые отказы ночью и учёт, который расходится с биржей на третьей неделе.
Оговорка, которую я повторяю на каждом первом созвоне: я отвечаю за инфраструктуру и исполнение, а не за доходность. Прибыль определяется стратегией и рынком. Код может гарантировать только то, что стратегия исполняется так, как задумано, и что отказ будет замечен.
Экраны
Снимки рабочей системы, а не макеты. Нажмите на любой — откроется во весь экран.