Надёжный бот — это не один скрипт с условием buy/sell, а несколько независимых модулей с понятными контрактами и защитой от ошибок.

01Коннектор к бирже

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

  • Повтор запросов с ограничением
  • Синхронизация времени
  • Проверка статуса ордера
  • Защита ключей API

02Стратегия и данные

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

Такую логику проще тестировать на истории и переносить между биржами.

03Риск-модуль важнее сигнала

Перед исполнением риск-модуль проверяет размер позиции, дневной лимит потерь, доступный баланс и конфликтующие ордера.

Kill switch должен уметь закрыть или остановить систему при потере данных, аномальном количестве заявок или превышении лимита.

Данные, инфраструктура и момент принятия решения рассматриваются вместе.

04Журналирование и мониторинг

Бот обязан объяснять каждое действие. Записывайте входные данные, рассчитанный сигнал, решение риск-модуля, запрос к API и ответ биржи.

Уведомления нужны не на каждую сделку, а на события, требующие вмешательства.

05Ордер — это процесс, а не одна команда

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

Клиентский идентификатор связывает намерение стратегии с конкретным ордером. Благодаря этому после перезапуска можно восстановить контекст и не отправить заявку повторно.

  • Уникальный идентификатор каждой заявки
  • Обработка частичного исполнения
  • Сверка локальной позиции с биржей
  • Отдельная логика отмены и замены

06Как выпускать бота без ночных сюрпризов

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

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

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

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

07Перезапуск не должен менять позицию

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

Состояние стратегии и состояние счёта — разные вещи. Сигнал мог быть рассчитан, но ордер ещё не отправлен; ордер мог быть принят, но исполнен частично. Явная модель этапов не позволяет после перезапуска случайно удвоить позицию или отменить заявку, которой уже нет.

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

08Что тестировать до доступа к деньгам

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

Отдельно моделируют ошибки: пустой стакан, отклонённый ордер, лимит запросов, разрыв WebSocket и неверное время. Тест считается полезным, если проверяет не только сообщение об ошибке, но и итоговое состояние — например, что новый ордер не появился и оператор получил понятное уведомление.

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

  • Модульные тесты расчётов
  • Контрактные тесты API
  • Сценарии отказов и восстановления
  • Теневой режим без отправки ордеров

Продолжение — в Telegram

Код, видео, наблюдения за рынком и ответы на вопросы.

Перейти в канал

Материал носит информационный характер и не является индивидуальной инвестиционной рекомендацией. Торговля связана с риском потери капитала.