unicex 0.14.8__py3-none-any.whl → 0.15.1__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 +18 -0
- unicex/_base/websocket.py +26 -9
- unicex/binance/adapter.py +0 -12
- unicex/bingx/__init__.py +27 -0
- unicex/bingx/adapter.py +284 -0
- unicex/bingx/client.py +521 -0
- unicex/bingx/exchange_info.py +22 -0
- unicex/bingx/uni_client.py +191 -0
- unicex/bingx/uni_websocket_manager.py +283 -0
- unicex/bingx/user_websocket.py +7 -0
- unicex/bingx/websocket_manager.py +120 -0
- unicex/bybit/client.py +4 -4
- unicex/enums.py +1 -0
- unicex/extra.py +7 -0
- unicex/mapper.py +59 -24
- unicex/mexc/_spot_ws_proto/__init__.py +335 -335
- unicex/mexc/websocket_manager.py +1 -1
- unicex/okx/websocket_manager.py +3 -3
- unicex/utils.py +17 -0
- {unicex-0.14.8.dist-info → unicex-0.15.1.dist-info}/METADATA +2 -1
- {unicex-0.14.8.dist-info → unicex-0.15.1.dist-info}/RECORD +24 -16
- {unicex-0.14.8.dist-info → unicex-0.15.1.dist-info}/WHEEL +0 -0
- {unicex-0.14.8.dist-info → unicex-0.15.1.dist-info}/licenses/LICENSE +0 -0
- {unicex-0.14.8.dist-info → unicex-0.15.1.dist-info}/top_level.txt +0 -0
unicex/bingx/client.py
ADDED
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
__all__ = ["Client"]
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from unicex._base import BaseClient
|
|
7
|
+
from unicex.types import RequestMethod
|
|
8
|
+
from unicex.utils import filter_params, get_timestamp
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Client(BaseClient):
|
|
12
|
+
"""Клиент для работы с BingX API."""
|
|
13
|
+
|
|
14
|
+
_BASE_URL: str = "https://open-api.bingx.com"
|
|
15
|
+
"""Базовый URL для REST API BingX."""
|
|
16
|
+
|
|
17
|
+
async def _make_request(
|
|
18
|
+
self,
|
|
19
|
+
method: RequestMethod,
|
|
20
|
+
endpoint: str,
|
|
21
|
+
*,
|
|
22
|
+
params: dict[str, Any] | None = None,
|
|
23
|
+
) -> dict[str, Any]:
|
|
24
|
+
"""Выполняет HTTP-запрос к эндпоинтам BingX API.
|
|
25
|
+
|
|
26
|
+
Параметры:
|
|
27
|
+
method (str): HTTP метод запроса ("GET", "POST", "DELETE" и т.д.).
|
|
28
|
+
endpoint (str): URL эндпоинта Kucoin API.
|
|
29
|
+
params (dict | None): Параметры запроса.
|
|
30
|
+
|
|
31
|
+
Возвращает:
|
|
32
|
+
dict: Ответ в формате JSON.
|
|
33
|
+
"""
|
|
34
|
+
# Составляем URL для запроса
|
|
35
|
+
url = self._BASE_URL + endpoint
|
|
36
|
+
|
|
37
|
+
# Добавляем timestap в параметры, если он не указан
|
|
38
|
+
if params and "timestamp" in params and not params["timestamp"]:
|
|
39
|
+
params["timestamp"] = get_timestamp()
|
|
40
|
+
|
|
41
|
+
# Фильтруем параметры от None значений
|
|
42
|
+
params = filter_params(params) if params else {}
|
|
43
|
+
|
|
44
|
+
# Выполняем запрос
|
|
45
|
+
return await super()._make_request(
|
|
46
|
+
method=method,
|
|
47
|
+
url=url,
|
|
48
|
+
params=params,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
async def futures_contracts(
|
|
52
|
+
self,
|
|
53
|
+
symbol: str | None = None,
|
|
54
|
+
timestamp: int | None = None,
|
|
55
|
+
recv_window: int | None = None,
|
|
56
|
+
) -> dict[str, Any]:
|
|
57
|
+
"""Получение списка USDT-M бессрочных фьючерсных контрактов.
|
|
58
|
+
|
|
59
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/USDT-M%20Perp%20Futures%20symbols
|
|
60
|
+
"""
|
|
61
|
+
params = {
|
|
62
|
+
"symbol": symbol,
|
|
63
|
+
"timestamp": timestamp,
|
|
64
|
+
"recvWindow": recv_window,
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return await self._make_request("GET", "/openApi/swap/v2/quote/contracts", params=params)
|
|
68
|
+
|
|
69
|
+
async def futures_order_book(
|
|
70
|
+
self,
|
|
71
|
+
symbol: str,
|
|
72
|
+
limit: int | None = None,
|
|
73
|
+
timestamp: int | None = None,
|
|
74
|
+
recv_window: int | None = None,
|
|
75
|
+
) -> dict[str, Any]:
|
|
76
|
+
"""Получение стакана ордеров.
|
|
77
|
+
|
|
78
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Order%20Book
|
|
79
|
+
"""
|
|
80
|
+
params = {
|
|
81
|
+
"symbol": symbol,
|
|
82
|
+
"limit": limit,
|
|
83
|
+
"timestamp": timestamp,
|
|
84
|
+
"recvWindow": recv_window,
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return await self._make_request("GET", "/openApi/swap/v2/quote/depth", params=params)
|
|
88
|
+
|
|
89
|
+
async def futures_trades(
|
|
90
|
+
self,
|
|
91
|
+
symbol: str,
|
|
92
|
+
limit: int | None = None,
|
|
93
|
+
timestamp: int | None = None,
|
|
94
|
+
recv_window: int | None = None,
|
|
95
|
+
) -> dict[str, Any]:
|
|
96
|
+
"""Получение списка последних сделок.
|
|
97
|
+
|
|
98
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Recent%20Trades%20List
|
|
99
|
+
"""
|
|
100
|
+
params = {
|
|
101
|
+
"symbol": symbol,
|
|
102
|
+
"limit": limit,
|
|
103
|
+
"timestamp": timestamp,
|
|
104
|
+
"recvWindow": recv_window,
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return await self._make_request("GET", "/openApi/swap/v2/quote/trades", params=params)
|
|
108
|
+
|
|
109
|
+
async def futures_mark_price(
|
|
110
|
+
self,
|
|
111
|
+
symbol: str | None = None,
|
|
112
|
+
timestamp: int | None = None,
|
|
113
|
+
recv_window: int | None = None,
|
|
114
|
+
) -> dict[str, Any]:
|
|
115
|
+
"""Получение цены маркировки и ставки финансирования.
|
|
116
|
+
|
|
117
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Mark%20Price%20and%20Funding%20Rate
|
|
118
|
+
"""
|
|
119
|
+
params = {
|
|
120
|
+
"symbol": symbol,
|
|
121
|
+
"timestamp": timestamp,
|
|
122
|
+
"recvWindow": recv_window,
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return await self._make_request("GET", "/openApi/swap/v2/quote/premiumIndex", params=params)
|
|
126
|
+
|
|
127
|
+
async def futures_funding_rate_history(
|
|
128
|
+
self,
|
|
129
|
+
symbol: str | None = None,
|
|
130
|
+
start_time: int | None = None,
|
|
131
|
+
end_time: int | None = None,
|
|
132
|
+
limit: int | None = None,
|
|
133
|
+
timestamp: int | None = None,
|
|
134
|
+
recv_window: int | None = None,
|
|
135
|
+
) -> dict[str, Any]:
|
|
136
|
+
"""Получение истории ставок финансирования.
|
|
137
|
+
|
|
138
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Get%20Funding%20Rate%20History
|
|
139
|
+
"""
|
|
140
|
+
params = {
|
|
141
|
+
"symbol": symbol,
|
|
142
|
+
"startTime": start_time,
|
|
143
|
+
"endTime": end_time,
|
|
144
|
+
"limit": limit,
|
|
145
|
+
"timestamp": timestamp,
|
|
146
|
+
"recvWindow": recv_window,
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return await self._make_request("GET", "/openApi/swap/v2/quote/fundingRate", params=params)
|
|
150
|
+
|
|
151
|
+
async def futures_klines(
|
|
152
|
+
self,
|
|
153
|
+
symbol: str,
|
|
154
|
+
interval: str,
|
|
155
|
+
start_time: int | None = None,
|
|
156
|
+
end_time: int | None = None,
|
|
157
|
+
limit: int | None = None,
|
|
158
|
+
timestamp: int | None = None,
|
|
159
|
+
recv_window: int | None = None,
|
|
160
|
+
) -> dict[str, Any]:
|
|
161
|
+
"""Получение свечей.
|
|
162
|
+
|
|
163
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Kline%2FCandlestick%20Data
|
|
164
|
+
"""
|
|
165
|
+
params = {
|
|
166
|
+
"symbol": symbol,
|
|
167
|
+
"interval": interval,
|
|
168
|
+
"startTime": start_time,
|
|
169
|
+
"endTime": end_time,
|
|
170
|
+
"limit": limit,
|
|
171
|
+
"timestamp": timestamp,
|
|
172
|
+
"recvWindow": recv_window,
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return await self._make_request("GET", "/openApi/swap/v3/quote/klines", params=params)
|
|
176
|
+
|
|
177
|
+
async def open_interest(
|
|
178
|
+
self,
|
|
179
|
+
symbol: str,
|
|
180
|
+
timestamp: int | None = None,
|
|
181
|
+
recv_window: int | None = None,
|
|
182
|
+
) -> dict[str, Any]:
|
|
183
|
+
"""Получение статистики открытого интереса.
|
|
184
|
+
|
|
185
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Open%20Interest%20Statistics
|
|
186
|
+
"""
|
|
187
|
+
params = {
|
|
188
|
+
"symbol": symbol,
|
|
189
|
+
"timestamp": timestamp,
|
|
190
|
+
"recvWindow": recv_window,
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return await self._make_request("GET", "/openApi/swap/v2/quote/openInterest", params=params)
|
|
194
|
+
|
|
195
|
+
async def futures_ticker_24hr(
|
|
196
|
+
self,
|
|
197
|
+
symbol: str | None = None,
|
|
198
|
+
timestamp: int | None = None,
|
|
199
|
+
recv_window: int | None = None,
|
|
200
|
+
) -> dict[str, Any]:
|
|
201
|
+
"""Получение 24-часовой статистики тикера.
|
|
202
|
+
|
|
203
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/24hr%20Ticker%20Price%20Change%20Statistics
|
|
204
|
+
"""
|
|
205
|
+
params = {
|
|
206
|
+
"symbol": symbol,
|
|
207
|
+
"timestamp": timestamp,
|
|
208
|
+
"recvWindow": recv_window,
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return await self._make_request("GET", "/openApi/swap/v2/quote/ticker", params=params)
|
|
212
|
+
|
|
213
|
+
async def futures_historical_trades(
|
|
214
|
+
self,
|
|
215
|
+
symbol: str | None = None,
|
|
216
|
+
from_id: int | None = None,
|
|
217
|
+
limit: int | None = None,
|
|
218
|
+
timestamp: int | None = None,
|
|
219
|
+
recv_window: int | None = None,
|
|
220
|
+
) -> dict[str, Any]:
|
|
221
|
+
"""Получение исторических сделок.
|
|
222
|
+
|
|
223
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Query%20historical%20transaction%20orders
|
|
224
|
+
"""
|
|
225
|
+
params = {
|
|
226
|
+
"fromId": from_id,
|
|
227
|
+
"symbol": symbol,
|
|
228
|
+
"limit": limit,
|
|
229
|
+
"timestamp": timestamp,
|
|
230
|
+
"recvWindow": recv_window,
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return await self._make_request(
|
|
234
|
+
"GET",
|
|
235
|
+
"/openApi/swap/v1/market/historicalTrades",
|
|
236
|
+
params=params,
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
async def futures_book_ticker(
|
|
240
|
+
self,
|
|
241
|
+
symbol: str,
|
|
242
|
+
timestamp: int | None = None,
|
|
243
|
+
recv_window: int | None = None,
|
|
244
|
+
) -> dict[str, Any]:
|
|
245
|
+
"""Получение лучшего бид/аск по символу.
|
|
246
|
+
|
|
247
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Symbol%20Order%20Book%20Ticker
|
|
248
|
+
"""
|
|
249
|
+
params = {
|
|
250
|
+
"symbol": symbol,
|
|
251
|
+
"timestamp": timestamp,
|
|
252
|
+
"recvWindow": recv_window,
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return await self._make_request("GET", "/openApi/swap/v2/quote/bookTicker", params=params)
|
|
256
|
+
|
|
257
|
+
async def futures_mark_price_klines(
|
|
258
|
+
self,
|
|
259
|
+
symbol: str,
|
|
260
|
+
interval: str,
|
|
261
|
+
start_time: int | None = None,
|
|
262
|
+
end_time: int | None = None,
|
|
263
|
+
limit: int | None = None,
|
|
264
|
+
timestamp: int | None = None,
|
|
265
|
+
recv_window: int | None = None,
|
|
266
|
+
) -> dict[str, Any]:
|
|
267
|
+
"""Получение свечей цены маркировки.
|
|
268
|
+
|
|
269
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Mark%20Price%20Kline-Candlestick%20Data
|
|
270
|
+
"""
|
|
271
|
+
params = {
|
|
272
|
+
"symbol": symbol,
|
|
273
|
+
"interval": interval,
|
|
274
|
+
"startTime": start_time,
|
|
275
|
+
"endTime": end_time,
|
|
276
|
+
"limit": limit,
|
|
277
|
+
"timestamp": timestamp,
|
|
278
|
+
"recvWindow": recv_window,
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
return await self._make_request(
|
|
282
|
+
"GET",
|
|
283
|
+
"/openApi/swap/v1/market/markPriceKlines",
|
|
284
|
+
params=params,
|
|
285
|
+
)
|
|
286
|
+
|
|
287
|
+
async def futures_ticker_price(
|
|
288
|
+
self,
|
|
289
|
+
symbol: str | None = None,
|
|
290
|
+
timestamp: int | None = None,
|
|
291
|
+
recv_window: int | None = None,
|
|
292
|
+
) -> dict[str, Any]:
|
|
293
|
+
"""Получение последней цены тикера.
|
|
294
|
+
|
|
295
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Symbol%20Price%20Ticker
|
|
296
|
+
"""
|
|
297
|
+
params = {
|
|
298
|
+
"symbol": symbol,
|
|
299
|
+
"timestamp": timestamp,
|
|
300
|
+
"recvWindow": recv_window,
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return await self._make_request("GET", "/openApi/swap/v1/ticker/price", params=params)
|
|
304
|
+
|
|
305
|
+
async def futures_trading_rules(
|
|
306
|
+
self,
|
|
307
|
+
symbol: str | None = None,
|
|
308
|
+
timestamp: int | None = None,
|
|
309
|
+
recv_window: int | None = None,
|
|
310
|
+
) -> dict[str, Any]:
|
|
311
|
+
"""Получение торговых правил.
|
|
312
|
+
|
|
313
|
+
https://bingx-api.github.io/docs-v3/#/en/Swap/Market%20Data/Trading%20Rules
|
|
314
|
+
"""
|
|
315
|
+
params = {
|
|
316
|
+
"symbol": symbol,
|
|
317
|
+
"timestamp": timestamp,
|
|
318
|
+
"recvWindow": recv_window,
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return await self._make_request("GET", "/openApi/swap/v1/tradingRules", params=params)
|
|
322
|
+
|
|
323
|
+
async def symbols(
|
|
324
|
+
self,
|
|
325
|
+
symbol: str | None = None,
|
|
326
|
+
timestamp: int | None = None,
|
|
327
|
+
recv_window: int | None = None,
|
|
328
|
+
) -> dict[str, Any]:
|
|
329
|
+
"""Получение списка спотовых торговых пар.
|
|
330
|
+
|
|
331
|
+
https://bingx-api.github.io/docs-v3/#/en/Spot/Market%20Data/Spot%20trading%20symbols
|
|
332
|
+
"""
|
|
333
|
+
params = {
|
|
334
|
+
"symbol": symbol,
|
|
335
|
+
"timestamp": timestamp,
|
|
336
|
+
"recvWindow": recv_window,
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
return await self._make_request("GET", "/openApi/spot/v1/common/symbols", params=params)
|
|
340
|
+
|
|
341
|
+
async def trades(
|
|
342
|
+
self,
|
|
343
|
+
symbol: str,
|
|
344
|
+
limit: int | None = None,
|
|
345
|
+
timestamp: int | None = None,
|
|
346
|
+
recv_window: int | None = None,
|
|
347
|
+
) -> dict[str, Any]:
|
|
348
|
+
"""Получение списка последних сделок.
|
|
349
|
+
|
|
350
|
+
https://bingx-api.github.io/docs-v3/#/en/Spot/Market%20Data/Recent%20Trades%20List
|
|
351
|
+
"""
|
|
352
|
+
params = {
|
|
353
|
+
"symbol": symbol,
|
|
354
|
+
"limit": limit,
|
|
355
|
+
"timestamp": timestamp,
|
|
356
|
+
"recvWindow": recv_window,
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return await self._make_request("GET", "/openApi/spot/v1/market/trades", params=params)
|
|
360
|
+
|
|
361
|
+
async def order_book(
|
|
362
|
+
self,
|
|
363
|
+
symbol: str,
|
|
364
|
+
limit: int | None = None,
|
|
365
|
+
timestamp: int | None = None,
|
|
366
|
+
recv_window: int | None = None,
|
|
367
|
+
) -> dict[str, Any]:
|
|
368
|
+
"""Получение стакана ордеров.
|
|
369
|
+
|
|
370
|
+
https://bingx-api.github.io/docs-v3/#/en/Spot/Market%20Data/Order%20Book
|
|
371
|
+
"""
|
|
372
|
+
params = {
|
|
373
|
+
"symbol": symbol,
|
|
374
|
+
"limit": limit,
|
|
375
|
+
"timestamp": timestamp,
|
|
376
|
+
"recvWindow": recv_window,
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
return await self._make_request("GET", "/openApi/spot/v1/market/depth", params=params)
|
|
380
|
+
|
|
381
|
+
async def klines(
|
|
382
|
+
self,
|
|
383
|
+
symbol: str,
|
|
384
|
+
interval: str,
|
|
385
|
+
start_time: int | None = None,
|
|
386
|
+
end_time: int | None = None,
|
|
387
|
+
limit: int | None = None,
|
|
388
|
+
timestamp: int | None = None,
|
|
389
|
+
recv_window: int | None = None,
|
|
390
|
+
) -> dict[str, Any]:
|
|
391
|
+
"""Получение свечей.
|
|
392
|
+
|
|
393
|
+
https://bingx-api.github.io/docs-v3/#/en/Spot/Market%20Data/Kline-Candlestick%20Data
|
|
394
|
+
"""
|
|
395
|
+
params = {
|
|
396
|
+
"symbol": symbol,
|
|
397
|
+
"interval": interval,
|
|
398
|
+
"startTime": start_time,
|
|
399
|
+
"endTime": end_time,
|
|
400
|
+
"limit": limit,
|
|
401
|
+
"timestamp": timestamp,
|
|
402
|
+
"recvWindow": recv_window,
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
return await self._make_request("GET", "/openApi/spot/v2/market/kline", params=params)
|
|
406
|
+
|
|
407
|
+
async def ticker_24hr(
|
|
408
|
+
self,
|
|
409
|
+
symbol: str | None = None,
|
|
410
|
+
timestamp: int | None = None,
|
|
411
|
+
recv_window: int | None = None,
|
|
412
|
+
) -> dict[str, Any]:
|
|
413
|
+
"""Получение 24-часовой статистики тикера.
|
|
414
|
+
|
|
415
|
+
https://bingx-api.github.io/docs-v3/#/en/Spot/Market%20Data/24hr%20Ticker%20Price%20Change%20Statistics
|
|
416
|
+
"""
|
|
417
|
+
params = {
|
|
418
|
+
"symbol": symbol,
|
|
419
|
+
"timestamp": timestamp,
|
|
420
|
+
"recvWindow": recv_window,
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
return await self._make_request("GET", "/openApi/spot/v1/ticker/24hr", params=params)
|
|
424
|
+
|
|
425
|
+
async def order_book_agg(
|
|
426
|
+
self,
|
|
427
|
+
symbol: str,
|
|
428
|
+
depth: int,
|
|
429
|
+
type_: str,
|
|
430
|
+
timestamp: int | None = None,
|
|
431
|
+
recv_window: int | None = None,
|
|
432
|
+
) -> dict[str, Any]:
|
|
433
|
+
"""Получение агрегированного стакана ордеров.
|
|
434
|
+
|
|
435
|
+
https://bingx-api.github.io/docs-v3/#/en/Spot/Market%20Data/Order%20Book%20aggregation
|
|
436
|
+
"""
|
|
437
|
+
params = {
|
|
438
|
+
"symbol": symbol,
|
|
439
|
+
"depth": depth,
|
|
440
|
+
"type": type_,
|
|
441
|
+
"timestamp": timestamp,
|
|
442
|
+
"recvWindow": recv_window,
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
return await self._make_request("GET", "/openApi/spot/v2/market/depth", params=params)
|
|
446
|
+
|
|
447
|
+
async def ticker_price(
|
|
448
|
+
self,
|
|
449
|
+
symbol: str,
|
|
450
|
+
timestamp: int | None = None,
|
|
451
|
+
recv_window: int | None = None,
|
|
452
|
+
) -> dict[str, Any]:
|
|
453
|
+
"""Получение последней цены тикера.
|
|
454
|
+
|
|
455
|
+
https://bingx-api.github.io/docs-v3/#/en/Spot/Market%20Data/Symbol%20Price%20Ticker
|
|
456
|
+
"""
|
|
457
|
+
params = {
|
|
458
|
+
"symbol": symbol,
|
|
459
|
+
"timestamp": timestamp,
|
|
460
|
+
"recvWindow": recv_window,
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
return await self._make_request("GET", "/openApi/spot/v2/ticker/price", params=params)
|
|
464
|
+
|
|
465
|
+
async def book_ticker(
|
|
466
|
+
self,
|
|
467
|
+
symbol: str,
|
|
468
|
+
timestamp: int | None = None,
|
|
469
|
+
recv_window: int | None = None,
|
|
470
|
+
) -> dict[str, Any]:
|
|
471
|
+
"""Получение лучшего бид/аск по символу.
|
|
472
|
+
|
|
473
|
+
https://bingx-api.github.io/docs-v3/#/en/Spot/Market%20Data/Symbol%20Order%20Book%20Ticker
|
|
474
|
+
"""
|
|
475
|
+
params = {
|
|
476
|
+
"symbol": symbol,
|
|
477
|
+
"timestamp": timestamp,
|
|
478
|
+
"recvWindow": recv_window,
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
return await self._make_request("GET", "/openApi/spot/v1/ticker/bookTicker", params=params)
|
|
482
|
+
|
|
483
|
+
async def historical_klines(
|
|
484
|
+
self,
|
|
485
|
+
symbol: str,
|
|
486
|
+
interval: str,
|
|
487
|
+
start_time: int | None = None,
|
|
488
|
+
end_time: int | None = None,
|
|
489
|
+
limit: int | None = None,
|
|
490
|
+
) -> dict[str, Any]:
|
|
491
|
+
"""Получение исторических свечей.
|
|
492
|
+
|
|
493
|
+
https://bingx-api.github.io/docs-v3/#/en/Spot/Market%20Data/Historical%20K-line
|
|
494
|
+
"""
|
|
495
|
+
params = {
|
|
496
|
+
"symbol": symbol,
|
|
497
|
+
"interval": interval,
|
|
498
|
+
"startTime": start_time,
|
|
499
|
+
"endTime": end_time,
|
|
500
|
+
"limit": limit,
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
return await self._make_request("GET", "/openApi/market/his/v1/kline", params=params)
|
|
504
|
+
|
|
505
|
+
async def historical_trades(
|
|
506
|
+
self,
|
|
507
|
+
symbol: str,
|
|
508
|
+
limit: int | None = None,
|
|
509
|
+
from_id: str | None = None,
|
|
510
|
+
) -> dict[str, Any]:
|
|
511
|
+
"""Получение исторических сделок.
|
|
512
|
+
|
|
513
|
+
https://bingx-api.github.io/docs-v3/#/en/Spot/Market%20Data/Old%20Trade%20Lookup
|
|
514
|
+
"""
|
|
515
|
+
params = {
|
|
516
|
+
"symbol": symbol,
|
|
517
|
+
"limit": limit,
|
|
518
|
+
"fromId": from_id,
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
return await self._make_request("GET", "/openApi/market/his/v1/trade", params=params)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
__all__ = ["ExchangeInfo"]
|
|
2
|
+
|
|
3
|
+
import aiohttp
|
|
4
|
+
|
|
5
|
+
from unicex._abc import IExchangeInfo
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ExchangeInfo(IExchangeInfo):
|
|
9
|
+
"""Предзагружает информацию о тикерах для биржи BingX."""
|
|
10
|
+
|
|
11
|
+
exchange_name = "BingX"
|
|
12
|
+
"""Название биржи, на которой работает класс."""
|
|
13
|
+
|
|
14
|
+
@classmethod
|
|
15
|
+
async def _load_spot_exchange_info(cls, session: aiohttp.ClientSession) -> None:
|
|
16
|
+
"""Загружает информацию о бирже для спотового рынка."""
|
|
17
|
+
...
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
async def _load_futures_exchange_info(cls, session: aiohttp.ClientSession) -> None:
|
|
21
|
+
"""Загружает информацию о бирже для фьючерсного рынка."""
|
|
22
|
+
...
|