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.
Files changed (93) hide show
  1. unicex/__init__.py +200 -0
  2. unicex/_abc/__init__.py +11 -0
  3. unicex/_abc/exchange_info.py +216 -0
  4. unicex/_abc/uni_client.py +329 -0
  5. unicex/_abc/uni_websocket_manager.py +294 -0
  6. unicex/_base/__init__.py +9 -0
  7. unicex/_base/client.py +214 -0
  8. unicex/_base/websocket.py +261 -0
  9. unicex/binance/__init__.py +27 -0
  10. unicex/binance/adapter.py +202 -0
  11. unicex/binance/client.py +1577 -0
  12. unicex/binance/exchange_info.py +62 -0
  13. unicex/binance/uni_client.py +188 -0
  14. unicex/binance/uni_websocket_manager.py +166 -0
  15. unicex/binance/user_websocket.py +186 -0
  16. unicex/binance/websocket_manager.py +912 -0
  17. unicex/bitget/__init__.py +27 -0
  18. unicex/bitget/adapter.py +188 -0
  19. unicex/bitget/client.py +2514 -0
  20. unicex/bitget/exchange_info.py +48 -0
  21. unicex/bitget/uni_client.py +198 -0
  22. unicex/bitget/uni_websocket_manager.py +275 -0
  23. unicex/bitget/user_websocket.py +7 -0
  24. unicex/bitget/websocket_manager.py +232 -0
  25. unicex/bybit/__init__.py +27 -0
  26. unicex/bybit/adapter.py +208 -0
  27. unicex/bybit/client.py +1876 -0
  28. unicex/bybit/exchange_info.py +53 -0
  29. unicex/bybit/uni_client.py +200 -0
  30. unicex/bybit/uni_websocket_manager.py +291 -0
  31. unicex/bybit/user_websocket.py +7 -0
  32. unicex/bybit/websocket_manager.py +339 -0
  33. unicex/enums.py +273 -0
  34. unicex/exceptions.py +64 -0
  35. unicex/extra.py +335 -0
  36. unicex/gate/__init__.py +27 -0
  37. unicex/gate/adapter.py +178 -0
  38. unicex/gate/client.py +1667 -0
  39. unicex/gate/exchange_info.py +55 -0
  40. unicex/gate/uni_client.py +214 -0
  41. unicex/gate/uni_websocket_manager.py +269 -0
  42. unicex/gate/user_websocket.py +7 -0
  43. unicex/gate/websocket_manager.py +513 -0
  44. unicex/hyperliquid/__init__.py +27 -0
  45. unicex/hyperliquid/adapter.py +261 -0
  46. unicex/hyperliquid/client.py +2315 -0
  47. unicex/hyperliquid/exchange_info.py +119 -0
  48. unicex/hyperliquid/uni_client.py +325 -0
  49. unicex/hyperliquid/uni_websocket_manager.py +269 -0
  50. unicex/hyperliquid/user_websocket.py +7 -0
  51. unicex/hyperliquid/websocket_manager.py +393 -0
  52. unicex/mapper.py +111 -0
  53. unicex/mexc/__init__.py +27 -0
  54. unicex/mexc/_spot_ws_proto/PrivateAccountV3Api_pb2.py +38 -0
  55. unicex/mexc/_spot_ws_proto/PrivateDealsV3Api_pb2.py +38 -0
  56. unicex/mexc/_spot_ws_proto/PrivateOrdersV3Api_pb2.py +38 -0
  57. unicex/mexc/_spot_ws_proto/PublicAggreBookTickerV3Api_pb2.py +38 -0
  58. unicex/mexc/_spot_ws_proto/PublicAggreDealsV3Api_pb2.py +40 -0
  59. unicex/mexc/_spot_ws_proto/PublicAggreDepthsV3Api_pb2.py +40 -0
  60. unicex/mexc/_spot_ws_proto/PublicBookTickerBatchV3Api_pb2.py +38 -0
  61. unicex/mexc/_spot_ws_proto/PublicBookTickerV3Api_pb2.py +38 -0
  62. unicex/mexc/_spot_ws_proto/PublicDealsV3Api_pb2.py +40 -0
  63. unicex/mexc/_spot_ws_proto/PublicFuture_pb2.py +103 -0
  64. unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
  65. unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsV3Api_pb2.py +40 -0
  66. unicex/mexc/_spot_ws_proto/PublicLimitDepthsV3Api_pb2.py +40 -0
  67. unicex/mexc/_spot_ws_proto/PublicMiniTickerV3Api_pb2.py +38 -0
  68. unicex/mexc/_spot_ws_proto/PublicMiniTickersV3Api_pb2.py +38 -0
  69. unicex/mexc/_spot_ws_proto/PublicSpotKlineV3Api_pb2.py +38 -0
  70. unicex/mexc/_spot_ws_proto/PushDataV3ApiWrapper_pb2.py +38 -0
  71. unicex/mexc/_spot_ws_proto/__init__.py +335 -0
  72. unicex/mexc/adapter.py +239 -0
  73. unicex/mexc/client.py +846 -0
  74. unicex/mexc/exchange_info.py +47 -0
  75. unicex/mexc/uni_client.py +211 -0
  76. unicex/mexc/uni_websocket_manager.py +269 -0
  77. unicex/mexc/user_websocket.py +7 -0
  78. unicex/mexc/websocket_manager.py +456 -0
  79. unicex/okx/__init__.py +27 -0
  80. unicex/okx/adapter.py +150 -0
  81. unicex/okx/client.py +2864 -0
  82. unicex/okx/exchange_info.py +47 -0
  83. unicex/okx/uni_client.py +202 -0
  84. unicex/okx/uni_websocket_manager.py +269 -0
  85. unicex/okx/user_websocket.py +7 -0
  86. unicex/okx/websocket_manager.py +743 -0
  87. unicex/types.py +164 -0
  88. unicex/utils.py +218 -0
  89. unicex-0.13.17.dist-info/METADATA +243 -0
  90. unicex-0.13.17.dist-info/RECORD +93 -0
  91. unicex-0.13.17.dist-info/WHEEL +5 -0
  92. unicex-0.13.17.dist-info/licenses/LICENSE +28 -0
  93. unicex-0.13.17.dist-info/top_level.txt +1 -0
