איסוף יחס לונג/שורט מבורסות קריפטו: פירוט טכני
סוחר זקוק לשנת היסטוריה של יחס לונג/שורט על פני 50+ מכשירים לצורך בדיקת אסטרטגיה לאחור. הבורסות שומרות לכל היותר חודש של נתונים — Binance מחזירה רק את 500 הרשומות האחרונות (כ-30 ימים עם גרנולריות של 5 דקות), Bybit 200, OKX 100. איסוף ידני דרך הממשק היה לוקח מאות שעות עבודה, ופער נתונים אחד הורס את הבדיקה. בנינו מערכת על Python אסינכרוני שמושכת נתונים ברציפות משלוש בורסות בו-זמנית, מנרמלת אותם, ושומרת אותם ב-TimescaleDB. כעת ההיסטוריה זמינה לכל תקופה, והוספת סמל חדש אורכת 5 דקות — רק צריך להוסיף אותו לקונפיגורציה. הסוחר מקבל זרם נתונים רציף עם פחות מדקה עיכוב, מתאים לאינדיקטורים בזמן אמת ולניתוח סנטימנט קריפטו. להלן — הארכיטקטורה, המלכודות והפתרון המוכן.
API רשמיים ליחס לונג/שורט
התחילו עם נקודות קצה רשמיות — הן יציבות ואינן דורשות אוטומציה של דפדפן. הנה המקורות הזמינים:
| בורסה | נקודת קצה | נתונים | מגבלת היסטוריה | אימות |
|---|---|---|---|---|
| Binance Futures | /futures/data/topLongShortAccountRatio |
יחס חשבונות סוחרים מובילים | 500 רשומות, ~30 ימים | לא (ציבורי) |
| Binance Futures | /futures/data/globalLongShortAccountRatio |
כל החשבונות | 500 רשומות | לא |
| Bybit | /v5/market/account-ratio |
יחס חשבונות | 200 רשומות | לא |
| OKX | /api/v5/rubik/stat/contracts/long-short-account-ratio |
יחס חשבונות | 100 רשומות | לא |
| CoinGlass (אגרגטור) | /api/v1/longShort |
מצטבר מ-4+ בורסות | תלוי במנוי | מפתח API (בתשלום) |
לפי תיעוד ה-API של Binance Futures, הנתונים זמינים רק ל-30 הימים האחרונים. ניתוח ארוך טווח דורש איסוף רציף.
Binance Futures — הנתונים המקיפים ביותר, מספר נקודות קצה:
# Top trader long/short account ratio GET https://fapi.binance.com/futures/data/topLongShortAccountRatio?symbol=BTCUSDT&period=5m&limit=30 # All accounts ratio (retail sentiment) GET https://fapi.binance.com/futures/data/globalLongShortAccountRatio?symbol=BTCUSDT&period=1h&limit=30 תשובה: מערך # Top trader long/short account ratio GET https://fapi.binance.com/futures/data/topLongShortAccountRatio?symbol=BTCUSDT&period=5m&limit=30 # All accounts ratio (retail sentiment) GET https://fapi.binance.com/futures/data/globalLongShortAccountRatio?symbol=BTCUSDT&period=1h&limit=30 . נתונים היסטוריים מוגבלים: [{symbol, longShortRatio, longAccount, shortAccount, timestamp}] מקסימום, limit=500 מ-period עד 5m. נתונים ישנים מ-~30 ימים אינם זמינים דרך ה-API — צריך לאסוף אותם בעצמכם.
Bybit — נקודת קצה 1d:
GET https://api.bybit.com/v5/market/account-ratio?category=linear&symbol=BTCUSDT&period=1h&limit=50 OKX — /v5/market/account-ratio:
GET https://www.okx.com/api/v5/rubik/stat/contracts/long-short-account-ratio?ccy=BTC&period=1H OKX אינה דורשת אימות עבור נקודות קצה של נתוני שוק ציבוריים. מגבלת קצב: 20 בקשות/2 שניות.
למה אי אפשר בלי מסד נתונים משלך?
יש לאסוף נתונים באופן קבוע — הבורסות שומרות היסטוריה מוגבלת, ולכן מסד נתונים משלך חיוני לניתוח תקופות ארוכות. PostgreSQL עם תוסף TimescaleDB הוא אופטימלי לנתוני סדרות זמן: חלוקה אוטומטית לפי זמן ואגרגציות רציפות מאיצות שאילתות טווח פי 3 בהשוואה ל-PostgreSQL רגיל. InfluxDB מהיר יותר בכתיבה אך חסר גמישות JOIN. קבצי CSV שטוחים זולים אך חסרים אינדקסים והגנה מפני כפילויות. לכן בחרנו ב-TimescaleDB — הבטחת ייחודיות דרך GET https://api.bybit.com/v5/market/account-ratio?category=linear&symbol=BTCUSDT&period=1h&limit=50 ומהירויות כתיבה של עד 1000 רשומות/שנייה על צומת יחיד.
import httpx import asyncio from datetime import datetime import asyncpg ENDPOINTS = { "binance_top_account": "https://fapi.binance.com/futures/data/topLongShortAccountRatio", "binance_global": "https://fapi.binance.com/futures/data/globalLongShortAccountRatio", "bybit": "https://api.bybit.com/v5/market/account-ratio", } async def collect_ls_ratio(symbol: str, period: str, db: asyncpg.Connection): async with httpx.AsyncClient() as client: resp = await client.get( ENDPOINTS["binance_global"], params={"symbol": symbol, "period": period, "limit": 1}, timeout=10.0, ) data = resp.json()[0] await db.execute(""" INSERT INTO ls_ratio (exchange, symbol, period, long_ratio, short_ratio, ts) VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT (exchange, symbol, period, ts) DO NOTHING """, "binance", symbol, period, float(data["longAccount"]), float(data["shortAccount"]), datetime.fromtimestamp(data["timestamp"] / 1000)) /api/v5/rubik/stat/contracts/long-short-account-ratio — הגנה מפני כפילויות באיסוף חוזר. אינדקס ייחודי על GET https://www.okx.com/api/v5/rubik/stat/contracts/long-short-account-ratio?ccy=BTC&period=1H .
מה אם הבורסה לא מספקת API?
חלק מהבורסות (Gate.io, Bitfinex) לא מפרסמות יחס לונג/שורט דרך API רשמי אבל מציגות אותו בדף אינטרנט. למקרים כאלה, אנו משתמשים בדפדפן ללא ראש דרך Playwright:
from playwright.async_api import async_playwright async def scrape_gateio_ls(symbol: str) -> float: async with async_playwright() as p: browser = await p.chromium.launch(headless=True) page = await browser.new_page() # Перехватываем XHR запросы к internal API ls_data = {} page.on("response", lambda r: capture_ls_response(r, ls_data)) await page.goto(f"https://www.gate.io/futures/{symbol}") await page.wait_for_timeout(3000) await browser.close() return ls_data.get("longShortRatio") ה-API הרשמי יציב פי 10 מניתוח ללא ראש. ניתוח דפדפן אינו יציב: שינויי פריסה, אמצעי אנטי-בוט (Cloudflare, PerimeterX). לייצור, אנו משתמשים בו רק כגיבוי, עם ניטור של הצלחת האיסוף.
הערות מעשיות וטעויות נפוצות
מגבלת קצב: בעת איסוף נתונים עבור 20+ סמלים מכמה בורסות, תקבלו בקלות HTTP 429. השתמשו ב-ON CONFLICT כדי להגביל בקשות במקביל ונסיגה אקספוננציאלית בשגיאות. Binance Futures: 1200 משקל לדקה, כל בקשה = משקל 1 לנתוני שוק.
נרמול נתונים: Binance מחזירה import httpx import asyncio from datetime import datetime import asyncpg ENDPOINTS = { "binance_top_account": "https://fapi.binance.com/futures/data/topLongShortAccountRatio", "binance_global": "https://fapi.binance.com/futures/data/globalLongShortAccountRatio", "bybit": "https://api.bybit.com/v5/market/account-ratio", } async def collect_ls_ratio(symbol: str, period: str, db: asyncpg.Connection): async with httpx.AsyncClient() as client: resp = await client.get( ENDPOINTS["binance_global"], params={"symbol": symbol, "period": period, "limit": 1}, timeout=10.0, ) data = resp.json()[0] await db.execute(""" INSERT INTO ls_ratio (exchange, symbol, period, long_ratio, short_ratio, ts) VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT (exchange, symbol, period, ts) DO NOTHING """, "binance", symbol, period, float(data["longAccount"]), float(data["shortAccount"]), datetime.fromtimestamp(data["timestamp"] / 1000)) כחלק (0.65 = 65% לונג), OKX כיחס (1.86 = 1.86:1 לונג/שורט). נ�רמלו לפורמט אחיד לפני כתיבה למסד הנתונים.
אזורי זמן: כל חותמות הזמן מומרות ל-UTC. Binance מחזירה מילישניות Unix, Bybit גם כן, OKX מחזירה מחרוזת ISO 8601.
איך בנינו את מערכת האיסוף
התהליך שלנו כולל:
- ניתוח: זיהוי כל הסמלים והתקופות הנדרשים. קביעה אילו בורסות מציעות יחס לונג/שורט דרך API ואילו דורשות גירוד.
- עיצוב ארכיטקטורה: בחירת המחסנית (Python אסינכרוני, httpx, asyncpg) וסכמת האחסון ב-TimescaleDB.
- פיתוח מנתחים: כתיבת פונקציות אסינכרוניות לכל בורסה עם מגביל קצב.
- אינטגרציית מסד נתונים: יצירת hypertable עם חלוקה יומית ואגרגציות רציפות לשאילתות מהירות יותר.
- ניטור והתראות: הגדרת התראות כאשר שיעור הצלחת האיסוף יורד מתחת ל-95%.
כל שלב נבדק על מערך נתונים קטן, ואז מוגדל.
מה כלול בפתרון המפתחות שלנו
אנו מציעים מערכת מוכנה לאיסוף ואחסון נתוני לונג/שורט:
- קונפיגורציה של מנתחים ל-3+ בורסות (Binance, Bybit, OKX) עם יכולת להוסיף חדשות.
- אחסון ב-TimescaleDB עם חלוקה אוטומטית ומדיניות שמירה.
- ניטור איסוף עם התראות אם שיעור ההצלחה יורד מתחת ל-95%.
- API לגישה לנתונים שנאספו (סינון לפי בורסה, סמל, תקופה).
- תיעוד והדרכת צוות.
נעריך את הפרויקט שלכם תוך 2 ימי עסקים — פשוט צרו קשר. אנו מבטיחים אספקת נתונים מרגע ההשקה. עלות הפתרון תלויה במספר הסמלים והבורסות ונקבעת לאחר ניתוח. חיסכון בתשתית אחסון יכול להגיע עד 70%. יישמנו זאת עבור 10+ פרויקטים עם נפח אחסון כולל של מעל 500 מיליון רשומות. צרו קשר לייעוץ — נדון במשימה שלכם ללא התחייבות.
למה להפקיד בידינו את האיסוף?
5 שנות ניסיון בפיתוח בלוקצ'יין, עשרות פרויקטים בניתוח נתונים וגירוד. אנו משתמשים במחסנית ייצור: Python אסינכרוני, httpx, asyncpg, TimescaleDB. כל הפתרונות מכוסים בניטור ויש להם ערוצי איסוף גיבוי. החיסכון הממוצע ללקוחותינו — $1000–3000 לחודש. קבלו ייעוץ — צרו קשר.







