אוספי WebSocket וניתוח On-Chain: נתוני פירוקים מבורסות

שוק החוזים העתידיים הוא אזור סיכון גבוה: בשנים האחרונות, סך הפירוקים בבורסות המרכזיות עלה על 100 מיליארד דולר. כל פירוק הוא לא רק פוזיציה שאבדה אלא אות שוק. עלייה חדה בפירוקי לונג מצביעה על פאניקה וירידה אפשרית נוספת. מפל של ס

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1452
  • image_web-applications_feedme_466_0.webp
    פיתוח אפליקציית ווב עבור FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    פיתוח אתר עבור BELFINGROUP
    1005
  • image_ecommerce_furnoro_435_0.webp
    פיתוח חנות מקוונת לחברת FURNORO
    1270
  • image_logo-advance_0.webp
    עיצוב לוגו לחברת B2B Advance
    719
  • image_crm_enviok_479_0.webp
    פיתוח אפליקציית ווב עבור Enviok
    1012

שוק החוזים העתידיים הוא אזור סיכון גבוה: במהלך השנים האחרונות, סך החיסולים בבורסות המרכזיות עלה על 100 מיליארד דולר. כל חיסול הוא לא רק פוזיציה שאבדה, אלא גם אות שוק. עלייה חדה בחיסולי לונג מעידה על פאניקה ועל ירידה מתמשכת אפשרית. מפל של חיסולי שורט יכול לגרום ל-short squeeze. הבעיה היא שכל בורסה מספקת נתונים בצורה שונה: פורמטים שונים, עומק היסטורי שונה, זמני השהיה שונים. APIs עלולים להתדרדר תחת עומס, וזה קריטי למסחר אלגוריתמי. סוחרים נתקלים לעיתים קרובות במצב שבו חיסולים ב-Bybit מגיעים באיחור של 2–3 שניות, בעוד שב-Binance הם מיידיים. חוסר עקביות כזה שובר את חישוב דלתא החיסולים ומוביל לאותות שגויים. ללא זרם מנורמל, אתה מסתכן בקבלת החלטות על סמך נתונים רועשים. פתרנו את הבעיה הזו: פיתחנו קולקטורים שמתחברים ל-WebSocket ול-REST APIs של 5+ בורסות, מנ�רמלים את הזרם לממשק אחיד, וכותבים ל-TimescaleDB. התוצאה היא זרם נתוני חיסולים עקבי עבור האסטרטגיות שלך. יש לציין שאיתור בזמן של מפלי חיסולים יכול למנוע הפסדים השווים לתקציב מסחר של שנה.

לפי ויקיפדיה, חיסול הוא סגירה כפויה של פוזיציה כאשר המרווח אינו מספיק.

אילו בורסות מספקות חיסולים בזמן אמת?

מרכזיות:

Binance — נקודת קצה WebSocket wss://fstream.binance.com/ws/!forceOrder@arr מזרימה חיסולים עבור כל זוגות החוזים העתידיים. פורמט האירוע:

