Разработка торгового бота с REST API управления
REST API как интерфейс управления торговым ботом — выбор для разработчиков и автоматизированных систем. Это не UI для человека, это машиночитаемый контракт, через который другие системы управляют ботом: скрипты автоматизации, мониторинговые системы, внешние оркестраторы или другие боты.
Дизайн API: что важно для trading-систем
Idempotency: торговые команды должны быть idempotent. Если запрос «открыть позицию» отправлен дважды из-за network retry — нельзя открыть две позиции. Решение: idempotency key в заголовке. Сервер кеширует результат по ключу и возвращает тот же ответ при повторном запросе.
Synchronous vs Asynchronous: некоторые операции (размещение ордера) занимают время. API может вернуть 202 Accepted с job ID немедленно, а результат запрашивается отдельно через GET /jobs/{id}. Или ждать синхронно — проще, но может timeout при медленной бирже.
Consistent error responses:
{
"error": "RISK_LIMIT_EXCEEDED",
"message": "Position size 1.5 BTC exceeds max limit 1.0 BTC",
"code": 4003,
"request_id": "req_abc123"
}
Коды ошибок должны быть машиночитаемыми (RISK_LIMIT_EXCEEDED, не "Risk limit exceeded"), чтобы клиент мог обрабатывать их программно.
Структура эндпоинтов
Bot Management
GET /api/v1/bot/status — статус, uptime, режим работы
POST /api/v1/bot/start — запуск бота
POST /api/v1/bot/stop — остановка (позиции сохраняются)
POST /api/v1/bot/pause — пауза новых сделок
POST /api/v1/bot/resume — возобновление
GET /api/v1/bot/health — healthcheck для мониторинга
Portfolio & Positions
GET /api/v1/portfolio — баланс, общий P&L, метрики
GET /api/v1/positions — открытые позиции
GET /api/v1/positions/{id} — детали позиции
POST /api/v1/positions/{id}/close — закрыть позицию
POST /api/v1/positions/close-all — закрыть все (требует confirm=true)
Trades & History
GET /api/v1/trades — история сделок (?from=&to=&page=&limit=)
GET /api/v1/trades/{id} — детали сделки
GET /api/v1/performance — статистика (win rate, Sharpe, drawdown)
Configuration
GET /api/v1/config — текущая конфигурация
PATCH /api/v1/config — обновление параметров
GET /api/v1/strategies — список стратегий
PATCH /api/v1/strategies/{id} — параметры стратегии
Аутентификация API
API Keys с HMAC: стандарт для торговых API (как на самих биржах). Клиент подписывает запрос HMAC-SHA256 подписью из тела запроса + timestamp + nonce. Сервер верифицирует подпись. Ключ никогда не передаётся в запросе — только подпись.
X-API-Key: ak_live_abc123
X-Timestamp: 1704067200000
X-Signature: hmac_sha256(secret, timestamp + method + path + body)
IP whitelist: API ключ привязан к списку разрешённых IP. Запрос с другого IP отклоняется с 403 Forbidden даже при правильной подписи.
Scopes/Permissions: ключи с ограниченными правами. Ключ для мониторинга имеет только read scope, не может отправлять команды. Ключ для автоматизации имеет trading scope.
| Scope | Разрешённые операции |
|---|---|
| read | GET endpoints только |
| trading | read + управление позициями |
| admin | trading + конфигурация, старт/стоп |
Rate Limiting
Rate limiting для trading API — защита от случайных loop-запросов и abuse:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1704067260
Разные лимиты для разных эндпоинтов: чтение статуса — 300 req/min, торговые операции — 30 req/min. Превышение → 429 Too Many Requests с Retry-After.
Webhooks для обратных уведомлений
REST API — pull-модель: клиент спрашивает, сервер отвечает. Для событийных уведомлений нужна push-модель — Webhooks.
Клиент регистрирует endpoint: POST /api/v1/webhooks с URL и списком событий (trade.opened, position.closed, bot.error). При наступлении события бот делает POST-запрос на зарегистрированный URL с payload события.
Надёжная доставка webhooks: retry с exponential backoff при недоступности endpoint, signature для верификации подлинности события, delivery log для отладки.
REST API управления ботом — правильный выбор когда нужна интеграция с внешними системами или оркестрация нескольких ботов из центрального управляющего приложения.







