Rujukan API WebSocket
Penstriman data masa nyata untuk posisi paus, kadar pembiayaan, pencairan, dan skor pengesahan AI. Kependaman sub-saat dengan penyambungan semula automatik, pemampatan data cekap, dan langganan pelbagai aliran.
Gambaran Keseluruhan
API WebSocket menyediakan komunikasi dua hala berkelajuan tinggi untuk data derivatif kripto masa nyata. Berbanding dengan pengundian titik akhir REST setiap 5-30 saat, sambungan WebSocket menghantar kemas kini serta-merta apabila keadaan pasaran berubah. Sesuai untuk bot dagangan, sistem amaran, dan papan pemuka masa nyata.
Kelebihan utama WebSocket berbanding REST:
Kependaman sub-saat untuk peristiwa yang menggerakkan pasaran (pencairan, pergerakan paus)
Penggunaan lebar jalur cekap dengan kemas kini berenkod delta
Pelbagai langganan serentak pada sambungan tunggal
Penapisan dan pengagregatan di sebelah pelayan
Pengendalian denyutan jantung dan penyambungan semula automatik
Kiraan permintaan API yang lebih rendah terhadap kuota anda
Sambungan WebSocket tersedia untuk semua peringkat API. Pengguna peringkat percuma boleh melanggan aliran kadar-pembiayaan dan pencairan. Peringkat Trader dan Pro membuka kunci posisi paus, faedah terbuka, dan skor pengesahan.
Pengesahan
Sambungan WebSocket menggunakan pengesahan yang sama seperti titik akhir REST. Hantar kunci API anda sebagai parameter pertanyaan atau dalam mesej pertama selepas menyambung.
URL Sambungan
URL WebSocket Asas: wss://ws.smartmoneyapi.com/stream
Sertakan kunci API anda dalam URL sambungan:
wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789
Kitaran Hidup Sambungan
Sambungan Awal
Apabila anda menyambung ke titik akhir WebSocket, pelayan mengesahkan token pengesahan anda dan menghantar pengakuan sambungan.
{
"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
}
Denyutan Jantung (Ping/Pong)
Pelayan menghantar ping denyutan jantung berkala setiap 30 saat. Klien anda mesti membalas dengan mesej pong untuk mengekalkan sambungan. Jika pelayan tidak menerima respons pong dalam masa 10 saat, sambungan akan ditutup.
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") {
// Balas ping dengan pong
ws.send(JSON.stringify({
type: "pong",
id: msg.id
}));
}
};
ws.onopen = () => {
console.log("Disambungkan ke WebSocket");
};
Langganan
Selepas menyambung, langgan aliran data menggunakan mesej langganan. Setiap langganan menjana kemas kini apabila data pasaran berubah.
Format Mesej Langganan
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"],
"params": {
"min_position_size": 10,
"exchanges": ["bybit", "binance"]
}
}
Format Mesej Nyahlanggan
{
"type": "unsubscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT"]
}
Aliran Posisi Paus
Kemas kini masa nyata untuk posisi paus besar pada semua simbol dan pertukaran yang dijejaki. Kemas kini dihantar apabila paus membuka, menutup, atau mengubah posisi. Termasuk harga kemasukan, harga semasa, P&L, leverage, dan risiko pencairan.
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Mesej Kemas Kini
{
"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"
}
}
Aliran Kadar Pembiayaan
Kemas kini kadar pembiayaan masa nyata merentasi Bybit, Binance, dan Hyperliquid. Kemas kini setiap 1 minit atau apabila kadar berubah dengan ketara. Termasuk kadar pertukaran individu dan metrik agregat.
{
"type": "subscribe",
"channel": "funding_rates",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Mesej Kemas Kini
{
"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
}
}
}
Aliran Pencairan
Suapan pencairan masa nyata menunjukkan penutupan paksa posisi berleveraj. Termasuk saiz posisi, harga pencairan, arah (long/short), dan pertukaran. Berguna untuk mengenal pasti lata pencairan dan pergerakan pasaran berimpak tinggi.
{
"type": "subscribe",
"channel": "liquidations",
"params": {
"min_size_usd": 50000
}
}
Mesej Kemas Kini
{
"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"
}
}
Aliran Faedah Terbuka
Faedah terbuka agregat untuk semua peniaga leverage pada setiap simbol. Jejaki peningkatan OI (lebih banyak wang memasuki leverage) dan penurunan (penutupan posisi). Percanggahan OI dari pergerakan harga mengenal pasti keletihan bullish/bearish tersembunyi.
{
"type": "subscribe",
"channel": "open_interest",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Aliran Skor Pengesahan
Skor pengesahan AI masa nyata yang menggabungkan posisi paus, isyarat on-chain, kadar pembiayaan, dan data sentimen. Skor dikemas kini apabila isyarat asas berubah, menyediakan isyarat masuk/keluar langsung untuk algoritma dagangan.
{
"type": "subscribe",
"channel": "confirmation_scores",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Logik Penyambungan Semula Automatik
Isu rangkaian atau penyelenggaraan pelayan boleh menyebabkan pemutusan sambungan. Laksanakan logik penyambungan semula backoff eksponen untuk pulih secara automatik daripada kegagalan sambil menghormati beban pelayan.
Strategi Penyambungan Semula Disyorkan
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("Disambungkan");
this.reconnectDelay = 1000; // Set semula backoff
this.resubscribe(); // Langgan semula selepas penyambungan semula
};
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("Ralat WebSocket:", err);
}
reconnect() {
console.log(`Menyambung semula dalam ${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(`Kemas kini: ${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 });
Contoh Kod
Klien 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:
# Tunggu pengakuan sambungan
ack = await websocket.recv()
print(f"Disambungkan: {ack}")
# Langgan posisi paus
await websocket.send(json.dumps({
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"]
}))
# Dengar kemas kini
while True:
try:
msg = await websocket.recv()
data = json.loads(msg)
if data["type"] == "ping":
# Balas ping
await websocket.send(json.dumps({
"type": "pong",
"id": data["id"]
}))
elif data["type"] == "data":
print(f"Posisi baru: {data['data']}")
except websockets.exceptions.ConnectionClosed:
print("Sambungan ditutup, menyambung semula...")
await asyncio.sleep(1)
asyncio.run(stream_whale_positions())
Tapis semasa langgan: Gunakan objek params untuk menapis data di sebelah pelayan (min_position_size, min_size_usd) dan bukannya menapis dalam aplikasi anda.
Langganan kelompok: Langgan pelbagai simbol dalam satu mesej dan bukannya satu langganan per simbol.
Nyahlanggan yang tidak digunakan: Apabila anda tidak memerlukan aliran lagi, nyahlanggan untuk menjimatkan lebar jalur dan mengurangkan jumlah mesej.
Gunakan pemampatan gzip: Dayakan pemampatan mesej dalam klien WebSocket anda untuk penjimatan lebar jalur (penurunan 20-40%).
Pantau kesihatan sambungan: Jejak kependaman ping/pong dan penyambungan semula automatik untuk mendiagnosis isu rangkaian.
Penampan mesej semasa pemutusan: Apabila sambungan terputus, bariskan isyarat strategi dan laksanakannya apabila disambung semula.
Mulakan Penstriman Sekarang
Dapatkan kunci API anda dan mula membina sistem perdagangan masa nyata. Penstriman WebSocket tersedia untuk semua peringkat.
Dapatkan Kunci API
Bina Sistem Perdagangan Masa Nyata
Alirkan posisi ikan paus, kadar pembiayaan, dan skor pengesahan AI dengan latensi sub-saat.
Lihat Pelan