Сбор Long/Short Ratio с криптобирж: API, парсинг и TimescaleDB

Трейдеру нужна годовая история Long/Short Ratio для бэктестинга, но биржи хранят лишь последние записи — данные теряются, а backtest становится невозможным. Мы разрабатываем систему на async Python, которая непрерывно собирает и нормализует данные с Binance, Bybit и OKX, складывая их в TimescaleDB. Наша команда реализует проект под ключ — от аудита источников до поддержки, обеспечивая непрерывный поток данных с задержкой менее минуты.

Сбор Long/Short Ratio с криптобирж: API, парсинг и TimescaleDB

Блокчейн инфраструктураПростойот 1 дня до 3 дней
Часто задаваемые вопросы

Сбор данных Long/Short Ratio с криптобирж: технический разбор

Трейдеру нужна годовая история Long/Short Ratio по 50+ инструментам для бэктестинга стратегий. Биржи хранят максимум месяц данных — Binance отдаёт только последние 500 записей (около 30 дней с максимальной детализацией 5-минутных свечей), Bybit — 200, OKX — 100. Собирать вручную через UI — сотни человеко-часов, а один пропуск данных разрушает backtest. Мы построили систему на async Python, которая непрерывно стягивает данные с трёх бирж одновременно, нормализует и складывает в TimescaleDB. Теперь история доступна за любой период, а добавление нового символа занимает 5 минут — достаточно прописать его в конфиге. В итоге трейдер получает непрерывный поток данных с задержкой менее минуты, пригодный для real-time индикаторов и сентимент-анализа криптовалют. Ниже — архитектура, подводные камни и готовое решение.

Официальные API для L/S ratio

Начинать нужно с официальных endpoints — они стабильны и не требуют браузерной автоматизации. Вот доступные источники:

Биржа Эндпоинт Данные Лимит истории Аутентификация
Binance Futures /futures/data/topLongShortAccountRatio Top trader account ratio 500 записей, ~30 дней Нет (public)
Binance Futures /futures/data/globalLongShortAccountRatio Все аккаунты 500 записей Нет
Bybit /v5/market/account-ratio Account ratio 200 записей Нет
OKX /api/v5/rubik/stat/contracts/long-short-account-ratio Account ratio 100 записей Нет
CoinGlass (агрегатор) /api/v1/longShort Агрегированные с 4+ бирж Зависит от подписки API key (платный)

Согласно документации Binance Futures API, данные доступны только за последние 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

Ответ: массив [{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 сек.

Почему без своей базы не обойтись?

Данные нужно собирать регулярно — биржи хранят историю ограниченно, поэтому собственная база данных необходима для анализа длинных периодов. PostgreSQL с расширением TimescaleDB — оптимальный выбор для time-series данных: она даёт автоматическое партиционирование по времени и continuous aggregates, ускоряющие range-запросы в 3 раза по сравнению с обычным PostgreSQL. InfluxDB быстрее на запись, но проигрывает в гибкости JOIN. Плоские CSV-файлы дешевы, но не поддерживают индексы и не защищают от дубликатов. Именно поэтому мы остановились на TimescaleDB — гарантия уникальности через ON CONFLICT и скорость вставки до 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))

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

Как быть, если биржа не даёт API?

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

Как мы строим систему сбора

Наш процесс включает:

  1. Аналитика: выявляем все необходимые символы и периоды. Определяем, какие биржи дают L/S ratio через API, а где нужен парсинг.
  2. Проектирование архитектуры: выбираем стек (async Python, httpx, asyncpg) и схему хранения в TimescaleDB.
  3. Разработка парсеров: пишем асинхронные функции для каждой биржи с учётом rate limiter.
  4. Интеграция с БД: создаём гипертаблицу с партиционированием по дням и continuous aggregates для ускорения запросов.
  5. Мониторинг и алерты: настраиваем оповещения при падении успешности сбора ниже 95%.

Каждый этап тестируем на небольшом наборе данных, затем масштабируем.

Что входит в наше решение под ключ

Мы предлагаем готовую систему сбора и хранения L/S данных:

  • Настройка парсеров под 3+ биржи (Binance, Bybit, OKX) с возможностью добавления новых.
  • Хранение в TimescaleDB с автоматическим партиционированием и retention policy.
  • Мониторинг сбора с алертами при падении успешности ниже 95%.
  • API для доступа к собранным данным (фильтрация по бирже, символу, периоду).
  • Документация и обучение команды.

Оценим ваш проект за 2 рабочих дня — напишите нам. Гарантируем доставку данных с момента запуска. Стоимость решения — от $1500 до $5000 в зависимости от количества символов и бирж. Экономия на инфраструктуре хранения может достигать $2000 в месяц. Уже реализовали для 10+ проектов с общим объёмом хранения более 500 млн записей. Свяжитесь с нами для консультации — обсудим вашу задачу без обязательств.

Почему стоит доверить сбор нам?

5 лет опыта в блокчейн-разработке, десятки проектов по парсингу и анализу данных. Используем production-стек: async Python, httpx, asyncpg, TimescaleDB. Все решения покрыты мониторингом и имеют резервные каналы сбора. Средняя экономия для наших клиентов — $1000-3000 в месяц. Получите консультацию — свяжитесь с нами.

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

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142