Система сповіщень для трейдерів: ціна, об'єм, ліквідації

При торгівлі на Binance Futures ви можете пропустити раптову ліквідацію великого гравця, якщо не налаштовані сповіщення. Затримка в кілька секунд перетворює прибуткову угоду на збиток. Одного разу клієнт втратив велику суму через те, що REST API не встиг оновити ціну — ліквідація пройшла за 200 мс,

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1452
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1012

При торгівлі на 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 годин ми підготуємо комерційну пропозицію з точними термінами та вартістю під ваші завдання.