เอกสารอ้างอิง WebSocket API
สตรีมข้อมูลแบบเรียลไทม์สำหรับตำแหน่งวาฬ อัตราเงินทุน การชำระบัญชี และคะแนนการยืนยัน AI ความหน่วงน้อยกว่าหนึ่งวินาที พร้อมการเชื่อมต่อใหม่อัตโนมัติ การบีบอัดข้อมูลที่มีประสิทธิภาพ และการสมัครสมาชิกหลายสตรีม
ภาพรวม
WebSocket API ให้การสื่อสารสองทางความหน่วงต่ำสำหรับข้อมูลอนุพันธ์คริปโตแบบเรียลไทม์ แทนที่จะโพล REST endpoints ทุก 5-30 วินาที การเชื่อมต่อ WebSocket จะส่งการอัปเดตทันทีเมื่อสภาพตลาดเปลี่ยนแปลง เหมาะสำหรับบอทเทรด ระบบแจ้งเตือน และแดชบอร์ดแบบเรียลไทม์
ข้อได้เปรียบหลักของ WebSocket เทียบกับ REST:
ความหน่วงน้อยกว่าหนึ่งวินาทีสำหรับเหตุการณ์ที่เคลื่อนตลาด (การชำระบัญชี การเคลื่อนไหวของวาฬ)
การใช้แบนด์วิดท์อย่างมีประสิทธิภาพด้วยการอัปเดตแบบเดลต้า
การสมัครสมาชิกหลายรายการพร้อมกันในการเชื่อมต่อเดียว
การกรองและการรวมข้อมูลฝั่งเซิร์ฟเวอร์
การจัดการการเต้นของหัวใจและการเชื่อมต่อใหม่อัตโนมัติ
จำนวนคำขอ API ที่น้อยลงต่อโควต้าของคุณ
การเชื่อมต่อ WebSocket มีให้สำหรับทุกระดับ API ผู้ใช้ระดับฟรีสามารถสมัครสมาชิกสตรีมอัตราเงินทุนและการชำระบัญชี ระดับ Trader และ Pro ปลดล็อกตำแหน่งวาฬ ดอกเบี้ยเปิด และคะแนนการยืนยัน
การยืนยันตัวตน
การเชื่อมต่อ WebSocket ใช้การยืนยันตัวตนแบบเดียวกับ REST endpoints ส่งคีย์ API ของคุณเป็นพารามิเตอร์ query หรือส่งในข้อความแรกหลังการเชื่อมต่อ
URL การเชื่อมต่อ
URL ฐาน WebSocket: wss://ws.smartmoneyapi.com/stream
รวมคีย์ API ของคุณใน URL การเชื่อมต่อ:
wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789
วงจรชีวิตการเชื่อมต่อ
การเชื่อมต่อเริ่มต้น
เมื่อคุณเชื่อมต่อกับ WebSocket endpoint เซิร์ฟเวอร์จะตรวจสอบโทเคนยืนยันตัวตนของคุณและส่งการยืนยันการเชื่อมต่อ
{
"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("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"]
}
สตรีมตำแหน่งวาฬ
การอัปเดตแบบเรียลไทม์สำหรับตำแหน่งวาฬขนาดใหญ่ในสัญลักษณ์และ exchange ที่ติดตามทั้งหมด ส่งการอัปเดตเมื่อวาฬเปิด ปิด หรือแก้ไขตำแหน่ง รวมถึงราคาเข้า ราคาปัจจุบัน 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 อัปเดตทุก 1 นาทีหรือเมื่ออัตราเปลี่ยนแปลงอย่างมีนัยสำคัญ รวมถึงอัตรา exchange แต่ละแห่งและเมตริกที่รวม
{
"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
}
}
}
สตรีมการชำระบัญชี
ฟีดการชำระบัญชีแบบเรียลไทม์แสดงการปิดตำแหน่งเลเวอเรจแบบบังคับ รวมขนาดตำแหน่ง ราคาชำระบัญชี ทิศทาง (long/short) และ exchange มีประโยชน์สำหรับการระบุการชำระบัญชีแบบต่อเนื่องและการเคลื่อนไหวตลาดที่มีผลกระทบสูง
{
"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 แบบเรียลไทม์ที่รวมตำแหน่งวาฬ สัญญาณ on-chain อัตราเงินทุน และข้อมูลความรู้สึก คะแนนอัปเดตเมื่อสัญญาณพื้นฐานเปลี่ยนแปลง ให้สัญญาณเข้า/ออกแบบสดสำหรับอัลกอริทึมการเทรด
{
"type": "subscribe",
"channel": "confirmation_scores",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
ตรรกะการเชื่อมต่อใหม่อัตโนมัติ
ปัญหาทางเครือข่ายหรือการบำรุงรักษาเซิร์ฟเวอร์อาจทำให้การเชื่อมต่อขาดหาย ใช้ตรรกะการเชื่อมต่อใหม่แบบ exponential backoff เพื่อกู้คืนจากความล้มเหลวโดยอัตโนมัติในขณะที่เคารพโหลดเซิร์ฟเวอร์
กลยุทธ์การเชื่อมต่อใหม่ที่แนะนำ
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; // Reset backoff
this.resubscribe(); // Re-subscribe after reconnect
};
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 });
ตัวอย่างโค้ด
ไคลเอนต์ 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:
# Wait for connection ack
ack = await websocket.recv()
print(f"Connected: {ack}")
# Subscribe to whale positions
await websocket.send(json.dumps({
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"]
}))
# Listen for updates
while True:
try:
msg = await websocket.recv()
data = json.loads(msg)
if data["type"] == "ping":
# Respond to 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%)
ตรวจสอบสุขภาพการเชื่อมต่อ: ติดตามความหน่วง ping/pong และการเชื่อมต่อใหม่อัตโนมัติเพื่อวินิจฉัยปัญหาทางเครือข่าย
บัฟเฟอร์ข้อความระหว่างการเชื่อมต่อขาด: เมื่อการเชื่อมต่อขาดหาย ให้คิวสัญญาณกลยุทธ์และดำเนินการเมื่อเชื่อมต่อใหม่
เริ่มสตรีมเดี๋ยวนี้
รับคีย์ API ของคุณและเริ่มสร้างระบบเทรดแบบเรียลไทม์ ทุกแผนสามารถใช้ WebSocket สตรีมมิ่งได้
รับคีย์ API
สร้างระบบเทรดแบบเรียลไทม์
สตรีมตำแหน่งวาฬ อัตราเงินกู้ (funding rates) และคะแนนยืนยันจาก AI ด้วยความหน่วงเวลาน้อยกว่าหนึ่งวินาที
ดูแผนต่างๆ