Все материалыENGINEERING · Надёжность · 2 МИН ЧТЕНИЯ

Надёжность важнее стратегии

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

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

Звучит проще агрессивного бота. На практике — сложнее.

Почему редкая торговля сложнее частой

Сто сделок в месяц — одна ошибка теряется в статистике. Пять сделок — ошибка в одном ордере стоит месяца работы.

Список того, что может пойти не так, при этом не сокращается:

  • ордер не выставился;
  • двойное открытие после переподключения;
  • завис вебсокет;
  • контейнер перезапустился, и стратегия продолжила торговать, хотя до этого была остановлена вручную.

При ста сделках такие случаи размазываются по распределению. При пяти каждый из них — это и есть результат месяца.

Большая часть кода не про торговлю

Она про то, чтобы торговля не сломалась.

  • Вебсокет восстанавливает соединение сам и проверяет, что данные не потеряны, а не просто что сокет снова открыт.
  • Circuit breaker хранится отдельно от процесса и переживает рестарт контейнера. Иначе падение молча включит обратно систему, которую остановили намеренно.
  • Аварийное закрытие доступно с телефона — все позиции в пару действий.
  • Деньги считаются без float, только точными типами. Округление в денежной арифметике недопустимо.

Самое важное осталось за пределами бота

До реальных денег стратегия прошла исторические данные, проверку пропущенных котировок, walk-forward оптимизацию и симулятор брокера.

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

Это привычка из QA. Двенадцать лет я ломал чужой код в банке, автотеке и маркетплейсе — и быстро учишься смотреть не «работает ли happy path», а «что будет, если пойдёт не по плану». Для системы, которая работает круглосуточно и распоряжается реальными деньгами, это не праздный вопрос.

Что считать сдачей проекта

Код мы отдали за два месяца до того, как проект закрылся. Всё это время оставались на связи: смотрели, как система ведёт себя на живом рынке, разбирали нестандартные ситуации, вносили правки. Ни одной остановки, ни одного превышения лимитов риска.

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

Нормальная сдача — не когда код работает у разработчика. А когда за ним можно перестать смотреть и быть уверенным, что он продолжит работать сам.

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