Надёжность важнее стратегии
Система, которая торгует пять раз в месяц, устроена сложнее агрессивного бота: одна ошибка в ордере стоит месяца работы. Что приходится строить вокруг торговой логики, чтобы она не сломалась.
Клиент пришёл с необычным запросом: «Не нужны десятки сделок. Система должна входить редко, держать позицию долго и рисковать почти как инвестиционный портфель».
Звучит проще агрессивного бота. На практике — сложнее.
Почему редкая торговля сложнее частой
Сто сделок в месяц — одна ошибка теряется в статистике. Пять сделок — ошибка в одном ордере стоит месяца работы.
Список того, что может пойти не так, при этом не сокращается:
- ордер не выставился;
- двойное открытие после переподключения;
- завис вебсокет;
- контейнер перезапустился, и стратегия продолжила торговать, хотя до этого была остановлена вручную.
При ста сделках такие случаи размазываются по распределению. При пяти каждый из них — это и есть результат месяца.
Большая часть кода не про торговлю
Она про то, чтобы торговля не сломалась.
- Вебсокет восстанавливает соединение сам и проверяет, что данные не потеряны, а не просто что сокет снова открыт.
- Circuit breaker хранится отдельно от процесса и переживает рестарт контейнера. Иначе падение молча включит обратно систему, которую остановили намеренно.
- Аварийное закрытие доступно с телефона — все позиции в пару действий.
- Деньги считаются без float, только точными типами. Округление в денежной арифметике недопустимо.
Самое важное осталось за пределами бота
До реальных денег стратегия прошла исторические данные, проверку пропущенных котировок, walk-forward оптимизацию и симулятор брокера.
Порядок был такой: сначала систему пытались сломать искусственно, и только потом дали доступ к живому рынку.
Это привычка из QA. Двенадцать лет я ломал чужой код в банке, автотеке и маркетплейсе — и быстро учишься смотреть не «работает ли happy path», а «что будет, если пойдёт не по плану». Для системы, которая работает круглосуточно и распоряжается реальными деньгами, это не праздный вопрос.
Что считать сдачей проекта
Код мы отдали за два месяца до того, как проект закрылся. Всё это время оставались на связи: смотрели, как система ведёт себя на живом рынке, разбирали нестандартные ситуации, вносили правки. Ни одной остановки, ни одного превышения лимитов риска.
Проект закрылся в тот день, когда клиент сказал, что дальше справится сам.
Нормальная сдача — не когда код работает у разработчика. А когда за ним можно перестать смотреть и быть уверенным, что он продолжит работать сам.