Отслеживание ликвидаций на Binance Futures через WebSocket на Python

Отслеживание ликвидаций на Binance Futures через WebSocket на Python Python & API
Пошаговое руководство по созданию Python-скрипта для отслеживания ликвидаций на Binance Futures в реальном времени через WebSocket протокол.
Суть: Скрипт подключается к публичному WebSocket-фиду Binance Futures wss://fstream.binance.com/ws/!forceOrder@arr и в реальном времени стримит все принудительно закрытые позиции (ликвидации) по всем торговым парам. Это позволяет оценивать рыночную панику и находить точки разворота тренда.

Исходный код

В высокочастотной и количественной торговле (HFT) отслеживание ликвидаций — один из сильнейших индикаторов рыночного сентимента. Массовые принудительные закрытия позиций создают каскады ликвидности, которые часто приводят к локальным экстремумам. Для анализа исторических паттернов полезно изучить руководство Как извлечь исторические данные стакана L2 с Tardis.dev в Python pandas, а для работы в реальном времени мы настроим WebSocket-стрим.

Ниже представлен готовый асинхронный скрипт на Python, который подключается к API Binance Futures, получает поток ликвидаций, фильтрует их и выводит ключевую информацию в консоль.

import asyncio
import json
import websockets
from datetime import datetime

async def track_liquidations():
    # URL для получения ликвидаций по всем символам (USD-M Futures)
    url = 'wss://fstream.binance.com/ws/!forceOrder@arr'
    
    print('Подключение к Binance Liquidation Stream...')
    async with websockets.connect(url) as websocket:
        print('Успешно подключено. Ожидание ликвидаций...')
        while True:
            try:
                message = await websocket.recv()
                data = json.loads(message)
                
                # Извлекаем объект ордера
                order = data.get('o', {})
                
                symbol = order.get('s')          # Торговая пара
                side = order.get('S')            # Направление (BUY/SELL)
                price = float(order.get('p', 0)) # Цена ликвидации
                qty = float(order.get('q', 0))   # Объем в базовой валюте
                usd_volume = price * qty         # Объем в USD
                
                # Фильтруем только крупные ликвидации (например, от $10,000)
                if usd_volume >= 10000:
                    time_str = datetime.now().strftime('%H:%M:%S')
                    print(f'[{time_str}] 🚨 ЛИКВИДАЦИЯ | {symbol} | {side} | Цена: {price:.2f} | Объем: ${usd_volume:,.2f}')
                    
            except websockets.exceptions.ConnectionClosed:
                print('Соединение закрыто. Попытка переподключения через 5 секунд...')
                await asyncio.sleep(5)
                break
            except Exception as e:
                print(f'Ошибка: {e}')
                await asyncio.sleep(1)

if __name__ == '__main__':
    try:
        asyncio.run(track_liquidations())
    except KeyboardInterrupt:
        print('Мониторинг остановлен пользователем.')

Разбор параметров

Приходящее от WebSocket-сервера Binance сообщение содержит JSON-структуру с метаданными события. Наиболее важные параметры находятся внутри объекта o (order):

  • s (Symbol): Торговая пара, на которой произошла ликвидация (например, BTCUSDT).
  • S (Side): Направление ордера. Если значение SELL — ликвидирован лонг (рыночные продажи). Если BUY — ликвидирован шорт (рыночные покупки).
  • p (Price): Цена, по которой был исполнен принудительный ордер.
  • q (Quantity): Объем ликвидированной позиции в базовом активе (например, в BTC).
  • usd_volume: Вычисляемый параметр (произведение цены на объем), отражающий реальный масштаб ликвидации в долларовом эквиваленте.

Как запустить

Для запуска скрипта вам понадобится интерпретатор Python версии 3.8 или выше и библиотека websockets.

1. Установите необходимую зависимость в терминале:

pip install websockets

2. Сохраните код скрипта в файл liquidations.py и запустите его:

python liquidations.py

Для безопасной отладки торговых стратегий перед выходом в продакшн рекомендуется использовать тестовые среды. Подробнее об этом читайте в статье Работа с Testnet API криптобирж в Python CCXT: Настройка.

Также ликвидационные каскады тесно связаны с изменением ставок финансирования. Чтобы получить полную картину рынка, вы можете совместить отслеживание ликвидаций с решением из статьи Асинхронный сбор Funding Rate с Binance, Bybit и OKX на Python.

Оцените статью
FinFluct