unicex 0.4.0__tar.gz → 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- unicex-0.7.0/PKG-INFO +192 -0
- unicex-0.7.0/README.md +144 -0
- {unicex-0.4.0 → unicex-0.7.0}/pyproject.toml +3 -1
- {unicex-0.4.0 → unicex-0.7.0}/unicex/__init__.py +56 -124
- {unicex-0.4.0 → unicex-0.7.0}/unicex/_abc/__init__.py +2 -0
- unicex-0.7.0/unicex/_abc/exchange_info.py +176 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/_abc/uni_client.py +2 -2
- {unicex-0.4.0 → unicex-0.7.0}/unicex/_base/client.py +2 -2
- {unicex-0.4.0 → unicex-0.7.0}/unicex/binance/__init__.py +12 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/binance/adapter.py +1 -1
- unicex-0.7.0/unicex/binance/exchange_info.py +12 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bitget/__init__.py +14 -4
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bitget/adapter.py +1 -1
- unicex-0.7.0/unicex/bitget/exchange_info.py +12 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bitget/uni_websocket_manager.py +1 -1
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bybit/__init__.py +12 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bybit/adapter.py +1 -1
- unicex-0.7.0/unicex/bybit/exchange_info.py +12 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/enums.py +16 -5
- {unicex-0.4.0 → unicex-0.7.0}/unicex/extra.py +49 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/gateio/__init__.py +12 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/gateio/adapter.py +2 -2
- unicex-0.7.0/unicex/gateio/exchange_info.py +12 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/hyperliquid/__init__.py +12 -0
- unicex-0.7.0/unicex/hyperliquid/adapter.py +250 -0
- unicex-0.7.0/unicex/hyperliquid/client.py +2315 -0
- unicex-0.7.0/unicex/hyperliquid/exchange_info.py +100 -0
- unicex-0.7.0/unicex/hyperliquid/uni_client.py +325 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/mapper.py +35 -33
- {unicex-0.4.0 → unicex-0.7.0}/unicex/mexc/__init__.py +12 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/mexc/adapter.py +28 -11
- unicex-0.7.0/unicex/mexc/exchange_info.py +32 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/mexc/uni_client.py +6 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/okx/__init__.py +12 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/okx/adapter.py +23 -7
- unicex-0.7.0/unicex/okx/exchange_info.py +50 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/okx/uni_client.py +2 -2
- {unicex-0.4.0 → unicex-0.7.0}/unicex/types.py +31 -0
- unicex-0.7.0/unicex.egg-info/PKG-INFO +192 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex.egg-info/SOURCES.txt +9 -57
- {unicex-0.4.0 → unicex-0.7.0}/unicex.egg-info/requires.txt +2 -0
- unicex-0.4.0/PKG-INFO +0 -170
- unicex-0.4.0/README.md +0 -124
- unicex-0.4.0/unicex/bitrue/__init__.py +0 -15
- unicex-0.4.0/unicex/bitrue/adapter.py +0 -8
- unicex-0.4.0/unicex/bitrue/client.py +0 -128
- unicex-0.4.0/unicex/bitrue/uni_client.py +0 -151
- unicex-0.4.0/unicex/bitrue/uni_websocket_manager.py +0 -269
- unicex-0.4.0/unicex/bitrue/user_websocket.py +0 -7
- unicex-0.4.0/unicex/bitrue/websocket_manager.py +0 -11
- unicex-0.4.0/unicex/bitunix/__init__.py +0 -15
- unicex-0.4.0/unicex/bitunix/adapter.py +0 -8
- unicex-0.4.0/unicex/bitunix/client.py +0 -8
- unicex-0.4.0/unicex/bitunix/uni_client.py +0 -151
- unicex-0.4.0/unicex/bitunix/uni_websocket_manager.py +0 -269
- unicex-0.4.0/unicex/bitunix/user_websocket.py +0 -7
- unicex-0.4.0/unicex/bitunix/websocket_manager.py +0 -11
- unicex-0.4.0/unicex/btse/__init__.py +0 -15
- unicex-0.4.0/unicex/btse/adapter.py +0 -8
- unicex-0.4.0/unicex/btse/client.py +0 -123
- unicex-0.4.0/unicex/btse/uni_client.py +0 -151
- unicex-0.4.0/unicex/btse/uni_websocket_manager.py +0 -269
- unicex-0.4.0/unicex/btse/user_websocket.py +0 -7
- unicex-0.4.0/unicex/btse/websocket_manager.py +0 -11
- unicex-0.4.0/unicex/hyperliquid/adapter.py +0 -140
- unicex-0.4.0/unicex/hyperliquid/client.py +0 -232
- unicex-0.4.0/unicex/hyperliquid/uni_client.py +0 -171
- unicex-0.4.0/unicex/kcex/__init__.py +0 -15
- unicex-0.4.0/unicex/kcex/adapter.py +0 -8
- unicex-0.4.0/unicex/kcex/client.py +0 -8
- unicex-0.4.0/unicex/kcex/uni_client.py +0 -151
- unicex-0.4.0/unicex/kcex/uni_websocket_manager.py +0 -269
- unicex-0.4.0/unicex/kcex/user_websocket.py +0 -7
- unicex-0.4.0/unicex/kcex/websocket_manager.py +0 -11
- unicex-0.4.0/unicex/kraken/__init__.py +0 -15
- unicex-0.4.0/unicex/kraken/adapter.py +0 -8
- unicex-0.4.0/unicex/kraken/client.py +0 -165
- unicex-0.4.0/unicex/kraken/uni_client.py +0 -151
- unicex-0.4.0/unicex/kraken/uni_websocket_manager.py +0 -269
- unicex-0.4.0/unicex/kraken/user_websocket.py +0 -7
- unicex-0.4.0/unicex/kraken/websocket_manager.py +0 -11
- unicex-0.4.0/unicex/kucoin/__init__.py +0 -15
- unicex-0.4.0/unicex/kucoin/adapter.py +0 -8
- unicex-0.4.0/unicex/kucoin/client.py +0 -120
- unicex-0.4.0/unicex/kucoin/uni_client.py +0 -151
- unicex-0.4.0/unicex/kucoin/uni_websocket_manager.py +0 -269
- unicex-0.4.0/unicex/kucoin/user_websocket.py +0 -7
- unicex-0.4.0/unicex/kucoin/websocket_manager.py +0 -11
- unicex-0.4.0/unicex/weex/__init__.py +0 -15
- unicex-0.4.0/unicex/weex/adapter.py +0 -8
- unicex-0.4.0/unicex/weex/client.py +0 -8
- unicex-0.4.0/unicex/weex/uni_client.py +0 -151
- unicex-0.4.0/unicex/weex/uni_websocket_manager.py +0 -269
- unicex-0.4.0/unicex/weex/user_websocket.py +0 -7
- unicex-0.4.0/unicex/weex/websocket_manager.py +0 -11
- unicex-0.4.0/unicex/xt/__init__.py +0 -15
- unicex-0.4.0/unicex/xt/adapter.py +0 -8
- unicex-0.4.0/unicex/xt/client.py +0 -8
- unicex-0.4.0/unicex/xt/uni_client.py +0 -151
- unicex-0.4.0/unicex/xt/uni_websocket_manager.py +0 -269
- unicex-0.4.0/unicex/xt/user_websocket.py +0 -7
- unicex-0.4.0/unicex/xt/websocket_manager.py +0 -11
- unicex-0.4.0/unicex.egg-info/PKG-INFO +0 -170
- {unicex-0.4.0 → unicex-0.7.0}/LICENSE +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/setup.cfg +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/_abc/uni_websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/_base/__init__.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/_base/websocket.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/binance/client.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/binance/uni_client.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/binance/uni_websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/binance/user_websocket.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/binance/websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bitget/client.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bitget/uni_client.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bitget/user_websocket.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bitget/websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bybit/client.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bybit/uni_client.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bybit/uni_websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bybit/user_websocket.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/bybit/websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/exceptions.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/gateio/client.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/gateio/uni_client.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/gateio/uni_websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/gateio/user_websocket.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/gateio/websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/hyperliquid/uni_websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/hyperliquid/user_websocket.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/hyperliquid/websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/mexc/client.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/mexc/uni_websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/mexc/user_websocket.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/mexc/websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/okx/client.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/okx/uni_websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/okx/user_websocket.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/okx/websocket_manager.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex/utils.py +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex.egg-info/dependency_links.txt +0 -0
- {unicex-0.4.0 → unicex-0.7.0}/unicex.egg-info/top_level.txt +0 -0
unicex-0.7.0/PKG-INFO
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: unicex
|
|
3
|
+
Version: 0.7.0
|
|
4
|
+
Summary: Unified Crypto Exchange API
|
|
5
|
+
Author-email: LoveBloodAndDiamonds <ayazshakirzyanov27@gmail.com>
|
|
6
|
+
License: BSD 3-Clause License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2025, LoveBloodAndDiamonds
|
|
9
|
+
|
|
10
|
+
Redistribution and use in source and binary forms, with or without
|
|
11
|
+
modification, are permitted provided that the following conditions are met:
|
|
12
|
+
|
|
13
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
14
|
+
list of conditions and the following disclaimer.
|
|
15
|
+
|
|
16
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
17
|
+
this list of conditions and the following disclaimer in the documentation
|
|
18
|
+
and/or other materials provided with the distribution.
|
|
19
|
+
|
|
20
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
21
|
+
contributors may be used to endorse or promote products derived from
|
|
22
|
+
this software without specific prior written permission.
|
|
23
|
+
|
|
24
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
25
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
26
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
27
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
28
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
29
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
30
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
31
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
32
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
33
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
34
|
+
|
|
35
|
+
Project-URL: Github, https://github.com/LoveBloodAndDiamonds/uni-cex-api
|
|
36
|
+
Project-URL: Author, https://t.me/LoveBloodAndDiamonds
|
|
37
|
+
Project-URL: Readthedocs, https://unicex.readthedocs.io/ru/latest/
|
|
38
|
+
Requires-Python: >=3.12
|
|
39
|
+
Description-Content-Type: text/markdown
|
|
40
|
+
License-File: LICENSE
|
|
41
|
+
Requires-Dist: aiohttp>=3.12.15
|
|
42
|
+
Requires-Dist: eth-account>=0.13.7
|
|
43
|
+
Requires-Dist: loguru>=0.7.3
|
|
44
|
+
Requires-Dist: msgpack>=1.1.1
|
|
45
|
+
Requires-Dist: orjson>=3.11.3
|
|
46
|
+
Requires-Dist: websockets>=15.0.1
|
|
47
|
+
Dynamic: license-file
|
|
48
|
+
|
|
49
|
+
# Unified Crypto Exchange API
|
|
50
|
+
|
|
51
|
+
`unicex` — асинхронная библиотека для работы с криптовалютными биржами, реализующая унифицированный интерфейс поверх «сырых» REST и WebSocket API разных бирж.
|
|
52
|
+
|
|
53
|
+
## ✅ Статус реализации
|
|
54
|
+
|
|
55
|
+
| Exchange | Client | Auth | WS Manager | User WS | Uni Client | Uni WS Manager | ExchangeInfo |
|
|
56
|
+
|-----------------|--------|------|------------|---------|------------|----------------|--------------|
|
|
57
|
+
| **Binance** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
58
|
+
| **Bitget** | ✓ | ✓ | ✓ | | ✓ | | |
|
|
59
|
+
| **Bybit** | ✓ | ✓ | | | ✓ | | |
|
|
60
|
+
| **Gateio** | ✓ | ✓ | | | ✓ | | |
|
|
61
|
+
| **Hyperliquid** | ✓ | ✓ | | | ✓ | | |
|
|
62
|
+
| **Mexc** | ✓ | ✓ | | | ✓ | | |
|
|
63
|
+
| **Okx** | | ✓ | | | ✓ | | ✓ |
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
### 📖 Описание колонок
|
|
68
|
+
|
|
69
|
+
- **Client** – Обертки над HTTP методами следующих разделов: market, order, position, account.
|
|
70
|
+
- **Auth** – Поддержка авторизации и приватных эндпоинтов.
|
|
71
|
+
- **WS Manager** – Обертки над вебсокетами биржи.
|
|
72
|
+
- **User WS** – Поддержка пользовательских вебсокетов.
|
|
73
|
+
- **UniClient** –Унифированный клиент.
|
|
74
|
+
- **UniWebsocketManager** – Унифированный менеджер вебсокетов.
|
|
75
|
+
- **ExchangeInfo** - Информация о бирже для округления цен и объемов
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 🚀 Быстрый старт
|
|
79
|
+
|
|
80
|
+
- Установка: `pip install unicex` или из исходников: `pip install -e .`
|
|
81
|
+
- Библиотека полностью асинхронная. Примеры импорта:
|
|
82
|
+
- Сырые клиенты: `from unicex.binance import Client`
|
|
83
|
+
- Унифицированные клиенты: `from unicex.binance import UniClient`
|
|
84
|
+
- Вебсокет менеджеры: `from unicex.binance import WebsocketManager, UniWebsocketManager`
|
|
85
|
+
|
|
86
|
+
### Пример: Получение рыночных данных через API
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
import asyncio
|
|
90
|
+
|
|
91
|
+
from unicex import Exchange, Timeframe, get_uni_client
|
|
92
|
+
|
|
93
|
+
# Выбираем биржу, с которой хотим работать.
|
|
94
|
+
# Поддерживаются: Binance, Bybit, Bitget, Mexc, Gateio, Hyperliquid и другие.
|
|
95
|
+
exchange = Exchange.BYBIT
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
async def main() -> None:
|
|
99
|
+
"""Пример простого использования унифицированного клиента unicex."""
|
|
100
|
+
# 1️⃣ Создаём клиент для выбранной биржи
|
|
101
|
+
client = await get_uni_client(exchange).create()
|
|
102
|
+
|
|
103
|
+
# 2️⃣ Получаем открытый интерес по всем контрактам
|
|
104
|
+
open_interest = await client.open_interest()
|
|
105
|
+
print(open_interest)
|
|
106
|
+
|
|
107
|
+
# Пример вывода:
|
|
108
|
+
# {
|
|
109
|
+
# "BTCUSDT": {"t": 1759669833728, "v": 61099320.0},
|
|
110
|
+
# "ETHUSDT": {"t": 1759669833728, "v": 16302340.0},
|
|
111
|
+
# "SOLUSDT": {"t": 1759669833728, "v": 3427780.0},
|
|
112
|
+
# ...
|
|
113
|
+
# }
|
|
114
|
+
|
|
115
|
+
# 3️⃣ Можно точно так же получать другие данные в едином формате:
|
|
116
|
+
await client.tickers() # список всех тикеров
|
|
117
|
+
await client.futures_tickers() # тикеры фьючерсов
|
|
118
|
+
await client.ticker_24hr() # статистика за 24 часа (spot)
|
|
119
|
+
await client.futures_ticker_24hr() # статистика за 24 часа (futures)
|
|
120
|
+
await client.klines("BTCUSDT", Timeframe.MIN_5) # свечи спота
|
|
121
|
+
await client.futures_klines("BTCUSDT", Timeframe.HOUR_1) # свечи фьючерсов
|
|
122
|
+
await client.funding_rate() # ставка финансирования
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
if __name__ == "__main__":
|
|
126
|
+
asyncio.run(main())
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Пример: Получение данных в реальном времени через Websocket API
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
import asyncio
|
|
134
|
+
from unicex import Exchange, TradeDict, get_uni_websocket_manager
|
|
135
|
+
from unicex.enums import Timeframe
|
|
136
|
+
|
|
137
|
+
# Выбираем биржу, с которой хотим работать.
|
|
138
|
+
# Поддерживаются: Binance, Bybit, Bitget, Mexc, Gateio, Hyperliquid и другие.
|
|
139
|
+
exchange = Exchange.BITGET
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
async def main() -> None:
|
|
143
|
+
"""Пример простого использования унифицированного менеджера Websocket от UniCEX."""
|
|
144
|
+
|
|
145
|
+
# 1️⃣ Создаём WebSocket-менеджер для выбранной биржи
|
|
146
|
+
ws_manager = get_uni_websocket_manager(exchange)()
|
|
147
|
+
|
|
148
|
+
# 2️⃣ Подключаемся к потоку сделок (aggTrades)
|
|
149
|
+
aggtrades_ws = ws_manager.aggtrades(
|
|
150
|
+
callback=callback,
|
|
151
|
+
symbols=["BTCUSDT", "ETHUSDT"],
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
# Запускаем получение данных
|
|
155
|
+
await aggtrades_ws.start()
|
|
156
|
+
|
|
157
|
+
# 3️⃣ Примеры других типов потоков:
|
|
158
|
+
futures_aggtrades_ws = ws_manager.futures_aggtrades(
|
|
159
|
+
callback=callback,
|
|
160
|
+
symbols=["BTCUSDT", "ETHUSDT"],
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
klines_ws = ws_manager.klines(
|
|
164
|
+
callback=callback,
|
|
165
|
+
symbols=["BTCUSDT", "ETHUSDT"],
|
|
166
|
+
timeframe=Timeframe.MIN_5,
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
futures_klines_ws = ws_manager.futures_klines(
|
|
170
|
+
callback=callback,
|
|
171
|
+
symbols=["BTCUSDT", "ETHUSDT"],
|
|
172
|
+
timeframe=Timeframe.MIN_1,
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
# 💡 Также у каждой биржи есть свой WebsocketManager:
|
|
176
|
+
# unicex.<exchange>.websocket_manager.WebsocketManager
|
|
177
|
+
# В нём реализованы остальные методы для работы с WS API.
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
async def callback(trade: TradeDict) -> None:
|
|
181
|
+
"""Обработка входящих данных из Websocket."""
|
|
182
|
+
print(trade)
|
|
183
|
+
# Пример вывода:
|
|
184
|
+
# {'t': 1759670527594, 's': 'BTCUSDT', 'S': 'BUY', 'p': 123238.87, 'v': 0.05}
|
|
185
|
+
# {'t': 1759670527594, 's': 'BTCUSDT', 'S': 'BUY', 'p': 123238.87, 'v': 0.04}
|
|
186
|
+
# {'t': 1759670346828, 's': 'ETHUSDT', 'S': 'SELL', 'p': 4535.0, 'v': 0.0044}
|
|
187
|
+
# {'t': 1759670347087, 's': 'ETHUSDT', 'S': 'BUY', 'p': 4534.91, 'v': 0.2712}
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
if __name__ == "__main__":
|
|
191
|
+
asyncio.run(main())
|
|
192
|
+
```
|
unicex-0.7.0/README.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Unified Crypto Exchange API
|
|
2
|
+
|
|
3
|
+
`unicex` — асинхронная библиотека для работы с криптовалютными биржами, реализующая унифицированный интерфейс поверх «сырых» REST и WebSocket API разных бирж.
|
|
4
|
+
|
|
5
|
+
## ✅ Статус реализации
|
|
6
|
+
|
|
7
|
+
| Exchange | Client | Auth | WS Manager | User WS | Uni Client | Uni WS Manager | ExchangeInfo |
|
|
8
|
+
|-----------------|--------|------|------------|---------|------------|----------------|--------------|
|
|
9
|
+
| **Binance** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
10
|
+
| **Bitget** | ✓ | ✓ | ✓ | | ✓ | | |
|
|
11
|
+
| **Bybit** | ✓ | ✓ | | | ✓ | | |
|
|
12
|
+
| **Gateio** | ✓ | ✓ | | | ✓ | | |
|
|
13
|
+
| **Hyperliquid** | ✓ | ✓ | | | ✓ | | |
|
|
14
|
+
| **Mexc** | ✓ | ✓ | | | ✓ | | |
|
|
15
|
+
| **Okx** | | ✓ | | | ✓ | | ✓ |
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### 📖 Описание колонок
|
|
20
|
+
|
|
21
|
+
- **Client** – Обертки над HTTP методами следующих разделов: market, order, position, account.
|
|
22
|
+
- **Auth** – Поддержка авторизации и приватных эндпоинтов.
|
|
23
|
+
- **WS Manager** – Обертки над вебсокетами биржи.
|
|
24
|
+
- **User WS** – Поддержка пользовательских вебсокетов.
|
|
25
|
+
- **UniClient** –Унифированный клиент.
|
|
26
|
+
- **UniWebsocketManager** – Унифированный менеджер вебсокетов.
|
|
27
|
+
- **ExchangeInfo** - Информация о бирже для округления цен и объемов
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 🚀 Быстрый старт
|
|
31
|
+
|
|
32
|
+
- Установка: `pip install unicex` или из исходников: `pip install -e .`
|
|
33
|
+
- Библиотека полностью асинхронная. Примеры импорта:
|
|
34
|
+
- Сырые клиенты: `from unicex.binance import Client`
|
|
35
|
+
- Унифицированные клиенты: `from unicex.binance import UniClient`
|
|
36
|
+
- Вебсокет менеджеры: `from unicex.binance import WebsocketManager, UniWebsocketManager`
|
|
37
|
+
|
|
38
|
+
### Пример: Получение рыночных данных через API
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
import asyncio
|
|
42
|
+
|
|
43
|
+
from unicex import Exchange, Timeframe, get_uni_client
|
|
44
|
+
|
|
45
|
+
# Выбираем биржу, с которой хотим работать.
|
|
46
|
+
# Поддерживаются: Binance, Bybit, Bitget, Mexc, Gateio, Hyperliquid и другие.
|
|
47
|
+
exchange = Exchange.BYBIT
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
async def main() -> None:
|
|
51
|
+
"""Пример простого использования унифицированного клиента unicex."""
|
|
52
|
+
# 1️⃣ Создаём клиент для выбранной биржи
|
|
53
|
+
client = await get_uni_client(exchange).create()
|
|
54
|
+
|
|
55
|
+
# 2️⃣ Получаем открытый интерес по всем контрактам
|
|
56
|
+
open_interest = await client.open_interest()
|
|
57
|
+
print(open_interest)
|
|
58
|
+
|
|
59
|
+
# Пример вывода:
|
|
60
|
+
# {
|
|
61
|
+
# "BTCUSDT": {"t": 1759669833728, "v": 61099320.0},
|
|
62
|
+
# "ETHUSDT": {"t": 1759669833728, "v": 16302340.0},
|
|
63
|
+
# "SOLUSDT": {"t": 1759669833728, "v": 3427780.0},
|
|
64
|
+
# ...
|
|
65
|
+
# }
|
|
66
|
+
|
|
67
|
+
# 3️⃣ Можно точно так же получать другие данные в едином формате:
|
|
68
|
+
await client.tickers() # список всех тикеров
|
|
69
|
+
await client.futures_tickers() # тикеры фьючерсов
|
|
70
|
+
await client.ticker_24hr() # статистика за 24 часа (spot)
|
|
71
|
+
await client.futures_ticker_24hr() # статистика за 24 часа (futures)
|
|
72
|
+
await client.klines("BTCUSDT", Timeframe.MIN_5) # свечи спота
|
|
73
|
+
await client.futures_klines("BTCUSDT", Timeframe.HOUR_1) # свечи фьючерсов
|
|
74
|
+
await client.funding_rate() # ставка финансирования
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
if __name__ == "__main__":
|
|
78
|
+
asyncio.run(main())
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Пример: Получение данных в реальном времени через Websocket API
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
import asyncio
|
|
86
|
+
from unicex import Exchange, TradeDict, get_uni_websocket_manager
|
|
87
|
+
from unicex.enums import Timeframe
|
|
88
|
+
|
|
89
|
+
# Выбираем биржу, с которой хотим работать.
|
|
90
|
+
# Поддерживаются: Binance, Bybit, Bitget, Mexc, Gateio, Hyperliquid и другие.
|
|
91
|
+
exchange = Exchange.BITGET
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
async def main() -> None:
|
|
95
|
+
"""Пример простого использования унифицированного менеджера Websocket от UniCEX."""
|
|
96
|
+
|
|
97
|
+
# 1️⃣ Создаём WebSocket-менеджер для выбранной биржи
|
|
98
|
+
ws_manager = get_uni_websocket_manager(exchange)()
|
|
99
|
+
|
|
100
|
+
# 2️⃣ Подключаемся к потоку сделок (aggTrades)
|
|
101
|
+
aggtrades_ws = ws_manager.aggtrades(
|
|
102
|
+
callback=callback,
|
|
103
|
+
symbols=["BTCUSDT", "ETHUSDT"],
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Запускаем получение данных
|
|
107
|
+
await aggtrades_ws.start()
|
|
108
|
+
|
|
109
|
+
# 3️⃣ Примеры других типов потоков:
|
|
110
|
+
futures_aggtrades_ws = ws_manager.futures_aggtrades(
|
|
111
|
+
callback=callback,
|
|
112
|
+
symbols=["BTCUSDT", "ETHUSDT"],
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
klines_ws = ws_manager.klines(
|
|
116
|
+
callback=callback,
|
|
117
|
+
symbols=["BTCUSDT", "ETHUSDT"],
|
|
118
|
+
timeframe=Timeframe.MIN_5,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
futures_klines_ws = ws_manager.futures_klines(
|
|
122
|
+
callback=callback,
|
|
123
|
+
symbols=["BTCUSDT", "ETHUSDT"],
|
|
124
|
+
timeframe=Timeframe.MIN_1,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
# 💡 Также у каждой биржи есть свой WebsocketManager:
|
|
128
|
+
# unicex.<exchange>.websocket_manager.WebsocketManager
|
|
129
|
+
# В нём реализованы остальные методы для работы с WS API.
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
async def callback(trade: TradeDict) -> None:
|
|
133
|
+
"""Обработка входящих данных из Websocket."""
|
|
134
|
+
print(trade)
|
|
135
|
+
# Пример вывода:
|
|
136
|
+
# {'t': 1759670527594, 's': 'BTCUSDT', 'S': 'BUY', 'p': 123238.87, 'v': 0.05}
|
|
137
|
+
# {'t': 1759670527594, 's': 'BTCUSDT', 'S': 'BUY', 'p': 123238.87, 'v': 0.04}
|
|
138
|
+
# {'t': 1759670346828, 's': 'ETHUSDT', 'S': 'SELL', 'p': 4535.0, 'v': 0.0044}
|
|
139
|
+
# {'t': 1759670347087, 's': 'ETHUSDT', 'S': 'BUY', 'p': 4534.91, 'v': 0.2712}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
if __name__ == "__main__":
|
|
143
|
+
asyncio.run(main())
|
|
144
|
+
```
|
|
@@ -4,7 +4,7 @@ name = "unicex"
|
|
|
4
4
|
# • PATCH (x.y.Z) → увеличивается при багфиксе, который не ломает совместимость.
|
|
5
5
|
# • MINOR (x.Y.z) → увеличивается при добавлении новой функциональности, но без ломающих изменений (backward-compatible).
|
|
6
6
|
# • MAJOR (X.y.z) → увеличивается при изменениях, которые ломают обратную совместимость.
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.7.0"
|
|
8
8
|
|
|
9
9
|
description = "Unified Crypto Exchange API "
|
|
10
10
|
readme = "README.md"
|
|
@@ -15,7 +15,9 @@ authors = [
|
|
|
15
15
|
requires-python = ">=3.12"
|
|
16
16
|
dependencies = [
|
|
17
17
|
"aiohttp>=3.12.15",
|
|
18
|
+
"eth-account>=0.13.7",
|
|
18
19
|
"loguru>=0.7.3",
|
|
20
|
+
"msgpack>=1.1.1",
|
|
19
21
|
"orjson>=3.11.3",
|
|
20
22
|
"websockets>=15.0.1",
|
|
21
23
|
]
|
|
@@ -4,18 +4,28 @@ __all__ = [
|
|
|
4
4
|
# Mappers
|
|
5
5
|
"get_uni_client",
|
|
6
6
|
"get_uni_websocket_manager",
|
|
7
|
+
"get_exchange_info",
|
|
8
|
+
# Exchanges info
|
|
9
|
+
"load_exchanges_info",
|
|
10
|
+
"start_exchanges_info",
|
|
7
11
|
# Enums
|
|
8
12
|
"MarketType",
|
|
9
13
|
"Exchange",
|
|
10
14
|
"Timeframe",
|
|
11
15
|
"Side",
|
|
12
16
|
# Types
|
|
17
|
+
"TickerDailyDict",
|
|
18
|
+
"TickerDailyItem",
|
|
13
19
|
"KlineDict",
|
|
14
|
-
"AggTradeDict",
|
|
15
20
|
"TradeDict",
|
|
16
|
-
"
|
|
21
|
+
"AggTradeDict",
|
|
17
22
|
"RequestMethod",
|
|
18
23
|
"LoggerLike",
|
|
24
|
+
"AccountType",
|
|
25
|
+
"OpenInterestDict",
|
|
26
|
+
"OpenInterestItem",
|
|
27
|
+
"TickerInfoItem",
|
|
28
|
+
"TickersInfoDict",
|
|
19
29
|
# Interfaces
|
|
20
30
|
"IUniClient",
|
|
21
31
|
"IUniWebsocketManager",
|
|
@@ -28,109 +38,62 @@ __all__ = [
|
|
|
28
38
|
"BinanceWebsocketManager",
|
|
29
39
|
"BinanceUniWebsocketManager",
|
|
30
40
|
"BinanceUserWebsocket",
|
|
41
|
+
"BinanceExchangeInfo",
|
|
31
42
|
# Bitget
|
|
32
43
|
"BitgetClient",
|
|
33
44
|
"BitgetUniClient",
|
|
34
45
|
"BitgetUniWebsocketManager",
|
|
35
46
|
"BitgetWebsocketManager",
|
|
36
47
|
"BitgetUserWebsocket",
|
|
37
|
-
|
|
38
|
-
"BitrueClient",
|
|
39
|
-
"BitrueUniClient",
|
|
40
|
-
"BitrueUniWebsocketManager",
|
|
41
|
-
"BitrueWebsocketManager",
|
|
42
|
-
"BitrueUserWebsocket",
|
|
48
|
+
"BitgetExchangeInfo",
|
|
43
49
|
# Mexc
|
|
44
50
|
"MexcClient",
|
|
45
51
|
"MexcUniClient",
|
|
46
52
|
"MexcUniWebsocketManager",
|
|
47
53
|
"MexcWebsocketManager",
|
|
48
54
|
"MexcUserWebsocket",
|
|
55
|
+
"MexcExchangeInfo",
|
|
49
56
|
# Bybit
|
|
50
57
|
"BybitClient",
|
|
51
58
|
"BybitUniClient",
|
|
52
59
|
"BybitUniWebsocketManager",
|
|
53
60
|
"BybitWebsocketManager",
|
|
54
61
|
"BybitUserWebsocket",
|
|
62
|
+
"BybitExchangeInfo",
|
|
55
63
|
# Okx
|
|
56
64
|
"OkxClient",
|
|
57
65
|
"OkxUniClient",
|
|
58
66
|
"OkxUniWebsocketManager",
|
|
59
67
|
"OkxWebsocketManager",
|
|
60
68
|
"OkxUserWebsocket",
|
|
69
|
+
"OkxExchangeInfo",
|
|
61
70
|
# Hyperliquid
|
|
62
71
|
"HyperliquidClient",
|
|
63
72
|
"HyperliquidUniClient",
|
|
64
73
|
"HyperliquidUniWebsocketManager",
|
|
65
74
|
"HyperliquidWebsocketManager",
|
|
66
75
|
"HyperliquidUserWebsocket",
|
|
76
|
+
"HyperliquidExchangeInfo",
|
|
67
77
|
# Gateio
|
|
68
78
|
"GateioClient",
|
|
69
79
|
"GateioUniClient",
|
|
70
80
|
"GateioUniWebsocketManager",
|
|
71
81
|
"GateioWebsocketManager",
|
|
72
82
|
"GateioUserWebsocket",
|
|
73
|
-
|
|
74
|
-
"BitunixClient",
|
|
75
|
-
"BitunixUniClient",
|
|
76
|
-
"BitunixUniWebsocketManager",
|
|
77
|
-
"BitunixWebsocketManager",
|
|
78
|
-
"BitunixUserWebsocket",
|
|
79
|
-
# Btse
|
|
80
|
-
"BtseClient",
|
|
81
|
-
"BtseUniClient",
|
|
82
|
-
"BtseUniWebsocketManager",
|
|
83
|
-
"BtseWebsocketManager",
|
|
84
|
-
"BtseUserWebsocket",
|
|
85
|
-
# Kcex
|
|
86
|
-
"KcexClient",
|
|
87
|
-
"KcexUniClient",
|
|
88
|
-
"KcexUniWebsocketManager",
|
|
89
|
-
"KcexWebsocketManager",
|
|
90
|
-
"KcexUserWebsocket",
|
|
91
|
-
# Kraken
|
|
92
|
-
"KrakenClient",
|
|
93
|
-
"KrakenUniClient",
|
|
94
|
-
"KrakenUniWebsocketManager",
|
|
95
|
-
"KrakenWebsocketManager",
|
|
96
|
-
"KrakenUserWebsocket",
|
|
97
|
-
# Kucoin
|
|
98
|
-
"KucoinClient",
|
|
99
|
-
"KucoinUniClient",
|
|
100
|
-
"KucoinUniWebsocketManager",
|
|
101
|
-
"KucoinWebsocketManager",
|
|
102
|
-
"KucoinUserWebsocket",
|
|
103
|
-
# Weex
|
|
104
|
-
"WeexClient",
|
|
105
|
-
"WeexUniClient",
|
|
106
|
-
"WeexUniWebsocketManager",
|
|
107
|
-
"WeexWebsocketManager",
|
|
108
|
-
"WeexUserWebsocket",
|
|
109
|
-
# Xt
|
|
110
|
-
"XtClient",
|
|
111
|
-
"XtUniClient",
|
|
112
|
-
"XtUniWebsocketManager",
|
|
113
|
-
"XtWebsocketManager",
|
|
114
|
-
"XtUserWebsocket",
|
|
83
|
+
"GateioExchangeInfo",
|
|
115
84
|
]
|
|
116
85
|
|
|
117
86
|
# ruff: noqa
|
|
118
87
|
|
|
119
88
|
# abstract & base
|
|
89
|
+
import asyncio
|
|
120
90
|
from ._abc import IUniClient, IUniWebsocketManager
|
|
121
91
|
from ._base import BaseClient, Websocket
|
|
122
92
|
|
|
123
93
|
# enums, mappers, types
|
|
124
94
|
from .enums import Exchange, MarketType, Side, Timeframe
|
|
125
|
-
from .mapper import get_uni_client, get_uni_websocket_manager
|
|
126
|
-
from .types import
|
|
127
|
-
AggTradeDict,
|
|
128
|
-
KlineDict,
|
|
129
|
-
LoggerLike,
|
|
130
|
-
RequestMethod,
|
|
131
|
-
TickerDailyDict,
|
|
132
|
-
TradeDict,
|
|
133
|
-
)
|
|
95
|
+
from .mapper import get_uni_client, get_uni_websocket_manager, get_exchange_info
|
|
96
|
+
from .types import *
|
|
134
97
|
|
|
135
98
|
# exchanges
|
|
136
99
|
|
|
@@ -140,6 +103,7 @@ from .binance import (
|
|
|
140
103
|
UniWebsocketManager as BinanceUniWebsocketManager,
|
|
141
104
|
UserWebsocket as BinanceUserWebsocket,
|
|
142
105
|
WebsocketManager as BinanceWebsocketManager,
|
|
106
|
+
ExchangeInfo as BinanceExchangeInfo,
|
|
143
107
|
)
|
|
144
108
|
|
|
145
109
|
from .bitget import (
|
|
@@ -148,30 +112,7 @@ from .bitget import (
|
|
|
148
112
|
UniWebsocketManager as BitgetUniWebsocketManager,
|
|
149
113
|
UserWebsocket as BitgetUserWebsocket,
|
|
150
114
|
WebsocketManager as BitgetWebsocketManager,
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
from .bitrue import (
|
|
154
|
-
Client as BitrueClient,
|
|
155
|
-
UniClient as BitrueUniClient,
|
|
156
|
-
UniWebsocketManager as BitrueUniWebsocketManager,
|
|
157
|
-
UserWebsocket as BitrueUserWebsocket,
|
|
158
|
-
WebsocketManager as BitrueWebsocketManager,
|
|
159
|
-
)
|
|
160
|
-
|
|
161
|
-
from .bitunix import (
|
|
162
|
-
Client as BitunixClient,
|
|
163
|
-
UniClient as BitunixUniClient,
|
|
164
|
-
UniWebsocketManager as BitunixUniWebsocketManager,
|
|
165
|
-
UserWebsocket as BitunixUserWebsocket,
|
|
166
|
-
WebsocketManager as BitunixWebsocketManager,
|
|
167
|
-
)
|
|
168
|
-
|
|
169
|
-
from .btse import (
|
|
170
|
-
Client as BtseClient,
|
|
171
|
-
UniClient as BtseUniClient,
|
|
172
|
-
UniWebsocketManager as BtseUniWebsocketManager,
|
|
173
|
-
UserWebsocket as BtseUserWebsocket,
|
|
174
|
-
WebsocketManager as BtseWebsocketManager,
|
|
115
|
+
ExchangeInfo as BitgetExchangeInfo,
|
|
175
116
|
)
|
|
176
117
|
|
|
177
118
|
from .bybit import (
|
|
@@ -180,6 +121,7 @@ from .bybit import (
|
|
|
180
121
|
UniWebsocketManager as BybitUniWebsocketManager,
|
|
181
122
|
UserWebsocket as BybitUserWebsocket,
|
|
182
123
|
WebsocketManager as BybitWebsocketManager,
|
|
124
|
+
ExchangeInfo as BybitExchangeInfo,
|
|
183
125
|
)
|
|
184
126
|
|
|
185
127
|
from .gateio import (
|
|
@@ -188,6 +130,7 @@ from .gateio import (
|
|
|
188
130
|
UniWebsocketManager as GateioUniWebsocketManager,
|
|
189
131
|
UserWebsocket as GateioUserWebsocket,
|
|
190
132
|
WebsocketManager as GateioWebsocketManager,
|
|
133
|
+
ExchangeInfo as GateioExchangeInfo,
|
|
191
134
|
)
|
|
192
135
|
|
|
193
136
|
from .hyperliquid import (
|
|
@@ -196,30 +139,7 @@ from .hyperliquid import (
|
|
|
196
139
|
UniWebsocketManager as HyperliquidUniWebsocketManager,
|
|
197
140
|
UserWebsocket as HyperliquidUserWebsocket,
|
|
198
141
|
WebsocketManager as HyperliquidWebsocketManager,
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
from .kcex import (
|
|
202
|
-
Client as KcexClient,
|
|
203
|
-
UniClient as KcexUniClient,
|
|
204
|
-
UniWebsocketManager as KcexUniWebsocketManager,
|
|
205
|
-
UserWebsocket as KcexUserWebsocket,
|
|
206
|
-
WebsocketManager as KcexWebsocketManager,
|
|
207
|
-
)
|
|
208
|
-
|
|
209
|
-
from .kraken import (
|
|
210
|
-
Client as KrakenClient,
|
|
211
|
-
UniClient as KrakenUniClient,
|
|
212
|
-
UniWebsocketManager as KrakenUniWebsocketManager,
|
|
213
|
-
UserWebsocket as KrakenUserWebsocket,
|
|
214
|
-
WebsocketManager as KrakenWebsocketManager,
|
|
215
|
-
)
|
|
216
|
-
|
|
217
|
-
from .kucoin import (
|
|
218
|
-
Client as KucoinClient,
|
|
219
|
-
UniClient as KucoinUniClient,
|
|
220
|
-
UniWebsocketManager as KucoinUniWebsocketManager,
|
|
221
|
-
UserWebsocket as KucoinUserWebsocket,
|
|
222
|
-
WebsocketManager as KucoinWebsocketManager,
|
|
142
|
+
ExchangeInfo as HyperliquidExchangeInfo,
|
|
223
143
|
)
|
|
224
144
|
|
|
225
145
|
from .mexc import (
|
|
@@ -228,6 +148,7 @@ from .mexc import (
|
|
|
228
148
|
UniWebsocketManager as MexcUniWebsocketManager,
|
|
229
149
|
UserWebsocket as MexcUserWebsocket,
|
|
230
150
|
WebsocketManager as MexcWebsocketManager,
|
|
151
|
+
ExchangeInfo as MexcExchangeInfo,
|
|
231
152
|
)
|
|
232
153
|
|
|
233
154
|
from .okx import (
|
|
@@ -236,20 +157,31 @@ from .okx import (
|
|
|
236
157
|
UniWebsocketManager as OkxUniWebsocketManager,
|
|
237
158
|
UserWebsocket as OkxUserWebsocket,
|
|
238
159
|
WebsocketManager as OkxWebsocketManager,
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
)
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
160
|
+
ExchangeInfo as OkxExchangeInfo,
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
async def load_exchanges_info() -> None:
|
|
165
|
+
"""Единожды загружает информацию о тикерах на всех биржах."""
|
|
166
|
+
await asyncio.gather(
|
|
167
|
+
BinanceExchangeInfo.load_exchange_info(),
|
|
168
|
+
BitgetExchangeInfo.load_exchange_info(),
|
|
169
|
+
BybitExchangeInfo.load_exchange_info(),
|
|
170
|
+
GateioExchangeInfo.load_exchange_info(),
|
|
171
|
+
HyperliquidExchangeInfo.load_exchange_info(),
|
|
172
|
+
MexcExchangeInfo.load_exchange_info(),
|
|
173
|
+
OkxExchangeInfo.load_exchange_info(),
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
async def start_exchanges_info(parse_interval_seconds: int = 60 * 60) -> None:
|
|
178
|
+
"""Запускает цикл обновления информации о тикерах на всех биржах."""
|
|
179
|
+
asyncio.gather(
|
|
180
|
+
BinanceExchangeInfo.start(parse_interval_seconds),
|
|
181
|
+
BitgetExchangeInfo.start(parse_interval_seconds),
|
|
182
|
+
BybitExchangeInfo.start(parse_interval_seconds),
|
|
183
|
+
GateioExchangeInfo.start(parse_interval_seconds),
|
|
184
|
+
HyperliquidExchangeInfo.start(parse_interval_seconds),
|
|
185
|
+
MexcExchangeInfo.start(parse_interval_seconds),
|
|
186
|
+
OkxExchangeInfo.start(parse_interval_seconds),
|
|
187
|
+
)
|