В мире алгоритмической торговли точность данных играет ключевую роль. Одним из важнейших показателей, который трейдеры используют в своих стратегиях, является спред — разница между лучшей ценой покупки (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()
Пока нет комментариев. Будьте первым!