Парсинг Исторических Ликвидаций с Coinglass API на Python

Парсинг Исторических Ликвидаций с Coinglass API на Python Python & API
Подробное руководство по получению и анализу исторических данных о ликвидациях с Coinglass API с использованием Python requests. Изучите, как эффективно парсить и обрабатывать ценные рыночные данные для торговых стратегий.
Суть: В этой статье мы рассмотрим, как эффективно парсить исторические данные о ликвидациях с Coinglass API, используя библиотеку requests в Python. Вы научитесь получать, обрабатывать и интерпретировать ценную информацию о рыночных движениях, вызванных крупными ликвидациями, что является критически важным для количественного анализа и разработки торговых стратегий.

Исходный код

Представленный ниже Python-скрипт демонстрирует, как подключиться к Coinglass API, запросить исторические данные о ликвидациях для конкретной торговой пары в заданном временном диапазоне и обработать полученный ответ. Мы используем библиотеку requests для выполнения HTTP-запросов и datetime для удобной работы со временем.


import requests
import json
from datetime import datetime, timedelta

# Ваш API ключ Coinglass. Получите его на сайте Coinglass (https://www.coinglass.com/api-key).
# Рекомендуется хранить ключ в переменных окружения, а не прямо в коде.
COINGLASS_API_KEY = 'YOUR_COINGLASS_API_KEY'
BASE_URL = 'https://open-api.coinglass.com/api'

def get_historical_liquidations(
    symbol: str,
    start_time_ms: int,
    end_time_ms: int,
    interval: str = 'M1' # M1, M5, M15, M30, H1, H4, H12, D1, W1
) -> list:
    """
    Получает исторические данные о ликвидациях с Coinglass API.

    :param symbol: Торговая пара, например, 'BTCUSDT'.
    :param start_time_ms: Начальное время в формате Unix timestamp (миллисекунды).
    :param end_time_ms: Конечное время в формате Unix timestamp (миллисекунды).
    :param interval: Интервал агрегации данных (например, 'M1' для 1 минуты).
    :return: Список словарей с данными о ликвидациях.
    """
    endpoint = f'{BASE_URL}/pro/v1/futures/liquidation_orders'
    headers = {
        'coinglassSecret': COINGLASS_API_KEY,
        'accept': 'application/json'
    }
    params = {
        'symbol': symbol,
        'interval': interval,
        'startTime': start_time_ms,
        'endTime': end_time_ms
    }

    try:
        response = requests.get(endpoint, headers=headers, params=params)
        response.raise_for_status() # Вызывает исключение для плохих статусов HTTP (4xx или 5xx)
        data = response.json()

        if data and data.get('code') == '0' and data.get('data'):
            return data['data']
        else:
            print(f"Ошибка API или пустые данные: {data.get('msg', 'Неизвестная ошибка')}")
            return []
    except requests.exceptions.RequestException as e:
        print(f"Ошибка запроса: {e}")
        return []
    except json.JSONDecodeError:
        print(f"Ошибка декодирования JSON: {response.text}")
        return []

if __name__ == '__main__':
    # Пример использования: Получение данных о ликвидациях BTCUSDT за последний час
    target_symbol = 'BTCUSDT'
    
    # Определяем временной диапазон: последний час от текущего момента UTC
    end_dt = datetime.utcnow()
    start_dt = end_dt - timedelta(hours=1)

    start_timestamp_ms = int(start_dt.timestamp() * 1000)
    end_timestamp_ms = int(end_dt.timestamp() * 1000)

    print(f"Получение данных о ликвидациях для {target_symbol} с {start_dt} по {end_dt} (UTC)...")
    
    liquidation_data = get_historical_liquidations(
        symbol=target_symbol,
        start_time_ms=start_timestamp_ms,
        end_time_ms=end_timestamp_ms,
        interval='M1' # 1-минутные агрегированные данные
    )

    if liquidation_data:
        print(f"Получено {len(liquidation_data)} записей о ликвидациях.")
        # Выводим первые 5 записей для примера
        for i, entry in enumerate(liquidation_data[:5]):
            timestamp_dt = datetime.fromtimestamp(entry['time'] / 1000)
            print(f"  Время: {timestamp_dt}, Сумма ликвидаций (USD): {entry['amountUsd']}, Тип: {entry['side']}")
        
        # Пример агрегации: общая сумма лонг и шорт ликвидаций
        total_long_liquidations_usd = sum(
            entry['amountUsd'] for entry in liquidation_data if entry['side'] == 'buy'
        )
        total_short_liquidations_usd = sum(
            entry['amountUsd'] for entry in liquidation_data if entry['side'] == 'sell'
        )
        print(f"\nОбщая сумма лонг ликвидаций за период: ${total_long_liquidations_usd:,.2f}")
        print(f"Общая сумма шорт ликвидаций за период: ${total_short_liquidations_usd:,.2f}")

    else:
        print("Данные о ликвидациях не получены или произошла ошибка.")