{ "e": "forceOrder", "E": 1704067200000, "o": { "s": "BTCUSDT", "S": "SELL", // SELL = long liquidation "o": "LIMIT", "f": "IOC", "q": "0.014", // quantity "p": "41850.00", // price "ap": "41800.00", // average price "X": "FILLED", "l": "0.014", "z": "0.014", "T": 1704067200000 } } 

נתונים היסטוריים — רק השעה האחרונה דרך REST ({ "e": "forceOrder", "E": 1704067200000, "o": { "s": "BTCUSDT", "S": "SELL", // SELL = long liquidation "o": "LIMIT", "f": "IOC", "q": "0.014", // quantity "p": "41850.00", // price "ap": "41800.00", // average price "X": "FILLED", "l": "0.014", "z": "0.014", "T": 1704067200000 } } ). היסטוריה מלאה דורשת כתיבה רציפה מאז ההשקה.

OKX — ערוץ WebSocket /fapi/v1/forceOrders, היסטוריית REST של 3 חודשים (liquidation-orders). Bybit — נושא /api/v5/public/liquidation-orders, נתונים דרך liquidation.{symbol}. Bitmex — המקור הוותיק ביותר (נתונים מאז ההשקה). Deribit — אופציות וחוזים עתידיים על BTC/ETH.

מבוזרות:

GMX v2 — אירוע /v5/market/recent-trade על Arbitrum, ניתוח דרך The Graph או הרשמה ישירה. dYdX v4 — Cosmos RPC. Hyperliquid — L1 משלהם עם היסטוריה מלאה. Aave v3 ו-Compound v3 — חיסולי הלוואות דרך PositionLiquidated / LiquidationCall. הם לא perps אבל משלימים את התמונה.

איך לנ�רמל נתונים מבורסות שונות?

מבנה אחיד הוא קריטי. אנו משתמשים בממשק:

interface LiquidationEvent { exchange: string; symbol: string; side: 'long' | 'short'; price: number; quantity: number; quantity_usd: number; timestamp: number; raw: Record<string, unknown>; } 

דוגמה למימוש קולקטור עבור Binance:

import WebSocket from 'ws'; class BinanceLiquidationCollector { private ws: WebSocket; private reconnectDelay = 1000; async connect(onEvent: (event: LiquidationEvent) => Promise<void>) { this.ws = new WebSocket('wss://fstream.binance.com/ws/!forceOrder@arr'); this.ws.on('message', async (data) => { const raw = JSON.parse(data.toString()); const event = this.normalize(raw); await onEvent(event); }); this.ws.on('close', () => { setTimeout(() => { this.reconnectDelay = Math.min(this.reconnectDelay * 2, 30000); this.connect(onEvent); }, this.reconnectDelay); }); this.ws.on('open', () => { this.reconnectDelay = 1000; }); } private normalize(raw: any): LiquidationEvent { return { exchange: 'binance', symbol: raw.o.s, side: raw.o.S === 'SELL' ? 'long' : 'short', price: parseFloat(raw.o.ap), quantity: parseFloat(raw.o.q), quantity_usd: parseFloat(raw.o.ap) * parseFloat(raw.o.q), timestamp: raw.E, raw, }; } } 

לכל בורסה יש מימוש משלה עם נרמול של צד, מחיר, כמות. שגיאות צד נפוצות: ב-Binance AbsorbCollateral פירושו חיסול לונג, אבל בבורסות אחרות זה עשוי להיות הפוך. אנו מוודאים את הלוגיקה על נתוני בדיקה.

השוואת APIs של בורסות

בורסה WebSocket היסטוריית REST מגבלות
Binance interface LiquidationEvent { exchange: string; symbol: string; side: 'long' | 'short'; price: number; quantity: number; quantity_usd: number; timestamp: number; raw: Record<string, unknown>; } השעה האחרונה אין היסטוריה עמוקה
OKX import WebSocket from 'ws'; class BinanceLiquidationCollector { private ws: WebSocket; private reconnectDelay = 1000; async connect(onEvent: (event: LiquidationEvent) => Promise<void>) { this.ws = new WebSocket('wss://fstream.binance.com/ws/!forceOrder@arr'); this.ws.on('message', async (data) => { const raw = JSON.parse(data.toString()); const event = this.normalize(raw); await onEvent(event); }); this.ws.on('close', () => { setTimeout(() => { this.reconnectDelay = Math.min(this.reconnectDelay * 2, 30000); this.connect(onEvent); }, this.reconnectDelay); }); this.ws.on('open', () => { this.reconnectDelay = 1000; }); } private normalize(raw: any): LiquidationEvent { return { exchange: 'binance', symbol: raw.o.s, side: raw.o.S === 'SELL' ? 'long' : 'short', price: parseFloat(raw.o.ap), quantity: parseFloat(raw.o.q), quantity_usd: parseFloat(raw.o.ap) * parseFloat(raw.o.q), timestamp: raw.E, raw, }; } } 3 חודשים שמות שדות שונים
Bybit SELL recent-trade רק כעסקאות
Bitmex !forceOrder@arr מאז 2014 API מיושן
Deribit liquidation-orders מלא רק BTC/ETH
GMX v2 אירוע on-chain היסטוריה מלאה Arbitrum RPC

למה TimescaleDB לאחסון חיסולים?

TimescaleDB היא הבחירה מספר 1 לסדרות זמן. Hypertable:

CREATE TABLE liquidations ( time TIMESTAMPTZ NOT NULL, exchange TEXT NOT NULL, symbol TEXT NOT NULL, base_asset TEXT NOT NULL, side TEXT NOT NULL, price NUMERIC(20, 8), quantity NUMERIC(20, 8), quantity_usd NUMERIC(20, 2), raw JSONB ); SELECT create_hypertable('liquidations', 'time'); CREATE INDEX ON liquidations (base_asset, time DESC); CREATE MATERIALIZED VIEW liquidations_1m WITH (timescaledb.continuous) AS SELECT time_bucket('1 minute', time) AS bucket, base_asset, exchange, SUM(CASE WHEN side = 'long' THEN quantity_usd ELSE 0 END) AS long_liq_usd, SUM(CASE WHEN side = 'short' THEN quantity_usd ELSE 0 END) AS short_liq_usd, COUNT(*) AS count FROM liquidations GROUP BY bucket, base_asset, exchange; 

TimescaleDB מעבדת שאילתות פי 10 מהר יותר מ-PostgreSQL עבור סוג נתונים זה.

מדדים ואינדיקטורים

  • נפח חיסולים מצטבר — סכום על פני תקופה. עלייה חדה >3σ מממוצע נע מאותתת על מפל.
  • יחס לונג/שורט של חיסולים — אם 80%+ בצד אחד, זה אות כיווני.
  • אשכולות חיסולים — רמות מחיר עם ריכוז חיסולים גבוה (רמות תמיכה/התנגדות).

השוואת מדדים:

מדד תיאור פרשנות
נפח חיסולים מצטבר נפח חיסולים על פני תקופה >3σ מממוצע נע → מפל
יחס לונג/שורט חלק חיסולי לונג לעומת שורט >80% בצד אחד → אות כיווני
אשכולות חיסולים רמות מחיר עם ריכוז תמיכה/התנגדות
import pandas as pd import numpy as np def detect_liquidation_cascade(df: pd.DataFrame, window_minutes: int = 5, std_multiplier: float = 3.0) -> pd.Series: rolling = df.set_index('time')['quantity_usd'].rolling(f'{window_minutes}T') mean = rolling.mean() std = rolling.std() current = df.set_index('time')['quantity_usd'] return current > (mean + std_multiplier * std) 
עוד על מנגנון החיבור מחדש הקולקטור משתמש ב-exponential backoff עם השהיה התחלתית של שנייה אחת ומקסימום של 30 שניות. כל ניתוק מכפיל את ההשהיה. לאחר חיבור מוצלח, היא מתאפסת. זה מונע עומס על השרת ומבטיח חיבור יציב.

איך אנחנו בונים מערכת איסוף חיסולים: שלב אחר שלב

  1. ניתוח דרישות ובחירת בורסות.
  2. פיתוח קולקטורי WebSocket עם נרמול.
  3. עיצוב סכמת TimescaleDB ואינדקסים.
  4. הגדרת אגרגציות רציפות לאנליטיקה.
  5. שילוב לוח מחוונים של Grafana.
  6. בדיקות עומס וניטור.
  7. תיעוד והדרכה.

ההשקעה במערכת כזו נדונה באופן אישי — אנו מתאימים את הפתרון להיקף הפרויקט שלך. הזמינו פיתוח מערכת איסוף חיסולים — קבלו ייעוץ מהנדס ותוכנית יישום.

מגבלות ומקרי קצה

בורסות לא תמיד מספקות את כל הנתונים: הן מאגדות חיסולים קטנים, מציגות עיכובים. נתונים היסטוריים עשויים להשתנות. פיגור הודעות WebSocket: תחת עומס גבוה, זמן השהיה של 1–5 שניות — בדיוק כשהנתונים הכי חשובים. חותמת הזמן בנתונים הגולמיים היא זמן החיסול, לא זמן המסירה. דה-דופליקציה בין בורסות: פוזיציה אחת עשויה להתפצל למספר הזמנות.

מה כלול בעבודה

  • קוד קולקטור ל-5+ בורסות (מרכזיות + DeFi) עם חיבור מחדש אוטומטי ו-backoff.
  • נרמול לממשק אחיד וכתיבה ל-TimescaleDB עם אגרגציות רציפות.
  • תיעוד ארכיטקטורה ו-API לשילוב.
  • לוח מחוונים של Grafana עם מפת חום חיסולים וגלאי מפלים.
  • הדרכת הצוות שלך על המערכת.
  • תמיכה לחודש אחד לאחר ההשקה.

הניסיון וההבטחות שלנו

5+ שנים של פיתוח פתרונות בלוקצ'יין, 30+ פרויקטים בניתוח נתוני בורסות בעומס גבוה. אנו מבטיחים 99.9% זמינות של זרם הנתונים היציב של הקולקטורים. נעריך את הפרויקט שלך ונציע את הפתרון האופטימלי — צרו קשר לייעוץ.