Справочник по WebSocket API
Потоковая передача данных в реальном времени о позициях китов, ставках финансирования, ликвидациях и AI-подтверждениях. Задержка менее секунды с автоматическим переподключением, эффективным сжатием данных и поддержкой множественных подписок.
Обзор
WebSocket API обеспечивает двустороннюю связь с минимальной задержкой для данных о криптовалютных деривативах в реальном времени. В отличие от опроса REST-эндпоинтов каждые 5-30 секунд, WebSocket-подключения мгновенно доставляют обновления при изменении рыночных условий. Идеально подходит для торговых ботов, систем оповещения и дашбордов реального времени.
Ключевые преимущества WebSocket перед REST:
Задержка менее секунды для рыночных событий (ликвидации, движения китов)
Эффективное использование пропускной способности с дельта-кодированием обновлений
Множественные одновременные подписки в одном подключении
Фильтрация и агрегация на стороне сервера
Автоматические пинги и обработка переподключений
Меньшее количество запросов к API в рамках вашего лимита
WebSocket-подключения доступны для всех тарифных планов API. Пользователи бесплатного тарифа могут подписываться на потоки ставок финансирования и ликвидаций. Тарифы Trader и Pro открывают доступ к позициям китов, открытому интересу и очкам подтверждения.
Аутентификация
WebSocket-подключения используют ту же аутентификацию, что и REST-эндпоинты. Передайте ваш API-ключ как параметр запроса или отправьте его в первом сообщении после подключения.
URL подключения
Базовый WebSocket URL: wss://ws.smartmoneyapi.com/stream
Включите ваш API-ключ в URL подключения:
wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789
Жизненный цикл подключения
Первоначальное подключение
При подключении к WebSocket-эндпоинту сервер проверяет ваш токен аутентификации и отправляет подтверждение подключения.
{
"type": "connection_ack",
"connection_id": "conn_1a2b3c4d5e6f7g8h",
"server_version": "1.2.4",
"timestamp": "2026-03-21T14:35:22Z",
"api_tier": "pro",
"max_subscriptions": 50,
"max_symbols_per_sub": 100
}
Пинг/Понг (Heartbeat)
Сервер отправляет периодические пинги каждые 30 секунд. Ваш клиент должен отвечать сообщением понг, чтобы поддерживать подключение активным. Если сервер не получает ответ понг в течение 10 секунд, подключение будет закрыто.
const ws = new WebSocket("wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789");
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "ping") {
// Ответ на пинг сообщением понг
ws.send(JSON.stringify({
type: "pong",
id: msg.id
}));
}
};
ws.onopen = () => {
console.log("Connected to WebSocket");
};
Подписки
После подключения подписывайтесь на потоки данных с помощью сообщений подписки. Каждая подписка генерирует обновления при изменении рыночных данных.
Формат сообщения подписки
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"],
"params": {
"min_position_size": 10,
"exchanges": ["bybit", "binance"]
}
}
Формат сообщения отписки
{
"type": "unsubscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT"]
}
Поток позиций китов
Обновления в реальном времени о крупных позициях китов по всем отслеживаемым символам и биржам. Обновления отправляются при открытии, закрытии или изменении позиций китов. Включает цену входа, текущую цену, P&L, кредитное плечо и риск ликвидации.
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Сообщение обновления
{
"type": "data",
"channel": "whale_positions",
"symbol": "BTCUSDT",
"data": {
"wallet_address": "0x1234...",
"exchange": "bybit",
"direction": "long",
"position_size": 25.3,
"entry_price": 41200.0,
"current_price": 43200.5,
"pnl": 50701.50,
"pnl_percent": 4.86,
"leverage": 8,
"liquidation_price": 33760.0,
"timestamp": "2026-03-21T14:35:45Z"
}
}
Поток ставок финансирования
Обновления ставок финансирования в реальном времени для Bybit, Binance и Hyperliquid. Обновления каждую минуту или при значительном изменении ставок. Включает индивидуальные ставки бирж и агрегированные метрики.
{
"type": "subscribe",
"channel": "funding_rates",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Сообщение обновления
{
"type": "data",
"channel": "funding_rates",
"symbol": "BTCUSDT",
"data": {
"timestamp": "2026-03-21T14:00:00Z",
"bybit": {
"rate": 0.000120,
"next_rate": 0.000145
},
"binance": {
"rate": 0.000098,
"next_rate": 0.000115
},
"hyperliquid": {
"rate": 0.000140,
"next_rate": 0.000160
},
"aggregated": {
"mean": 0.000119,
"median": 0.000120,
"spread": 0.000062
}
}
}
Поток ликвидаций
Лента ликвидаций в реальном времени, показывающая принудительное закрытие позиций с плечом. Включает размер позиции, цену ликвидации, направление (лонг/шорт) и биржу. Полезно для выявления каскадов ликвидаций и значительных рыночных движений.
{
"type": "subscribe",
"channel": "liquidations",
"params": {
"min_size_usd": 50000
}
}
Сообщение обновления
{
"type": "data",
"channel": "liquidations",
"data": {
"exchange": "binance",
"symbol": "BTCUSDT",
"direction": "long",
"position_size": 12.5,
"liquidation_price": 41000.0,
"size_usd": 512500.0,
"timestamp": "2026-03-21T14:35:12Z"
}
}
Поток открытого интереса
Совокупный открытый интерес для всех трейдеров с плечом по каждому символу. Отслеживайте увеличение OI (больше денег входит в позиции с плечом) и уменьшение (закрытие позиций). Расхождение OI с движением цены выявляет скрытую бычью/медвежью истощенность.
{
"type": "subscribe",
"channel": "open_interest",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Поток очков подтверждения
AI-очки подтверждения в реальном времени, объединяющие позиции китов, ончейн-сигналы, ставки финансирования и данные сентимента. Очки обновляются при изменении базовых сигналов, предоставляя сигналы входа/выхода для торговых алгоритмов.
{
"type": "subscribe",
"channel": "confirmation_scores",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Логика автоматического переподключения
Проблемы с сетью или обслуживание сервера могут вызвать разрывы подключения. Реализуйте логику экспоненциальной задержки переподключения для автоматического восстановления после сбоев с учетом нагрузки на сервер.
Рекомендуемая стратегия переподключения
class SmartMoneyWebSocket {
constructor(token, options = {}) {
this.token = token;
this.maxReconnectDelay = options.maxReconnectDelay || 30000;
this.reconnectDelay = 1000;
this.subscriptions = new Map();
this.connect();
}
connect() {
this.ws = new WebSocket(
`wss://ws.smartmoneyapi.com/stream?token=${this.token}`
);
this.ws.onopen = () => {
console.log("Connected");
this.reconnectDelay = 1000; // Сброс задержки
this.resubscribe(); // Повторная подписка после переподключения
};
this.ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "ping") {
this.ws.send(JSON.stringify({ type: "pong", id: msg.id }));
}
this.onMessage(msg);
};
this.ws.onclose = () => this.reconnect();
this.ws.onerror = (err) => console.error("WebSocket error:", err);
}
reconnect() {
console.log(`Reconnecting in ${this.reconnectDelay}ms`);
setTimeout(() => {
this.connect();
this.reconnectDelay = Math.min(
this.reconnectDelay * 1.5,
this.maxReconnectDelay
);
}, this.reconnectDelay);
}
subscribe(channel, symbols, params) {
const key = `${channel}:${symbols.join(",")}`;
this.subscriptions.set(key, { channel, symbols, params });
this.ws.send(JSON.stringify({ type: "subscribe", channel, symbols, params }));
}
resubscribe() {
for (const { channel, symbols, params } of this.subscriptions.values()) {
this.ws.send(JSON.stringify({ type: "subscribe", channel, symbols, params }));
}
}
onMessage(msg) {
if (msg.type === "data") {
console.log(`Update: ${msg.channel}/${msg.symbol}`, msg.data);
}
}
}
const client = new SmartMoneyWebSocket("sk_live_abc123xyz789");
client.subscribe("whale_positions", ["BTCUSDT", "ETHUSDT"]);
client.subscribe("funding_rates", ["BTCUSDT"]);
client.subscribe("liquidations", [], { min_size_usd: 100000 });
Примеры кода
Python WebSocket Client
import asyncio
import json
import websockets
async def stream_whale_positions():
uri = "wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789"
async with websockets.connect(uri) as websocket:
# Ожидание подтверждения подключения
ack = await websocket.recv()
print(f"Connected: {ack}")
# Подписка на позиции китов
await websocket.send(json.dumps({
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"]
}))
# Прослушивание обновлений
while True:
try:
msg = await websocket.recv()
data = json.loads(msg)
if data["type"] == "ping":
# Ответ на пинг
await websocket.send(json.dumps({
"type": "pong",
"id": data["id"]
}))
elif data["type"] == "data":
print(f"New position: {data['data']}")
except websockets.exceptions.ConnectionClosed:
print("Connection closed, reconnecting...")
await asyncio.sleep(1)
asyncio.run(stream_whale_positions())
Фильтрация при подписке: Используйте объект params для фильтрации данных на стороне сервера (min_position_size, min_size_usd) вместо фильтрации в вашем приложении.
Пакетные подписки: Подписывайтесь на несколько символов в одном сообщении вместо отдельных подписок для каждого символа.
Отписка от неиспользуемых: Когда поток больше не нужен, отписывайтесь для экономии пропускной способности и уменьшения объема сообщений.
Используйте сжатие gzip: Включите сжатие сообщений в вашем WebSocket-клиенте для экономии пропускной способности (сокращение на 20-40%).
Мониторинг состояния подключения: Отслеживайте задержки пинг/понг и автоматические переподключения для диагностики проблем с сетью.
Буферизация сообщений при разрыве: При разрыве подключения помещайте сигналы стратегии в очередь и выполняйте их после переподключения.
Начать потоковую передачу
Получите свой API-ключ и начните создавать системы для торговли в реальном времени. WebSocket-стриминг доступен на всех тарифах.
Получить API-ключ
Создавайте системы для торговли в реальном времени
Получайте данные о позициях китов, ставках финансирования и оценках подтверждения AI с задержкой менее секунды.
Посмотреть тарифы