Граббінг даних Long/Short Ratio з бірж

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Граббінг даних Long/Short Ratio з бірж
Простий
від 1 дня до 3 днів
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1308
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1222
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    921
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1151
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    614
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    886

Парсинг даних Long/Short Ratio з бірж

Long/Short ratio — соотношення кількості трейдерів або обсягу позицій, відкритих у long vs short на perpetual futures. Один з ключевих індикаторів для сентимент-аналізу ринку: екстремально високий long ratio історично совпадав з local tops, перегруженний short ratio — з short squeeze. Проблема: кожна біржа публікує ці дані у своєму форматі, з різною частотою, та не всі надають історичні дані через офіційний API.

Офіційні API: де дані вже є

Починати потрібно з офіційних endpoints — вони стабільні та не вимагають браузерної автоматизації.

Binance Futures — найбільш повні дані, кілька ендпоінтів:

# Top trader long/short account ratio
GET https://fapi.binance.com/futures/data/topLongShortAccountRatio?symbol=BTCUSDT&period=5m&limit=30

# Top trader long/short position ratio
GET https://fapi.binance.com/futures/data/topLongShortPositionRatio?symbol=BTCUSDT&period=1h&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 до 1d. Дані старіші за ~30 днів недоступні через API — потрібно збирати самостійно.

Bybit — endpoint /v5/market/account-ratio:

GET https://api.bybit.com/v5/market/account-ratio?category=linear&symbol=BTCUSDT&period=1h&limit=50

OKX/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

OKX не вимагає аутентифікації для публічних market data endpoints. Rate limit: 20 req/2 сек.

CoinGlass API — агрегує L/S дані з Binance, OKX, Bybit, Bitget одним запитом. Платний (від $29/місяц), але сильно спрощує роботу з кількома біржами.

Сбір та зберігання

Дані потрібно збирати регулярно — біржі зберігають історію обмежено, тому власна база даних необхідна для аналізу довгих періодів.

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))

ON CONFLICT DO NOTHING — захист від дубліків при повторному сборі. Унікальний індекс по (exchange, symbol, period, ts).

Для зберігання time-series даних оптимален TimescaleDB (розширення PostgreSQL): автоматична партиціонування за часом, ефективні range-запити, continuous aggregates для downsampling.

Парсинг даних, недоступних через API

Деякі біржи (Gate.io, Bitfinex) не публікують L/S ratio через офіційний API, але показують його на веб-сторінці. Для таких випадків — headless browser парсинг через 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")

Але браузерний парсинг нестабільний: верстка змінюється, з'являються anti-bot заходи (Cloudflare, PerimeterX). Для production використовувати лише як fallback, з моніторингом успішності сбору.

Практичні замічання

Rate limiting: при сборі даних по 20+ символам з кількох бірж легко отримати HTTP 429. Використовуйте asyncio.Semaphore для обмеження одночасних запитів та exponential backoff при ошибках. Binance Futures: 1200 weight на хвилину, кожен запит = 1 weight для market data.

Нормалізація даних: Binance повертає longAccount як долю (0.65 = 65% long), OKX — як ratio (1.86 = 1.86:1 long/short). Нормалізуйте до єдиного формату перед записом у БД.

Часові зони: всі timestamps конвертувати у UTC. Binance повертає Unix milliseconds, Bybit теж, OKX — ISO 8601 строку.