WebSocket API-referens
Realtidsdataströmning för valpositioner, finansieringsräntor, likvidationer och AI-bekräftelsepoäng. Subsekundfördröjning med automatisk återanslutning, effektiv datakomprimering och flerströmsprenumerationer.
Översikt
WebSocket API:et ger låglatens, tvåvägskommunikation för realtidsdata om kryptoderivat. Istället för att polla REST-slutpunkter var 5-30:e sekund levererar WebSocket-anslutningar uppdateringar omedelbart när marknadsförhållandena ändras. Perfekt för handelsrobotar, varningssystem och realtidsinstrumentpaneler.
Nyckelfördelar med WebSocket över REST:
Subsekundfördröjning för marknadsrörande händelser (likvidationer, valrörelser)
Effektiv bandbreddsanvändning med delta-kodade uppdateringar
Flera samtidiga prenumerationer på en enda anslutning
Filtrering och aggregering på serversidan
Automatisk hjärtslagshantering och återanslutning
Lägre antal API-förfrågningar mot din kvot
WebSocket-anslutningar är tillgängliga för alla API-nivåer. Användare på fri nivå kan prenumerera på finansieringsräntor och likvidationsströmmar. Handlare och Pro-nivåer låser upp valpositioner, öppet intresse och bekräftelsepoäng.
Autentisering
WebSocket-anslutningar använder samma autentisering som REST-slutpunkter. Skicka din API-nyckel som en frågeparameter eller skicka den i det första meddelandet efter anslutning.
Anslutnings-URL
Bas-WebSocket-URL: wss://ws.smartmoneyapi.com/stream
Inkludera din API-nyckel i anslutnings-URL:en:
wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789
Anslutningslivscykel
Inledande anslutning
När du ansluter till WebSocket-slutpunkten validerar servern ditt autentiseringstoken och skickar en anslutningsbekräftelse.
{
"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
}
Hjärtslag (Ping/Pong)
Servern skickar periodiska hjärtslagspingar var 30:e sekund. Din klient måste svara med ett pong-meddelande för att hålla anslutningen vid liv. Om servern inte får ett pong-svar inom 10 sekunder kommer anslutningen att stängas.
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") {
// Svara på ping med pong
ws.send(JSON.stringify({
type: "pong",
id: msg.id
}));
}
};
ws.onopen = () => {
console.log("Connected to WebSocket");
};
Prenumerationer
Efter anslutning, prenumerera på dataströmmar med hjälp av prenumerationsmeddelanden. Varje prenumeration genererar uppdateringar när marknadsdata ändras.
Prenumerationsmeddelandeformat
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"],
"params": {
"min_position_size": 10,
"exchanges": ["bybit", "binance"]
}
}
Avprenumerationsmeddelandeformat
{
"type": "unsubscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT"]
}
Valpositionsström
Realtidsuppdateringar för stora valpositioner på alla spårade symboler och börser. Uppdateringar skickas när valar öppnar, stänger eller ändrar positioner. Inkluderar ingångspris, aktuellt pris, P&L, hävstång och likvidationsrisk.
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Uppdateringsmeddelande
{
"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"
}
}
Finansieringsränteström
Realtidsuppdateringar av finansieringsräntor över Bybit, Binance och Hyperliquid. Uppdateras varje minut eller när räntorna ändras signifikant. Inkluderar individuella börsräntor och aggregerade mått.
{
"type": "subscribe",
"channel": "funding_rates",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Uppdateringsmeddelande
{
"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
}
}
}
Likvidationsström
Realtidsflöde för tvångsstängningar av hävstångspositioner. Inkluderar positionsstorlek, likvidationspris, riktning (lång/kort) och börs. Användbart för att identifiera likvidationskaskader och högimpactmarknadsrörelser.
{
"type": "subscribe",
"channel": "liquidations",
"params": {
"min_size_usd": 50000
}
}
Uppdateringsmeddelande
{
"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"
}
}
Öppet intresse-ström
Aggregerat öppet intresse för alla hävstångshandlare på varje symbol. Spåra ökningar i OI (mer pengar som går in i hävstång) och minskningar (positioner som stängs). OI-divergens från prisrörelse identifierar dolda bullish/bearish utmattningar.
{
"type": "subscribe",
"channel": "open_interest",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Bekräftelsepoängström
Realtids AI-bekräftelsepoäng som kombinerar valpositioner, on-chain-signaler, finansieringsräntor och sentimentdata. Poäng uppdateras när underliggande signaler ändras, vilket ger live ingångs/utgångssignaler för handelsalgoritmer.
{
"type": "subscribe",
"channel": "confirmation_scores",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Automatisk återanslutningslogik
Nätverksproblem eller serverunderhåll kan orsaka frånkopplingar. Implementera exponentiell backoff-återanslutningslogik för att automatiskt återhämta sig från fel samtidigt som serverbelastningen respekteras.
Rekommenderad återanslutningsstrategi
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; // Återställ backoff
this.resubscribe(); // Prenumerera igen efter återanslutning
};
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 });
Kodexempel
Python WebSocket-klient
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:
# Vänta på anslutningsack
ack = await websocket.recv()
print(f"Connected: {ack}")
# Prenumerera på valpositioner
await websocket.send(json.dumps({
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"]
}))
# Lyssna efter uppdateringar
while True:
try:
msg = await websocket.recv()
data = json.loads(msg)
if data["type"] == "ping":
# Svara på 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())
Filtrera vid prenumeration: Använd params-objektet för att filtrera data på serversidan (min_position_size, min_size_usd) istället för att filtrera i din applikation.
Batchprenumerationer: Prenumerera på flera symboler i ett enda meddelande istället för en prenumeration per symbol.
Avprenumerera oanvända: När du inte längre behöver en ström, avprenumerera för att spara bandbredd och minska meddelandevolymen.
Använd gzip-komprimering: Aktivera meddelandekomprimering i din WebSocket-klient för bandbreddsbesparingar (20-40% reduktion).
Övervaka anslutningshälsa: Spåra ping/pong-latens och automatiska återanslutningar för att diagnostisera nätverksproblem.
Buffra meddelanden under frånkoppling: När anslutningen bryts, köa upp strategisignaler och utför dem när du återansluts.
Börja strömma nu
Skaffa din API-nyckel och börja bygga realtidshandelsystem. WebSocket-strömning finns tillgänglig på alla nivåer.
Skaffa API-nyckel
Bygg realtidshandelsystem
Strömma valjepositioner, finansieringsräntor och AI-bekräftelsepoäng med fördröjning under en sekund.
Visa planer