Как извлечь исторические данные стакана L2 с Tardis.dev в Python pandas

Как извлечь исторические данные стакана L2 с Tardis.dev в Python pandas Python & API
Пошаговое руководство для Quant-разработчиков по выгрузке исторических данных стакана L2 (Level 2 Order Book) с Tardis.dev API и их анализу в Python pandas.
Суть: Быстрый и надежный способ выгрузки исторических данных стакана L2 (Level 2 Order Book) с криптобирж через официальную библиотеку tardis-dev с последующим импортом в pandas.DataFrame для количественного анализа и бэктестинга HFT-стратегий.

В количественном трейдинге (Quantitative Trading) качественные исторические данные — это фундамент успешной стратегии. Если для анализа дневных свечей или ставок финансирования достаточно стандартных коннекторов (подробнее об этом в статье Асинхронный сбор Funding Rate с Binance, Bybit и OKX на Python), то для высокочастотного анализа (HFT) и построения микроструктурных моделей необходим потиковый стакан L2 (Level 2 Order Book).

Провайдер Tardis.dev предоставляет доступ к тиковым историческим данным стакана с точностью до микросекунды. В этой инструкции мы разберем, как с помощью официального Python-клиента tardis-dev скачать инкрементальные обновления стакана L2 и загрузить их в pandas для дальнейшего анализа.

Исходный код

Ниже представлен готовый к использованию скрипт, который скачивает архив с инкрементальными обновлениями стакана L2 для биржи Binance Futures и загружает его в pandas.DataFrame.

import os
from tardis_dev import datasets
import pandas as pd

def download_and_load_l2_data(
    exchange: str,
    symbol: str,
    date: str,
    api_key: str,
    download_dir: str = "./data"
) -> pd.DataFrame:
    # 1. Скачивание данных с Tardis.dev
    print(f"Запуск скачивания L2 данных для {exchange}:{symbol} за {date}...")
    datasets.download(
        exchange=exchange,
        data_types=["incremental_book_L2"],
        from_date=date,
        to_date=date,
        symbols=[symbol],
        api_key=api_key,
        download_dir=download_dir
    )
    
    # Формируем имя файла по шаблону Tardis
    # Шаблон: {exchange}_incremental_book_L2_{date}_{symbol}.csv.gz
    filename = f"{exchange}_incremental_book_L2_{date}_{symbol}.csv.gz"
    file_path = os.path.join(download_dir, filename)
    
    if not os.path.exists(file_path):
        raise FileNotFoundError(f"Файл {file_path} не найден после скачивания.")
        
    # 2. Загрузка в pandas DataFrame
    print(f"Загрузка файла {file_path} в pandas...")
    # Tardis отдает сжатые csv.gz файлы, pandas умеет читать их на лету
    df = pd.read_csv(file_path)
    
    # Преобразуем временные метки в datetime для удобства анализа
    df['timestamp'] = pd.to_datetime(df['timestamp'], unit='us')
    df['local_timestamp'] = pd.to_datetime(df['local_timestamp'], unit='us')
    
    return df

if __name__ == "__main__":
    # Укажите ваш API ключ от Tardis.dev (можно использовать 'YOUR_API_KEY')
    TARDIS_API_KEY = os.getenv("TARDIS_API_KEY", "YOUR_API_KEY")
    
    try:
        df_l2 = download_and_load_l2_data(
            exchange="binance",
            symbol="BTCUSDT",
            date="2023-11-01",
            api_key=TARDIS_API_KEY
        )
        
        print("\nПервые 5 строк загруженного стакана L2:")
        print(df_l2.head())
        print(f"\nВсего строк загружено: {len(df_l2)}")
    except Exception as e:
        print(f"Произошла ошибка: {e}")

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

  • exchange: Идентификатор биржи в системе Tardis (например, binance, binance-delivery, deribit, okex).
  • data_types: Список типов данных. Для инкрементального стакана L2 используется значение ["incremental_book_L2"]. Также доступны trades, quotes и другие.
  • from_date / to_date: Диапазон дат в формате YYYY-MM-DD, за который необходимо выгрузить исторические данные.
  • symbols: Список торговых пар (тикеров) в верхнем регистре, например, ["BTCUSDT"].
  • api_key: Ваш персональный API-ключ Tardis.dev. Без ключа доступен только ограниченный демонстрационный режим на исторических данных прошлых периодов.
  • download_dir: Локальная директория, в которую будут сохранены скачанные файлы в формате .csv.gz.

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

Для успешного запуска скрипта выполните следующие шаги:

1. Установите необходимые библиотеки в вашем окружении:

pip install tardis-dev pandas

2. Получите API-ключ на сайте Tardis.dev. Если вы хотите протестировать код бесплатно, Tardis предоставляет доступ к некоторым историческим интервалам без ключа или со стандартным демо-ключом.

3. Запустите скрипт. Скачанный файл сохранится в папку ./data, после чего pandas автоматически распакует его в оперативной памяти и создаст структурированный DataFrame.

Если вы планируете использовать полученные данные для тестирования торговых роботов в симулированной среде, рекомендуем ознакомиться с нашей статьей о настройке тестовых сред: Работа с Testnet API криптобирж в Python CCXT: Настройка.

Для тех, кто помимо спотового и фьючерсного рынка интересуется опционами, полезным дополнением станет руководство по выгрузке волатильности: Как извлечь исторические данные по опционам Deribit (Implied Volatility) с Python requests.

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