مرجع 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 ثانية. يجب على العميل الرد برسالة 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("تم الاتصال بـ 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. يتم التحديث كل دقيقة أو عند تغير الأسعار بشكل كبير. يتضمن أسعار المنصات الفردية والمقاييس المجمعة.
{
"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
}
}
}
بث التصفية
تغذية التصفية في الوقت الفعلي تظهر الإغلاقات القسرية للمراكز ذات الرافعة المالية. يتضمن حجم المركز، سعر التصفية، الاتجاه (شراء/بيع)، والمنصة. مفيد لتحديد موجات التصفية والتحركات المؤثرة في السوق.
{
"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("تم الاتصال");
this.reconnectDelay = 1000; // إعادة تعيين التراجع
this.resubscribe(); // إعادة الاشتراك بعد إعادة الاتصال
};
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(`إعادة الاتصال في ${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(`تحديث: ${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:
# انتظار تأكيد الاتصال
ack = await websocket.recv()
print(f"تم الاتصال: {ack}")
# الاشتراك في مراكز الحيتان
await websocket.send(json.dumps({
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"]
}))
# الاستماع للتحديثات
while True:
try:
msg = await websocket.recv()
data = json.loads(msg)
if data["type"] == "ping":
# الرد على ping
await websocket.send(json.dumps({
"type": "pong",
"id": data["id"]
}))
elif data["type"] == "data":
print(f"مركز جديد: {data['data']}")
except websockets.exceptions.ConnectionClosed:
print("تم إغلاق الاتصال، إعادة الاتصال...")
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
بناء أنظمة التداول في الوقت الحقيقي
بث مراكز الحيتان، ومعدلات التمويل، ودرجات تأكيد الذكاء الاصطناعي مع زمن انتقال أقل من ثانية.
عرض الخطط