Довідник WebSocket API
Потокова передача даних у реальному часі про позиції китів, фандингові ставки, ліквідації та бали підтвердження ШІ. Затримка менше секунди з автоматичним перепідключенням, ефективним стисненням даних та підписками на кілька потоків.
Огляд
WebSocket API забезпечує двосторонній зв’язок із низькою затримкою для даних про криптовалютні деривативи в реальному часі. Замість опитування REST-ендпоінтів кожні 5-30 секунд, WebSocket-з’єднання миттєво надсилають оновлення при зміні ринкових умов. Ідеально підходить для торгових ботів, систем сповіщень та дашбордів у реальному часі.
Ключові переваги WebSocket порівняно з REST:
Затримка менше секунди для подій, що впливають на ринок (ліквідації, дії китів)
Ефективне використання пропускної здатності завдяки дельта-кодуванню оновлень
Кілька одночасних підписок у межах одного з’єднання
Фільтрація та агрегація даних на стороні сервера
Автоматичне керування ping/pong та перепідключенням
Менша кількість запитів до API в межах вашої квоти
WebSocket-з’єднання доступні для всіх рівнів API. Користувачі безкоштовного тарифу можуть підписатися на потоки фандингових ставок і ліквідацій. Торгові та 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
}
Пульс (Ping/Pong)
Сервер надсилає періодичні ping-запити кожні 30 секунд. Ваш клієнт повинен відповідати повідомленням pong, щоб підтримувати з’єднання. Якщо сервер не отримає відповідь pong протягом 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") {
// Відповісти на ping повідомленням pong
ws.send(JSON.stringify({
type: "pong",
id: msg.id
}));
}
};
ws.onopen = () => {
console.log("Підключено до 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"]
}
Потік балів підтвердження
Бали підтвердження ШІ у реальному часі, що поєднують позиції китів, ончейн-сигнали, фандингові ставки та дані сентименту. Оновлюються при зміні базових сигналів, надаючи сигнали входу/виходу для торгових алгоритмів.
{
"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("Підключено");
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:", err);
}
reconnect() {
console.log(`Перепідключення через ${this.reconnectDelay}мс`);
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(`Оновлення: ${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-клієнт
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"Підключено: {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":
# Відповідь на ping
await websocket.send(json.dumps({
"type": "pong",
"id": data["id"]
}))
elif data["type"] == "data":
print(f"Нова позиція: {data['data']}")
except websockets.exceptions.ConnectionClosed:
print("З’єднання розірвано, перепідключення...")
await asyncio.sleep(1)
asyncio.run(stream_whale_positions())
Фільтруйте при підписці: Використовуйте об’єкт params для фільтрації даних на стороні сервера (min_position_size, min_size_usd) замість фільтрації у вашому додатку.
Групові підписки: Підписуйтеся на кілька символів у одному повідомленні замість окремих підписок для кожного символу.
Скасовуйте непотрібні підписки: Коли потік більше не потрібен, скасуйте підписку, щоб зберегти пропускну здатність та зменшити обсяг повідомлень.
Використовуйте стиснення gzip: Увімкніть стиснення повідомлень у вашому WebSocket-клієнті для економії пропускної здатності (зменшення на 20-40%).
Моніторінг стану з’єднання: Відстежуйте затримки ping/pong та автоматичні перепідключення для діагностики мережевих проблем.
Буферизація повідомлень під час розриву з’єднання: Під час розриву з’єднання ставте сигнали стратегії в чергу та виконуйте їх після перепідключення.
Почніть трансляцію зараз
Отримайте свій API-ключ і почніть створювати системи торгівлі в реальному часі. Потокова передача даних через WebSocket доступна на всіх рівнях.
Отримати API-ключ
Створюйте системи торгівлі в реальному часі
Отримуйте дані про позиції китів, ставки фандингу та оцінки підтвердження ШІ з затримкою менше секунди.
Переглянути тарифи