Как рассчитать спред на Bybit с помощью Python

Как рассчитать спред на Bybit с помощью Python

В мире алгоритмической торговли точность данных играет ключевую роль. Одним из важнейших показателей, который трейдеры используют в своих стратегиях, является спред — разница между лучшей ценой покупки (bid) и продажи (ask). В этой статье мы разберём, как с помощью Python и публичного API Bybit автоматически рассчитывать и мониторить спред в реальном времени.

Установка необходимых библиотек

Прежде чем приступить к коду, убедитесь, что у вас установлен модуль requests, который используется для отправки HTTP-запросов к API Bybit. Если его нет, установите с помощью следующей команды:

pip install requests

Разбор кода

1. Подключение к API Bybit

Bybit предоставляет публичное API для получения информации о книге заявок. В коде мы используем URL https://api.bybit.com/v5/market/orderbook для получения данных о текущих ценах bid и ask.

2. Получение лучших цен bid и ask

Функция get_best_bid_ask() выполняет HTTP-запрос к API Bybit и получает лучшие цены на покупку и продажу для указанного торгового инструмента:

def get_best_bid_ask():
    """Получить лучшие цены bid и ask"""
    params = {
        "category": "spot",  # Тип рынка (спотовый)
        "symbol": "BTCUSDT"   # Торговая пара
    }
    response = requests.get("https://api.bybit.com/v5/market/orderbook", params=params)
    if response.status_code == 200:
        result = response.json().get("result")
        if result:
            best_bid = result.get("b", [])[0]  # Лучшая цена bid
            best_ask = result.get("a", [])[0]  # Лучшая цена ask
            return best_bid, best_ask
        else:
            raise ValueError("Пустой ответ в поле 'result'.")
    else:
        raise Exception(f"Ошибка API Orderbook: {response.status_code}, {response.text}")

3. Расчёт спреда

Спред — это разница между ценами ask и bid. Чем меньше спред, тем ликвиднее рынок. Рассчитать спред можно с помощью следующей функции:

def calculate_spread(best_bid, best_ask):
    """Рассчитать спред между лучшими ценами bid и ask"""
    bid_price = float(best_bid[0])
    ask_price = float(best_ask[0])
    spread = ask_price - bid_price
    return bid_price, ask_price, spread

4. Мониторинг спреда в реальном времени

Для постоянного мониторинга мы создадим бесконечный цикл с интервалом обновления данных в 5 секунд:

def monitor_best_bid_ask():
    """Мониторинг лучших bid и ask"""
    try:
        print(f"Начинаем мониторинг лучших bid и ask для BTCUSDT...\n")
        while True:
            best_bid, best_ask = get_best_bid_ask()
            bid_price, ask_price, spread = calculate_spread(best_bid, best_ask)
            print(f"Bid: {bid_price:.2f}, Ask: {ask_price:.2f}, Спред: {spread:.2f}")
            time.sleep(5)
    except Exception as e:
        print(f"Ошибка: {e}")

5. Запуск скрипта

Чтобы запустить скрипт, достаточно выполнить его в Python:

if __name__ == "__main__":
    monitor_best_bid_ask()

Вывод

Этот скрипт позволяет автоматически получать и анализировать текущие лучшие цены bid и ask на бирже Bybit, а также вычислять спред. Такой инструмент может быть полезен для трейдеров, которые строят свои стратегии на основе анализа ликвидности и волатильности рынка.

Преимущества:

  • Простота использования: достаточно запустить один скрипт.
  • Автоматическое обновление: данные обновляются каждые 5 секунд.
  • Гибкость: можно изменить торговую пару или увеличить частоту обновлений.

Полный код:

import requests
import time

# Константы
ORDERBOOK_URL = "https://api.bybit.com/v5/market/orderbook"
SYMBOL = "BTCUSDT"  # Торговая пара
CATEGORY = "spot"   # Тип рынка (spot или linear для фьючерсов)
REFRESH_INTERVAL = 5  # Интервал обновления (в секундах)

def get_best_bid_ask():
    """Получить лучшие цены bid и ask"""
    params = {
        "category": CATEGORY,
        "symbol": SYMBOL
    }
    response = requests.get(ORDERBOOK_URL, params=params)
    if response.status_code == 200:
        result = response.json().get("result")
        if result:
            best_bid = result.get("b", [])[0]  # Лучшая цена bid
            best_ask = result.get("a", [])[0]  # Лучшая цена ask
            return best_bid, best_ask
        else:
            raise ValueError("Пустой ответ в поле 'result'.")
    else:
        raise Exception(f"Ошибка API Orderbook: {response.status_code}, {response.text}")

def calculate_spread(best_bid, best_ask):
    """Рассчитать спред между лучшими ценами bid и ask"""
    bid_price = float(best_bid[0])
    ask_price = float(best_ask[0])
    spread = ask_price - bid_price
    return bid_price, ask_price, spread

def monitor_best_bid_ask():
    """Мониторинг лучших bid и ask"""
    try:
        print(f"Начинаем мониторинг лучших bid и ask для {SYMBOL}...\n")
        while True:
            # Получаем лучшие bid и ask
            best_bid, best_ask = get_best_bid_ask()

            # Рассчитываем спред
            bid_price, ask_price, spread = calculate_spread(best_bid, best_ask)

            # Выводим результаты
            print(f"Bid: {bid_price:.2f}, Ask: {ask_price:.2f}, Спред: {spread:.2f}")

            # Интервал обновления
            time.sleep(REFRESH_INTERVAL)
    except Exception as e:
        print(f"Ошибка: {e}")

if __name__ == "__main__":
    monitor_best_bid_ask()

 

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

Чтобы оставить комментарий, пожалуйста, войдите или зарегистрируйтесь.