Development системы автоматической остановки бота при аномалиях
Торговый бот работает в автономном режиме часами и днями. За это время могут произойти вещи, которые разработчик не предусмотрел: API биржи начинает возвращать некорректные данные, market data feed зависает на старых ценах, в коде стратегии срабатывает edge case с делением на ноль. Система обнаружения аномалий — это автоматический «стоп-кран», который прерывает торговлю при подозрительном поведении.
Категории аномалий
Аномалии данных
Stale data: market data feed перестал обновляться. Цена BTC «застыла» на 5 минут — это не нормально. Детектируется сравнением timestamp последнего update с текущим временем. Порог: 30-60 секунд для ликвидных пар.
Price spike: цена за один тик двинулась на 5%+. Может быть реальным событием или ошибкой feed. Стратегия, которая принимает решения на таких данных, рискует открыть позицию на garbage input.
Abnormal bid-ask spread: спред увеличился в 10 раз от нормального — рынок неликвиден или биржа испытывает проблемы. Market orders в таких условиях дадут катастрофический slippage.
Volume anomaly: объём торгов аномально низкий (манипуляция, технический сбой биржи) или аномально высокий (flash crash, major news event).
Аномалии поведения бота
Order fill rate anomaly: ордера перестали исполняться. Limit orders висят без fills много минут в условиях, когда должны были исполниться — что-то не так.
Abnormal order frequency: бот размещает ордера значительно чаще обычного. Может быть симптомом бага в стратегии — infinite loop или ошибочный сигнал, триггерящийся постоянно.
Position size anomaly: открытая позиция значительно больше максимально допустимого размера. Как такое получилось? Возможно, несколько частичных fills собрались в одну позицию, или логика размер-расчёта сломалась.
PnL velocity: P&L меняется слишком быстро — за 5 минут потеряли 10% дневного лимита. Это не обязательно ошибка, но требует проверки.
Детекторы и логика принятия решений
Каждый детектор аномалии производит сигнал определённого уровня серьёзности:
| Аномалия | Уровень | Действие |
|---|---|---|
| Stale price data > 30s | HIGH | Остановить новые ордера |
| Price spike > 5% | MEDIUM | Предупреждение + пересчёт рисков |
| Bid-ask spread > 10x нормы | HIGH | Остановить market orders |
| Order fill rate = 0% за 10 мин | MEDIUM | Предупреждение |
| Position size > 2x лимита | CRITICAL | Немедленная остановка + алерт |
| PnL velocity > 5% за 5 мин | HIGH | Остановить + алерт |
Composite scoring: несколько средних аномалий одновременно могут указывать на серьёзную проблему. Если одновременно stale data + аномальный spread + low fill rate — суммарный score превышает threshold даже если каждая отдельно не критична.
Graceful vs Emergency Stop
Graceful stop: при не-критических аномалиях — перестаём открывать новые позиции, ждём закрытия текущих по нормальным условиям, затем останавливаемся. Комиссии минимальны.
Emergency stop: при критических аномалиях — немедленное закрытие всех позиций market orders, остановка. Slippage хуже, но убытки ограничены.
Защита от death spiral: emergency stop не должен сам стать причиной убытков. Закрытие всех позиций market orders в неликвидном рынке при аномальном спреде — плохая идея. Логика должна учитывать текущие market conditions при выборе способа закрытия.
Реализация
Anomaly detectors работают как независимые goroutines (Go) или async tasks (Python), непрерывно анализирующие потоки данных. Детектор публикует события в internal event bus. Anomaly Manager подписывается на события, применяет логику scoring и принимает решение об остановке.
Все срабатывания детекторов логируются с полным контекстом: какие именно значения превысили какие пороги, какие данные в этот момент были в системе. Это необходимо для постфактум анализа и настройки порогов.
Хорошо настроенная система anomaly detection снижает риск катастрофических потерь от software bugs и infrastructure failures на порядок.







