VIZANIXРазработка торгового ПО
Архитектура ботовЭксплуатация7 мин чтения

Мониторинг торгового бота: всё, кроме P&L

P&L рассказывает, что произошло. Он не рассказывает, исправна ли машина, которая это произвела, — а к моменту, когда P&L покажет сломанного бота, тот ломается уже давно.

Инженеры Vizanix · об авторе

МАТЕРИАЛ
7 минвремя чтения
РАЗДЕЛ
Архитектура ботов
ОПУБЛИКОВАНО
2026-08-28
ГЛАВ
6
ЧИТАТЬ ДАЛЬШЕ
3
ЯЗЫК
написано на русском
Инженерный разбор, а не пересказ документации.
MONITORINGLATENCYREJECT RATECLOCKALERTS

Спросите оператора, за чем он следит, и большинство назовёт кривую эквити. Это худший из доступных сигналов здоровья: медленный, шумный и перепутанный с рынком. Бот может быть тихо сломан несколько дней внутри нормально выглядящего P&L, а совершенно здоровый бот может неделю терять деньги.

Разделите два вопроса

«Работает ли стратегия?» и «работает ли программа?» — разные вопросы с разными данными. Эта статья про второй. У метрик ниже общее свойство: понять, что они сломались, можно, ничего не зная про рынок.

Базовый набор

МетрикаЧто ловитКогда алертить
Свежесть данныхМёртвый поток, который не выдал ошибкуПо топику нет сообщений дольше ожидаемого интервала
Расхождение часовДрейф, который начнёт отклонять подписанные запросыУстойчивое расхождение выше доли recv_window
Задержка round-trip ордераДеградация площадки или сетиp99 выше порога, взятого с нормальной недели
Reject rate по кодамОшибки расчёта объёма, дрейф фильтров, смена правЛюбая устойчивая ненулевая частота по коду, который обычно нулевой
Число переподключенийПроблемы сети или хоста, нестабильность площадкиЧастота заметно выше базовой
Глубина очереди запросовДавление лимитов до того, как оно станет отказамиГлубина растёт, а не колеблется
Расхождения при сверкеРазъезжающуюся машину состоянийЛюбое ненулевое расхождение при переподключении
Время итерации циклаСтратегию, отстающую от рынкаВремя итерации приближается к интервалу бара

Наш конвейер свечей выводит почти всё это одним health-объектом на шард: подключённые сокеты, подписанные топики, монеты, буферы, счётчик сообщений, коррекции, переподключения, расхождение часов и булев флаг. В устойчивом режиме это читается как 10/10 шардов, около 1850 топиков, 725 монет, примерно 900 сообщений в секунду и расхождение в пределах ±40 мс. Сдвиг любого из этих показателей виден сразу.

Reject rate по кодам, а не в сумме

Суммарный reject rate прячет всё интересное. Разбивайте по кодам ошибок площадки, потому что каждый код означает, что сломалось что-то своё:

  • Рост 110004 означает, что расчёт объёма неверно учитывает маржу.
  • Рост 170137 означает, что фильтры инструментов разошлись с вашим кэшем.
  • Любой 10018 вообще означает проблему с белым списком IP — обычно переезд сервера.
  • Любой 10005 вообще означает, что права API-ключа изменились без вас.
  • Рост 10006 означает, что доработать надо очередь запросов, а не число повторов.

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

Алерты, на которые действительно реагируют

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

Работают три уровня:

  1. Будить. Торговля идёт там, где не должна, или не идёт там, где должна. Неразрешимое состояние ордера. Сработал kill switch. Позиция без стопа.
  2. Уведомить. Деградация, которая пока не привела к убытку: вырос reject rate, выросли задержки, шторм переподключений, растёт очередь.
  3. Дайджест. Сводка за сутки: исполнения, отказы по кодам, переподключения, худшая задержка, расхождения при сверке, сработавшие лимиты.

Дайджест — это то, что пропускают, и то, что ловит медленную деградацию. Код отказа, появляющийся раз в сутки на протяжении недели, невидим в реальном времени и очевиден при недельном сравнении.

Пусть бот сам подаёт признаки жизни

Система мониторинга, которая сообщает только о проблемах, не отличает «всё хорошо» от «мониторинг умер». Выдавайте положительный heartbeat с фиксированным интервалом и алертите на его отсутствие.

Так же получаются честные цифры доступности, а не вспомненные. Мы пишем снимки эквити с фиксированной частотой именно поэтому: пропуски в ряду — это пропуски в работе, и они измеримы, а не восстанавливаются по памяти. Когда мы проверили свой стенд, честная цифра оказалась 86,4% с одним провалом на 34 часа — совершенно нормальное число для стенда в активной разработке, и ровно та причина, по которой мы не печатаем на сайте «99,9% uptime».

Логируйте отрицательные события

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

Это стоит места на диске и превращает самый частый вопрос оператора «почему он ничего не делает?» из сеанса отладки в запрос к базе. Такой обмен стоит совершать каждый раз.

Статья описывает инженерную практику. Это не инвестиционная рекомендация. Vizanix разрабатывает программное обеспечение и не обещает торговую доходность.

Блог

Читать дальше

Хотите такое у себя?

Мы пишем о том, что строим. Если нужно построить — напишите, разбор бесплатный.

Бриф

Получить оценку проекта

Четыре вопроса и контакт. Предоплата для разговора не нужна — если задача не наша, скажем сразу.

01Что вам нужно
02Биржа
03Рынок
04Стратегия
05Контакты

Проще написать напрямую? Telegram @vx_ceo

Обсудить систему