При торговле на Binance Futures вы можете пропустить внезапную ликвидацию крупного игрока, если не настроены алерты. Задержка в несколько секунд превращает прибыльную сделку в убыток. Однажды клиент потерял крупную сумму из-за того, что REST API не успел обновить цену — ликвидация прошла за 200 мс, а опрос пришёл через 3 секунды. Мы разрабатываем системы алертов, которые решают эту задачу: мониторинг цены, объёма и ликвидаций в реальном времени с доставкой в Telegram, email или webhook. Опыт нашей команды в блокчейн-разработке — более 7 лет, мы реализовали 20+ проектов в криптотрейдинге, гарантируя высокую надёжность и задержку менее 50 мс.
Без системы алертов трейдер вынужден постоянно мониторить графики или полагаться на медленные REST API-запросы. Наше решение автоматизирует мониторинг и доставляет уведомления по любым каналам. Оно покрывает три ключевые категории событий: ценовые алерты, аномалии объёма и ликвидации.
Какие проблемы решает система алертов?
Главная проблема — задержки в получении данных. При использовании REST API запаздывание может достигать нескольких секунд, что критично для высокочастотной торговли. Мы используем WebSocket-подключения, обеспечивая задержку менее 50 мс. Вторая проблема — ложные срабатывания. Наш движок фильтрует до 90% шумовых событий за счёт настраиваемых порогов и алгоритмов сглаживания, например, скользящего окна по объёму. Третья — сложность кастомизации. Мы предоставляем гибкую систему правил с поддержкой условий, комбинирующих цену, объём и ликвидации, а также возможность задавать составные условия через API.
Почему WebSocket быстрее REST API?
REST API требует постоянных опросов (polling), что создаёт избыточную нагрузку на сервер и задержку 1-5 секунд. WebSocket, напротив, использует push-модель: сервер отправляет данные только при изменении. Это снижает нагрузку в 10 раз и обеспечивает задержку менее 50 мс. Для трейдера это означает, что алерт придёт до того, как цена уйдёт на второй уровень стоп-лосса. Экономия на инфраструктуре — до 80% по сравнению с REST API.
Как устроена система алертов?
Архитектура построена на микросервисах на Python (asyncio, Redis, PostgreSQL). Каждый тип алерта реализован отдельным модулем, что упрощает масштабирование. Ниже — пример модели правила и движка.
class AlertRule(BaseModel):
id: str
user_id: str
type: str # 'price_above', 'price_below', 'volume_spike', 'liquidation'
symbol: str
exchange: str
# Параметры в зависимости от типа
price_threshold: Optional[Decimal]
volume_multiplier: Optional[float] # N × avg volume
liquidation_usd: Optional[float]
# Доставка
channels: list[str] # ['telegram', 'email', 'push', 'webhook']
webhook_url: Optional[str]
# Поведение
one_time: bool = True # деактивировать после срабатывания
cooldown_minutes: int = 60 # минимум между повторными срабатываниями
last_triggered: Optional[datetime] = None
is_active: bool = True
class AlertEngine:
def __init__(self, rule_repo, notifier):
self.rules = {} # symbol → list[AlertRule]
self.rule_repo = rule_repo
self.notifier = notifier
async def on_ticker_update(self, ticker: NormalizedTicker):
rules = self.rules.get(f"{ticker.exchange}:{ticker.symbol}", [])
for rule in rules:
if not rule.is_active:
continue
if self.is_in_cooldown(rule):
continue
if await self.evaluate_rule(rule, ticker):
await self.trigger_alert(rule, ticker)
async def evaluate_rule(self, rule: AlertRule, ticker: NormalizedTicker) -> bool:
if rule.type == 'price_above':
return ticker.last >= rule.price_threshold
elif rule.type == 'price_below':
return ticker.last <= rule.price_threshold
elif rule.type == 'price_change_pct':
change = await self.compute_price_change(rule.symbol, rule.period_minutes)
return abs(change) >= rule.change_pct_threshold
return False
async def trigger_alert(self, rule: AlertRule, ticker: NormalizedTicker):
message = self.format_alert_message(rule, ticker)
for channel in rule.channels:
await self.notifier.send(channel, rule.user_id, message)
rule.last_triggered = datetime.utcnow()
if rule.one_time:
rule.is_active = False
await self.rule_repo.save(rule)
def is_in_cooldown(self, rule: AlertRule) -> bool:
if not rule.last_triggered:
return False
elapsed = (datetime.utcnow() - rule.last_triggered).total_seconds() / 60
return elapsed < rule.cooldown_minutes
Чтобы добавить ценовой алерт для BTC/USDT на Binance с порогом $50,000 и доставкой в Telegram, отправьте POST /alerts с JSON-телом: {"user_id": "user123", "type": "price_below", "symbol": "BTCUSDT", "exchange": "Binance", "price_threshold": 50000, "channels": ["telegram"], "one_time": true}. Укажите Telegram chat ID в настройках — через 5 секунд начнётся мониторинг.
Пример из практики: настройка алерта на ликвидации
Один из заказчиков — проп-трейдинговая фирма — запросил алерт на крупные ликвидации на Bybit. Мы развернули модуль LiquidationMonitor за день: подключились к WebSocket Bybit, настроили порог и доставку в Telegram и Slack. За первую неделю система предупредила о 12 крупных ликвидациях, которые трейдеры использовали для входа в контртренд. Задержка от события до уведомления — 45 мс.
Объёмные алерты
Для детекции аномалий объёма используется скользящее окно из 20 свечей. Это позволяет отсеивать кратковременные всплески и реагировать только на значимые изменения.
class VolumeAnomalyDetector:
WINDOW_PERIODS = 20 # свечей для расчёта среднего
async def check_volume_spike(self, symbol: str, current_volume: Decimal) -> float:
"""Возвращает множитель относительно среднего объёма"""
recent_volumes = await self.candle_repo.get_recent_volumes(
symbol, count=self.WINDOW_PERIODS
)
if len(recent_volumes) < 5:
return 1.0
avg_volume = sum(recent_volumes) / len(recent_volumes)
if avg_volume == 0:
return 1.0
return float(current_volume / avg_volume)
Ликвидационные алерты
Данные о ликвидациях получаем с бирж (Binance forceOrder stream, Bybit liquidation) или агрегаторов (Coinalyze, CoinGlass API):
class LiquidationMonitor:
async def monitor_binance_liquidations(self):
async with websockets.connect("wss://fstream.binance.com/ws/!forceOrder@arr") as ws:
async for message in ws:
data = json.loads(message)
order = data["o"]
liquidation = Liquidation(
symbol=order["s"],
side=order["S"],
quantity=Decimal(order["q"]),
price=Decimal(order["p"]),
usd_value=Decimal(order["q"]) * Decimal(order["p"]),
timestamp=data["T"],
)
await self.process_liquidation(liquidation)
async def process_liquidation(self, liq: Liquidation):
await self.redis.incrbyfloat(
f"liq_total:{liq.symbol}:1m",
float(liq.usd_value)
)
await self.redis.expire(f"liq_total:{liq.symbol}:1m", 60)
if liq.usd_value >= 1_000_000:
await self.alert_engine.fire_liquidation_alert(liq)
Подключение внешних источников данных
Мы интегрируемся с любыми биржами через WebSocket. Для Binance используем Binance WebSocket Streams. Данные нормализуются в единый формат NormalizedTicker, что упрощает добавление новых источников.
Webhook доставка
class WebhookDelivery:
async def send(self, webhook_url: str, alert: AlertMessage):
payload = {
"type": alert.type,
"symbol": alert.symbol,
"message": alert.text,
"timestamp": alert.timestamp.isoformat(),
"data": alert.raw_data,
}
signature = hmac.new(
alert.rule.webhook_secret.encode(),
json.dumps(payload).encode(),
hashlib.sha256
).hexdigest()
async with httpx.AsyncClient() as client:
await client.post(
webhook_url,
json=payload,
headers={"X-Alert-Signature": f"sha256={signature}"},
timeout=10.0,
)
Webhook-алерты позволяют интегрировать систему с внешними ботами, торговыми системами, CRM. По webhook можно триггерить автоматические действия — например, открытие ордера при ценовом алерте.
Сравнение моделей доставки
| Модель | Задержка | Нагрузка на сервер | Надёжность |
|---|---|---|---|
| REST API (pull) | 1-5 сек | Высокая (частые опросы) | Средняя |
| WebSocket (push) | <50 мс | Низкая (подписка) | Высокая |
Push-модель в 10 раз быстрее и эффективнее при большом количестве правил. Закажите разработку — получите прототип за 3 дня.
Процесс разработки
| Этап | Длительность | Результат |
|---|---|---|
| Аналитика и сбор требований | 1-2 дня | Техническое задание |
| Проектирование архитектуры | 2-3 дня | Схема данных, API контракты |
| Реализация | 5-7 дней | Исходный код, покрытый тестами |
| Тестирование + QA | 2-3 дня | Отчёт о тестировании |
| Деплой и обучение | 1-2 дня | Документация, инструкции, доступ к системе |
Общий срок — от 10 до 17 дней в зависимости от сложности.
Что входит в результат
- Документация архитектуры и API
- Исходный код (Python, asyncio)
- Инструкция по настройке и эксплуатации
- Обучение пользователей (до 4 часов)
- Поддержка в течение 3 месяцев
Пример конфигурации триггера
Для настройки алерта через Telegram-бота отправьте команду /newalert price_above BTCUSDT 50000. Бот создаст правило и вернёт ID. Если хотите комбинировать условия — используйте JSON-правила через API.
Свяжитесь с нами — получите консультацию инженера бесплатно. Заполните форму на сайте или напишите в Telegram — в течение 24 часов мы подготовим коммерческое предложение с точными сроками и стоимостью под ваши задачи.







