مرجع WebSocket API
استریم دادههای بلادرنگ برای پوزیشنهای نهنگها، نرخهای تأمین مالی، لیکوئید شدنها و امتیازات تأیید هوش مصنوعی. تأخیر زیر ثانیه با اتصال مجدد خودکار، فشردهسازی کارآمد داده و اشتراکهای چند استریمی.
مرور کلی
WebSocket API ارتباط دوطرفه با تأخیر کم برای دادههای بلادرنگ مشتقات ارز دیجیتال فراهم میکند. به جای پرسوجوی REST هر 5-30 ثانیه، اتصالات WebSocket بهمحض تغییر شرایط بازار، بهروزرسانیها را ارائه میدهند. ایدهآل برای رباتهای معاملاتی، سیستمهای هشدار و داشبوردهای بلادرنگ.
مزایای کلیدی WebSocket نسبت به REST:
تأخیر زیر ثانیه برای رویدادهای تأثیرگذار بازار (لیکوئید شدنها، حرکات نهنگها)
استفاده کارآمد از پهنای باند با بهروزرسانیهای کدگذاری دلتا
اشتراکهای همزمان چندگانه روی یک اتصال
فیلتر و تجمیع سمت سرور
مدیریت خودکار ضربان قلب و اتصال مجدد
تعداد درخواست API کمتر در سهمیه شما
اتصالات WebSocket برای تمام سطوح API در دسترس هستند. کاربران رایگان میتوانند به استریمهای نرخهای تأمین مالی و لیکوئید شدنها مشترک شوند. سطوح Trader و Pro پوزیشنهای نهنگها، سود باز و امتیازات تأیید را باز میکنند.
احراز هویت
اتصالات WebSocket از همان احراز هویت نقاط انتهایی REST استفاده میکنند. کلید API خود را به عنوان پارامتر کوئری ارسال کنید یا آن را در اولین پیام پس از اتصال بفرستید.
URL اتصال
URL پایه WebSocket: 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)
سرور هر 30 ثانیه یکبار پینگ ضربان قلب ارسال میکند. کلاینت شما باید با یک پیام پونگ پاسخ دهد تا اتصال زنده بماند. اگر سرور در عرض 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") {
// پاسخ به پینگ با پونگ
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"]
}
استریم پوزیشنهای نهنگها
بهروزرسانیهای بلادرنگ برای پوزیشنهای بزرگ نهنگها در تمام نمادها و صرافیهای ردیابی شده. بهروزرسانیها زمانی ارسال میشوند که نهنگها پوزیشنها را باز، بسته یا تغییر میدهند. شامل قیمت ورود، قیمت فعلی، سود/زیان، اهرم و ریسک لیکوئید شدن است.
{
"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 دقیقه یا زمانی که نرخها بهطور قابل توجهی تغییر میکنند، بهروزرسانی میشود. شامل نرخهای صرافیهای فردی و معیارهای تجمیع شده است.
{
"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) و صرافی است. برای شناسایی آبشارهای لیکوئید شدن و حرکات بازار با تأثیر بالا مفید است.
{
"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"
}
}
استریم سود باز
سود باز تجمیع شده برای تمام معاملهگران اهرمی در هر نماد. افزایش سود باز (ورود پول بیشتر به اهرم) و کاهش (بسته شدن پوزیشنها) را ردیابی کنید. واگرایی سود باز از حرکت قیمت، خستگی پنهان صعودی/نزولی را شناسایی میکند.
{
"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("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 پایتون
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
ساخت سیستمهای معاملاتی بلادرنگ
پوزیشنهای نهنگها، نرخهای تأمین مالی و امتیازهای تأیید هوش مصنوعی را با تأخیر کمتر از ثانیه استریم کنید.
مشاهده طرحها