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
unicex/bybit/client.py
ADDED
|
@@ -0,0 +1,1876 @@
|
|
|
1
|
+
__all__ = ["Client"]
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import time
|
|
5
|
+
from typing import Any, Literal
|
|
6
|
+
|
|
7
|
+
from unicex._base import BaseClient
|
|
8
|
+
from unicex.exceptions import NotAuthorized
|
|
9
|
+
from unicex.types import RequestMethod
|
|
10
|
+
from unicex.utils import dict_to_query_string, filter_params, generate_hmac_sha256_signature
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Client(BaseClient):
|
|
14
|
+
"""Клиент для работы с Bybit API."""
|
|
15
|
+
|
|
16
|
+
_BASE_URL: str = "https://api.bybit.com"
|
|
17
|
+
"""Базовый URL для REST API Bybit."""
|
|
18
|
+
|
|
19
|
+
_RECV_WINDOW: str = "5000"
|
|
20
|
+
"""Стандартный интервал времени для получения ответа от сервера."""
|
|
21
|
+
|
|
22
|
+
def _get_headers(self, timestamp: str, signature: str | None = None) -> dict:
|
|
23
|
+
"""Возвращает заголовки для запросов к Bybit API.
|
|
24
|
+
|
|
25
|
+
Параметры:
|
|
26
|
+
timestamp (str): Временная метка запроса в миллисекундах.
|
|
27
|
+
signature (str | None): Подпись запроса, если запрос авторизированый.
|
|
28
|
+
"""
|
|
29
|
+
headers = {"Accept": "application/json", "Content-Type": "application/json"}
|
|
30
|
+
if signature:
|
|
31
|
+
headers["X-BAPI-API-KEY"] = self._api_key # type: ignore
|
|
32
|
+
headers["X-BAPI-SIGN-TYPE"] = "2"
|
|
33
|
+
headers["X-BAPI-SIGN"] = signature
|
|
34
|
+
headers["X-BAPI-RECV-WINDOW"] = self._RECV_WINDOW
|
|
35
|
+
headers["X-BAPI-TIMESTAMP"] = timestamp
|
|
36
|
+
return headers
|
|
37
|
+
|
|
38
|
+
def _generate_signature(self, timestamp: str, payload: dict, method: RequestMethod) -> str:
|
|
39
|
+
"""Генерация подписи.
|
|
40
|
+
|
|
41
|
+
Источник: https://github.com/bybit-exchange/api-usage-examples/blob/master/V5_demo/api_demo/Encryption_HMAC.py
|
|
42
|
+
"""
|
|
43
|
+
# Проверяем наличие апи ключей для подписи запроса
|
|
44
|
+
if not self.is_authorized():
|
|
45
|
+
raise NotAuthorized("Api key and api secret is required to private endpoints")
|
|
46
|
+
|
|
47
|
+
if method == "POST":
|
|
48
|
+
# timestamp+api_key+recv_window+jsonBodyString
|
|
49
|
+
dumped_payload = json.dumps(payload)
|
|
50
|
+
prepared_query_string = timestamp + self._api_key + self._RECV_WINDOW + dumped_payload # type: ignore[attrDefined]
|
|
51
|
+
return generate_hmac_sha256_signature(self._api_secret, prepared_query_string) # type: ignore[attrDefined]
|
|
52
|
+
else:
|
|
53
|
+
# timestamp+api_key+recv_window+queryString
|
|
54
|
+
query_string = dict_to_query_string(payload)
|
|
55
|
+
prepared_query_string = timestamp + self._api_key + self._RECV_WINDOW + query_string # type: ignore[attrDefined]
|
|
56
|
+
return generate_hmac_sha256_signature(self._api_secret, prepared_query_string) # type: ignore[attrDefined]
|
|
57
|
+
|
|
58
|
+
async def _make_request(
|
|
59
|
+
self,
|
|
60
|
+
method: RequestMethod,
|
|
61
|
+
endpoint: str,
|
|
62
|
+
*,
|
|
63
|
+
params: dict[str, Any] | None = None,
|
|
64
|
+
signed: bool = False,
|
|
65
|
+
) -> Any:
|
|
66
|
+
"""Выполняет HTTP-запрос к эндпоинтам Bybit API с поддержкой подписи.
|
|
67
|
+
|
|
68
|
+
Если signed=True, формируется подпись для приватных endpoint'ов.
|
|
69
|
+
Если signed=False, запрос отправляется как обычный публичный, через
|
|
70
|
+
базовый _make_request без обработки подписи.
|
|
71
|
+
|
|
72
|
+
Параметры:
|
|
73
|
+
method (str): HTTP метод запроса ("GET", "POST", "DELETE" и т.д.).
|
|
74
|
+
endpoint (str): URL эндпоинта Bybit API.
|
|
75
|
+
params (dict | None): Параметры запроса. Передаются в body, если запрос типа "POST", иначе в query_params
|
|
76
|
+
signed (bool): Нужно ли подписывать запрос.
|
|
77
|
+
|
|
78
|
+
Возвращает:
|
|
79
|
+
dict: Ответ в формате JSON.
|
|
80
|
+
"""
|
|
81
|
+
# Составляем URL для запроса
|
|
82
|
+
url = self._BASE_URL + endpoint
|
|
83
|
+
|
|
84
|
+
# Фильтруем параметры от None значений
|
|
85
|
+
params = filter_params(params) if params else {}
|
|
86
|
+
|
|
87
|
+
# Генерируем временную метку
|
|
88
|
+
timestamp = str(int(time.time() * 1000))
|
|
89
|
+
|
|
90
|
+
# Проверяем нужно ли подписывать запрос
|
|
91
|
+
if not signed:
|
|
92
|
+
headers = self._get_headers(timestamp)
|
|
93
|
+
return await super()._make_request(
|
|
94
|
+
method=method,
|
|
95
|
+
url=url,
|
|
96
|
+
headers=headers,
|
|
97
|
+
params=params,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
# Формируем payload
|
|
101
|
+
payload = params
|
|
102
|
+
|
|
103
|
+
# Генерируем строку для подписи
|
|
104
|
+
signature = self._generate_signature(timestamp, payload, method)
|
|
105
|
+
|
|
106
|
+
# Генерируем заголовки (вкл. в себя подпись и апи ключ)
|
|
107
|
+
headers = self._get_headers(timestamp, signature)
|
|
108
|
+
|
|
109
|
+
if method == "POST": # Отправляем параметры в тело запроса
|
|
110
|
+
return await super()._make_request(
|
|
111
|
+
method=method,
|
|
112
|
+
url=url,
|
|
113
|
+
data=payload,
|
|
114
|
+
headers=headers,
|
|
115
|
+
)
|
|
116
|
+
else: # Иначе параметры добавляем к query string
|
|
117
|
+
return await super()._make_request(
|
|
118
|
+
method=method,
|
|
119
|
+
url=url,
|
|
120
|
+
params=params,
|
|
121
|
+
headers=headers,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
async def request(
|
|
125
|
+
self, method: RequestMethod, endpoint: str, params: dict, signed: bool
|
|
126
|
+
) -> dict:
|
|
127
|
+
"""Специальный метод для выполнения запросов на эндпоинты, которые не обернуты в клиенте.
|
|
128
|
+
|
|
129
|
+
Параметры:
|
|
130
|
+
method (RequestMethod): Метод запроса (GET, POST, PUT, DELETE).
|
|
131
|
+
endpoint (str): URL эндпоинта.
|
|
132
|
+
params (dict): Параметры запроса.
|
|
133
|
+
signed (bool): Флаг, указывающий, требуется ли подпись запроса.
|
|
134
|
+
|
|
135
|
+
Возвращает:
|
|
136
|
+
`dict`: Ответ в формате JSON.
|
|
137
|
+
"""
|
|
138
|
+
return await self._make_request(
|
|
139
|
+
method=method, endpoint=endpoint, params=params, signed=signed
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
# topic: market
|
|
143
|
+
|
|
144
|
+
async def ping(self) -> dict:
|
|
145
|
+
"""Проверка подключения к REST API.
|
|
146
|
+
|
|
147
|
+
https://bybit-exchange.github.io/docs/v5/market/time
|
|
148
|
+
"""
|
|
149
|
+
return await self._make_request("GET", "/v5/market/time")
|
|
150
|
+
|
|
151
|
+
async def klines(
|
|
152
|
+
self,
|
|
153
|
+
symbol: str,
|
|
154
|
+
interval: str,
|
|
155
|
+
category: Literal["spot", "linear", "inverse"],
|
|
156
|
+
start: int | None = None,
|
|
157
|
+
end: int | None = None,
|
|
158
|
+
limit: int | None = None,
|
|
159
|
+
) -> dict:
|
|
160
|
+
"""Исторические свечи.
|
|
161
|
+
|
|
162
|
+
https://bybit-exchange.github.io/docs/v5/market/kline
|
|
163
|
+
"""
|
|
164
|
+
params = {
|
|
165
|
+
"category": category,
|
|
166
|
+
"symbol": symbol,
|
|
167
|
+
"interval": interval,
|
|
168
|
+
"start": start,
|
|
169
|
+
"end": end,
|
|
170
|
+
"limit": limit,
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return await self._make_request("GET", "/v5/market/kline", params=params)
|
|
174
|
+
|
|
175
|
+
async def mark_price_klines(
|
|
176
|
+
self,
|
|
177
|
+
symbol: str,
|
|
178
|
+
interval: str,
|
|
179
|
+
category: Literal["linear", "inverse"] | None = None,
|
|
180
|
+
start: int | None = None,
|
|
181
|
+
end: int | None = None,
|
|
182
|
+
limit: int | None = None,
|
|
183
|
+
) -> dict:
|
|
184
|
+
"""Исторические свечи цены маркировки (mark price).
|
|
185
|
+
|
|
186
|
+
https://bybit-exchange.github.io/docs/v5/market/mark-kline
|
|
187
|
+
"""
|
|
188
|
+
params = {
|
|
189
|
+
"category": category,
|
|
190
|
+
"symbol": symbol,
|
|
191
|
+
"interval": interval,
|
|
192
|
+
"start": start,
|
|
193
|
+
"end": end,
|
|
194
|
+
"limit": limit,
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return await self._make_request("GET", "/v5/market/mark-price-kline", params=params)
|
|
198
|
+
|
|
199
|
+
async def index_price_klines(
|
|
200
|
+
self,
|
|
201
|
+
symbol: str,
|
|
202
|
+
interval: str,
|
|
203
|
+
category: Literal["linear", "inverse"] | None = None,
|
|
204
|
+
start: int | None = None,
|
|
205
|
+
end: int | None = None,
|
|
206
|
+
limit: int | None = None,
|
|
207
|
+
) -> dict:
|
|
208
|
+
"""Исторические свечи индекса (index price).
|
|
209
|
+
|
|
210
|
+
https://bybit-exchange.github.io/docs/v5/market/index-kline
|
|
211
|
+
"""
|
|
212
|
+
params = {
|
|
213
|
+
"category": category,
|
|
214
|
+
"symbol": symbol,
|
|
215
|
+
"interval": interval,
|
|
216
|
+
"start": start,
|
|
217
|
+
"end": end,
|
|
218
|
+
"limit": limit,
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return await self._make_request("GET", "/v5/market/index-price-kline", params=params)
|
|
222
|
+
|
|
223
|
+
async def premium_index_price_klines(
|
|
224
|
+
self,
|
|
225
|
+
symbol: str,
|
|
226
|
+
interval: str,
|
|
227
|
+
category: Literal["linear"] | None = None,
|
|
228
|
+
start: int | None = None,
|
|
229
|
+
end: int | None = None,
|
|
230
|
+
limit: int | None = None,
|
|
231
|
+
) -> dict:
|
|
232
|
+
"""Исторические свечи премиального индекса (premium index).
|
|
233
|
+
|
|
234
|
+
https://bybit-exchange.github.io/docs/v5/market/premium-index-kline
|
|
235
|
+
"""
|
|
236
|
+
params = {
|
|
237
|
+
"category": category,
|
|
238
|
+
"symbol": symbol,
|
|
239
|
+
"interval": interval,
|
|
240
|
+
"start": start,
|
|
241
|
+
"end": end,
|
|
242
|
+
"limit": limit,
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return await self._make_request(
|
|
246
|
+
"GET", "/v5/market/premium-index-price-kline", params=params
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
async def instruments_info(
|
|
250
|
+
self,
|
|
251
|
+
category: Literal["spot", "linear", "inverse", "option"],
|
|
252
|
+
symbol: str | None = None,
|
|
253
|
+
status: str | None = None,
|
|
254
|
+
base_coin: str | None = None,
|
|
255
|
+
limit: int | None = None,
|
|
256
|
+
cursor: str | None = None,
|
|
257
|
+
) -> dict:
|
|
258
|
+
"""Информация об инструментах.
|
|
259
|
+
|
|
260
|
+
https://bybit-exchange.github.io/docs/v5/market/instrument
|
|
261
|
+
"""
|
|
262
|
+
params = {
|
|
263
|
+
"category": category,
|
|
264
|
+
"symbol": symbol,
|
|
265
|
+
"status": status,
|
|
266
|
+
"baseCoin": base_coin,
|
|
267
|
+
"limit": limit,
|
|
268
|
+
"cursor": cursor,
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
return await self._make_request("GET", "/v5/market/instruments-info", params=params)
|
|
272
|
+
|
|
273
|
+
async def orderbook(
|
|
274
|
+
self,
|
|
275
|
+
category: Literal["spot", "linear", "inverse", "option"],
|
|
276
|
+
symbol: str,
|
|
277
|
+
limit: int | None = None,
|
|
278
|
+
) -> dict:
|
|
279
|
+
"""Книга ордеров (глубина рынка).
|
|
280
|
+
|
|
281
|
+
https://bybit-exchange.github.io/docs/v5/market/orderbook
|
|
282
|
+
"""
|
|
283
|
+
params = {
|
|
284
|
+
"category": category,
|
|
285
|
+
"symbol": symbol,
|
|
286
|
+
"limit": limit,
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return await self._make_request("GET", "/v5/market/orderbook", params=params)
|
|
290
|
+
|
|
291
|
+
async def rpi_orderbook(
|
|
292
|
+
self,
|
|
293
|
+
symbol: str,
|
|
294
|
+
limit: int,
|
|
295
|
+
category: Literal["spot", "linear", "inverse"] | None = None,
|
|
296
|
+
) -> dict:
|
|
297
|
+
"""Книга ордеров RPI.
|
|
298
|
+
|
|
299
|
+
https://bybit-exchange.github.io/docs/v5/market/rpi-orderbook
|
|
300
|
+
"""
|
|
301
|
+
params = {
|
|
302
|
+
"category": category,
|
|
303
|
+
"symbol": symbol,
|
|
304
|
+
"limit": limit,
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return await self._make_request("GET", "/v5/market/rpi_orderbook", params=params)
|
|
308
|
+
|
|
309
|
+
async def tickers(
|
|
310
|
+
self,
|
|
311
|
+
category: Literal["spot", "linear", "inverse", "option"],
|
|
312
|
+
symbol: str | None = None,
|
|
313
|
+
base_coin: str | None = None,
|
|
314
|
+
exp_date: str | None = None,
|
|
315
|
+
) -> dict:
|
|
316
|
+
"""Тикеры (снимок цен и объёмов).
|
|
317
|
+
|
|
318
|
+
https://bybit-exchange.github.io/docs/v5/market/tickers
|
|
319
|
+
"""
|
|
320
|
+
params = {
|
|
321
|
+
"category": category,
|
|
322
|
+
"symbol": symbol,
|
|
323
|
+
"baseCoin": base_coin,
|
|
324
|
+
"expDate": exp_date,
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
return await self._make_request("GET", "/v5/market/tickers", params=params)
|
|
328
|
+
|
|
329
|
+
async def funding_rate_history(
|
|
330
|
+
self,
|
|
331
|
+
category: Literal["linear", "inverse"],
|
|
332
|
+
symbol: str,
|
|
333
|
+
start_time: int | None = None,
|
|
334
|
+
end_time: int | None = None,
|
|
335
|
+
limit: int | None = None,
|
|
336
|
+
) -> dict:
|
|
337
|
+
"""История ставок финансирования.
|
|
338
|
+
|
|
339
|
+
https://bybit-exchange.github.io/docs/v5/market/history-fund-rate
|
|
340
|
+
"""
|
|
341
|
+
params = {
|
|
342
|
+
"category": category,
|
|
343
|
+
"symbol": symbol,
|
|
344
|
+
"startTime": start_time,
|
|
345
|
+
"endTime": end_time,
|
|
346
|
+
"limit": limit,
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
return await self._make_request("GET", "/v5/market/funding/history", params=params)
|
|
350
|
+
|
|
351
|
+
async def recent_trades(
|
|
352
|
+
self,
|
|
353
|
+
category: Literal["spot", "linear", "inverse", "option"],
|
|
354
|
+
symbol: str | None = None,
|
|
355
|
+
base_coin: str | None = None,
|
|
356
|
+
option_type: str | None = None,
|
|
357
|
+
limit: int | None = None,
|
|
358
|
+
) -> dict:
|
|
359
|
+
"""Недавние публичные сделки.
|
|
360
|
+
|
|
361
|
+
https://bybit-exchange.github.io/docs/v5/market/recent-trade
|
|
362
|
+
"""
|
|
363
|
+
params = {
|
|
364
|
+
"category": category,
|
|
365
|
+
"symbol": symbol,
|
|
366
|
+
"baseCoin": base_coin,
|
|
367
|
+
"optionType": option_type,
|
|
368
|
+
"limit": limit,
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
return await self._make_request("GET", "/v5/market/recent-trade", params=params)
|
|
372
|
+
|
|
373
|
+
async def open_interest(
|
|
374
|
+
self,
|
|
375
|
+
category: Literal["linear", "inverse"],
|
|
376
|
+
symbol: str,
|
|
377
|
+
interval_time: str,
|
|
378
|
+
start_time: int | None = None,
|
|
379
|
+
end_time: int | None = None,
|
|
380
|
+
limit: int | None = None,
|
|
381
|
+
cursor: str | None = None,
|
|
382
|
+
) -> dict:
|
|
383
|
+
"""Открытый интерес по символу.
|
|
384
|
+
|
|
385
|
+
https://bybit-exchange.github.io/docs/v5/market/open-interest
|
|
386
|
+
"""
|
|
387
|
+
params = {
|
|
388
|
+
"category": category,
|
|
389
|
+
"symbol": symbol,
|
|
390
|
+
"intervalTime": interval_time,
|
|
391
|
+
"startTime": start_time,
|
|
392
|
+
"endTime": end_time,
|
|
393
|
+
"limit": limit,
|
|
394
|
+
"cursor": cursor,
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
return await self._make_request("GET", "/v5/market/open-interest", params=params)
|
|
398
|
+
|
|
399
|
+
async def historical_volatility(
|
|
400
|
+
self,
|
|
401
|
+
category: Literal["option"],
|
|
402
|
+
base_coin: str | None = None,
|
|
403
|
+
quote_coin: str | None = None,
|
|
404
|
+
period: int | None = None,
|
|
405
|
+
start_time: int | None = None,
|
|
406
|
+
end_time: int | None = None,
|
|
407
|
+
) -> dict:
|
|
408
|
+
"""Историческая волатильность (опционы).
|
|
409
|
+
|
|
410
|
+
https://bybit-exchange.github.io/docs/v5/market/iv
|
|
411
|
+
"""
|
|
412
|
+
params = {
|
|
413
|
+
"category": category,
|
|
414
|
+
"baseCoin": base_coin,
|
|
415
|
+
"quoteCoin": quote_coin,
|
|
416
|
+
"period": period,
|
|
417
|
+
"startTime": start_time,
|
|
418
|
+
"endTime": end_time,
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
return await self._make_request("GET", "/v5/market/historical-volatility", params=params)
|
|
422
|
+
|
|
423
|
+
async def insurance_pool(
|
|
424
|
+
self,
|
|
425
|
+
coin: str | None = None,
|
|
426
|
+
) -> dict:
|
|
427
|
+
"""Данные страхового пула.
|
|
428
|
+
|
|
429
|
+
https://bybit-exchange.github.io/docs/v5/market/insurance
|
|
430
|
+
"""
|
|
431
|
+
params = {
|
|
432
|
+
"coin": coin,
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
return await self._make_request("GET", "/v5/market/insurance", params=params)
|
|
436
|
+
|
|
437
|
+
async def risk_limit(
|
|
438
|
+
self,
|
|
439
|
+
category: Literal["linear", "inverse"],
|
|
440
|
+
symbol: str | None = None,
|
|
441
|
+
cursor: str | None = None,
|
|
442
|
+
) -> dict:
|
|
443
|
+
"""Параметры лимита риска.
|
|
444
|
+
|
|
445
|
+
https://bybit-exchange.github.io/docs/v5/market/risk-limit
|
|
446
|
+
"""
|
|
447
|
+
params = {
|
|
448
|
+
"category": category,
|
|
449
|
+
"symbol": symbol,
|
|
450
|
+
"cursor": cursor,
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
return await self._make_request("GET", "/v5/market/risk-limit", params=params)
|
|
454
|
+
|
|
455
|
+
async def delivery_price(
|
|
456
|
+
self,
|
|
457
|
+
category: Literal["linear", "inverse", "option"],
|
|
458
|
+
symbol: str | None = None,
|
|
459
|
+
base_coin: str | None = None,
|
|
460
|
+
settle_coin: str | None = None,
|
|
461
|
+
limit: int | None = None,
|
|
462
|
+
cursor: str | None = None,
|
|
463
|
+
) -> dict:
|
|
464
|
+
"""Цена поставки (delivery price).
|
|
465
|
+
|
|
466
|
+
https://bybit-exchange.github.io/docs/v5/market/delivery-price
|
|
467
|
+
"""
|
|
468
|
+
params = {
|
|
469
|
+
"category": category,
|
|
470
|
+
"symbol": symbol,
|
|
471
|
+
"baseCoin": base_coin,
|
|
472
|
+
"settleCoin": settle_coin,
|
|
473
|
+
"limit": limit,
|
|
474
|
+
"cursor": cursor,
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
return await self._make_request("GET", "/v5/market/delivery-price", params=params)
|
|
478
|
+
|
|
479
|
+
async def new_delivery_price(
|
|
480
|
+
self,
|
|
481
|
+
category: Literal["option"],
|
|
482
|
+
base_coin: str,
|
|
483
|
+
settle_coin: str | None = None,
|
|
484
|
+
) -> dict:
|
|
485
|
+
"""Исторические цены поставки (опционы).
|
|
486
|
+
|
|
487
|
+
https://bybit-exchange.github.io/docs/v5/market/new-delivery-price
|
|
488
|
+
"""
|
|
489
|
+
params = {
|
|
490
|
+
"category": category,
|
|
491
|
+
"baseCoin": base_coin,
|
|
492
|
+
"settleCoin": settle_coin,
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
return await self._make_request("GET", "/v5/market/new-delivery-price", params=params)
|
|
496
|
+
|
|
497
|
+
async def long_short_ratio(
|
|
498
|
+
self,
|
|
499
|
+
category: Literal["linear", "inverse"],
|
|
500
|
+
symbol: str,
|
|
501
|
+
period: str,
|
|
502
|
+
start_time: int | None = None,
|
|
503
|
+
end_time: int | None = None,
|
|
504
|
+
limit: int | None = None,
|
|
505
|
+
cursor: str | None = None,
|
|
506
|
+
) -> dict:
|
|
507
|
+
"""Лонг/шорт соотношение.
|
|
508
|
+
|
|
509
|
+
https://bybit-exchange.github.io/docs/v5/market/long-short-ratio
|
|
510
|
+
"""
|
|
511
|
+
params = {
|
|
512
|
+
"category": category,
|
|
513
|
+
"symbol": symbol,
|
|
514
|
+
"period": period,
|
|
515
|
+
"startTime": start_time,
|
|
516
|
+
"endTime": end_time,
|
|
517
|
+
"limit": limit,
|
|
518
|
+
"cursor": cursor,
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
return await self._make_request("GET", "/v5/market/account-ratio", params=params)
|
|
522
|
+
|
|
523
|
+
async def index_price_components(
|
|
524
|
+
self,
|
|
525
|
+
index_name: str,
|
|
526
|
+
) -> dict:
|
|
527
|
+
"""Компоненты индексной цены.
|
|
528
|
+
|
|
529
|
+
https://bybit-exchange.github.io/docs/v5/market/index-components
|
|
530
|
+
"""
|
|
531
|
+
params = {
|
|
532
|
+
"indexName": index_name,
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
return await self._make_request("GET", "/v5/market/index-price-components", params=params)
|
|
536
|
+
|
|
537
|
+
async def order_price_limit(
|
|
538
|
+
self,
|
|
539
|
+
symbol: str,
|
|
540
|
+
category: Literal["spot", "linear", "inverse"] | None = None,
|
|
541
|
+
) -> dict:
|
|
542
|
+
"""Лимиты цен для ордеров.
|
|
543
|
+
|
|
544
|
+
https://bybit-exchange.github.io/docs/v5/market/order-price-limit
|
|
545
|
+
"""
|
|
546
|
+
params = {
|
|
547
|
+
"category": category,
|
|
548
|
+
"symbol": symbol,
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
return await self._make_request("GET", "/v5/market/price-limit", params=params)
|
|
552
|
+
|
|
553
|
+
async def adl_alert(
|
|
554
|
+
self,
|
|
555
|
+
symbol: str | None = None,
|
|
556
|
+
) -> dict:
|
|
557
|
+
"""Уведомления ADL и информация страхового пула.
|
|
558
|
+
|
|
559
|
+
https://bybit-exchange.github.io/docs/v5/market/adl-alert
|
|
560
|
+
"""
|
|
561
|
+
params = {
|
|
562
|
+
"symbol": symbol,
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
return await self._make_request("GET", "/v5/market/adlAlert", params=params)
|
|
566
|
+
|
|
567
|
+
async def fee_group_info(
|
|
568
|
+
self,
|
|
569
|
+
product_type: Literal["contract"],
|
|
570
|
+
group_id: str | None = None,
|
|
571
|
+
) -> dict:
|
|
572
|
+
"""Структура групп комиссий и ставки.
|
|
573
|
+
|
|
574
|
+
https://bybit-exchange.github.io/docs/v5/market/fee-group-info
|
|
575
|
+
"""
|
|
576
|
+
params = {
|
|
577
|
+
"productType": product_type,
|
|
578
|
+
"groupId": group_id,
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
return await self._make_request("GET", "/v5/market/fee-group-info", params=params)
|
|
582
|
+
|
|
583
|
+
# topic: trade
|
|
584
|
+
|
|
585
|
+
async def create_order(
|
|
586
|
+
self,
|
|
587
|
+
category: Literal["linear", "inverse", "spot", "option"],
|
|
588
|
+
symbol: str,
|
|
589
|
+
side: Literal["Buy", "Sell"],
|
|
590
|
+
order_type: Literal["Market", "Limit"],
|
|
591
|
+
qty: str,
|
|
592
|
+
is_leverage: int | None = None,
|
|
593
|
+
market_unit: str | None = None,
|
|
594
|
+
slippage_tolerance_type: str | None = None,
|
|
595
|
+
slippage_tolerance: str | None = None,
|
|
596
|
+
price: str | None = None,
|
|
597
|
+
trigger_direction: int | None = None,
|
|
598
|
+
order_filter: str | None = None,
|
|
599
|
+
trigger_price: str | None = None,
|
|
600
|
+
trigger_by: str | None = None,
|
|
601
|
+
order_iv: str | None = None,
|
|
602
|
+
time_in_force: str | None = None,
|
|
603
|
+
position_idx: int | None = None,
|
|
604
|
+
order_link_id: str | None = None,
|
|
605
|
+
take_profit: str | None = None,
|
|
606
|
+
stop_loss: str | None = None,
|
|
607
|
+
tp_trigger_by: str | None = None,
|
|
608
|
+
sl_trigger_by: str | None = None,
|
|
609
|
+
reduce_only: bool | None = None,
|
|
610
|
+
close_on_trigger: bool | None = None,
|
|
611
|
+
smp_type: str | None = None,
|
|
612
|
+
mmp: bool | None = None,
|
|
613
|
+
tpsl_mode: str | None = None,
|
|
614
|
+
tp_limit_price: str | None = None,
|
|
615
|
+
sl_limit_price: str | None = None,
|
|
616
|
+
tp_order_type: str | None = None,
|
|
617
|
+
sl_order_type: str | None = None,
|
|
618
|
+
) -> dict:
|
|
619
|
+
"""Создание ордера.
|
|
620
|
+
|
|
621
|
+
https://bybit-exchange.github.io/docs/v5/order/create-order
|
|
622
|
+
"""
|
|
623
|
+
params = {
|
|
624
|
+
"category": category,
|
|
625
|
+
"symbol": symbol,
|
|
626
|
+
"isLeverage": is_leverage,
|
|
627
|
+
"side": side,
|
|
628
|
+
"orderType": order_type,
|
|
629
|
+
"qty": qty,
|
|
630
|
+
"marketUnit": market_unit,
|
|
631
|
+
"slippageToleranceType": slippage_tolerance_type,
|
|
632
|
+
"slippageTolerance": slippage_tolerance,
|
|
633
|
+
"price": price,
|
|
634
|
+
"triggerDirection": trigger_direction,
|
|
635
|
+
"orderFilter": order_filter,
|
|
636
|
+
"triggerPrice": trigger_price,
|
|
637
|
+
"triggerBy": trigger_by,
|
|
638
|
+
"orderIv": order_iv,
|
|
639
|
+
"timeInForce": time_in_force,
|
|
640
|
+
"positionIdx": position_idx,
|
|
641
|
+
"orderLinkId": order_link_id,
|
|
642
|
+
"takeProfit": take_profit,
|
|
643
|
+
"stopLoss": stop_loss,
|
|
644
|
+
"tpTriggerBy": tp_trigger_by,
|
|
645
|
+
"slTriggerBy": sl_trigger_by,
|
|
646
|
+
"reduceOnly": reduce_only,
|
|
647
|
+
"closeOnTrigger": close_on_trigger,
|
|
648
|
+
"smpType": smp_type,
|
|
649
|
+
"mmp": mmp,
|
|
650
|
+
"tpslMode": tpsl_mode,
|
|
651
|
+
"tpLimitPrice": tp_limit_price,
|
|
652
|
+
"slLimitPrice": sl_limit_price,
|
|
653
|
+
"tpOrderType": tp_order_type,
|
|
654
|
+
"slOrderType": sl_order_type,
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
return await self._make_request("POST", "/v5/order/create", params=params, signed=True)
|
|
658
|
+
|
|
659
|
+
async def amend_order(
|
|
660
|
+
self,
|
|
661
|
+
category: Literal["linear", "inverse", "spot", "option"],
|
|
662
|
+
symbol: str,
|
|
663
|
+
order_id: str | None = None,
|
|
664
|
+
order_link_id: str | None = None,
|
|
665
|
+
order_iv: str | None = None,
|
|
666
|
+
trigger_price: str | None = None,
|
|
667
|
+
qty: str | None = None,
|
|
668
|
+
price: str | None = None,
|
|
669
|
+
tpsl_mode: str | None = None,
|
|
670
|
+
take_profit: str | None = None,
|
|
671
|
+
stop_loss: str | None = None,
|
|
672
|
+
tp_trigger_by: str | None = None,
|
|
673
|
+
sl_trigger_by: str | None = None,
|
|
674
|
+
trigger_by: str | None = None,
|
|
675
|
+
tp_limit_price: str | None = None,
|
|
676
|
+
sl_limit_price: str | None = None,
|
|
677
|
+
) -> dict:
|
|
678
|
+
"""Изменение параметров ордера.
|
|
679
|
+
|
|
680
|
+
https://bybit-exchange.github.io/docs/v5/order/amend-order
|
|
681
|
+
"""
|
|
682
|
+
params = {
|
|
683
|
+
"category": category,
|
|
684
|
+
"symbol": symbol,
|
|
685
|
+
"orderId": order_id,
|
|
686
|
+
"orderLinkId": order_link_id,
|
|
687
|
+
"orderIv": order_iv,
|
|
688
|
+
"triggerPrice": trigger_price,
|
|
689
|
+
"qty": qty,
|
|
690
|
+
"price": price,
|
|
691
|
+
"tpslMode": tpsl_mode,
|
|
692
|
+
"takeProfit": take_profit,
|
|
693
|
+
"stopLoss": stop_loss,
|
|
694
|
+
"tpTriggerBy": tp_trigger_by,
|
|
695
|
+
"slTriggerBy": sl_trigger_by,
|
|
696
|
+
"triggerBy": trigger_by,
|
|
697
|
+
"tpLimitPrice": tp_limit_price,
|
|
698
|
+
"slLimitPrice": sl_limit_price,
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
return await self._make_request("POST", "/v5/order/amend", params=params, signed=True)
|
|
702
|
+
|
|
703
|
+
async def cancel_order(
|
|
704
|
+
self,
|
|
705
|
+
category: Literal["linear", "inverse", "spot", "option"],
|
|
706
|
+
symbol: str,
|
|
707
|
+
order_id: str | None = None,
|
|
708
|
+
order_link_id: str | None = None,
|
|
709
|
+
order_filter: str | None = None,
|
|
710
|
+
) -> dict:
|
|
711
|
+
"""Отмена ордера.
|
|
712
|
+
|
|
713
|
+
https://bybit-exchange.github.io/docs/v5/order/cancel-order
|
|
714
|
+
"""
|
|
715
|
+
params = {
|
|
716
|
+
"category": category,
|
|
717
|
+
"symbol": symbol,
|
|
718
|
+
"orderId": order_id,
|
|
719
|
+
"orderLinkId": order_link_id,
|
|
720
|
+
"orderFilter": order_filter,
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
return await self._make_request("POST", "/v5/order/cancel", params=params, signed=True)
|
|
724
|
+
|
|
725
|
+
async def open_orders(
|
|
726
|
+
self,
|
|
727
|
+
category: Literal["linear", "inverse", "spot", "option"],
|
|
728
|
+
symbol: str | None = None,
|
|
729
|
+
base_coin: str | None = None,
|
|
730
|
+
settle_coin: str | None = None,
|
|
731
|
+
order_id: str | None = None,
|
|
732
|
+
order_link_id: str | None = None,
|
|
733
|
+
open_only: int | None = None,
|
|
734
|
+
order_filter: str | None = None,
|
|
735
|
+
limit: int | None = None,
|
|
736
|
+
cursor: str | None = None,
|
|
737
|
+
) -> dict:
|
|
738
|
+
"""Открытые и закрытые ордера (реaltime).
|
|
739
|
+
|
|
740
|
+
https://bybit-exchange.github.io/docs/v5/order/open-order
|
|
741
|
+
"""
|
|
742
|
+
params = {
|
|
743
|
+
"category": category,
|
|
744
|
+
"symbol": symbol,
|
|
745
|
+
"baseCoin": base_coin,
|
|
746
|
+
"settleCoin": settle_coin,
|
|
747
|
+
"orderId": order_id,
|
|
748
|
+
"orderLinkId": order_link_id,
|
|
749
|
+
"openOnly": open_only,
|
|
750
|
+
"orderFilter": order_filter,
|
|
751
|
+
"limit": limit,
|
|
752
|
+
"cursor": cursor,
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
return await self._make_request("GET", "/v5/order/realtime", params=params, signed=True)
|
|
756
|
+
|
|
757
|
+
async def cancel_all_orders(
|
|
758
|
+
self,
|
|
759
|
+
category: Literal["linear", "inverse", "spot", "option"],
|
|
760
|
+
symbol: str | None = None,
|
|
761
|
+
base_coin: str | None = None,
|
|
762
|
+
settle_coin: str | None = None,
|
|
763
|
+
order_filter: str | None = None,
|
|
764
|
+
stop_order_type: str | None = None,
|
|
765
|
+
) -> dict:
|
|
766
|
+
"""Отмена всех открытых ордеров.
|
|
767
|
+
|
|
768
|
+
https://bybit-exchange.github.io/docs/v5/order/cancel-all
|
|
769
|
+
"""
|
|
770
|
+
params = {
|
|
771
|
+
"category": category,
|
|
772
|
+
"symbol": symbol,
|
|
773
|
+
"baseCoin": base_coin,
|
|
774
|
+
"settleCoin": settle_coin,
|
|
775
|
+
"orderFilter": order_filter,
|
|
776
|
+
"stopOrderType": stop_order_type,
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
return await self._make_request("POST", "/v5/order/cancel-all", params=params, signed=True)
|
|
780
|
+
|
|
781
|
+
async def order_history(
|
|
782
|
+
self,
|
|
783
|
+
category: Literal["linear", "inverse", "spot", "option"],
|
|
784
|
+
symbol: str | None = None,
|
|
785
|
+
base_coin: str | None = None,
|
|
786
|
+
settle_coin: str | None = None,
|
|
787
|
+
order_id: str | None = None,
|
|
788
|
+
order_link_id: str | None = None,
|
|
789
|
+
order_filter: str | None = None,
|
|
790
|
+
order_status: str | None = None,
|
|
791
|
+
start_time: int | None = None,
|
|
792
|
+
end_time: int | None = None,
|
|
793
|
+
limit: int | None = None,
|
|
794
|
+
cursor: str | None = None,
|
|
795
|
+
) -> dict:
|
|
796
|
+
"""История ордеров.
|
|
797
|
+
|
|
798
|
+
https://bybit-exchange.github.io/docs/v5/order/order-list
|
|
799
|
+
"""
|
|
800
|
+
params = {
|
|
801
|
+
"category": category,
|
|
802
|
+
"symbol": symbol,
|
|
803
|
+
"baseCoin": base_coin,
|
|
804
|
+
"settleCoin": settle_coin,
|
|
805
|
+
"orderId": order_id,
|
|
806
|
+
"orderLinkId": order_link_id,
|
|
807
|
+
"orderFilter": order_filter,
|
|
808
|
+
"orderStatus": order_status,
|
|
809
|
+
"startTime": start_time,
|
|
810
|
+
"endTime": end_time,
|
|
811
|
+
"limit": limit,
|
|
812
|
+
"cursor": cursor,
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
return await self._make_request("GET", "/v5/order/history", params=params, signed=True)
|
|
816
|
+
|
|
817
|
+
async def trade_history(
|
|
818
|
+
self,
|
|
819
|
+
category: Literal["linear", "inverse", "spot", "option"],
|
|
820
|
+
symbol: str | None = None,
|
|
821
|
+
order_id: str | None = None,
|
|
822
|
+
order_link_id: str | None = None,
|
|
823
|
+
base_coin: str | None = None,
|
|
824
|
+
start_time: int | None = None,
|
|
825
|
+
end_time: int | None = None,
|
|
826
|
+
exec_type: str | None = None,
|
|
827
|
+
limit: int | None = None,
|
|
828
|
+
cursor: str | None = None,
|
|
829
|
+
) -> dict:
|
|
830
|
+
"""История сделок (execution list).
|
|
831
|
+
|
|
832
|
+
https://bybit-exchange.github.io/docs/v5/order/execution
|
|
833
|
+
"""
|
|
834
|
+
params = {
|
|
835
|
+
"category": category,
|
|
836
|
+
"symbol": symbol,
|
|
837
|
+
"orderId": order_id,
|
|
838
|
+
"orderLinkId": order_link_id,
|
|
839
|
+
"baseCoin": base_coin,
|
|
840
|
+
"startTime": start_time,
|
|
841
|
+
"endTime": end_time,
|
|
842
|
+
"execType": exec_type,
|
|
843
|
+
"limit": limit,
|
|
844
|
+
"cursor": cursor,
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
return await self._make_request("GET", "/v5/execution/list", params=params, signed=True)
|
|
848
|
+
|
|
849
|
+
async def create_orders_batch(
|
|
850
|
+
self,
|
|
851
|
+
category: Literal["linear", "option", "spot", "inverse"],
|
|
852
|
+
request: list[dict[str, Any]],
|
|
853
|
+
) -> dict:
|
|
854
|
+
"""Массовое создание ордеров.
|
|
855
|
+
|
|
856
|
+
https://bybit-exchange.github.io/docs/v5/order/batch-place
|
|
857
|
+
"""
|
|
858
|
+
params = {
|
|
859
|
+
"category": category,
|
|
860
|
+
"request": request,
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
return await self._make_request(
|
|
864
|
+
"POST", "/v5/order/create-batch", params=params, signed=True
|
|
865
|
+
)
|
|
866
|
+
|
|
867
|
+
async def amend_orders_batch(
|
|
868
|
+
self,
|
|
869
|
+
category: Literal["linear", "option", "spot", "inverse"],
|
|
870
|
+
request: list[dict[str, Any]],
|
|
871
|
+
) -> dict:
|
|
872
|
+
"""Массовое изменение ордеров.
|
|
873
|
+
|
|
874
|
+
https://bybit-exchange.github.io/docs/v5/order/batch-amend
|
|
875
|
+
"""
|
|
876
|
+
params = {
|
|
877
|
+
"category": category,
|
|
878
|
+
"request": request,
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
return await self._make_request("POST", "/v5/order/amend-batch", params=params, signed=True)
|
|
882
|
+
|
|
883
|
+
async def cancel_orders_batch(
|
|
884
|
+
self,
|
|
885
|
+
category: Literal["linear", "option", "spot", "inverse"],
|
|
886
|
+
request: list[dict[str, Any]],
|
|
887
|
+
) -> dict:
|
|
888
|
+
"""Массовая отмена ордеров.
|
|
889
|
+
|
|
890
|
+
https://bybit-exchange.github.io/docs/v5/order/batch-cancel
|
|
891
|
+
"""
|
|
892
|
+
params = {
|
|
893
|
+
"category": category,
|
|
894
|
+
"request": request,
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
return await self._make_request(
|
|
898
|
+
"POST", "/v5/order/cancel-batch", params=params, signed=True
|
|
899
|
+
)
|
|
900
|
+
|
|
901
|
+
async def spot_borrow_quota(
|
|
902
|
+
self,
|
|
903
|
+
category: Literal["spot"],
|
|
904
|
+
symbol: str,
|
|
905
|
+
side: str,
|
|
906
|
+
) -> dict:
|
|
907
|
+
"""Доступная квота заимствования (Spot).
|
|
908
|
+
|
|
909
|
+
https://bybit-exchange.github.io/docs/v5/order/spot-borrow-quota
|
|
910
|
+
"""
|
|
911
|
+
params = {
|
|
912
|
+
"category": category,
|
|
913
|
+
"symbol": symbol,
|
|
914
|
+
"side": side,
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
return await self._make_request(
|
|
918
|
+
"GET", "/v5/order/spot-borrow-check", params=params, signed=True
|
|
919
|
+
)
|
|
920
|
+
|
|
921
|
+
async def set_disconnect_cancel_all(
|
|
922
|
+
self,
|
|
923
|
+
time_window: int,
|
|
924
|
+
product: Literal["OPTIONS", "DERIVATIVES", "SPOT"] | None = None,
|
|
925
|
+
) -> dict:
|
|
926
|
+
"""Настройка DCP (отмена ордеров при разрыве соединения).
|
|
927
|
+
|
|
928
|
+
https://bybit-exchange.github.io/docs/v5/order/dcp
|
|
929
|
+
"""
|
|
930
|
+
params = {
|
|
931
|
+
"product": product,
|
|
932
|
+
"timeWindow": time_window,
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
return await self._make_request(
|
|
936
|
+
"POST", "/v5/order/disconnected-cancel-all", params=params, signed=True
|
|
937
|
+
)
|
|
938
|
+
|
|
939
|
+
async def pre_check_order(
|
|
940
|
+
self,
|
|
941
|
+
category: Literal["linear", "inverse", "option"],
|
|
942
|
+
symbol: str,
|
|
943
|
+
side: str,
|
|
944
|
+
order_type: str,
|
|
945
|
+
qty: str,
|
|
946
|
+
price: str | None = None,
|
|
947
|
+
trigger_direction: int | None = None,
|
|
948
|
+
trigger_price: str | None = None,
|
|
949
|
+
trigger_by: str | None = None,
|
|
950
|
+
order_iv: str | None = None,
|
|
951
|
+
time_in_force: str | None = None,
|
|
952
|
+
position_idx: int | None = None,
|
|
953
|
+
order_link_id: str | None = None,
|
|
954
|
+
take_profit: str | None = None,
|
|
955
|
+
stop_loss: str | None = None,
|
|
956
|
+
tp_trigger_by: str | None = None,
|
|
957
|
+
sl_trigger_by: str | None = None,
|
|
958
|
+
reduce_only: bool | None = None,
|
|
959
|
+
close_on_trigger: bool | None = None,
|
|
960
|
+
smp_type: str | None = None,
|
|
961
|
+
mmp: bool | None = None,
|
|
962
|
+
tpsl_mode: str | None = None,
|
|
963
|
+
tp_limit_price: str | None = None,
|
|
964
|
+
sl_limit_price: str | None = None,
|
|
965
|
+
tp_order_type: str | None = None,
|
|
966
|
+
sl_order_type: str | None = None,
|
|
967
|
+
) -> dict:
|
|
968
|
+
"""Предварительная проверка ордера (IMR/MMR).
|
|
969
|
+
|
|
970
|
+
https://bybit-exchange.github.io/docs/v5/order/pre-check-order
|
|
971
|
+
"""
|
|
972
|
+
params = {
|
|
973
|
+
"category": category,
|
|
974
|
+
"symbol": symbol,
|
|
975
|
+
"side": side,
|
|
976
|
+
"orderType": order_type,
|
|
977
|
+
"qty": qty,
|
|
978
|
+
"price": price,
|
|
979
|
+
"triggerDirection": trigger_direction,
|
|
980
|
+
"triggerPrice": trigger_price,
|
|
981
|
+
"triggerBy": trigger_by,
|
|
982
|
+
"orderIv": order_iv,
|
|
983
|
+
"timeInForce": time_in_force,
|
|
984
|
+
"positionIdx": position_idx,
|
|
985
|
+
"orderLinkId": order_link_id,
|
|
986
|
+
"takeProfit": take_profit,
|
|
987
|
+
"stopLoss": stop_loss,
|
|
988
|
+
"tpTriggerBy": tp_trigger_by,
|
|
989
|
+
"slTriggerBy": sl_trigger_by,
|
|
990
|
+
"reduceOnly": reduce_only,
|
|
991
|
+
"closeOnTrigger": close_on_trigger,
|
|
992
|
+
"smpType": smp_type,
|
|
993
|
+
"mmp": mmp,
|
|
994
|
+
"tpslMode": tpsl_mode,
|
|
995
|
+
"tpLimitPrice": tp_limit_price,
|
|
996
|
+
"slLimitPrice": sl_limit_price,
|
|
997
|
+
"tpOrderType": tp_order_type,
|
|
998
|
+
"slOrderType": sl_order_type,
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
return await self._make_request("POST", "/v5/order/pre-check", params=params, signed=True)
|
|
1002
|
+
|
|
1003
|
+
# topic: position
|
|
1004
|
+
|
|
1005
|
+
async def position_info(
|
|
1006
|
+
self,
|
|
1007
|
+
category: Literal["linear", "inverse", "option"],
|
|
1008
|
+
symbol: str | None = None,
|
|
1009
|
+
base_coin: str | None = None,
|
|
1010
|
+
settle_coin: str | None = None,
|
|
1011
|
+
limit: int | None = None,
|
|
1012
|
+
cursor: str | None = None,
|
|
1013
|
+
) -> dict:
|
|
1014
|
+
"""Информация по позициям в реальном времени.
|
|
1015
|
+
|
|
1016
|
+
https://bybit-exchange.github.io/docs/v5/position
|
|
1017
|
+
"""
|
|
1018
|
+
params = {
|
|
1019
|
+
"category": category,
|
|
1020
|
+
"symbol": symbol,
|
|
1021
|
+
"baseCoin": base_coin,
|
|
1022
|
+
"settleCoin": settle_coin,
|
|
1023
|
+
"limit": limit,
|
|
1024
|
+
"cursor": cursor,
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
return await self._make_request("GET", "/v5/position/list", params=params, signed=True)
|
|
1028
|
+
|
|
1029
|
+
async def set_leverage(
|
|
1030
|
+
self,
|
|
1031
|
+
category: Literal["linear", "inverse"],
|
|
1032
|
+
symbol: str,
|
|
1033
|
+
buy_leverage: str,
|
|
1034
|
+
sell_leverage: str,
|
|
1035
|
+
) -> dict:
|
|
1036
|
+
"""Установка плеча для символа.
|
|
1037
|
+
|
|
1038
|
+
https://bybit-exchange.github.io/docs/v5/position/leverage
|
|
1039
|
+
"""
|
|
1040
|
+
params = {
|
|
1041
|
+
"category": category,
|
|
1042
|
+
"symbol": symbol,
|
|
1043
|
+
"buyLeverage": buy_leverage,
|
|
1044
|
+
"sellLeverage": sell_leverage,
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
return await self._make_request(
|
|
1048
|
+
"POST", "/v5/position/set-leverage", params=params, signed=True
|
|
1049
|
+
)
|
|
1050
|
+
|
|
1051
|
+
async def switch_isolated_margin(
|
|
1052
|
+
self,
|
|
1053
|
+
category: Literal["linear", "inverse"],
|
|
1054
|
+
symbol: str,
|
|
1055
|
+
trade_mode: int,
|
|
1056
|
+
buy_leverage: str,
|
|
1057
|
+
sell_leverage: str,
|
|
1058
|
+
) -> dict:
|
|
1059
|
+
"""Переключение кросс/изолированной маржи для символа.
|
|
1060
|
+
|
|
1061
|
+
https://bybit-exchange.github.io/docs/v5/position/cross-isolate
|
|
1062
|
+
"""
|
|
1063
|
+
params = {
|
|
1064
|
+
"category": category,
|
|
1065
|
+
"symbol": symbol,
|
|
1066
|
+
"tradeMode": trade_mode,
|
|
1067
|
+
"buyLeverage": buy_leverage,
|
|
1068
|
+
"sellLeverage": sell_leverage,
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
return await self._make_request(
|
|
1072
|
+
"POST", "/v5/position/switch-isolated", params=params, signed=True
|
|
1073
|
+
)
|
|
1074
|
+
|
|
1075
|
+
async def switch_position_mode(
|
|
1076
|
+
self,
|
|
1077
|
+
category: Literal["linear", "inverse"],
|
|
1078
|
+
mode: int,
|
|
1079
|
+
symbol: str | None = None,
|
|
1080
|
+
coin: str | None = None,
|
|
1081
|
+
) -> dict:
|
|
1082
|
+
"""Переключение режима позиций (one-way/hedge).
|
|
1083
|
+
|
|
1084
|
+
https://bybit-exchange.github.io/docs/v5/position/position-mode
|
|
1085
|
+
"""
|
|
1086
|
+
params = {
|
|
1087
|
+
"category": category,
|
|
1088
|
+
"symbol": symbol,
|
|
1089
|
+
"coin": coin,
|
|
1090
|
+
"mode": mode,
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
return await self._make_request(
|
|
1094
|
+
"POST", "/v5/position/switch-mode", params=params, signed=True
|
|
1095
|
+
)
|
|
1096
|
+
|
|
1097
|
+
async def set_trading_stop(
|
|
1098
|
+
self,
|
|
1099
|
+
category: Literal["linear", "inverse"],
|
|
1100
|
+
symbol: str,
|
|
1101
|
+
tpsl_mode: str,
|
|
1102
|
+
position_idx: int,
|
|
1103
|
+
take_profit: str | None = None,
|
|
1104
|
+
stop_loss: str | None = None,
|
|
1105
|
+
trailing_stop: str | None = None,
|
|
1106
|
+
tp_trigger_by: str | None = None,
|
|
1107
|
+
sl_trigger_by: str | None = None,
|
|
1108
|
+
active_price: str | None = None,
|
|
1109
|
+
tp_size: str | None = None,
|
|
1110
|
+
sl_size: str | None = None,
|
|
1111
|
+
tp_limit_price: str | None = None,
|
|
1112
|
+
sl_limit_price: str | None = None,
|
|
1113
|
+
tp_order_type: str | None = None,
|
|
1114
|
+
sl_order_type: str | None = None,
|
|
1115
|
+
) -> dict:
|
|
1116
|
+
"""Установка TP/SL/Trailing Stop для позиции.
|
|
1117
|
+
|
|
1118
|
+
https://bybit-exchange.github.io/docs/v5/position/trading-stop
|
|
1119
|
+
"""
|
|
1120
|
+
params = {
|
|
1121
|
+
"category": category,
|
|
1122
|
+
"symbol": symbol,
|
|
1123
|
+
"tpslMode": tpsl_mode,
|
|
1124
|
+
"positionIdx": position_idx,
|
|
1125
|
+
"takeProfit": take_profit,
|
|
1126
|
+
"stopLoss": stop_loss,
|
|
1127
|
+
"trailingStop": trailing_stop,
|
|
1128
|
+
"tpTriggerBy": tp_trigger_by,
|
|
1129
|
+
"slTriggerBy": sl_trigger_by,
|
|
1130
|
+
"activePrice": active_price,
|
|
1131
|
+
"tpSize": tp_size,
|
|
1132
|
+
"slSize": sl_size,
|
|
1133
|
+
"tpLimitPrice": tp_limit_price,
|
|
1134
|
+
"slLimitPrice": sl_limit_price,
|
|
1135
|
+
"tpOrderType": tp_order_type,
|
|
1136
|
+
"slOrderType": sl_order_type,
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
return await self._make_request(
|
|
1140
|
+
"POST", "/v5/position/trading-stop", params=params, signed=True
|
|
1141
|
+
)
|
|
1142
|
+
|
|
1143
|
+
async def set_auto_add_margin(
|
|
1144
|
+
self,
|
|
1145
|
+
category: Literal["linear"],
|
|
1146
|
+
symbol: str,
|
|
1147
|
+
auto_add_margin: int,
|
|
1148
|
+
position_idx: int | None = None,
|
|
1149
|
+
) -> dict:
|
|
1150
|
+
"""Включить/выключить авто-добавление маржи (изолированная позиция).
|
|
1151
|
+
|
|
1152
|
+
https://bybit-exchange.github.io/docs/v5/position/auto-add-margin
|
|
1153
|
+
"""
|
|
1154
|
+
params = {
|
|
1155
|
+
"category": category,
|
|
1156
|
+
"symbol": symbol,
|
|
1157
|
+
"autoAddMargin": auto_add_margin,
|
|
1158
|
+
"positionIdx": position_idx,
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
return await self._make_request(
|
|
1162
|
+
"POST", "/v5/position/set-auto-add-margin", params=params, signed=True
|
|
1163
|
+
)
|
|
1164
|
+
|
|
1165
|
+
async def add_margin(
|
|
1166
|
+
self,
|
|
1167
|
+
category: Literal["linear", "inverse"],
|
|
1168
|
+
symbol: str,
|
|
1169
|
+
margin: str,
|
|
1170
|
+
position_idx: int | None = None,
|
|
1171
|
+
) -> dict:
|
|
1172
|
+
"""Ручное добавление/уменьшение маржи (изолированная позиция).
|
|
1173
|
+
|
|
1174
|
+
https://bybit-exchange.github.io/docs/v5/position/manual-add-margin
|
|
1175
|
+
"""
|
|
1176
|
+
params = {
|
|
1177
|
+
"category": category,
|
|
1178
|
+
"symbol": symbol,
|
|
1179
|
+
"margin": margin,
|
|
1180
|
+
"positionIdx": position_idx,
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
return await self._make_request(
|
|
1184
|
+
"POST", "/v5/position/add-margin", params=params, signed=True
|
|
1185
|
+
)
|
|
1186
|
+
|
|
1187
|
+
async def closed_pnl(
|
|
1188
|
+
self,
|
|
1189
|
+
category: Literal["linear", "inverse", "option"],
|
|
1190
|
+
symbol: str | None = None,
|
|
1191
|
+
start_time: int | None = None,
|
|
1192
|
+
end_time: int | None = None,
|
|
1193
|
+
limit: int | None = None,
|
|
1194
|
+
cursor: str | None = None,
|
|
1195
|
+
) -> dict:
|
|
1196
|
+
"""История закрытой прибыли/убытка (PnL).
|
|
1197
|
+
|
|
1198
|
+
https://bybit-exchange.github.io/docs/v5/position/close-pnl
|
|
1199
|
+
"""
|
|
1200
|
+
params = {
|
|
1201
|
+
"category": category,
|
|
1202
|
+
"symbol": symbol,
|
|
1203
|
+
"startTime": start_time,
|
|
1204
|
+
"endTime": end_time,
|
|
1205
|
+
"limit": limit,
|
|
1206
|
+
"cursor": cursor,
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
return await self._make_request(
|
|
1210
|
+
"GET", "/v5/position/closed-pnl", params=params, signed=True
|
|
1211
|
+
)
|
|
1212
|
+
|
|
1213
|
+
async def closed_option_positions(
|
|
1214
|
+
self,
|
|
1215
|
+
category: Literal["option"],
|
|
1216
|
+
symbol: str | None = None,
|
|
1217
|
+
start_time: int | None = None,
|
|
1218
|
+
end_time: int | None = None,
|
|
1219
|
+
limit: int | None = None,
|
|
1220
|
+
cursor: str | None = None,
|
|
1221
|
+
) -> dict:
|
|
1222
|
+
"""Закрытые опционные позиции.
|
|
1223
|
+
|
|
1224
|
+
https://bybit-exchange.github.io/docs/v5/position/close-position
|
|
1225
|
+
"""
|
|
1226
|
+
params = {
|
|
1227
|
+
"category": category,
|
|
1228
|
+
"symbol": symbol,
|
|
1229
|
+
"startTime": start_time,
|
|
1230
|
+
"endTime": end_time,
|
|
1231
|
+
"limit": limit,
|
|
1232
|
+
"cursor": cursor,
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
return await self._make_request(
|
|
1236
|
+
"GET", "/v5/position/get-closed-positions", params=params, signed=True
|
|
1237
|
+
)
|
|
1238
|
+
|
|
1239
|
+
async def move_positions(
|
|
1240
|
+
self,
|
|
1241
|
+
from_uid: str,
|
|
1242
|
+
to_uid: str,
|
|
1243
|
+
legs: list[dict[str, Any]],
|
|
1244
|
+
) -> dict:
|
|
1245
|
+
"""Перемещение позиций между учетными записями.
|
|
1246
|
+
|
|
1247
|
+
https://bybit-exchange.github.io/docs/v5/position/move-position
|
|
1248
|
+
"""
|
|
1249
|
+
params = {
|
|
1250
|
+
"fromUid": from_uid,
|
|
1251
|
+
"toUid": to_uid,
|
|
1252
|
+
"list": legs,
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
return await self._make_request(
|
|
1256
|
+
"POST", "/v5/position/move-positions", params=params, signed=True
|
|
1257
|
+
)
|
|
1258
|
+
|
|
1259
|
+
async def move_position_history(
|
|
1260
|
+
self,
|
|
1261
|
+
category: Literal["linear", "spot", "option"] | None = None,
|
|
1262
|
+
symbol: str | None = None,
|
|
1263
|
+
start_time: int | None = None,
|
|
1264
|
+
end_time: int | None = None,
|
|
1265
|
+
status: str | None = None,
|
|
1266
|
+
block_trade_id: str | None = None,
|
|
1267
|
+
limit: int | None = None,
|
|
1268
|
+
cursor: str | None = None,
|
|
1269
|
+
) -> dict:
|
|
1270
|
+
"""История перемещения позиций.
|
|
1271
|
+
|
|
1272
|
+
https://bybit-exchange.github.io/docs/v5/position/move-position-history
|
|
1273
|
+
"""
|
|
1274
|
+
params = {
|
|
1275
|
+
"category": category,
|
|
1276
|
+
"symbol": symbol,
|
|
1277
|
+
"startTime": start_time,
|
|
1278
|
+
"endTime": end_time,
|
|
1279
|
+
"status": status,
|
|
1280
|
+
"blockTradeId": block_trade_id,
|
|
1281
|
+
"limit": limit,
|
|
1282
|
+
"cursor": cursor,
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
return await self._make_request(
|
|
1286
|
+
"GET", "/v5/position/move-history", params=params, signed=True
|
|
1287
|
+
)
|
|
1288
|
+
|
|
1289
|
+
async def confirm_pending_mmr(
|
|
1290
|
+
self,
|
|
1291
|
+
category: Literal["linear", "inverse"],
|
|
1292
|
+
symbol: str,
|
|
1293
|
+
) -> dict:
|
|
1294
|
+
"""Подтверждение нового уровня риска (MMR) для снятия reduceOnly.
|
|
1295
|
+
|
|
1296
|
+
https://bybit-exchange.github.io/docs/v5/position/confirm-mmr
|
|
1297
|
+
"""
|
|
1298
|
+
params = {
|
|
1299
|
+
"category": category,
|
|
1300
|
+
"symbol": symbol,
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
return await self._make_request(
|
|
1304
|
+
"POST", "/v5/position/confirm-pending-mmr", params=params, signed=True
|
|
1305
|
+
)
|
|
1306
|
+
|
|
1307
|
+
async def set_tpsl_mode(
|
|
1308
|
+
self,
|
|
1309
|
+
category: Literal["linear", "inverse"],
|
|
1310
|
+
symbol: str,
|
|
1311
|
+
tp_sl_mode: str,
|
|
1312
|
+
) -> dict:
|
|
1313
|
+
"""Установка режима TP/SL по умолчанию для символа.
|
|
1314
|
+
|
|
1315
|
+
https://bybit-exchange.github.io/docs/v5/position/tpsl-mode
|
|
1316
|
+
"""
|
|
1317
|
+
params = {
|
|
1318
|
+
"category": category,
|
|
1319
|
+
"symbol": symbol,
|
|
1320
|
+
"tpSlMode": tp_sl_mode,
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
return await self._make_request(
|
|
1324
|
+
"POST", "/v5/position/set-tpsl-mode", params=params, signed=True
|
|
1325
|
+
)
|
|
1326
|
+
|
|
1327
|
+
async def set_risk_limit(
|
|
1328
|
+
self,
|
|
1329
|
+
category: Literal["linear", "inverse"],
|
|
1330
|
+
symbol: str,
|
|
1331
|
+
risk_id: int,
|
|
1332
|
+
position_idx: int | None = None,
|
|
1333
|
+
) -> dict:
|
|
1334
|
+
"""Установка лимита риска позиции.
|
|
1335
|
+
|
|
1336
|
+
https://bybit-exchange.github.io/docs/v5/position/set-risk-limit
|
|
1337
|
+
"""
|
|
1338
|
+
params = {
|
|
1339
|
+
"category": category,
|
|
1340
|
+
"symbol": symbol,
|
|
1341
|
+
"riskId": risk_id,
|
|
1342
|
+
"positionIdx": position_idx,
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
return await self._make_request(
|
|
1346
|
+
"POST", "/v5/position/set-risk-limit", params=params, signed=True
|
|
1347
|
+
)
|
|
1348
|
+
|
|
1349
|
+
# topic: pre-upgrade
|
|
1350
|
+
|
|
1351
|
+
async def pre_upgrade_order_history(
|
|
1352
|
+
self,
|
|
1353
|
+
category: Literal["linear", "inverse", "option", "spot"],
|
|
1354
|
+
symbol: str | None = None,
|
|
1355
|
+
base_coin: str | None = None,
|
|
1356
|
+
order_id: str | None = None,
|
|
1357
|
+
order_link_id: str | None = None,
|
|
1358
|
+
order_filter: str | None = None,
|
|
1359
|
+
order_status: str | None = None,
|
|
1360
|
+
start_time: int | None = None,
|
|
1361
|
+
end_time: int | None = None,
|
|
1362
|
+
limit: int | None = None,
|
|
1363
|
+
cursor: str | None = None,
|
|
1364
|
+
) -> dict:
|
|
1365
|
+
"""История ордеров до апгрейда аккаунта.
|
|
1366
|
+
|
|
1367
|
+
https://bybit-exchange.github.io/docs/v5/pre-upgrade/order-list
|
|
1368
|
+
"""
|
|
1369
|
+
params = {
|
|
1370
|
+
"category": category,
|
|
1371
|
+
"symbol": symbol,
|
|
1372
|
+
"baseCoin": base_coin,
|
|
1373
|
+
"orderId": order_id,
|
|
1374
|
+
"orderLinkId": order_link_id,
|
|
1375
|
+
"orderFilter": order_filter,
|
|
1376
|
+
"orderStatus": order_status,
|
|
1377
|
+
"startTime": start_time,
|
|
1378
|
+
"endTime": end_time,
|
|
1379
|
+
"limit": limit,
|
|
1380
|
+
"cursor": cursor,
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
return await self._make_request(
|
|
1384
|
+
"GET", "/v5/pre-upgrade/order/history", params=params, signed=True
|
|
1385
|
+
)
|
|
1386
|
+
|
|
1387
|
+
async def pre_upgrade_trade_history(
|
|
1388
|
+
self,
|
|
1389
|
+
category: Literal["linear", "inverse", "option", "spot"],
|
|
1390
|
+
symbol: str | None = None,
|
|
1391
|
+
order_id: str | None = None,
|
|
1392
|
+
order_link_id: str | None = None,
|
|
1393
|
+
base_coin: str | None = None,
|
|
1394
|
+
start_time: int | None = None,
|
|
1395
|
+
end_time: int | None = None,
|
|
1396
|
+
exec_type: str | None = None,
|
|
1397
|
+
limit: int | None = None,
|
|
1398
|
+
cursor: str | None = None,
|
|
1399
|
+
) -> dict:
|
|
1400
|
+
"""История сделок до апгрейда аккаунта.
|
|
1401
|
+
|
|
1402
|
+
https://bybit-exchange.github.io/docs/v5/pre-upgrade/execution
|
|
1403
|
+
"""
|
|
1404
|
+
params = {
|
|
1405
|
+
"category": category,
|
|
1406
|
+
"symbol": symbol,
|
|
1407
|
+
"orderId": order_id,
|
|
1408
|
+
"orderLinkId": order_link_id,
|
|
1409
|
+
"baseCoin": base_coin,
|
|
1410
|
+
"startTime": start_time,
|
|
1411
|
+
"endTime": end_time,
|
|
1412
|
+
"execType": exec_type,
|
|
1413
|
+
"limit": limit,
|
|
1414
|
+
"cursor": cursor,
|
|
1415
|
+
}
|
|
1416
|
+
|
|
1417
|
+
return await self._make_request(
|
|
1418
|
+
"GET", "/v5/pre-upgrade/execution/list", params=params, signed=True
|
|
1419
|
+
)
|
|
1420
|
+
|
|
1421
|
+
async def pre_upgrade_closed_pnl(
|
|
1422
|
+
self,
|
|
1423
|
+
category: Literal["linear", "inverse"],
|
|
1424
|
+
symbol: str,
|
|
1425
|
+
start_time: int | None = None,
|
|
1426
|
+
end_time: int | None = None,
|
|
1427
|
+
limit: int | None = None,
|
|
1428
|
+
cursor: str | None = None,
|
|
1429
|
+
) -> dict:
|
|
1430
|
+
"""Закрытый PnL до апгрейда аккаунта.
|
|
1431
|
+
|
|
1432
|
+
https://bybit-exchange.github.io/docs/v5/pre-upgrade/close-pnl
|
|
1433
|
+
"""
|
|
1434
|
+
params = {
|
|
1435
|
+
"category": category,
|
|
1436
|
+
"symbol": symbol,
|
|
1437
|
+
"startTime": start_time,
|
|
1438
|
+
"endTime": end_time,
|
|
1439
|
+
"limit": limit,
|
|
1440
|
+
"cursor": cursor,
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
return await self._make_request(
|
|
1444
|
+
"GET", "/v5/pre-upgrade/position/closed-pnl", params=params, signed=True
|
|
1445
|
+
)
|
|
1446
|
+
|
|
1447
|
+
async def pre_upgrade_transaction_log(
|
|
1448
|
+
self,
|
|
1449
|
+
category: Literal["linear", "option"],
|
|
1450
|
+
base_coin: str | None = None,
|
|
1451
|
+
type: str | None = None, # noqa: A003 - API param name
|
|
1452
|
+
start_time: int | None = None,
|
|
1453
|
+
end_time: int | None = None,
|
|
1454
|
+
limit: int | None = None,
|
|
1455
|
+
cursor: str | None = None,
|
|
1456
|
+
) -> dict:
|
|
1457
|
+
"""Транзакционный лог USDC деривативов до апгрейда аккаунта.
|
|
1458
|
+
|
|
1459
|
+
https://bybit-exchange.github.io/docs/v5/pre-upgrade/transaction-log
|
|
1460
|
+
"""
|
|
1461
|
+
params = {
|
|
1462
|
+
"category": category,
|
|
1463
|
+
"baseCoin": base_coin,
|
|
1464
|
+
"type": type,
|
|
1465
|
+
"startTime": start_time,
|
|
1466
|
+
"endTime": end_time,
|
|
1467
|
+
"limit": limit,
|
|
1468
|
+
"cursor": cursor,
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
return await self._make_request(
|
|
1472
|
+
"GET", "/v5/pre-upgrade/account/transaction-log", params=params, signed=True
|
|
1473
|
+
)
|
|
1474
|
+
|
|
1475
|
+
async def pre_upgrade_delivery_record(
|
|
1476
|
+
self,
|
|
1477
|
+
category: Literal["option"],
|
|
1478
|
+
symbol: str | None = None,
|
|
1479
|
+
exp_date: str | None = None,
|
|
1480
|
+
limit: int | None = None,
|
|
1481
|
+
cursor: str | None = None,
|
|
1482
|
+
) -> dict:
|
|
1483
|
+
"""Опционные записи поставок до апгрейда аккаунта.
|
|
1484
|
+
|
|
1485
|
+
https://bybit-exchange.github.io/docs/v5/pre-upgrade/delivery
|
|
1486
|
+
"""
|
|
1487
|
+
params = {
|
|
1488
|
+
"category": category,
|
|
1489
|
+
"symbol": symbol,
|
|
1490
|
+
"expDate": exp_date,
|
|
1491
|
+
"limit": limit,
|
|
1492
|
+
"cursor": cursor,
|
|
1493
|
+
}
|
|
1494
|
+
|
|
1495
|
+
return await self._make_request(
|
|
1496
|
+
"GET", "/v5/pre-upgrade/asset/delivery-record", params=params, signed=True
|
|
1497
|
+
)
|
|
1498
|
+
|
|
1499
|
+
async def pre_upgrade_settlement_record(
|
|
1500
|
+
self,
|
|
1501
|
+
category: Literal["linear"],
|
|
1502
|
+
symbol: str | None = None,
|
|
1503
|
+
limit: int | None = None,
|
|
1504
|
+
cursor: str | None = None,
|
|
1505
|
+
) -> dict:
|
|
1506
|
+
"""Сессионные расчёты USDC Perpetual до апгрейда аккаунта.
|
|
1507
|
+
|
|
1508
|
+
https://bybit-exchange.github.io/docs/v5/pre-upgrade/settlement
|
|
1509
|
+
"""
|
|
1510
|
+
params = {
|
|
1511
|
+
"category": category,
|
|
1512
|
+
"symbol": symbol,
|
|
1513
|
+
"limit": limit,
|
|
1514
|
+
"cursor": cursor,
|
|
1515
|
+
}
|
|
1516
|
+
|
|
1517
|
+
return await self._make_request(
|
|
1518
|
+
"GET", "/v5/pre-upgrade/asset/settlement-record", params=params, signed=True
|
|
1519
|
+
)
|
|
1520
|
+
|
|
1521
|
+
# topic: account
|
|
1522
|
+
|
|
1523
|
+
async def wallet_balance(
|
|
1524
|
+
self,
|
|
1525
|
+
account_type: Literal["UNIFIED", "CONTRACT", "SPOT"],
|
|
1526
|
+
coin: str | None = None,
|
|
1527
|
+
) -> dict:
|
|
1528
|
+
"""Баланс кошелька и активы по монетам.
|
|
1529
|
+
|
|
1530
|
+
https://bybit-exchange.github.io/docs/v5/account/wallet-balance
|
|
1531
|
+
"""
|
|
1532
|
+
params = {
|
|
1533
|
+
"accountType": account_type,
|
|
1534
|
+
"coin": coin,
|
|
1535
|
+
}
|
|
1536
|
+
|
|
1537
|
+
return await self._make_request(
|
|
1538
|
+
"GET", "/v5/account/wallet-balance", params=params, signed=True
|
|
1539
|
+
)
|
|
1540
|
+
|
|
1541
|
+
async def transferable_amount(
|
|
1542
|
+
self,
|
|
1543
|
+
coin_name: str,
|
|
1544
|
+
) -> dict:
|
|
1545
|
+
"""Доступная к переводу сумма (Unified).
|
|
1546
|
+
|
|
1547
|
+
https://bybit-exchange.github.io/docs/v5/account/unified-trans-amnt
|
|
1548
|
+
"""
|
|
1549
|
+
params = {
|
|
1550
|
+
"coinName": coin_name,
|
|
1551
|
+
}
|
|
1552
|
+
|
|
1553
|
+
return await self._make_request("GET", "/v5/account/withdrawal", params=params, signed=True)
|
|
1554
|
+
|
|
1555
|
+
async def upgrade_to_unified_account(self) -> dict:
|
|
1556
|
+
"""Апгрейд до Unified аккаунта.
|
|
1557
|
+
|
|
1558
|
+
https://bybit-exchange.github.io/docs/v5/account/upgrade-unified-account
|
|
1559
|
+
"""
|
|
1560
|
+
return await self._make_request(
|
|
1561
|
+
"POST", "/v5/account/upgrade-to-uta", params={}, signed=True
|
|
1562
|
+
)
|
|
1563
|
+
|
|
1564
|
+
async def borrow_history(
|
|
1565
|
+
self,
|
|
1566
|
+
currency: str | None = None,
|
|
1567
|
+
start_time: int | None = None,
|
|
1568
|
+
end_time: int | None = None,
|
|
1569
|
+
limit: int | None = None,
|
|
1570
|
+
cursor: str | None = None,
|
|
1571
|
+
) -> dict:
|
|
1572
|
+
"""История заимствований (проценты).
|
|
1573
|
+
|
|
1574
|
+
https://bybit-exchange.github.io/docs/v5/account/borrow-history
|
|
1575
|
+
"""
|
|
1576
|
+
params = {
|
|
1577
|
+
"currency": currency,
|
|
1578
|
+
"startTime": start_time,
|
|
1579
|
+
"endTime": end_time,
|
|
1580
|
+
"limit": limit,
|
|
1581
|
+
"cursor": cursor,
|
|
1582
|
+
}
|
|
1583
|
+
|
|
1584
|
+
return await self._make_request(
|
|
1585
|
+
"GET", "/v5/account/borrow-history", params=params, signed=True
|
|
1586
|
+
)
|
|
1587
|
+
|
|
1588
|
+
async def quick_repayment(
|
|
1589
|
+
self,
|
|
1590
|
+
coin: str | None = None,
|
|
1591
|
+
) -> dict:
|
|
1592
|
+
"""Погашение обязательств Unified аккаунта.
|
|
1593
|
+
|
|
1594
|
+
https://bybit-exchange.github.io/docs/v5/account/repay-liability
|
|
1595
|
+
"""
|
|
1596
|
+
params = {
|
|
1597
|
+
"coin": coin,
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
return await self._make_request(
|
|
1601
|
+
"POST", "/v5/account/quick-repayment", params=params, signed=True
|
|
1602
|
+
)
|
|
1603
|
+
|
|
1604
|
+
async def set_collateral_coin(
|
|
1605
|
+
self,
|
|
1606
|
+
coin: str,
|
|
1607
|
+
collateral_switch: Literal["ON", "OFF"],
|
|
1608
|
+
) -> dict:
|
|
1609
|
+
"""Настройка монеты как залога.
|
|
1610
|
+
|
|
1611
|
+
https://bybit-exchange.github.io/docs/v5/account/set-collateral
|
|
1612
|
+
"""
|
|
1613
|
+
params = {
|
|
1614
|
+
"coin": coin,
|
|
1615
|
+
"collateralSwitch": collateral_switch,
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1618
|
+
return await self._make_request(
|
|
1619
|
+
"POST", "/v5/account/set-collateral-switch", params=params, signed=True
|
|
1620
|
+
)
|
|
1621
|
+
|
|
1622
|
+
async def set_collateral_coin_batch(
|
|
1623
|
+
self,
|
|
1624
|
+
request: list[dict[str, Any]],
|
|
1625
|
+
) -> dict:
|
|
1626
|
+
"""Пакетная настройка монет как залога.
|
|
1627
|
+
|
|
1628
|
+
https://bybit-exchange.github.io/docs/v5/account/batch-set-collateral
|
|
1629
|
+
"""
|
|
1630
|
+
params = {
|
|
1631
|
+
"request": request,
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
return await self._make_request(
|
|
1635
|
+
"POST", "/v5/account/set-collateral-switch-batch", params=params, signed=True
|
|
1636
|
+
)
|
|
1637
|
+
|
|
1638
|
+
async def collateral_info(
|
|
1639
|
+
self,
|
|
1640
|
+
currency: str | None = None,
|
|
1641
|
+
) -> dict:
|
|
1642
|
+
"""Информация о залоге (процентные ставки, коэффициенты и пр.).
|
|
1643
|
+
|
|
1644
|
+
https://bybit-exchange.github.io/docs/v5/account/collateral-info
|
|
1645
|
+
"""
|
|
1646
|
+
params = {
|
|
1647
|
+
"currency": currency,
|
|
1648
|
+
}
|
|
1649
|
+
|
|
1650
|
+
return await self._make_request(
|
|
1651
|
+
"GET", "/v5/account/collateral-info", params=params, signed=True
|
|
1652
|
+
)
|
|
1653
|
+
|
|
1654
|
+
async def coin_greeks(
|
|
1655
|
+
self,
|
|
1656
|
+
base_coin: str | None = None,
|
|
1657
|
+
) -> dict:
|
|
1658
|
+
"""Текущие греческие параметры аккаунта по базовым монетам.
|
|
1659
|
+
|
|
1660
|
+
https://bybit-exchange.github.io/docs/v5/account/coin-greeks
|
|
1661
|
+
"""
|
|
1662
|
+
params = {
|
|
1663
|
+
"baseCoin": base_coin,
|
|
1664
|
+
}
|
|
1665
|
+
|
|
1666
|
+
return await self._make_request("GET", "/v5/asset/coin-greeks", params=params, signed=True)
|
|
1667
|
+
|
|
1668
|
+
async def fee_rate(
|
|
1669
|
+
self,
|
|
1670
|
+
category: Literal["spot", "linear", "inverse", "option"],
|
|
1671
|
+
symbol: str | None = None,
|
|
1672
|
+
base_coin: str | None = None,
|
|
1673
|
+
) -> dict:
|
|
1674
|
+
"""Торговые комиссии аккаунта.
|
|
1675
|
+
|
|
1676
|
+
https://bybit-exchange.github.io/docs/v5/account/fee-rate
|
|
1677
|
+
"""
|
|
1678
|
+
params = {
|
|
1679
|
+
"category": category,
|
|
1680
|
+
"symbol": symbol,
|
|
1681
|
+
"baseCoin": base_coin,
|
|
1682
|
+
}
|
|
1683
|
+
|
|
1684
|
+
return await self._make_request("GET", "/v5/account/fee-rate", params=params, signed=True)
|
|
1685
|
+
|
|
1686
|
+
async def account_info(self) -> dict:
|
|
1687
|
+
"""Информация об аккаунте (режимы маржи и т.п.).
|
|
1688
|
+
|
|
1689
|
+
https://bybit-exchange.github.io/docs/v5/account/account-info
|
|
1690
|
+
"""
|
|
1691
|
+
return await self._make_request("GET", "/v5/account/info", params={}, signed=True)
|
|
1692
|
+
|
|
1693
|
+
async def dcp_info(self) -> dict:
|
|
1694
|
+
"""Конфигурация DCP аккаунта.
|
|
1695
|
+
|
|
1696
|
+
https://bybit-exchange.github.io/docs/v5/account/dcp-info
|
|
1697
|
+
"""
|
|
1698
|
+
return await self._make_request("GET", "/v5/account/query-dcp-info", params={}, signed=True)
|
|
1699
|
+
|
|
1700
|
+
async def transaction_log(
|
|
1701
|
+
self,
|
|
1702
|
+
account_type: Literal["UNIFIED"] | None = None,
|
|
1703
|
+
category: Literal["spot", "linear", "option", "inverse"] | None = None,
|
|
1704
|
+
currency: str | None = None,
|
|
1705
|
+
base_coin: str | None = None,
|
|
1706
|
+
type: str | None = None, # noqa: A003 - API param name
|
|
1707
|
+
start_time: int | None = None,
|
|
1708
|
+
end_time: int | None = None,
|
|
1709
|
+
limit: int | None = None,
|
|
1710
|
+
cursor: str | None = None,
|
|
1711
|
+
) -> dict:
|
|
1712
|
+
"""Транзакционный лог Unified аккаунта.
|
|
1713
|
+
|
|
1714
|
+
https://bybit-exchange.github.io/docs/v5/account/transaction-log
|
|
1715
|
+
"""
|
|
1716
|
+
params = {
|
|
1717
|
+
"accountType": account_type,
|
|
1718
|
+
"category": category,
|
|
1719
|
+
"currency": currency,
|
|
1720
|
+
"baseCoin": base_coin,
|
|
1721
|
+
"type": type,
|
|
1722
|
+
"startTime": start_time,
|
|
1723
|
+
"endTime": end_time,
|
|
1724
|
+
"limit": limit,
|
|
1725
|
+
"cursor": cursor,
|
|
1726
|
+
}
|
|
1727
|
+
|
|
1728
|
+
return await self._make_request(
|
|
1729
|
+
"GET", "/v5/account/transaction-log", params=params, signed=True
|
|
1730
|
+
)
|
|
1731
|
+
|
|
1732
|
+
async def contract_transaction_log(
|
|
1733
|
+
self,
|
|
1734
|
+
currency: str | None = None,
|
|
1735
|
+
base_coin: str | None = None,
|
|
1736
|
+
type: str | None = None, # noqa: A003 - API param name
|
|
1737
|
+
start_time: int | None = None,
|
|
1738
|
+
end_time: int | None = None,
|
|
1739
|
+
limit: int | None = None,
|
|
1740
|
+
cursor: str | None = None,
|
|
1741
|
+
) -> dict:
|
|
1742
|
+
"""Транзакционный лог деривативного кошелька.
|
|
1743
|
+
|
|
1744
|
+
https://bybit-exchange.github.io/docs/v5/account/contract-transaction-log
|
|
1745
|
+
"""
|
|
1746
|
+
params = {
|
|
1747
|
+
"currency": currency,
|
|
1748
|
+
"baseCoin": base_coin,
|
|
1749
|
+
"type": type,
|
|
1750
|
+
"startTime": start_time,
|
|
1751
|
+
"endTime": end_time,
|
|
1752
|
+
"limit": limit,
|
|
1753
|
+
"cursor": cursor,
|
|
1754
|
+
}
|
|
1755
|
+
|
|
1756
|
+
return await self._make_request(
|
|
1757
|
+
"GET", "/v5/account/contract-transaction-log", params=params, signed=True
|
|
1758
|
+
)
|
|
1759
|
+
|
|
1760
|
+
async def smp_group(self) -> dict:
|
|
1761
|
+
"""Получить SMP group ID.
|
|
1762
|
+
|
|
1763
|
+
https://bybit-exchange.github.io/docs/v5/account/smp-group
|
|
1764
|
+
"""
|
|
1765
|
+
return await self._make_request("GET", "/v5/account/smp-group", params={}, signed=True)
|
|
1766
|
+
|
|
1767
|
+
async def set_margin_mode(
|
|
1768
|
+
self,
|
|
1769
|
+
set_margin_mode: Literal["ISOLATED_MARGIN", "REGULAR_MARGIN", "PORTFOLIO_MARGIN"],
|
|
1770
|
+
) -> dict:
|
|
1771
|
+
"""Установить режим маржи аккаунта.
|
|
1772
|
+
|
|
1773
|
+
https://bybit-exchange.github.io/docs/v5/account/set-margin-mode
|
|
1774
|
+
"""
|
|
1775
|
+
params = {
|
|
1776
|
+
"setMarginMode": set_margin_mode,
|
|
1777
|
+
}
|
|
1778
|
+
|
|
1779
|
+
return await self._make_request(
|
|
1780
|
+
"POST", "/v5/account/set-margin-mode", params=params, signed=True
|
|
1781
|
+
)
|
|
1782
|
+
|
|
1783
|
+
async def set_spot_hedging(
|
|
1784
|
+
self,
|
|
1785
|
+
set_hedging_mode: Literal["ON", "OFF"],
|
|
1786
|
+
) -> dict:
|
|
1787
|
+
"""Включить/выключить спотовый hedging в Portfolio margin.
|
|
1788
|
+
|
|
1789
|
+
https://bybit-exchange.github.io/docs/v5/account/set-spot-hedge
|
|
1790
|
+
"""
|
|
1791
|
+
params = {
|
|
1792
|
+
"setHedgingMode": set_hedging_mode,
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1795
|
+
return await self._make_request(
|
|
1796
|
+
"POST", "/v5/account/set-hedging-mode", params=params, signed=True
|
|
1797
|
+
)
|
|
1798
|
+
|
|
1799
|
+
async def set_limit_price_action(
|
|
1800
|
+
self,
|
|
1801
|
+
category: Literal["linear", "inverse", "spot"],
|
|
1802
|
+
modify_enable: bool,
|
|
1803
|
+
) -> dict:
|
|
1804
|
+
"""Настройка поведения при выходе лимитной цены за границы.
|
|
1805
|
+
|
|
1806
|
+
https://bybit-exchange.github.io/docs/v5/account/set-price-limit
|
|
1807
|
+
"""
|
|
1808
|
+
params = {
|
|
1809
|
+
"category": category,
|
|
1810
|
+
"modifyEnable": modify_enable,
|
|
1811
|
+
}
|
|
1812
|
+
|
|
1813
|
+
return await self._make_request(
|
|
1814
|
+
"POST", "/v5/account/set-limit-px-action", params=params, signed=True
|
|
1815
|
+
)
|
|
1816
|
+
|
|
1817
|
+
async def user_setting_config(self) -> dict:
|
|
1818
|
+
"""Получить конфигурацию поведения для лимитных цен.
|
|
1819
|
+
|
|
1820
|
+
https://bybit-exchange.github.io/docs/v5/account/get-user-setting-config
|
|
1821
|
+
"""
|
|
1822
|
+
return await self._make_request(
|
|
1823
|
+
"GET", "/v5/account/user-setting-config", params={}, signed=True
|
|
1824
|
+
)
|
|
1825
|
+
|
|
1826
|
+
async def set_mmp(
|
|
1827
|
+
self,
|
|
1828
|
+
base_coin: str,
|
|
1829
|
+
window: str,
|
|
1830
|
+
frozen_period: str,
|
|
1831
|
+
qty_limit: str,
|
|
1832
|
+
delta_limit: str,
|
|
1833
|
+
) -> dict:
|
|
1834
|
+
"""Настроить Market Maker Protection (MMP).
|
|
1835
|
+
|
|
1836
|
+
https://bybit-exchange.github.io/docs/v5/account/set-mmp
|
|
1837
|
+
"""
|
|
1838
|
+
params = {
|
|
1839
|
+
"baseCoin": base_coin,
|
|
1840
|
+
"window": window,
|
|
1841
|
+
"frozenPeriod": frozen_period,
|
|
1842
|
+
"qtyLimit": qty_limit,
|
|
1843
|
+
"deltaLimit": delta_limit,
|
|
1844
|
+
}
|
|
1845
|
+
|
|
1846
|
+
return await self._make_request(
|
|
1847
|
+
"POST", "/v5/account/mmp-modify", params=params, signed=True
|
|
1848
|
+
)
|
|
1849
|
+
|
|
1850
|
+
async def reset_mmp(
|
|
1851
|
+
self,
|
|
1852
|
+
base_coin: str,
|
|
1853
|
+
) -> dict:
|
|
1854
|
+
"""Сбросить состояние MMP (разморозить).
|
|
1855
|
+
|
|
1856
|
+
https://bybit-exchange.github.io/docs/v5/account/reset-mmp
|
|
1857
|
+
"""
|
|
1858
|
+
params = {
|
|
1859
|
+
"baseCoin": base_coin,
|
|
1860
|
+
}
|
|
1861
|
+
|
|
1862
|
+
return await self._make_request("POST", "/v5/account/mmp-reset", params=params, signed=True)
|
|
1863
|
+
|
|
1864
|
+
async def mmp_state(
|
|
1865
|
+
self,
|
|
1866
|
+
base_coin: str,
|
|
1867
|
+
) -> dict:
|
|
1868
|
+
"""Статус MMP.
|
|
1869
|
+
|
|
1870
|
+
https://bybit-exchange.github.io/docs/v5/account/get-mmp-state
|
|
1871
|
+
"""
|
|
1872
|
+
params = {
|
|
1873
|
+
"baseCoin": base_coin,
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
return await self._make_request("GET", "/v5/account/mmp-state", params=params, signed=True)
|