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


В этой статье мы разберем, как с помощью Python автоматически получать данные о торговых парах с криптовалютной биржи Kraken в реальном времени. Использование WebSocket API позволяет сократить задержки и получать обновления цен в режиме реального времени.
В этой статье мы разберем, как с помощью Python автоматически получать данные о торговых парах с криптовалютной биржи Kraken в реальном времени. Использование WebSocket API позволяет сократить задержки и получать обновления цен в режиме реального времени.
Как это работает
- Инициализация: При запуске скрипта создается объект класса Kraken, который запускает WebSocket-соединение;
- Получение списка пар: Сначала программа делает HTTP-запрос к REST API Kraken, чтобы получить актуальный список всех доступных торговых пар;
- Установка WebSocket-соединения: После успешного получения списка торговых пар программа подключается к WebSocket серверу Kraken;
- Подписка на пары: Скрипт подписывается на тикеры, используя пакеты по 25 пар, чтобы не перегружать сервер;
- Получение данных: Когда сервер отправляет данные об изменении цен, программа обрабатывает их и выводит в консоль последнюю цену каждой пары;
Код
# -*- 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()
Пример вывода
Установлено соединение 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 пар, чтобы не перегружать сервер;
- Получение данных: Когда сервер отправляет данные об изменении цен, программа обрабатывает их и выводит в консоль последнюю цену каждой пары;
Код
# -*- 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()
Пример вывода
Установлено соединение Web Socket
Пара: BTC/USD, Цена: 58123.1
Пара: ETH/USD, Цена: 4321.5
Пара: LTC/USD, Цена: 189.4
Заключение
Этот скрипт демонстрирует, как с помощью WebSocket API и REST API автоматизировать получение данных о криптовалютных торговых парах. Такой подход позволяет оперативно получать актуальные данные о ценах, минимизируя задержки, что особенно полезно для трейдеров и аналитиков.