Разбор параметров

Для успешного выполнения запросов к Coinglass API необходимо понимать ключевые параметры:

  • COINGLASS_API_KEY: Ваш уникальный ключ API от Coinglass. Это обязательный параметр для аутентификации всех запросов к API. Получить его можно после регистрации на сайте Coinglass.
  • BASE_URL: Базовый URL для Coinglass Open API. В данном случае это https://open-api.coinglass.com/api.
  • symbol: Торговая пара, для которой запрашиваются данные о ликвидациях (например, 'BTCUSDT', 'ETHUSDT').
  • start_time_ms: Начальное время временного диапазона в формате Unix timestamp (миллисекунды). Определяет, с какого момента начинать сбор данных.
  • end_time_ms: Конечное время временного диапазона в формате Unix timestamp (миллисекунды). Определяет, до какого момента собирать данные.
  • interval: Интервал агрегации данных. Coinglass API позволяет получать агрегированные данные по различным интервалам, таким как 'M1' (1 минута), 'M5' (5 минут), 'H1' (1 час), 'D1' (1 день) и другие. Выбор интервала зависит от требуемой гранулярности анализа.

Как запустить

Чтобы запустить предоставленный скрипт и начать парсинг данных о ликвидациях, выполните следующие шаги:

  1. Установите Python: Убедитесь, что у вас установлен Python 3.x. Вы можете скачать его с официального сайта Python.

  2. Установите библиотеку requests: Откройте терминал или командную строку и выполните команду:

    
    pip install requests
    
  3. Получите API ключ Coinglass: Зарегистрируйтесь на сайте Coinglass и получите ваш персональный API ключ. Он будет использоваться для аутентификации ваших запросов.

  4. Настройте скрипт: Откройте файл с исходным кодом и замените 'YOUR_COINGLASS_API_KEY' на ваш реальный API ключ. Для продакшн-систем настоятельно рекомендуется использовать переменные окружения для хранения конфиденциальных данных, например, через os.getenv('COINGLASS_API_KEY').

  5. Сохраните и запустите: Сохраните код в файл с расширением .py (например, coinglass_liquidations.py). Затем запустите скрипт из терминала:

    
    python coinglass_liquidations.py
    
  6. Изменение параметров: Вы можете легко изменять значения переменных target_symbol, start_dt, end_dt и interval в секции if __name__ == '__main__': для получения данных по другим активам или временным диапазонам.

Анализ данных о ликвидациях является важным компонентом в разработке торговых стратегий. Для более глубокого понимания механизмов, лежащих в основе рыночных движений, и защиты от манипуляций, рекомендуем ознакомиться с нашей статьей Реализация защиты от Wash Trading в Matching Engine на Python. Если вы занимаетесь арбитражными стратегиями, например, арбитражем ставок финансирования, как описано в статье Арбитраж ставок финансирования (Funding Arbitrage) на OKX: Python и CCXT, понимание ликвидаций поможет в оценке рисков и потенциальной волатильности. Для высокопроизводительной и надежной передачи котировок и других данных между вашими торговыми серверами, рассмотрите использование технологий, описанных в статье gRPC на Python для передачи котировок между торговыми серверами.

Оцените статью
FinFluct