Получение данных о торговых парах с биржи Kraken через WebSocket на Python

GetCoder.ru
Изображение статьи

В этой статье мы разберем, как с помощью Python автоматически получать данные о торговых парах с криптовалютной биржи Kraken в реальном времени. Использование WebSocket API позволяет сократить задержки и получать обновления цен в режиме реального времени.

В этой статье мы разберем, как с помощью Python автоматически получать данные о торговых парах с криптовалютной биржи Kraken в реальном времени. Использование WebSocket API позволяет сократить задержки и получать обновления цен в режиме реального времени.

Как это работает

  • Инициализация: При запуске скрипта создается объект класса Kraken, который запускает WebSocket-соединение;
  • Получение списка пар: Сначала программа делает HTTP-запрос к REST API Kraken, чтобы получить актуальный список всех доступных торговых пар;
  • Установка WebSocket-соединения: После успешного получения списка торговых пар программа подключается к WebSocket серверу Kraken;
  • Подписка на пары: Скрипт подписывается на тикеры, используя пакеты по 25 пар, чтобы не перегружать сервер;
  • Получение данных: Когда сервер отправляет данные об изменении цен, программа обрабатывает их и выводит в консоль последнюю цену каждой пары;

Код

  • copy
# -*- coding: utf-8 -*- import websocket, requests, json, time class Kraken(): def __init__(self): try: self.start() except Exception as e: print(e) # Список всех торговых пар def symbols_list(self): try: result = [] url = "https://api.kraken.com/0/public/AssetPairs" response = requests.get(url) if response.status_code == 200: products = response.json() for product in products['result'].values(): if 'wsname' in product: result.append(product['wsname']) except Exception as e: result = [] return result # Данные от сокета def on_message(self, ws, message): data = json.loads(message) if isinstance(data, list) and len(data) > 1: pair_data = data[1] if isinstance(pair_data, dict) and 'c' in pair_data: last_price = pair_data['c'][0] pair_name = data[-1] print(f"Пара: {pair_name}, Цена: {last_price}") # Выключения сокета def on_error(self, ws, error): ws.close() def on_open(self, ws): print(u'Установлено соединение Web Socket') symbols = self.symbols_list() batch_size = 25 for i in range(0, len(symbols), batch_size): batch = symbols[i:i + batch_size] subscription_message = { "event": "subscribe", "pair": batch, "subscription": {"name": "ticker"} } ws.send(json.dumps(subscription_message)) def start(self): while True: try: wss = 'wss://ws.kraken.com' wsa = websocket.WebSocketApp(wss, on_open = self.on_open, on_message = self.on_message, on_error = self.on_error) wsa.run_forever() raise Exception(u'Разрыв соединения Web Socket') except Exception as e: print(str(e)) time.sleep(5) if __name__ == "__main__": Kraken()
Исходный код

Пример вывода

  • copy
Установлено соединение Web Socket Пара: BTC/USD, Цена: 58123.1 Пара: ETH/USD, Цена: 4321.5 Пара: LTC/USD, Цена: 189.4

Заключение

Этот скрипт демонстрирует, как с помощью WebSocket API и REST API автоматизировать получение данных о криптовалютных торговых парах. Такой подход позволяет оперативно получать актуальные данные о ценах, минимизируя задержки, что особенно полезно для трейдеров и аналитиков.

  • 29.11.2024
  • 21
  • 0

Получение данных о торговых парах с биржи Kraken через WebSocket на Python

В этой статье мы разберем, как с помощью Python автоматически получать данные о торговых парах с криптовалютной биржи Kraken в реальном времени. Использование WebSocket API позволяет сократить задержки и получать обновления цен в режиме реального времени.

Как это работает

  • Инициализация: При запуске скрипта создается объект класса Kraken, который запускает WebSocket-соединение;
  • Получение списка пар: Сначала программа делает HTTP-запрос к REST API Kraken, чтобы получить актуальный список всех доступных торговых пар;
  • Установка WebSocket-соединения: После успешного получения списка торговых пар программа подключается к WebSocket серверу Kraken;
  • Подписка на пары: Скрипт подписывается на тикеры, используя пакеты по 25 пар, чтобы не перегружать сервер;
  • Получение данных: Когда сервер отправляет данные об изменении цен, программа обрабатывает их и выводит в консоль последнюю цену каждой пары;

Код

  • copy
# -*- coding: utf-8 -*- import websocket, requests, json, time class Kraken(): def __init__(self): try: self.start() except Exception as e: print(e) # Список всех торговых пар def symbols_list(self): try: result = [] url = "https://api.kraken.com/0/public/AssetPairs" response = requests.get(url) if response.status_code == 200: products = response.json() for product in products['result'].values(): if 'wsname' in product: result.append(product['wsname']) except Exception as e: result = [] return result # Данные от сокета def on_message(self, ws, message): data = json.loads(message) if isinstance(data, list) and len(data) > 1: pair_data = data[1] if isinstance(pair_data, dict) and 'c' in pair_data: last_price = pair_data['c'][0] pair_name = data[-1] print(f"Пара: {pair_name}, Цена: {last_price}") # Выключения сокета def on_error(self, ws, error): ws.close() def on_open(self, ws): print(u'Установлено соединение Web Socket') symbols = self.symbols_list() batch_size = 25 for i in range(0, len(symbols), batch_size): batch = symbols[i:i + batch_size] subscription_message = { "event": "subscribe", "pair": batch, "subscription": {"name": "ticker"} } ws.send(json.dumps(subscription_message)) def start(self): while True: try: wss = 'wss://ws.kraken.com' wsa = websocket.WebSocketApp(wss, on_open = self.on_open, on_message = self.on_message, on_error = self.on_error) wsa.run_forever() raise Exception(u'Разрыв соединения Web Socket') except Exception as e: print(str(e)) time.sleep(5) if __name__ == "__main__": Kraken()
Исходный код

Пример вывода

  • copy
Установлено соединение Web Socket Пара: BTC/USD, Цена: 58123.1 Пара: ETH/USD, Цена: 4321.5 Пара: LTC/USD, Цена: 189.4

Заключение

Этот скрипт демонстрирует, как с помощью WebSocket API и REST API автоматизировать получение данных о криптовалютных торговых парах. Такой подход позволяет оперативно получать актуальные данные о ценах, минимизируя задержки, что особенно полезно для трейдеров и аналитиков.