unicex 0.13.17__py3-none-any.whl
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/__init__.py +200 -0
- unicex/_abc/__init__.py +11 -0
- unicex/_abc/exchange_info.py +216 -0
- unicex/_abc/uni_client.py +329 -0
- unicex/_abc/uni_websocket_manager.py +294 -0
- unicex/_base/__init__.py +9 -0
- unicex/_base/client.py +214 -0
- unicex/_base/websocket.py +261 -0
- unicex/binance/__init__.py +27 -0
- unicex/binance/adapter.py +202 -0
- unicex/binance/client.py +1577 -0
- unicex/binance/exchange_info.py +62 -0
- unicex/binance/uni_client.py +188 -0
- unicex/binance/uni_websocket_manager.py +166 -0
- unicex/binance/user_websocket.py +186 -0
- unicex/binance/websocket_manager.py +912 -0
- unicex/bitget/__init__.py +27 -0
- unicex/bitget/adapter.py +188 -0
- unicex/bitget/client.py +2514 -0
- unicex/bitget/exchange_info.py +48 -0
- unicex/bitget/uni_client.py +198 -0
- unicex/bitget/uni_websocket_manager.py +275 -0
- unicex/bitget/user_websocket.py +7 -0
- unicex/bitget/websocket_manager.py +232 -0
- unicex/bybit/__init__.py +27 -0
- unicex/bybit/adapter.py +208 -0
- unicex/bybit/client.py +1876 -0
- unicex/bybit/exchange_info.py +53 -0
- unicex/bybit/uni_client.py +200 -0
- unicex/bybit/uni_websocket_manager.py +291 -0
- unicex/bybit/user_websocket.py +7 -0
- unicex/bybit/websocket_manager.py +339 -0
- unicex/enums.py +273 -0
- unicex/exceptions.py +64 -0
- unicex/extra.py +335 -0
- unicex/gate/__init__.py +27 -0
- unicex/gate/adapter.py +178 -0
- unicex/gate/client.py +1667 -0
- unicex/gate/exchange_info.py +55 -0
- unicex/gate/uni_client.py +214 -0
- unicex/gate/uni_websocket_manager.py +269 -0
- unicex/gate/user_websocket.py +7 -0
- unicex/gate/websocket_manager.py +513 -0
- unicex/hyperliquid/__init__.py +27 -0
- unicex/hyperliquid/adapter.py +261 -0
- unicex/hyperliquid/client.py +2315 -0
- unicex/hyperliquid/exchange_info.py +119 -0
- unicex/hyperliquid/uni_client.py +325 -0
- unicex/hyperliquid/uni_websocket_manager.py +269 -0
- unicex/hyperliquid/user_websocket.py +7 -0
- unicex/hyperliquid/websocket_manager.py +393 -0
- unicex/mapper.py +111 -0
- unicex/mexc/__init__.py +27 -0
- unicex/mexc/_spot_ws_proto/PrivateAccountV3Api_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/PrivateDealsV3Api_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/PrivateOrdersV3Api_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/PublicAggreBookTickerV3Api_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/PublicAggreDealsV3Api_pb2.py +40 -0
- unicex/mexc/_spot_ws_proto/PublicAggreDepthsV3Api_pb2.py +40 -0
- unicex/mexc/_spot_ws_proto/PublicBookTickerBatchV3Api_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/PublicBookTickerV3Api_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/PublicDealsV3Api_pb2.py +40 -0
- unicex/mexc/_spot_ws_proto/PublicFuture_pb2.py +103 -0
- unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsV3Api_pb2.py +40 -0
- unicex/mexc/_spot_ws_proto/PublicLimitDepthsV3Api_pb2.py +40 -0
- unicex/mexc/_spot_ws_proto/PublicMiniTickerV3Api_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/PublicMiniTickersV3Api_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/PublicSpotKlineV3Api_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/PushDataV3ApiWrapper_pb2.py +38 -0
- unicex/mexc/_spot_ws_proto/__init__.py +335 -0
- unicex/mexc/adapter.py +239 -0
- unicex/mexc/client.py +846 -0
- unicex/mexc/exchange_info.py +47 -0
- unicex/mexc/uni_client.py +211 -0
- unicex/mexc/uni_websocket_manager.py +269 -0
- unicex/mexc/user_websocket.py +7 -0
- unicex/mexc/websocket_manager.py +456 -0
- unicex/okx/__init__.py +27 -0
- unicex/okx/adapter.py +150 -0
- unicex/okx/client.py +2864 -0
- unicex/okx/exchange_info.py +47 -0
- unicex/okx/uni_client.py +202 -0
- unicex/okx/uni_websocket_manager.py +269 -0
- unicex/okx/user_websocket.py +7 -0
- unicex/okx/websocket_manager.py +743 -0
- unicex/types.py +164 -0
- unicex/utils.py +218 -0
- unicex-0.13.17.dist-info/METADATA +243 -0
- unicex-0.13.17.dist-info/RECORD +93 -0
- unicex-0.13.17.dist-info/WHEEL +5 -0
- unicex-0.13.17.dist-info/licenses/LICENSE +28 -0
- unicex-0.13.17.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
__all__ = ["IUniWebsocketManager"]
|
|
2
|
+
|
|
3
|
+
from collections.abc import Awaitable, Callable, Sequence
|
|
4
|
+
from typing import Any, overload
|
|
5
|
+
|
|
6
|
+
from unicex._abc import IUniWebsocketManager
|
|
7
|
+
from unicex._base import Websocket
|
|
8
|
+
from unicex.enums import Timeframe
|
|
9
|
+
from unicex.types import LoggerLike
|
|
10
|
+
|
|
11
|
+
from .adapter import Adapter
|
|
12
|
+
from .client import Client
|
|
13
|
+
from .uni_client import UniClient
|
|
14
|
+
from .websocket_manager import WebsocketManager
|
|
15
|
+
|
|
16
|
+
type CallbackType = Callable[[Any], Awaitable[None]]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class UniWebsocketManager(IUniWebsocketManager):
|
|
20
|
+
"""Реализация менеджера асинхронных унифицированных вебсокетов."""
|
|
21
|
+
|
|
22
|
+
def __init__(
|
|
23
|
+
self, client: Client | UniClient | None = None, logger: LoggerLike | None = None
|
|
24
|
+
) -> None:
|
|
25
|
+
"""Инициализирует унифицированный менеджер вебсокетов.
|
|
26
|
+
|
|
27
|
+
Параметры:
|
|
28
|
+
client (`Client | UniClient | None`): Клиент Hyperliquid или унифицированный клиент. Нужен для подключения к приватным топикам.
|
|
29
|
+
logger (`LoggerLike | None`): Логгер для записи логов.
|
|
30
|
+
"""
|
|
31
|
+
super().__init__(client=client, logger=logger)
|
|
32
|
+
self._websocket_manager = WebsocketManager(self._client) # type: ignore
|
|
33
|
+
self._adapter = Adapter()
|
|
34
|
+
|
|
35
|
+
@overload
|
|
36
|
+
def klines(
|
|
37
|
+
self,
|
|
38
|
+
callback: CallbackType,
|
|
39
|
+
timeframe: Timeframe,
|
|
40
|
+
*,
|
|
41
|
+
symbol: str,
|
|
42
|
+
symbols: None = None,
|
|
43
|
+
) -> Websocket: ...
|
|
44
|
+
|
|
45
|
+
@overload
|
|
46
|
+
def klines(
|
|
47
|
+
self,
|
|
48
|
+
callback: CallbackType,
|
|
49
|
+
timeframe: Timeframe,
|
|
50
|
+
*,
|
|
51
|
+
symbol: None = None,
|
|
52
|
+
symbols: Sequence[str],
|
|
53
|
+
) -> Websocket: ...
|
|
54
|
+
|
|
55
|
+
def klines(
|
|
56
|
+
self,
|
|
57
|
+
callback: CallbackType,
|
|
58
|
+
timeframe: Timeframe,
|
|
59
|
+
symbol: str | None = None,
|
|
60
|
+
symbols: Sequence[str] | None = None,
|
|
61
|
+
) -> Websocket:
|
|
62
|
+
"""Открывает стрим свечей (spot) с унификацией сообщений.
|
|
63
|
+
|
|
64
|
+
Параметры:
|
|
65
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
66
|
+
timeframe (`Timeframe`): Временной интервал свечей.
|
|
67
|
+
symbol (`str | None`): Один символ для подписки.
|
|
68
|
+
symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
|
|
69
|
+
|
|
70
|
+
Должен быть указан либо `symbol`, либо `symbols`.
|
|
71
|
+
|
|
72
|
+
Возвращает:
|
|
73
|
+
`Websocket`: Экземпляр вебсокета для управления соединением.
|
|
74
|
+
"""
|
|
75
|
+
raise NotImplementedError()
|
|
76
|
+
|
|
77
|
+
@overload
|
|
78
|
+
def futures_klines(
|
|
79
|
+
self,
|
|
80
|
+
callback: CallbackType,
|
|
81
|
+
timeframe: Timeframe,
|
|
82
|
+
*,
|
|
83
|
+
symbol: str,
|
|
84
|
+
symbols: None = None,
|
|
85
|
+
) -> Websocket: ...
|
|
86
|
+
|
|
87
|
+
@overload
|
|
88
|
+
def futures_klines(
|
|
89
|
+
self,
|
|
90
|
+
callback: CallbackType,
|
|
91
|
+
timeframe: Timeframe,
|
|
92
|
+
*,
|
|
93
|
+
symbol: None = None,
|
|
94
|
+
symbols: Sequence[str],
|
|
95
|
+
) -> Websocket: ...
|
|
96
|
+
|
|
97
|
+
def futures_klines(
|
|
98
|
+
self,
|
|
99
|
+
callback: CallbackType,
|
|
100
|
+
timeframe: Timeframe,
|
|
101
|
+
symbol: str | None = None,
|
|
102
|
+
symbols: Sequence[str] | None = None,
|
|
103
|
+
) -> Websocket:
|
|
104
|
+
"""Открывает стрим свечей (futures) с унификацией сообщений.
|
|
105
|
+
|
|
106
|
+
Параметры:
|
|
107
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
108
|
+
timeframe (`Timeframe`): Временной интервал свечей.
|
|
109
|
+
symbol (`str | None`): Один символ для подписки.
|
|
110
|
+
symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
|
|
111
|
+
|
|
112
|
+
Должен быть указан либо `symbol`, либо `symbols`.
|
|
113
|
+
|
|
114
|
+
Возвращает:
|
|
115
|
+
`Websocket`: Экземпляр вебсокета.
|
|
116
|
+
"""
|
|
117
|
+
raise NotImplementedError()
|
|
118
|
+
|
|
119
|
+
@overload
|
|
120
|
+
def trades(
|
|
121
|
+
self,
|
|
122
|
+
callback: CallbackType,
|
|
123
|
+
*,
|
|
124
|
+
symbol: str,
|
|
125
|
+
symbols: None = None,
|
|
126
|
+
) -> Websocket: ...
|
|
127
|
+
|
|
128
|
+
@overload
|
|
129
|
+
def trades(
|
|
130
|
+
self,
|
|
131
|
+
callback: CallbackType,
|
|
132
|
+
*,
|
|
133
|
+
symbol: None = None,
|
|
134
|
+
symbols: Sequence[str],
|
|
135
|
+
) -> Websocket: ...
|
|
136
|
+
|
|
137
|
+
def trades(
|
|
138
|
+
self,
|
|
139
|
+
callback: CallbackType,
|
|
140
|
+
symbol: str | None = None,
|
|
141
|
+
symbols: Sequence[str] | None = None,
|
|
142
|
+
) -> Websocket:
|
|
143
|
+
"""Открывает стрим сделок (spot) с унификацией сообщений.
|
|
144
|
+
|
|
145
|
+
Параметры:
|
|
146
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
147
|
+
symbol (`str | None`): Один символ для подписки.
|
|
148
|
+
symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
|
|
149
|
+
|
|
150
|
+
Должен быть указан либо `symbol`, либо `symbols`.
|
|
151
|
+
|
|
152
|
+
Возвращает:
|
|
153
|
+
`Websocket`: Экземпляр вебсокета.
|
|
154
|
+
"""
|
|
155
|
+
raise NotImplementedError()
|
|
156
|
+
|
|
157
|
+
@overload
|
|
158
|
+
def aggtrades(
|
|
159
|
+
self,
|
|
160
|
+
callback: CallbackType,
|
|
161
|
+
*,
|
|
162
|
+
symbol: str,
|
|
163
|
+
symbols: None = None,
|
|
164
|
+
) -> Websocket: ...
|
|
165
|
+
|
|
166
|
+
@overload
|
|
167
|
+
def aggtrades(
|
|
168
|
+
self,
|
|
169
|
+
callback: CallbackType,
|
|
170
|
+
*,
|
|
171
|
+
symbol: None = None,
|
|
172
|
+
symbols: Sequence[str],
|
|
173
|
+
) -> Websocket: ...
|
|
174
|
+
|
|
175
|
+
def aggtrades(
|
|
176
|
+
self,
|
|
177
|
+
callback: CallbackType,
|
|
178
|
+
symbol: str | None = None,
|
|
179
|
+
symbols: Sequence[str] | None = None,
|
|
180
|
+
) -> Websocket:
|
|
181
|
+
"""Открывает стрим агрегированных сделок (spot) с унификацией сообщений.
|
|
182
|
+
|
|
183
|
+
Параметры:
|
|
184
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
185
|
+
symbol (`str | None`): Один символ для подписки.
|
|
186
|
+
symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
|
|
187
|
+
|
|
188
|
+
Должен быть указан либо `symbol`, либо `symbols`.
|
|
189
|
+
|
|
190
|
+
Возвращает:
|
|
191
|
+
`Websocket`: Экземпляр вебсокета.
|
|
192
|
+
"""
|
|
193
|
+
raise NotImplementedError()
|
|
194
|
+
|
|
195
|
+
@overload
|
|
196
|
+
def futures_trades(
|
|
197
|
+
self,
|
|
198
|
+
callback: CallbackType,
|
|
199
|
+
*,
|
|
200
|
+
symbol: str,
|
|
201
|
+
symbols: None = None,
|
|
202
|
+
) -> Websocket: ...
|
|
203
|
+
|
|
204
|
+
@overload
|
|
205
|
+
def futures_trades(
|
|
206
|
+
self,
|
|
207
|
+
callback: CallbackType,
|
|
208
|
+
*,
|
|
209
|
+
symbol: None = None,
|
|
210
|
+
symbols: Sequence[str],
|
|
211
|
+
) -> Websocket: ...
|
|
212
|
+
|
|
213
|
+
def futures_trades(
|
|
214
|
+
self,
|
|
215
|
+
callback: CallbackType,
|
|
216
|
+
symbol: str | None = None,
|
|
217
|
+
symbols: Sequence[str] | None = None,
|
|
218
|
+
) -> Websocket:
|
|
219
|
+
"""Открывает стрим сделок (futures) с унификацией сообщений.
|
|
220
|
+
|
|
221
|
+
Параметры:
|
|
222
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
223
|
+
symbol (`str | None`): Один символ для подписки.
|
|
224
|
+
symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
|
|
225
|
+
|
|
226
|
+
Должен быть указан либо `symbol`, либо `symbols`.
|
|
227
|
+
|
|
228
|
+
Возвращает:
|
|
229
|
+
`Websocket`: Экземпляр вебсокета.
|
|
230
|
+
"""
|
|
231
|
+
raise NotImplementedError()
|
|
232
|
+
|
|
233
|
+
@overload
|
|
234
|
+
def futures_aggtrades(
|
|
235
|
+
self,
|
|
236
|
+
callback: CallbackType,
|
|
237
|
+
*,
|
|
238
|
+
symbol: str,
|
|
239
|
+
symbols: None = None,
|
|
240
|
+
) -> Websocket: ...
|
|
241
|
+
|
|
242
|
+
@overload
|
|
243
|
+
def futures_aggtrades(
|
|
244
|
+
self,
|
|
245
|
+
callback: CallbackType,
|
|
246
|
+
*,
|
|
247
|
+
symbol: None = None,
|
|
248
|
+
symbols: Sequence[str],
|
|
249
|
+
) -> Websocket: ...
|
|
250
|
+
|
|
251
|
+
def futures_aggtrades(
|
|
252
|
+
self,
|
|
253
|
+
callback: CallbackType,
|
|
254
|
+
symbol: str | None = None,
|
|
255
|
+
symbols: Sequence[str] | None = None,
|
|
256
|
+
) -> Websocket:
|
|
257
|
+
"""Открывает стрим агрегированных сделок (futures) с унификацией сообщений.
|
|
258
|
+
|
|
259
|
+
Параметры:
|
|
260
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
261
|
+
symbol (`str | None`): Один символ для подписки.
|
|
262
|
+
symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
|
|
263
|
+
|
|
264
|
+
Должен быть указан либо `symbol`, либо `symbols`.
|
|
265
|
+
|
|
266
|
+
Возвращает:
|
|
267
|
+
`Websocket`: Экземпляр вебсокета.
|
|
268
|
+
"""
|
|
269
|
+
raise NotImplementedError()
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
__all__ = ["WebsocketManager"]
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from collections.abc import Awaitable, Callable
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from unicex._base import Websocket
|
|
8
|
+
|
|
9
|
+
from .client import Client
|
|
10
|
+
|
|
11
|
+
type CallbackType = Callable[[Any], Awaitable[None]]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class WebsocketManager:
|
|
15
|
+
"""Менеджер асинхронных вебсокетов для Hyperliquid."""
|
|
16
|
+
|
|
17
|
+
_URL: str = "wss://api.hyperliquid.xyz/ws"
|
|
18
|
+
"""Базовый URL для вебсокета."""
|
|
19
|
+
|
|
20
|
+
def __init__(self, client: Client | None = None, **ws_kwargs: Any) -> None:
|
|
21
|
+
"""Инициализирует менеджер вебсокетов для Hyperliquid.
|
|
22
|
+
|
|
23
|
+
Параметры:
|
|
24
|
+
client (`Client | None`): Клиент для выполнения запросов. Нужен, чтобы открыть приватные вебсокеты.
|
|
25
|
+
ws_kwargs (`dict[str, Any]`): Дополнительные аргументы, которые прокидываются в `Websocket`.
|
|
26
|
+
"""
|
|
27
|
+
self.client = client
|
|
28
|
+
self._ws_kwargs = {
|
|
29
|
+
"ping_message": json.dumps({"method": "ping"}),
|
|
30
|
+
"ping_interval": 30,
|
|
31
|
+
**ws_kwargs,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
def _create_subscription_message(self, subscription_type: str, **params: Any) -> str:
|
|
35
|
+
"""Создает сообщение подписки для Hyperliquid.
|
|
36
|
+
|
|
37
|
+
Параметры:
|
|
38
|
+
subscription_type (`str`): Тип подписки.
|
|
39
|
+
params (`dict[str, Any]`): Параметры подписки.
|
|
40
|
+
|
|
41
|
+
Возвращает:
|
|
42
|
+
`str`: JSON-строка с сообщением подписки.
|
|
43
|
+
"""
|
|
44
|
+
subscription = {"type": subscription_type, **params}
|
|
45
|
+
message = {"method": "subscribe", "subscription": subscription}
|
|
46
|
+
return json.dumps(message)
|
|
47
|
+
|
|
48
|
+
def all_mids(self, callback: CallbackType, dex: str | None = None) -> Websocket:
|
|
49
|
+
"""Создает вебсокет для получения средних цен всех активов.
|
|
50
|
+
|
|
51
|
+
Параметры:
|
|
52
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
53
|
+
dex (`str | None`): Perp dex для получения средних цен. Если не указан, используется первый perp dex.
|
|
54
|
+
|
|
55
|
+
Возвращает:
|
|
56
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
57
|
+
"""
|
|
58
|
+
params = {}
|
|
59
|
+
if dex is not None:
|
|
60
|
+
params["dex"] = dex
|
|
61
|
+
|
|
62
|
+
subscription_message = self._create_subscription_message("allMids", **params)
|
|
63
|
+
return Websocket(
|
|
64
|
+
callback=callback,
|
|
65
|
+
url=self._URL,
|
|
66
|
+
subscription_messages=[subscription_message],
|
|
67
|
+
**self._ws_kwargs,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
def notification(self, callback: CallbackType, user: str) -> Websocket:
|
|
71
|
+
"""Создает вебсокет для получения уведомлений пользователя.
|
|
72
|
+
|
|
73
|
+
Параметры:
|
|
74
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
75
|
+
user (`str`): Адрес пользователя.
|
|
76
|
+
|
|
77
|
+
Возвращает:
|
|
78
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
79
|
+
"""
|
|
80
|
+
subscription_message = self._create_subscription_message("notification", user=user)
|
|
81
|
+
return Websocket(
|
|
82
|
+
callback=callback,
|
|
83
|
+
url=self._URL,
|
|
84
|
+
subscription_messages=[subscription_message],
|
|
85
|
+
**self._ws_kwargs,
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
def web_data2(self, callback: CallbackType, user: str) -> Websocket:
|
|
89
|
+
"""Создает вебсокет для получения веб-данных пользователя.
|
|
90
|
+
|
|
91
|
+
Параметры:
|
|
92
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
93
|
+
user (`str`): Адрес пользователя.
|
|
94
|
+
|
|
95
|
+
Возвращает:
|
|
96
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
97
|
+
"""
|
|
98
|
+
subscription_message = self._create_subscription_message("webData2", user=user)
|
|
99
|
+
return Websocket(
|
|
100
|
+
callback=callback,
|
|
101
|
+
url=self._URL,
|
|
102
|
+
subscription_messages=[subscription_message],
|
|
103
|
+
**self._ws_kwargs,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
def candle(
|
|
107
|
+
self,
|
|
108
|
+
callback: CallbackType,
|
|
109
|
+
interval: str,
|
|
110
|
+
coin: str | None = None,
|
|
111
|
+
coins: list[str] | None = None,
|
|
112
|
+
) -> Websocket:
|
|
113
|
+
"""Создает вебсокет для получения свечей.
|
|
114
|
+
|
|
115
|
+
Параметры:
|
|
116
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
117
|
+
coin (`str`): Символ монеты.
|
|
118
|
+
coins (`list[str]`): Список символов монет для мультиплекс подключения.
|
|
119
|
+
interval (`str`): Интервал свечей ("1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "8h", "12h", "1d", "3d", "1w", "1M").
|
|
120
|
+
|
|
121
|
+
Возвращает:
|
|
122
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
123
|
+
"""
|
|
124
|
+
if coin and coins:
|
|
125
|
+
raise ValueError("Parameters coin and coins cannot be used together")
|
|
126
|
+
if not (coin or coins):
|
|
127
|
+
raise ValueError("Either coin or coins must be provided")
|
|
128
|
+
if coin:
|
|
129
|
+
coins = [coin]
|
|
130
|
+
subscription_messages = [
|
|
131
|
+
self._create_subscription_message("candle", coin=coin, interval=interval)
|
|
132
|
+
for coin in coins # type: ignore
|
|
133
|
+
]
|
|
134
|
+
return Websocket(
|
|
135
|
+
callback=callback,
|
|
136
|
+
url=self._URL,
|
|
137
|
+
subscription_messages=subscription_messages,
|
|
138
|
+
**self._ws_kwargs,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
def l2_book(
|
|
142
|
+
self,
|
|
143
|
+
callback: CallbackType,
|
|
144
|
+
coin: str,
|
|
145
|
+
n_sig_figs: int | None = None,
|
|
146
|
+
mantissa: int | None = None,
|
|
147
|
+
) -> Websocket:
|
|
148
|
+
"""Создает вебсокет для получения стакана L2.
|
|
149
|
+
|
|
150
|
+
Параметры:
|
|
151
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
152
|
+
coin (`str`): Символ монеты.
|
|
153
|
+
n_sig_figs (`int | None`): Количество значащих цифр для округления цен.
|
|
154
|
+
mantissa (`int | None`): Мантисса для округления цен.
|
|
155
|
+
|
|
156
|
+
Возвращает:
|
|
157
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
158
|
+
"""
|
|
159
|
+
params = {"coin": coin}
|
|
160
|
+
if n_sig_figs is not None:
|
|
161
|
+
params["nSigFigs"] = n_sig_figs # type: ignore
|
|
162
|
+
if mantissa is not None:
|
|
163
|
+
params["mantissa"] = mantissa # type: ignore
|
|
164
|
+
|
|
165
|
+
subscription_message = self._create_subscription_message("l2Book", **params)
|
|
166
|
+
return Websocket(
|
|
167
|
+
callback=callback,
|
|
168
|
+
url=self._URL,
|
|
169
|
+
subscription_messages=[subscription_message],
|
|
170
|
+
**self._ws_kwargs,
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
def trades(
|
|
174
|
+
self, callback: CallbackType, coin: str | None = None, coins: list[str] | None = None
|
|
175
|
+
) -> Websocket:
|
|
176
|
+
"""Создает вебсокет для получения сделок.
|
|
177
|
+
|
|
178
|
+
Параметры:
|
|
179
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
180
|
+
coin (`str | None`): Символ монеты.
|
|
181
|
+
coins (`list[str] | None`): Список символов монет для мультиплекс подключения.
|
|
182
|
+
|
|
183
|
+
Возвращает:
|
|
184
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
185
|
+
"""
|
|
186
|
+
if coin and coins:
|
|
187
|
+
raise ValueError("Parameters coin and coins cannot be used together")
|
|
188
|
+
if not (coin or coins):
|
|
189
|
+
raise ValueError("Either coin or coins must be provided")
|
|
190
|
+
if coin:
|
|
191
|
+
coins = [coin]
|
|
192
|
+
subscription_messages = [
|
|
193
|
+
self._create_subscription_message("trades", coin=coin)
|
|
194
|
+
for coin in coins # type: ignore
|
|
195
|
+
]
|
|
196
|
+
return Websocket(
|
|
197
|
+
callback=callback,
|
|
198
|
+
url=self._URL,
|
|
199
|
+
subscription_messages=subscription_messages,
|
|
200
|
+
**self._ws_kwargs,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
def order_updates(self, callback: CallbackType, user: str) -> Websocket:
|
|
204
|
+
"""Создает вебсокет для получения обновлений ордеров пользователя.
|
|
205
|
+
|
|
206
|
+
Параметры:
|
|
207
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
208
|
+
user (`str`): Адрес пользователя.
|
|
209
|
+
|
|
210
|
+
Возвращает:
|
|
211
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
212
|
+
"""
|
|
213
|
+
subscription_message = self._create_subscription_message("orderUpdates", user=user)
|
|
214
|
+
return Websocket(
|
|
215
|
+
callback=callback,
|
|
216
|
+
url=self._URL,
|
|
217
|
+
subscription_messages=[subscription_message],
|
|
218
|
+
**self._ws_kwargs,
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
def user_events(self, callback: CallbackType, user: str) -> Websocket:
|
|
222
|
+
"""Создает вебсокет для получения событий пользователя.
|
|
223
|
+
|
|
224
|
+
Параметры:
|
|
225
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
226
|
+
user (`str`): Адрес пользователя.
|
|
227
|
+
|
|
228
|
+
Возвращает:
|
|
229
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
230
|
+
"""
|
|
231
|
+
subscription_message = self._create_subscription_message("userEvents", user=user)
|
|
232
|
+
return Websocket(
|
|
233
|
+
callback=callback,
|
|
234
|
+
url=self._URL,
|
|
235
|
+
subscription_messages=[subscription_message],
|
|
236
|
+
**self._ws_kwargs,
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
def user_fills(
|
|
240
|
+
self, callback: CallbackType, user: str, aggregate_by_time: bool | None = None
|
|
241
|
+
) -> Websocket:
|
|
242
|
+
"""Создает вебсокет для получения исполнений пользователя.
|
|
243
|
+
|
|
244
|
+
Параметры:
|
|
245
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
246
|
+
user (`str`): Адрес пользователя.
|
|
247
|
+
aggregate_by_time (`bool | None`): Агрегировать по времени.
|
|
248
|
+
|
|
249
|
+
Возвращает:
|
|
250
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
251
|
+
"""
|
|
252
|
+
params = {"user": user}
|
|
253
|
+
if aggregate_by_time is not None:
|
|
254
|
+
params["aggregateByTime"] = aggregate_by_time # type: ignore
|
|
255
|
+
|
|
256
|
+
subscription_message = self._create_subscription_message("userFills", **params)
|
|
257
|
+
return Websocket(
|
|
258
|
+
callback=callback,
|
|
259
|
+
url=self._URL,
|
|
260
|
+
subscription_messages=[subscription_message],
|
|
261
|
+
**self._ws_kwargs,
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
def user_fundings(self, callback: CallbackType, user: str) -> Websocket:
|
|
265
|
+
"""Создает вебсокет для получения фандинга пользователя.
|
|
266
|
+
|
|
267
|
+
Параметры:
|
|
268
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
269
|
+
user (`str`): Адрес пользователя.
|
|
270
|
+
|
|
271
|
+
Возвращает:
|
|
272
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
273
|
+
"""
|
|
274
|
+
subscription_message = self._create_subscription_message("userFundings", user=user)
|
|
275
|
+
return Websocket(
|
|
276
|
+
callback=callback,
|
|
277
|
+
url=self._URL,
|
|
278
|
+
subscription_messages=[subscription_message],
|
|
279
|
+
**self._ws_kwargs,
|
|
280
|
+
)
|
|
281
|
+
|
|
282
|
+
def user_non_funding_ledger_updates(self, callback: CallbackType, user: str) -> Websocket:
|
|
283
|
+
"""Создает вебсокет для получения обновлений леджера пользователя (кроме фандинга).
|
|
284
|
+
|
|
285
|
+
Параметры:
|
|
286
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
287
|
+
user (`str`): Адрес пользователя.
|
|
288
|
+
|
|
289
|
+
Возвращает:
|
|
290
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
291
|
+
"""
|
|
292
|
+
subscription_message = self._create_subscription_message(
|
|
293
|
+
"userNonFundingLedgerUpdates", user=user
|
|
294
|
+
)
|
|
295
|
+
return Websocket(
|
|
296
|
+
callback=callback,
|
|
297
|
+
url=self._URL,
|
|
298
|
+
subscription_messages=[subscription_message],
|
|
299
|
+
**self._ws_kwargs,
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
def active_asset_ctx(self, callback: CallbackType, coin: str) -> Websocket:
|
|
303
|
+
"""Создает вебсокет для получения контекста активного актива.
|
|
304
|
+
|
|
305
|
+
Параметры:
|
|
306
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
307
|
+
coin (`str`): Символ монеты.
|
|
308
|
+
|
|
309
|
+
Возвращает:
|
|
310
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
311
|
+
"""
|
|
312
|
+
subscription_message = self._create_subscription_message("activeAssetCtx", coin=coin)
|
|
313
|
+
return Websocket(
|
|
314
|
+
callback=callback,
|
|
315
|
+
url=self._URL,
|
|
316
|
+
subscription_messages=[subscription_message],
|
|
317
|
+
**self._ws_kwargs,
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
def active_asset_data(self, callback: CallbackType, user: str, coin: str) -> Websocket:
|
|
321
|
+
"""Создает вебсокет для получения данных активного актива пользователя (только Perps).
|
|
322
|
+
|
|
323
|
+
Параметры:
|
|
324
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
325
|
+
user (`str`): Адрес пользователя.
|
|
326
|
+
coin (`str`): Символ монеты.
|
|
327
|
+
|
|
328
|
+
Возвращает:
|
|
329
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
330
|
+
"""
|
|
331
|
+
subscription_message = self._create_subscription_message(
|
|
332
|
+
"activeAssetData", user=user, coin=coin
|
|
333
|
+
)
|
|
334
|
+
return Websocket(
|
|
335
|
+
callback=callback,
|
|
336
|
+
url=self._URL,
|
|
337
|
+
subscription_messages=[subscription_message],
|
|
338
|
+
**self._ws_kwargs,
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
def user_twap_slice_fills(self, callback: CallbackType, user: str) -> Websocket:
|
|
342
|
+
"""Создает вебсокет для получения TWAP slice fills пользователя.
|
|
343
|
+
|
|
344
|
+
Параметры:
|
|
345
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
346
|
+
user (`str`): Адрес пользователя.
|
|
347
|
+
|
|
348
|
+
Возвращает:
|
|
349
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
350
|
+
"""
|
|
351
|
+
subscription_message = self._create_subscription_message("userTwapSliceFills", user=user)
|
|
352
|
+
return Websocket(
|
|
353
|
+
callback=callback,
|
|
354
|
+
url=self._URL,
|
|
355
|
+
subscription_messages=[subscription_message],
|
|
356
|
+
**self._ws_kwargs,
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
def user_twap_history(self, callback: CallbackType, user: str) -> Websocket:
|
|
360
|
+
"""Создает вебсокет для получения TWAP истории пользователя.
|
|
361
|
+
|
|
362
|
+
Параметры:
|
|
363
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
364
|
+
user (`str`): Адрес пользователя.
|
|
365
|
+
|
|
366
|
+
Возвращает:
|
|
367
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
368
|
+
"""
|
|
369
|
+
subscription_message = self._create_subscription_message("userTwapHistory", user=user)
|
|
370
|
+
return Websocket(
|
|
371
|
+
callback=callback,
|
|
372
|
+
url=self._URL,
|
|
373
|
+
subscription_messages=[subscription_message],
|
|
374
|
+
**self._ws_kwargs,
|
|
375
|
+
)
|
|
376
|
+
|
|
377
|
+
def bbo(self, callback: CallbackType, coin: str) -> Websocket:
|
|
378
|
+
"""Создает вебсокет для получения лучшего бида/аска.
|
|
379
|
+
|
|
380
|
+
Параметры:
|
|
381
|
+
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
382
|
+
coin (`str`): Символ монеты.
|
|
383
|
+
|
|
384
|
+
Возвращает:
|
|
385
|
+
`Websocket`: Объект для управления вебсокет соединением.
|
|
386
|
+
"""
|
|
387
|
+
subscription_message = self._create_subscription_message("bbo", coin=coin)
|
|
388
|
+
return Websocket(
|
|
389
|
+
callback=callback,
|
|
390
|
+
url=self._URL,
|
|
391
|
+
subscription_messages=[subscription_message],
|
|
392
|
+
**self._ws_kwargs,
|
|
393
|
+
)
|