@@ -0,0 +1,743 @@
1
+ __all__ = ["WebsocketManager"]
2
+
3
+
4
+ import json
5
+ from collections.abc import Awaitable, Callable
6
+ from typing import Any, Literal
7
+
8
+ from unicex._base import Websocket
9
+
10
+ from .client import Client
11
+
12
+ type CallbackType = Callable[[Any], Awaitable[None]]
13
+
14
+
15
+ class WebsocketManager:
16
+ """Менеджер асинхронных вебсокетов для Okx."""
17
+
18
+ _BASE_URL = "wss://ws.okx.com:8443/ws"
19
+ """Базовый URL вебсокетов на Okx."""
20
+
21
+ _PUBLIC_URL = _BASE_URL + "/v5/public"
22
+ """Публичный URL вебсокетов на Okx."""
23
+
24
+ _BUSINESS_URL = _BASE_URL + "/v5/business"
25
+ """Бизнес-URL вебсокетов на Okx. (для топиков trades-all и candle)"""
26
+
27
+ def __init__(self, client: Client | None = None, **ws_kwargs: Any) -> None:
28
+ """Инициализирует менеджер вебсокетов для OKX.
29
+
30
+ Параметры:
31
+ client (`Client | None`): Клиент для выполнения запросов. Нужен, чтобы открыть приватные вебсокеты.
32
+ ws_kwargs (`dict[str, Any]`): Дополнительные аргументы, которые прокидываются в `Websocket`.
33
+ """
34
+ self.client = client
35
+ self._ws_kwargs = {"ping_message": "ping", **ws_kwargs}
36
+
37
+ def instruments(
38
+ self,
39
+ callback: CallbackType,
40
+ inst_type: Literal["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"],
41
+ ) -> Websocket:
42
+ """Создает вебсокет для получения изменений в состоянии инструментов.
43
+
44
+ https://www.okx.com/docs-v5/en/#public-data-websocket-instruments-channel
45
+
46
+ Параметры:
47
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
48
+ inst_type (`Literal["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]`): Тип инструмента.
49
+
50
+ Возвращает:
51
+ `Websocket`: Объект для управления вебсокет соединением.
52
+ """
53
+ subscription_message = json.dumps(
54
+ {
55
+ "op": "subscribe",
56
+ "args": [
57
+ {
58
+ "channel": "instruments",
59
+ "instType": inst_type,
60
+ }
61
+ ],
62
+ }
63
+ )
64
+
65
+ return Websocket(
66
+ callback=callback,
67
+ url=self._PUBLIC_URL,
68
+ subscription_messages=[subscription_message],
69
+ **self._ws_kwargs,
70
+ )
71
+
72
+ def open_interest(
73
+ self,
74
+ callback: CallbackType,
75
+ inst_id: str,
76
+ ) -> Websocket:
77
+ """Создает вебсокет для получения данных об открытом интересе.
78
+
79
+ https://www.okx.com/docs-v5/en/#public-data-websocket-open-interest-channel
80
+
81
+ Параметры:
82
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
83
+ inst_id (`str`): ID инструмента (например, "LTC-USD-SWAP").
84
+
85
+ Возвращает:
86
+ `Websocket`: Объект для управления вебсокет соединением.
87
+ """
88
+ subscription_message = json.dumps(
89
+ {
90
+ "op": "subscribe",
91
+ "args": [
92
+ {
93
+ "channel": "open-interest",
94
+ "instId": inst_id,
95
+ }
96
+ ],
97
+ }
98
+ )
99
+
100
+ return Websocket(
101
+ callback=callback,
102
+ url=self._PUBLIC_URL,
103
+ subscription_messages=[subscription_message],
104
+ **self._ws_kwargs,
105
+ )
106
+
107
+ def funding_rate(
108
+ self,
109
+ callback: CallbackType,
110
+ inst_id: str,
111
+ ) -> Websocket:
112
+ """Создает вебсокет для получения данных о ставке финансирования.
113
+
114
+ https://www.okx.com/docs-v5/en/#public-data-websocket-funding-rate-channel
115
+
116
+ Параметры:
117
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
118
+ inst_id (`str`): ID инструмента (например, "BTC-USD-SWAP").
119
+
120
+ Возвращает:
121
+ `Websocket`: Объект для управления вебсокет соединением.
122
+ """
123
+ subscription_message = json.dumps(
124
+ {
125
+ "op": "subscribe",
126
+ "args": [
127
+ {
128
+ "channel": "funding-rate",
129
+ "instId": inst_id,
130
+ }
131
+ ],
132
+ }
133
+ )
134
+
135
+ return Websocket(
136
+ callback=callback,
137
+ url=self._PUBLIC_URL,
138
+ subscription_messages=[subscription_message],
139
+ **self._ws_kwargs,
140
+ )
141
+
142
+ def price_limit(
143
+ self,
144
+ callback: CallbackType,
145
+ inst_id: str,
146
+ ) -> Websocket:
147
+ """Создает вебсокет для получения максимальной цены покупки и минимальной цены продажи инструментов.
148
+
149
+ https://www.okx.com/docs-v5/en/#public-data-websocket-price-limit-channel
150
+
151
+ Параметры:
152
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
153
+ inst_id (`str`): ID инструмента (например, "LTC-USD-190628").
154
+
155
+ Возвращает:
156
+ `Websocket`: Объект для управления вебсокет соединением.
157
+ """
158
+ subscription_message = json.dumps(
159
+ {
160
+ "op": "subscribe",
161
+ "args": [
162
+ {
163
+ "channel": "price-limit",
164
+ "instId": inst_id,
165
+ }
166
+ ],
167
+ }
168
+ )
169
+
170
+ return Websocket(
171
+ callback=callback,
172
+ url=self._PUBLIC_URL,
173
+ subscription_messages=[subscription_message],
174
+ **self._ws_kwargs,
175
+ )
176
+
177
+ def option_summary(
178
+ self,
179
+ callback: CallbackType,
180
+ inst_family: str,
181
+ ) -> Websocket:
182
+ """Создает вебсокет для получения детальной информации о ценах всех OPTION контрактов.
183
+
184
+ https://www.okx.com/docs-v5/en/#public-data-websocket-option-summary-channel
185
+
186
+ Параметры:
187
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
188
+ inst_family (`str`): Семейство инструментов (например, "BTC-USD").
189
+
190
+ Возвращает:
191
+ `Websocket`: Объект для управления вебсокет соединением.
192
+ """
193
+ subscription_message = json.dumps(
194
+ {
195
+ "op": "subscribe",
196
+ "args": [
197
+ {
198
+ "channel": "opt-summary",
199
+ "instFamily": inst_family,
200
+ }
201
+ ],
202
+ }
203
+ )
204
+
205
+ return Websocket(
206
+ callback=callback,
207
+ url=self._PUBLIC_URL,
208
+ subscription_messages=[subscription_message],
209
+ **self._ws_kwargs,
210
+ )
211
+
212
+ def estimated_price(
213
+ self,
214
+ callback: CallbackType,
215
+ inst_type: Literal["OPTION", "FUTURES"],
216
+ inst_family: str | None = None,
217
+ inst_id: str | None = None,
218
+ ) -> Websocket:
219
+ """Создает вебсокет для получения расчетной цены поставки/исполнения/расчета для FUTURES и OPTION контрактов.
220
+
221
+ https://www.okx.com/docs-v5/en/#public-data-websocket-estimated-delivery-exercise-settlement-price-channel
222
+
223
+ Параметры:
224
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
225
+ inst_type (`Literal["OPTION", "FUTURES"]`): Тип инструмента.
226
+ inst_family (`str | None`): Семейство инструментов (например, "BTC-USD"). Обязателен либо inst_family, либо inst_id.
227
+ inst_id (`str | None`): ID инструмента. Обязателен либо inst_family, либо inst_id.
228
+
229
+ Возвращает:
230
+ `Websocket`: Объект для управления вебсокет соединением.
231
+ """
232
+ if not inst_family and not inst_id:
233
+ raise ValueError("Either inst_family or inst_id must be provided")
234
+ if inst_family and inst_id:
235
+ raise ValueError("Only one of inst_family or inst_id should be provided")
236
+
237
+ args: dict[str, str] = {
238
+ "channel": "estimated-price",
239
+ "instType": inst_type,
240
+ }
241
+
242
+ if inst_family:
243
+ args["instFamily"] = inst_family
244
+ if inst_id:
245
+ args["instId"] = inst_id
246
+
247
+ subscription_message = json.dumps(
248
+ {
249
+ "op": "subscribe",
250
+ "args": [args],
251
+ }
252
+ )
253
+
254
+ return Websocket(
255
+ callback=callback,
256
+ url=self._PUBLIC_URL,
257
+ subscription_messages=[subscription_message],
258
+ **self._ws_kwargs,
259
+ )
260
+
261
+ def mark_price(
262
+ self,
263
+ callback: CallbackType,
264
+ inst_id: str,
265
+ ) -> Websocket:
266
+ """Создает вебсокет для получения маркировочной цены.
267
+
268
+ https://www.okx.com/docs-v5/en/#public-data-websocket-mark-price-channel
269
+
270
+ Параметры:
271
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
272
+ inst_id (`str`): ID инструмента (например, "LTC-USD-190628").
273
+
274
+ Возвращает:
275
+ `Websocket`: Объект для управления вебсокет соединением.
276
+ """
277
+ subscription_message = json.dumps(
278
+ {
279
+ "op": "subscribe",
280
+ "args": [
281
+ {
282
+ "channel": "mark-price",
283
+ "instId": inst_id,
284
+ }
285
+ ],
286
+ }
287
+ )
288
+
289
+ return Websocket(
290
+ callback=callback,
291
+ url=self._PUBLIC_URL,
292
+ subscription_messages=[subscription_message],
293
+ **self._ws_kwargs,
294
+ )
295
+
296
+ def index_tickers(
297
+ self,
298
+ callback: CallbackType,
299
+ inst_id: str,
300
+ ) -> Websocket:
301
+ """Создает вебсокет для получения данных индексных тикеров.
302
+
303
+ https://www.okx.com/docs-v5/en/#public-data-websocket-index-tickers-channel
304
+
305
+ Параметры:
306
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
307
+ inst_id (`str`): Индекс с USD, USDT, BTC, USDC в качестве котируемой валюты (например, "BTC-USDT").
308
+
309
+ Возвращает:
310
+ `Websocket`: Объект для управления вебсокет соединением.
311
+ """
312
+ subscription_message = json.dumps(
313
+ {
314
+ "op": "subscribe",
315
+ "args": [
316
+ {
317
+ "channel": "index-tickers",
318
+ "instId": inst_id,
319
+ }
320
+ ],
321
+ }
322
+ )
323
+
324
+ return Websocket(
325
+ callback=callback,
326
+ url=self._PUBLIC_URL,
327
+ subscription_messages=[subscription_message],
328
+ **self._ws_kwargs,
329
+ )
330
+
331
+ def mark_price_candlesticks(
332
+ self,
333
+ callback: CallbackType,
334
+ interval: Literal[
335
+ "3M",
336
+ "1M",
337
+ "1W",
338
+ "1D",
339
+ "2D",
340
+ "3D",
341
+ "5D",
342
+ "12H",
343
+ "6H",
344
+ "4H",
345
+ "2H",
346
+ "1H",
347
+ "30m",
348
+ "15m",
349
+ "5m",
350
+ "3m",
351
+ "1m",
352
+ "1Yutc",
353
+ "3Mutc",
354
+ "1Mutc",
355
+ "1Wutc",
356
+ "1Dutc",
357
+ "2Dutc",
358
+ "3Dutc",
359
+ "5Dutc",
360
+ "12Hutc",
361
+ "6Hutc",
362
+ ],
363
+ inst_id: str,
364
+ ) -> Websocket:
365
+ """Создает вебсокет для получения данных свечей маркировочной цены.
366
+
367
+ https://www.okx.com/docs-v5/en/#public-data-websocket-mark-price-candlesticks-channel
368
+
369
+ Параметры:
370
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
371
+ interval (`Literal`): Интервал свечей.
372
+ inst_id (`str`): ID инструмента (например, "BTC-USD-190628").
373
+
374
+ Возвращает:
375
+ `Websocket`: Объект для управления вебсокет соединением.
376
+ """
377
+ channel = f"mark-price-candle{interval}"
378
+ subscription_message = json.dumps(
379
+ {
380
+ "op": "subscribe",
381
+ "args": [
382
+ {
383
+ "channel": channel,
384
+ "instId": inst_id,
385
+ }
386
+ ],
387
+ }
388
+ )
389
+
390
+ return Websocket(
391
+ callback=callback,
392
+ url=self._BUSINESS_URL,
393
+ subscription_messages=[subscription_message],
394
+ **self._ws_kwargs,
395
+ )
396
+
397
+ def index_candlesticks(
398
+ self,
399
+ callback: CallbackType,
400
+ interval: Literal[
401
+ "3M",
402
+ "1M",
403
+ "1W",
404
+ "1D",
405
+ "2D",
406
+ "3D",
407
+ "5D",
408
+ "12H",
409
+ "6H",
410
+ "4H",
411
+ "2H",
412
+ "1H",
413
+ "30m",
414
+ "15m",
415
+ "5m",
416
+ "3m",
417
+ "1m",
418
+ "3Mutc",
419
+ "1Mutc",
420
+ "1Wutc",
421
+ "1Dutc",
422
+ "2Dutc",
423
+ "3Dutc",
424
+ "5Dutc",
425
+ "12Hutc",
426
+ "6Hutc",
427
+ ],
428
+ inst_id: str,
429
+ ) -> Websocket:
430
+ """Создает вебсокет для получения данных свечей индекса.
431
+
432
+ https://www.okx.com/docs-v5/en/#public-data-websocket-index-candlesticks-channel
433
+
434
+ Параметры:
435
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
436
+ interval (`Literal`): Интервал свечей.
437
+ inst_id (`str`): Индекс (например, "BTC-USD").
438
+
439
+ Возвращает:
440
+ `Websocket`: Объект для управления вебсокет соединением.
441
+ """
442
+ channel = f"index-candle{interval}"
443
+ subscription_message = json.dumps(
444
+ {
445
+ "op": "subscribe",
446
+ "args": [
447
+ {
448
+ "channel": channel,
449
+ "instId": inst_id,
450
+ }
451
+ ],
452
+ }
453
+ )
454
+
455
+ return Websocket(
456
+ callback=callback,
457
+ url=self._BUSINESS_URL,
458
+ subscription_messages=[subscription_message],
459
+ **self._ws_kwargs,
460
+ )
461
+
462
+ def liquidation_orders(
463
+ self,
464
+ callback: CallbackType,
465
+ inst_type: Literal["SWAP", "FUTURES", "MARGIN", "OPTION"],
466
+ ) -> Websocket:
467
+ """Создает вебсокет для получения недавних ордеров ликвидации.
468
+
469
+ https://www.okx.com/docs-v5/en/#public-data-websocket-liquidation-orders-channel
470
+
471
+ Параметры:
472
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
473
+ inst_type (`Literal["SWAP", "FUTURES", "MARGIN", "OPTION"]`): Тип инструмента.
474
+
475
+ Возвращает:
476
+ `Websocket`: Объект для управления вебсокет соединением.
477
+ """
478
+ subscription_message = json.dumps(
479
+ {
480
+ "op": "subscribe",
481
+ "args": [
482
+ {
483
+ "channel": "liquidation-orders",
484
+ "instType": inst_type,
485
+ }
486
+ ],
487
+ }
488
+ )
489
+
490
+ return Websocket(
491
+ callback=callback,
492
+ url=self._PUBLIC_URL,
493
+ subscription_messages=[subscription_message],
494
+ **self._ws_kwargs,
495
+ )
496
+
497
+ def adl_warning(
498
+ self,
499
+ callback: CallbackType,
500
+ inst_type: Literal["SWAP", "FUTURES", "OPTION"],
501
+ inst_family: str | None = None,
502
+ ) -> Websocket:
503
+ """Создает вебсокет для получения предупреждений об авто-делевередже.
504
+
505
+ https://www.okx.com/docs-v5/en/#public-data-websocket-adl-warning-channel
506
+
507
+ Параметры:
508
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
509
+ inst_type (`Literal["SWAP", "FUTURES", "OPTION"]`): Тип инструмента.
510
+ inst_family (`str | None`): Семейство инструментов (например, "BTC-USDT").
511
+
512
+ Возвращает:
513
+ `Websocket`: Объект для управления вебсокет соединением.
514
+ """
515
+ args: dict[str, str] = {
516
+ "channel": "adl-warning",
517
+ "instType": inst_type,
518
+ }
519
+
520
+ if inst_family:
521
+ args["instFamily"] = inst_family
522
+
523
+ subscription_message = json.dumps(
524
+ {
525
+ "op": "subscribe",
526
+ "args": [args],
527
+ }
528
+ )
529
+
530
+ return Websocket(
531
+ callback=callback,
532
+ url=self._PUBLIC_URL,
533
+ subscription_messages=[subscription_message],
534
+ **self._ws_kwargs,
535
+ )
536
+
537
+ def tickers(
538
+ self,
539
+ callback: CallbackType,
540
+ inst_id: str,
541
+ ) -> Websocket:
542
+ """Создает вебсокет для получения последней цены сделки, цены bid, цены ask и 24-часового объема торгов.
543
+
544
+ https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-tickers-channel
545
+
546
+ Параметры:
547
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
548
+ inst_id (`str`): ID инструмента (например, "BTC-USDT").
549
+
550
+ Возвращает:
551
+ `Websocket`: Объект для управления вебсокет соединением.
552
+ """
553
+ subscription_message = json.dumps(
554
+ {
555
+ "op": "subscribe",
556
+ "args": [
557
+ {
558
+ "channel": "tickers",
559
+ "instId": inst_id,
560
+ }
561
+ ],
562
+ }
563
+ )
564
+
565
+ return Websocket(
566
+ callback=callback,
567
+ url=self._PUBLIC_URL,
568
+ subscription_messages=[subscription_message],
569
+ **self._ws_kwargs,
570
+ )
571
+
572
+ def candlesticks(
573
+ self,
574
+ callback: CallbackType,
575
+ interval: Literal[
576
+ "3M",
577
+ "1M",
578
+ "1W",
579
+ "1D",
580
+ "2D",
581
+ "3D",
582
+ "5D",
583
+ "12H",
584
+ "6H",
585
+ "4H",
586
+ "2H",
587
+ "1H",
588
+ "30m",
589
+ "15m",
590
+ "5m",
591
+ "3m",
592
+ "1m",
593
+ "1s",
594
+ "3Mutc",
595
+ "1Mutc",
596
+ "1Wutc",
597
+ "1Dutc",
598
+ "2Dutc",
599
+ "3Dutc",
600
+ "5Dutc",
601
+ "12Hutc",
602
+ "6Hutc",
603
+ ],
604
+ inst_id: str,
605
+ ) -> Websocket:
606
+ """Создает вебсокет для получения данных свечей инструмента.
607
+
608
+ https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-candlesticks-channel
609
+
610
+ Параметры:
611
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
612
+ interval (`Literal`): Интервал свечей.
613
+ inst_id (`str`): ID инструмента (например, "BTC-USDT").
614
+
615
+ Возвращает:
616
+ `Websocket`: Объект для управления вебсокет соединением.
617
+ """
618
+ channel = f"candle{interval}"
619
+ subscription_message = json.dumps(
620
+ {
621
+ "op": "subscribe",
622
+ "args": [
623
+ {
624
+ "channel": channel,
625
+ "instId": inst_id,
626
+ }
627
+ ],
628
+ }
629
+ )
630
+
631
+ return Websocket(
632
+ callback=callback,
633
+ url=self._BUSINESS_URL,
634
+ subscription_messages=[subscription_message],
635
+ **self._ws_kwargs,
636
+ )
637
+
638
+ def trades(
639
+ self,
640
+ callback: CallbackType,
641
+ inst_id: str,
642
+ ) -> Websocket:
643
+ """Создает вебсокет для получения данных о последних сделках.
644
+
645
+ https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-trades-channel
646
+
647
+ Параметры:
648
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
649
+ inst_id (`str`): ID инструмента (например, "BTC-USDT").
650
+
651
+ Возвращает:
652
+ `Websocket`: Объект для управления вебсокет соединением.
653
+ """
654
+ subscription_message = json.dumps(
655
+ {
656
+ "op": "subscribe",
657
+ "args": [
658
+ {
659
+ "channel": "trades",
660
+ "instId": inst_id,
661
+ }
662
+ ],
663
+ }
664
+ )
665
+
666
+ return Websocket(
667
+ callback=callback,
668
+ url=self._PUBLIC_URL,
669
+ subscription_messages=[subscription_message],
670
+ **self._ws_kwargs,
671
+ )
672
+
673
+ def all_trades(
674
+ self,
675
+ callback: CallbackType,
676
+ inst_id: str,
677
+ ) -> Websocket:
678
+ """Создает вебсокет для получения данных о всех сделках (по одной сделке на обновление).
679
+
680
+ https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-all-trades-channel
681
+
682
+ Параметры:
683
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
684
+ inst_id (`str`): ID инструмента (например, "BTC-USDT").
685
+
686
+ Возвращает:
687
+ `Websocket`: Объект для управления вебсокет соединением.
688
+ """
689
+ subscription_message = json.dumps(
690
+ {
691
+ "op": "subscribe",
692
+ "args": [
693
+ {
694
+ "channel": "trades-all",
695
+ "instId": inst_id,
696
+ }
697
+ ],
698
+ }
699
+ )
700
+
701
+ return Websocket(
702
+ callback=callback,
703
+ url=self._BUSINESS_URL,
704
+ subscription_messages=[subscription_message],
705
+ **self._ws_kwargs,
706
+ )
707
+
708
+ def order_book(
709
+ self,
710
+ callback: CallbackType,
711
+ channel: Literal["books", "books5", "bbo-tbt", "books50-l2-tbt", "books-l2-tbt"],
712
+ inst_id: str,
713
+ ) -> Websocket:
714
+ """Создает вебсокет для получения данных ордербука.
715
+
716
+ https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-order-book-channel
717
+
718
+ Параметры:
719
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
720
+ channel (`Literal["books", "books5", "bbo-tbt", "books50-l2-tbt", "books-l2-tbt"]`): Тип канала ордербука.
721
+ inst_id (`str`): ID инструмента (например, "BTC-USDT").
722
+
723
+ Возвращает:
724
+ `Websocket`: Объект для управления вебсокет соединением.
725
+ """
726
+ subscription_message = json.dumps(
727
+ {
728
+ "op": "subscribe",
729
+ "args": [
730
+ {
731
+ "channel": channel,
732
+ "instId": inst_id,
733
+ }
734
+ ],
735
+ }
736
+ )
737
+
738
+ return Websocket(
739
+ callback=callback,
740
+ url=self._PUBLIC_URL,
741
+ subscription_messages=[subscription_message],
742
+ **self._ws_kwargs,
743
+ )