Referință API WebSocket
Streaming de date în timp real pentru poziții whale, rate de finanțare, lichidări și scoruri de confirmare AI. Latență sub secundă cu reconectare automată, compresie eficientă a datelor și abonamente multi-flux.
Prezentare generală
API-ul WebSocket oferă comunicare bidirecțională cu latență redusă pentru datele în timp real ale derivatelor cripto. În loc să interoghezi endpoint-urile REST la fiecare 5-30 de secunde, conexiunile WebSocket livrează actualizări instantaneu când condițiile pieței se schimbă. Perfect pentru roboții de tranzacționare, sisteme de alertă și panouri în timp real.
Avantaje cheie ale WebSocket față de REST:
Latență sub secundă pentru evenimente care mișcă piața (lichidări, mișcări whale)
Utilizare eficientă a benzii de frecvență cu actualizări codificate delta
Abonamente multiple simultane pe o singură conexiune
Filtrare și agregare pe partea serverului
Gestionare automată a bătăilor inimii și reconectării
Număr mai mic de cereri API în cadrul cotei tale
Conexiunile WebSocket sunt disponibile pentru toate nivelurile API. Utilizatorii de nivel gratuit se pot abona la fluxurile de rate de finanțare și lichidări. Nivelurile Trader și Pro deblochează poziții whale, interes deschis și scoruri de confirmare.
Autentificare
Conexiunile WebSocket folosesc aceeași autentificare ca și endpoint-urile REST. Trimite cheia ta API ca parametru de interogare sau trimite-o în primul mesaj după conectare.
URL de Conexiune
URL WebSocket de bază: wss://ws.smartmoneyapi.com/stream
Include cheia ta API în URL-ul de conexiune:
wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789
Ciclul de Viață al Conexiunii
Conexiunea Inițială
Când te conectezi la endpoint-ul WebSocket, serverul validează token-ul de autentificare și trimite o confirmare de conexiune.
{
"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
}
Bătăi de Inimă (Ping/Pong)
Serverul trimite ping-uri periodice la fiecare 30 de secunde. Clientul tău trebuie să răspundă cu un mesaj pong pentru a menține conexiunea activă. Dacă serverul nu primește un răspuns pong în 10 secunde, conexiunea va fi închisă.
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") {
// Răspunde la ping cu pong
ws.send(JSON.stringify({
type: "pong",
id: msg.id
}));
}
};
ws.onopen = () => {
console.log("Conectat la WebSocket");
};
Abonamente
După conectare, abonează-te la fluxuri de date folosind mesaje de abonare. Fiecare abonament generează actualizări ori de câte ori datele pieței se schimbă.
Formatul Mesajului de Abonare
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"],
"params": {
"min_position_size": 10,
"exchanges": ["bybit", "binance"]
}
}
Formatul Mesajului de Dezabonare
{
"type": "unsubscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT"]
}
Fluxul Pozițiilor Whale
Actualizări în timp real pentru poziții mari whale pe toate simbolurile și schimburile urmărite. Actualizările sunt trimise când whale-uri deschid, închid sau modifică poziții. Include prețul de intrare, prețul curent, P&L, levier și riscul de lichidare.
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Mesaj de Actualizare
{
"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"
}
}
Fluxul Rate de Finanțare
Actualizări în timp real ale ratelor de finanțare pe Bybit, Binance și Hyperliquid. Actualizări la fiecare 1 minut sau când ratele se schimbă semnificativ. Include rate individuale pe schimb și metrici agregate.
{
"type": "subscribe",
"channel": "funding_rates",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Mesaj de Actualizare
{
"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
}
}
}
Fluxul Lichidărilor
Flux în timp real de lichidări care arată închideri forțate ale pozițiilor cu levier. Include dimensiunea poziției, prețul de lichidare, direcția (long/short) și schimbul. Util pentru identificarea cascadei de lichidări și mișcărilor de mare impact ale pieței.
{
"type": "subscribe",
"channel": "liquidations",
"params": {
"min_size_usd": 50000
}
}
Mesaj de Actualizare
{
"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"
}
}
Fluxul Interesului Deschis
Interes deschis agregat pentru toți traderii cu levier pe fiecare simbol. Urmărește creșterile OI (mai mulți bani intrând în levier) și scăderile (închideri de poziții). Divergența OI față de mișcarea prețului identifică epuizarea ascunsă bullish/bearish.
{
"type": "subscribe",
"channel": "open_interest",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Fluxul Scorurilor de Confirmare
Scoruri de confirmare AI în timp real care combină poziții whale, semnale on-chain, rate de finanțare și date de sentiment. Scorurile se actualizează ori de câte ori semnalele de bază se schimbă, oferind semnale live de intrare/ieșire pentru algoritmii de tranzacționare.
{
"type": "subscribe",
"channel": "confirmation_scores",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Logică de Reconectare Automată
Problemele de rețea sau întreținerea serverului pot cauza deconectări. Implementează o logică de reconectare cu backoff exponențial pentru a recupera automat din eșecuri, respectând încărcarea serverului.
Strategie Recomandată de Reconectare
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("Conectat");
this.reconnectDelay = 1000; // Reset backoff
this.resubscribe(); // Re-abonare după reconectare
};
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("Eroare WebSocket:", err);
}
reconnect() {
console.log(`Reconectare în ${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(`Actualizare: ${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 });
Exemple de Cod
Client WebSocket Python
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:
# Așteaptă confirmarea conexiunii
ack = await websocket.recv()
print(f"Conectat: {ack}")
# Abonare la poziții whale
await websocket.send(json.dumps({
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"]
}))
# Ascultă actualizări
while True:
try:
msg = await websocket.recv()
data = json.loads(msg)
if data["type"] == "ping":
# Răspunde la ping
await websocket.send(json.dumps({
"type": "pong",
"id": data["id"]
}))
elif data["type"] == "data":
print(f"Poziție nouă: {data['data']}")
except websockets.exceptions.ConnectionClosed:
print("Conexiune închisă, reconectare...")
await asyncio.sleep(1)
asyncio.run(stream_whale_positions())
Filtrează la abonare: Folosește obiectul params pentru a filtra datele pe partea serverului (min_position_size, min_size_usd) în loc să filtrezi în aplicația ta.
Abonamente în lot: Abonează-te la mai multe simboluri într-un singur mesaj în loc de un abonament per simbol.
Dezabonează-neutilizate: Când nu mai ai nevoie de un flux, dezabonează-te pentru a economisi lățime de bandă și a reduce volumul de mesaje.
Folosește compresia gzip: Activează compresia mesajelor în clientul tău WebSocket pentru economii de lățime de bandă (reducere de 20-40%).
Monitorizează sănătatea conexiunii: Urmărește latența ping/pong și reconectările automate pentru a diagnostica problemele de rețea.
Bufferizează mesajele în timpul deconectării: Când conexiunea cade, pune în coadă semnalele strategiei și execută-le când te reconectezi.
Începe Streaming-ul Acum
Obține cheia ta API și începe să construiești sisteme de tranzacționare în timp real. Streamingul WebSocket este disponibil la toate nivelurile.
Obține cheia API
Construiește Sisteme de Tranzacționare în Timp Real
Transmite poziții de balenă, rate de finanțare și scoruri de confirmare AI cu latență sub-secundară.
Vezi Planurile