ccxt 4.3.55__py2.py3-none-any.whl → 4.3.56__py2.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.
Potentially problematic release.
This version of ccxt might be problematic. Click here for more details.
- ccxt/__init__.py +1 -1
- ccxt/abstract/bingx.py +16 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +19 -3
- ccxt/async_support/binance.py +7 -7
- ccxt/async_support/bingx.py +33 -0
- ccxt/async_support/bitflyer.py +7 -1
- ccxt/async_support/bitopro.py +18 -3
- ccxt/async_support/btcmarkets.py +27 -26
- ccxt/async_support/bybit.py +8 -5
- ccxt/async_support/delta.py +5 -1
- ccxt/async_support/gate.py +1 -0
- ccxt/async_support/hyperliquid.py +1 -1
- ccxt/async_support/lbank.py +27 -6
- ccxt/base/exchange.py +19 -3
- ccxt/binance.py +7 -7
- ccxt/bingx.py +33 -0
- ccxt/bitflyer.py +7 -1
- ccxt/bitopro.py +18 -3
- ccxt/btcmarkets.py +27 -26
- ccxt/bybit.py +8 -5
- ccxt/delta.py +5 -1
- ccxt/gate.py +1 -0
- ccxt/hyperliquid.py +1 -1
- ccxt/lbank.py +27 -6
- ccxt/pro/__init__.py +1 -1
- {ccxt-4.3.55.dist-info → ccxt-4.3.56.dist-info}/METADATA +4 -6
- {ccxt-4.3.55.dist-info → ccxt-4.3.56.dist-info}/RECORD +31 -31
- {ccxt-4.3.55.dist-info → ccxt-4.3.56.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.3.55.dist-info → ccxt-4.3.56.dist-info}/WHEEL +0 -0
- {ccxt-4.3.55.dist-info → ccxt-4.3.56.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abstract/bingx.py
CHANGED
@@ -76,6 +76,22 @@ class ImplicitAPI:
|
|
76
76
|
swap_v2_private_delete_trade_batchorders = swapV2PrivateDeleteTradeBatchOrders = Entry('trade/batchOrders', ['swap', 'v2', 'private'], 'DELETE', {'cost': 2})
|
77
77
|
swap_v2_private_delete_trade_allopenorders = swapV2PrivateDeleteTradeAllOpenOrders = Entry('trade/allOpenOrders', ['swap', 'v2', 'private'], 'DELETE', {'cost': 2})
|
78
78
|
swap_v3_public_get_quote_klines = swapV3PublicGetQuoteKlines = Entry('quote/klines', ['swap', 'v3', 'public'], 'GET', {'cost': 1})
|
79
|
+
cswap_v1_public_get_market_contracts = cswapV1PublicGetMarketContracts = Entry('market/contracts', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
|
80
|
+
cswap_v1_public_get_market_premiumindex = cswapV1PublicGetMarketPremiumIndex = Entry('market/premiumIndex', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
|
81
|
+
cswap_v1_public_get_market_openinterest = cswapV1PublicGetMarketOpenInterest = Entry('market/openInterest', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
|
82
|
+
cswap_v1_public_get_market_klines = cswapV1PublicGetMarketKlines = Entry('market/klines', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
|
83
|
+
cswap_v1_public_get_market_depth = cswapV1PublicGetMarketDepth = Entry('market/depth', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
|
84
|
+
cswap_v1_public_get_market_ticker = cswapV1PublicGetMarketTicker = Entry('market/ticker', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
|
85
|
+
cswap_v1_private_get_trade_leverage = cswapV1PrivateGetTradeLeverage = Entry('trade/leverage', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
|
86
|
+
cswap_v1_private_get_trade_forceorders = cswapV1PrivateGetTradeForceOrders = Entry('trade/forceOrders', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
|
87
|
+
cswap_v1_private_get_trade_allfillorders = cswapV1PrivateGetTradeAllFillOrders = Entry('trade/allFillOrders', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
|
88
|
+
cswap_v1_private_get_user_commissionrate = cswapV1PrivateGetUserCommissionRate = Entry('user/commissionRate', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
|
89
|
+
cswap_v1_private_get_user_positions = cswapV1PrivateGetUserPositions = Entry('user/positions', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
|
90
|
+
cswap_v1_private_get_user_balance = cswapV1PrivateGetUserBalance = Entry('user/balance', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
|
91
|
+
cswap_v1_private_post_trade_order = cswapV1PrivatePostTradeOrder = Entry('trade/order', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
|
92
|
+
cswap_v1_private_post_trade_leverage = cswapV1PrivatePostTradeLeverage = Entry('trade/leverage', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
|
93
|
+
cswap_v1_private_post_trade_allopenorders = cswapV1PrivatePostTradeAllOpenOrders = Entry('trade/allOpenOrders', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
|
94
|
+
cswap_v1_private_post_trade_closeallpositions = cswapV1PrivatePostTradeCloseAllPositions = Entry('trade/closeAllPositions', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
|
79
95
|
contract_v1_private_get_allposition = contractV1PrivateGetAllPosition = Entry('allPosition', ['contract', 'v1', 'private'], 'GET', {'cost': 2})
|
80
96
|
contract_v1_private_get_allorders = contractV1PrivateGetAllOrders = Entry('allOrders', ['contract', 'v1', 'private'], 'GET', {'cost': 2})
|
81
97
|
contract_v1_private_get_balance = contractV1PrivateGetBalance = Entry('balance', ['contract', 'v1', 'private'], 'GET', {'cost': 2})
|
ccxt/async_support/__init__.py
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# -----------------------------------------------------------------------------
|
4
4
|
|
5
|
-
__version__ = '4.3.
|
5
|
+
__version__ = '4.3.56'
|
6
6
|
|
7
7
|
# -----------------------------------------------------------------------------
|
8
8
|
|
@@ -24,7 +24,7 @@ from ccxt.async_support.base.throttler import Throttler
|
|
24
24
|
|
25
25
|
# -----------------------------------------------------------------------------
|
26
26
|
|
27
|
-
from ccxt.base.errors import BaseError, BadSymbol, BadRequest, BadResponse, ExchangeError, ExchangeNotAvailable, RequestTimeout, NotSupported, NullResponse, InvalidAddress, RateLimitExceeded
|
27
|
+
from ccxt.base.errors import BaseError, NetworkError, BadSymbol, BadRequest, BadResponse, ExchangeError, ExchangeNotAvailable, RequestTimeout, NotSupported, NullResponse, InvalidAddress, RateLimitExceeded
|
28
28
|
from ccxt.base.types import OrderType, OrderSide, OrderRequest, CancellationRequest
|
29
29
|
|
30
30
|
# -----------------------------------------------------------------------------
|
@@ -826,7 +826,23 @@ class Exchange(BaseExchange):
|
|
826
826
|
self.last_request_headers = request['headers']
|
827
827
|
self.last_request_body = request['body']
|
828
828
|
self.last_request_url = request['url']
|
829
|
-
|
829
|
+
retries = None
|
830
|
+
retries, params = self.handle_option_and_params(params, path, 'maxRetriesOnFailure', 0)
|
831
|
+
retryDelay = None
|
832
|
+
retryDelay, params = self.handle_option_and_params(params, path, 'maxRetriesOnFailureDelay', 0)
|
833
|
+
for i in range(0, retries + 1):
|
834
|
+
try:
|
835
|
+
return await self.fetch(request['url'], request['method'], request['headers'], request['body'])
|
836
|
+
except Exception as e:
|
837
|
+
if isinstance(e, NetworkError):
|
838
|
+
if i < retries:
|
839
|
+
if self.verbose:
|
840
|
+
self.log('Request failed with the error: ' + str(e) + ', retrying ' + (i + str(1)) + ' of ' + str(retries) + '...')
|
841
|
+
if (retryDelay is not None) and (retryDelay != 0):
|
842
|
+
await self.sleep(retryDelay)
|
843
|
+
continue
|
844
|
+
raise e
|
845
|
+
return None # self line is never reached, but exists for c# value return requirement
|
830
846
|
|
831
847
|
async def request(self, path, api: Any = 'public', method='GET', params={}, headers: Any = None, body: Any = None, config={}):
|
832
848
|
return await self.fetch2(path, api, method, params, headers, body, config)
|
ccxt/async_support/binance.py
CHANGED
@@ -1567,7 +1567,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1567
1567
|
'-3042': BadRequest, # {"code":-3042,"msg":"PriceIndex not available for self margin pair."}
|
1568
1568
|
'-3043': PermissionDenied, # {"code":-3043,"msg":"Transferring in not allowed."}
|
1569
1569
|
'-3044': OperationFailed, # {"code":-3044,"msg":"System busy."}
|
1570
|
-
'-3045':
|
1570
|
+
'-3045': OperationRejected, # {"code":-3045,"msg":"The system doesn't have enough asset now."}
|
1571
1571
|
'-3999': PermissionDenied, # {"code":-3999,"msg":"This function is only available for invited users."}
|
1572
1572
|
#
|
1573
1573
|
# 4xxx(different from contract markets)
|
@@ -1586,7 +1586,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1586
1586
|
'-4011': BadRequest, # {"code":-4011 ,"msg":"White list mail is invalid."}
|
1587
1587
|
'-4012': PermissionDenied, # {"code":-4012 ,"msg":"White list is not opened."}
|
1588
1588
|
'-4013': AuthenticationError, # {"code":-4013 ,"msg":"2FA is not opened."}
|
1589
|
-
'-4014':
|
1589
|
+
'-4014': OperationRejected, # {"code":-4014 ,"msg":"Withdraw is not allowed within 2 min login."}
|
1590
1590
|
'-4015': PermissionDenied, # {"code":-4015 ,"msg":"Withdraw is limited."}
|
1591
1591
|
'-4016': PermissionDenied, # {"code":-4016 ,"msg":"Within 24 hours after password modification, withdrawal is prohibited."}
|
1592
1592
|
'-4017': PermissionDenied, # {"code":-4017 ,"msg":"Within 24 hours after the release of 2FA, withdrawal is prohibited."}
|
@@ -1595,7 +1595,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1595
1595
|
'-4020': ExchangeError, # override commons
|
1596
1596
|
'-4021': BadRequest, # {"code":-4021,"msg":"Asset withdrawal must be an %s multiple of %s."}
|
1597
1597
|
'-4022': BadRequest, # {"code":-4022,"msg":"Not less than the minimum pick-up quantity %s."}
|
1598
|
-
'-4023':
|
1598
|
+
'-4023': OperationRejected, # {"code":-4023,"msg":"Within 24 hours, the withdrawal exceeds the maximum amount."}
|
1599
1599
|
'-4024': InsufficientFunds, # {"code":-4024,"msg":"You don't have self asset."}
|
1600
1600
|
'-4025': InsufficientFunds, # {"code":-4025,"msg":"The number of hold asset is less than zero."}
|
1601
1601
|
'-4026': InsufficientFunds, # {"code":-4026,"msg":"You have insufficient balance."}
|
@@ -1604,7 +1604,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1604
1604
|
'-4029': BadRequest, # {"code":-4029,"msg":"The withdrawal record does not exist."}
|
1605
1605
|
'-4030': BadResponse, # {"code":-4030,"msg":"Confirmation of successful asset withdrawal. [TODO] possible bug in docs"}
|
1606
1606
|
'-4031': OperationFailed, # {"code":-4031,"msg":"Cancellation failed."}
|
1607
|
-
'-4032':
|
1607
|
+
'-4032': OperationRejected, # {"code":-4032,"msg":"Withdraw verification exception."}
|
1608
1608
|
'-4033': BadRequest, # {"code":-4033,"msg":"Illegal address."}
|
1609
1609
|
'-4034': OperationRejected, # {"code":-4034,"msg":"The address is suspected of fake."}
|
1610
1610
|
'-4035': PermissionDenied, # {"code":-4035,"msg":"This address is not on the whitelist. Please join and try again."}
|
@@ -1727,7 +1727,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1727
1727
|
'-5003': InsufficientFunds, # You don't have self asset.
|
1728
1728
|
'-5004': OperationRejected, # The residual balances of %s have exceeded 0.001BTC, Please re-choose.
|
1729
1729
|
'-5005': OperationRejected, # The residual balances of %s is too low, Please re-choose.
|
1730
|
-
'-5006':
|
1730
|
+
'-5006': OperationRejected, # Only transfer once in 24 hours.
|
1731
1731
|
'-5007': BadRequest, # Quantity must be greater than zero.
|
1732
1732
|
'-5008': OperationRejected, # Insufficient amount of returnable assets.
|
1733
1733
|
'-5009': BadSymbol, # Product does not exist.
|
@@ -1745,8 +1745,8 @@ class binance(Exchange, ImplicitAPI):
|
|
1745
1745
|
'-6004': BadRequest, # Product not in purchase status
|
1746
1746
|
'-6005': BadRequest, # Smaller than min purchase limit
|
1747
1747
|
'-6006': BadRequest, # Redeem amount error
|
1748
|
-
'-6007':
|
1749
|
-
'-6008':
|
1748
|
+
'-6007': OperationRejected, # Not in redeem time
|
1749
|
+
'-6008': OperationRejected, # Product not in redeem status
|
1750
1750
|
'-6009': RateLimitExceeded, # Request frequency too high
|
1751
1751
|
'-6011': OperationRejected, # Exceeding the maximum num allowed to purchase per user
|
1752
1752
|
'-6012': InsufficientFunds, # Balance not enough
|
ccxt/async_support/bingx.py
CHANGED
@@ -116,6 +116,7 @@ class bingx(Exchange, ImplicitAPI):
|
|
116
116
|
'subAccount': 'https://open-api.{hostname}/openApi',
|
117
117
|
'account': 'https://open-api.{hostname}/openApi',
|
118
118
|
'copyTrading': 'https://open-api.{hostname}/openApi',
|
119
|
+
'cswap': 'https://open-api.{hostname}/openApi',
|
119
120
|
},
|
120
121
|
'test': {
|
121
122
|
'swap': 'https://open-api-vst.{hostname}/openApi', # only swap is really "test" but since the API keys are the same, we want to keep all the functionalities when the user enables the sandboxmode
|
@@ -278,6 +279,36 @@ class bingx(Exchange, ImplicitAPI):
|
|
278
279
|
},
|
279
280
|
},
|
280
281
|
},
|
282
|
+
'cswap': {
|
283
|
+
'v1': {
|
284
|
+
'public': {
|
285
|
+
'get': {
|
286
|
+
'market/contracts': 1,
|
287
|
+
'market/premiumIndex': 1,
|
288
|
+
'market/openInterest': 1,
|
289
|
+
'market/klines': 1,
|
290
|
+
'market/depth': 1,
|
291
|
+
'market/ticker': 1,
|
292
|
+
},
|
293
|
+
},
|
294
|
+
'private': {
|
295
|
+
'get': {
|
296
|
+
'trade/leverage': 2,
|
297
|
+
'trade/forceOrders': 2,
|
298
|
+
'trade/allFillOrders': 2,
|
299
|
+
'user/commissionRate': 2,
|
300
|
+
'user/positions': 2,
|
301
|
+
'user/balance': 2,
|
302
|
+
},
|
303
|
+
'post': {
|
304
|
+
'trade/order': 2,
|
305
|
+
'trade/leverage': 2,
|
306
|
+
'trade/allOpenOrders': 2,
|
307
|
+
'trade/closeAllPositions': 2,
|
308
|
+
},
|
309
|
+
},
|
310
|
+
},
|
311
|
+
},
|
281
312
|
'contract': {
|
282
313
|
'v1': {
|
283
314
|
'private': {
|
@@ -1466,6 +1497,8 @@ class bingx(Exchange, ImplicitAPI):
|
|
1466
1497
|
percentage = percentage.replace('%', '')
|
1467
1498
|
change = self.safe_string(ticker, 'priceChange')
|
1468
1499
|
ts = self.safe_integer(ticker, 'closeTime')
|
1500
|
+
if ts == 0:
|
1501
|
+
ts = None
|
1469
1502
|
datetime = self.iso8601(ts)
|
1470
1503
|
bid = self.safe_string(ticker, 'bidPrice')
|
1471
1504
|
bidVolume = self.safe_string(ticker, 'bidQty')
|
ccxt/async_support/bitflyer.py
CHANGED
@@ -566,7 +566,13 @@ class bitflyer(Exchange, ImplicitAPI):
|
|
566
566
|
'product_code': self.market_id(symbol),
|
567
567
|
'child_order_acceptance_id': id,
|
568
568
|
}
|
569
|
-
|
569
|
+
response = await self.privatePostCancelchildorder(self.extend(request, params))
|
570
|
+
#
|
571
|
+
# 200 OK.
|
572
|
+
#
|
573
|
+
return self.safe_order({
|
574
|
+
'info': response,
|
575
|
+
})
|
570
576
|
|
571
577
|
def parse_order_status(self, status: Str):
|
572
578
|
statuses: dict = {
|
ccxt/async_support/bitopro.py
CHANGED
@@ -1038,6 +1038,20 @@ class bitopro(Exchange, ImplicitAPI):
|
|
1038
1038
|
#
|
1039
1039
|
return self.parse_order(response, market)
|
1040
1040
|
|
1041
|
+
def parse_cancel_orders(self, data):
|
1042
|
+
dataKeys = list(data.keys())
|
1043
|
+
orders = []
|
1044
|
+
for i in range(0, len(dataKeys)):
|
1045
|
+
marketId = dataKeys[i]
|
1046
|
+
orderIds = data[marketId]
|
1047
|
+
for j in range(0, len(orderIds)):
|
1048
|
+
orders.append(self.safe_order({
|
1049
|
+
'info': orderIds[j],
|
1050
|
+
'id': orderIds[j],
|
1051
|
+
'symbol': self.safe_symbol(marketId),
|
1052
|
+
}))
|
1053
|
+
return orders
|
1054
|
+
|
1041
1055
|
async def cancel_orders(self, ids, symbol: Str = None, params={}):
|
1042
1056
|
"""
|
1043
1057
|
cancel multiple orders
|
@@ -1065,7 +1079,8 @@ class bitopro(Exchange, ImplicitAPI):
|
|
1065
1079
|
# }
|
1066
1080
|
# }
|
1067
1081
|
#
|
1068
|
-
|
1082
|
+
data = self.safe_dict(response, 'data')
|
1083
|
+
return self.parse_cancel_orders(data)
|
1069
1084
|
|
1070
1085
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
1071
1086
|
"""
|
@@ -1086,7 +1101,7 @@ class bitopro(Exchange, ImplicitAPI):
|
|
1086
1101
|
response = await self.privateDeleteOrdersPair(self.extend(request, params))
|
1087
1102
|
else:
|
1088
1103
|
response = await self.privateDeleteOrdersAll(self.extend(request, params))
|
1089
|
-
|
1104
|
+
data = self.safe_value(response, 'data', {})
|
1090
1105
|
#
|
1091
1106
|
# {
|
1092
1107
|
# "data":{
|
@@ -1097,7 +1112,7 @@ class bitopro(Exchange, ImplicitAPI):
|
|
1097
1112
|
# }
|
1098
1113
|
# }
|
1099
1114
|
#
|
1100
|
-
return
|
1115
|
+
return self.parse_cancel_orders(data)
|
1101
1116
|
|
1102
1117
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1103
1118
|
"""
|
ccxt/async_support/btcmarkets.py
CHANGED
@@ -14,7 +14,6 @@ from ccxt.base.errors import BadRequest
|
|
14
14
|
from ccxt.base.errors import InsufficientFunds
|
15
15
|
from ccxt.base.errors import InvalidOrder
|
16
16
|
from ccxt.base.errors import OrderNotFound
|
17
|
-
from ccxt.base.errors import DDoSProtection
|
18
17
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
19
18
|
from ccxt.base.precise import Precise
|
20
19
|
|
@@ -161,16 +160,18 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
161
160
|
},
|
162
161
|
'precisionMode': TICK_SIZE,
|
163
162
|
'exceptions': {
|
164
|
-
'
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
163
|
+
'exact': {
|
164
|
+
'InsufficientFund': InsufficientFunds,
|
165
|
+
'InvalidPrice': InvalidOrder,
|
166
|
+
'InvalidAmount': InvalidOrder,
|
167
|
+
'MissingArgument': BadRequest,
|
168
|
+
'OrderAlreadyCancelled': InvalidOrder,
|
169
|
+
'OrderNotFound': OrderNotFound,
|
170
|
+
'OrderStatusIsFinal': InvalidOrder,
|
171
|
+
'InvalidPaginationParameter': BadRequest,
|
172
|
+
},
|
173
|
+
'broad': {
|
174
|
+
},
|
174
175
|
},
|
175
176
|
'fees': {
|
176
177
|
'percentage': True,
|
@@ -370,7 +371,8 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
370
371
|
# "minOrderAmount":"0.00007",
|
371
372
|
# "maxOrderAmount":"1000000",
|
372
373
|
# "amountDecimals":"8",
|
373
|
-
# "priceDecimals":"2"
|
374
|
+
# "priceDecimals":"2",
|
375
|
+
# "status": "Online"
|
374
376
|
# }
|
375
377
|
# ]
|
376
378
|
#
|
@@ -387,6 +389,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
387
389
|
pricePrecision = self.parse_number(self.parse_precision(self.safe_string(market, 'priceDecimals')))
|
388
390
|
minAmount = self.safe_number(market, 'minOrderAmount')
|
389
391
|
maxAmount = self.safe_number(market, 'maxOrderAmount')
|
392
|
+
status = self.safe_string(market, 'status')
|
390
393
|
minPrice = None
|
391
394
|
if quote == 'AUD':
|
392
395
|
minPrice = pricePrecision
|
@@ -405,7 +408,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
405
408
|
'swap': False,
|
406
409
|
'future': False,
|
407
410
|
'option': False,
|
408
|
-
'active':
|
411
|
+
'active': (status == 'Online'),
|
409
412
|
'contract': False,
|
410
413
|
'linear': None,
|
411
414
|
'inverse': None,
|
@@ -1204,18 +1207,16 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
1204
1207
|
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1205
1208
|
if response is None:
|
1206
1209
|
return None # fallback to default error handler
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
if code >= 400:
|
1215
|
-
errorCode = self.safe_string(response, 'code')
|
1216
|
-
message = self.safe_string(response, 'message')
|
1210
|
+
#
|
1211
|
+
# {"code":"UnAuthorized","message":"invalid access token"}
|
1212
|
+
# {"code":"MarketNotFound","message":"invalid marketId"}
|
1213
|
+
#
|
1214
|
+
errorCode = self.safe_string(response, 'code')
|
1215
|
+
message = self.safe_string(response, 'message')
|
1216
|
+
if errorCode is not None:
|
1217
1217
|
feedback = self.id + ' ' + body
|
1218
|
-
self.throw_exactly_matched_exception(self.exceptions,
|
1219
|
-
self.throw_exactly_matched_exception(self.exceptions,
|
1220
|
-
|
1218
|
+
self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
|
1219
|
+
self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
|
1220
|
+
self.throw_broadly_matched_exception(self.exceptions['broad'], message, feedback)
|
1221
|
+
raise ExchangeError(feedback) # unknown message
|
1221
1222
|
return None
|
ccxt/async_support/bybit.py
CHANGED
@@ -2922,14 +2922,17 @@ class bybit(Exchange, ImplicitAPI):
|
|
2922
2922
|
enableUnifiedMargin, enableUnifiedAccount = await self.is_unified_enabled()
|
2923
2923
|
isUnifiedAccount = (enableUnifiedMargin or enableUnifiedAccount)
|
2924
2924
|
type = None
|
2925
|
-
type, params = self.
|
2925
|
+
type, params = self.get_bybit_type('fetchBalance', None, params)
|
2926
2926
|
isSpot = (type == 'spot')
|
2927
|
-
|
2927
|
+
isLinear = (type == 'linear')
|
2928
|
+
isInverse = (type == 'inverse')
|
2928
2929
|
if isUnifiedAccount:
|
2929
|
-
if
|
2930
|
+
if isInverse:
|
2931
|
+
type = 'contract'
|
2932
|
+
else:
|
2930
2933
|
type = 'unified'
|
2931
2934
|
else:
|
2932
|
-
if
|
2935
|
+
if isLinear or isInverse:
|
2933
2936
|
type = 'contract'
|
2934
2937
|
accountTypes = self.safe_dict(self.options, 'accountsByType', {})
|
2935
2938
|
unifiedType = self.safe_string_upper(accountTypes, type, type)
|
@@ -3232,7 +3235,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
3232
3235
|
else:
|
3233
3236
|
feeCurrencyCode = market['base'] if market['inverse'] else market['settle']
|
3234
3237
|
fee = {
|
3235
|
-
'cost': feeCostString,
|
3238
|
+
'cost': self.parse_number(feeCostString),
|
3236
3239
|
'currency': feeCurrencyCode,
|
3237
3240
|
}
|
3238
3241
|
clientOrderId = self.safe_string(order, 'orderLinkId')
|
ccxt/async_support/delta.py
CHANGED
@@ -1946,7 +1946,11 @@ class delta(Exchange, ImplicitAPI):
|
|
1946
1946
|
# "success":true
|
1947
1947
|
# }
|
1948
1948
|
#
|
1949
|
-
return
|
1949
|
+
return [
|
1950
|
+
self.safe_order({
|
1951
|
+
'info': response,
|
1952
|
+
}),
|
1953
|
+
]
|
1950
1954
|
|
1951
1955
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1952
1956
|
"""
|
ccxt/async_support/gate.py
CHANGED
ccxt/async_support/lbank.py
CHANGED
@@ -1417,6 +1417,27 @@ class lbank(Exchange, ImplicitAPI):
|
|
1417
1417
|
# "status":-1
|
1418
1418
|
# }
|
1419
1419
|
#
|
1420
|
+
# cancelOrder
|
1421
|
+
#
|
1422
|
+
# {
|
1423
|
+
# "executedQty":0.0,
|
1424
|
+
# "price":0.05,
|
1425
|
+
# "origQty":100.0,
|
1426
|
+
# "tradeType":"buy",
|
1427
|
+
# "status":0
|
1428
|
+
# }
|
1429
|
+
#
|
1430
|
+
# cancelAllOrders
|
1431
|
+
#
|
1432
|
+
# {
|
1433
|
+
# "executedQty":0.00000000000000000000,
|
1434
|
+
# "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
|
1435
|
+
# "price":0.05000000000000000000,
|
1436
|
+
# "origQty":100.00000000000000000000,
|
1437
|
+
# "tradeType":"buy",
|
1438
|
+
# "status":0
|
1439
|
+
# }
|
1440
|
+
#
|
1420
1441
|
id = self.safe_string_2(order, 'orderId', 'order_id')
|
1421
1442
|
clientOrderId = self.safe_string_2(order, 'clientOrderId', 'custom_id')
|
1422
1443
|
timestamp = self.safe_integer_2(order, 'time', 'create_time')
|
@@ -1426,7 +1447,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1426
1447
|
timeInForce = None
|
1427
1448
|
postOnly = False
|
1428
1449
|
type = 'limit'
|
1429
|
-
rawType = self.
|
1450
|
+
rawType = self.safe_string_2(order, 'type', 'tradeType') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
|
1430
1451
|
parts = rawType.split('_')
|
1431
1452
|
side = self.safe_string(parts, 0)
|
1432
1453
|
typePart = self.safe_string(parts, 1) # market, maker, ioc, fok or None(limit)
|
@@ -1760,12 +1781,12 @@ class lbank(Exchange, ImplicitAPI):
|
|
1760
1781
|
# "origQty":100.0,
|
1761
1782
|
# "tradeType":"buy",
|
1762
1783
|
# "status":0
|
1763
|
-
#
|
1784
|
+
# },
|
1764
1785
|
# "error_code":0,
|
1765
1786
|
# "ts":1648501286196
|
1766
1787
|
# }
|
1767
|
-
|
1768
|
-
return
|
1788
|
+
data = self.safe_dict(response, 'data', {})
|
1789
|
+
return self.parse_order(data)
|
1769
1790
|
|
1770
1791
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
1771
1792
|
"""
|
@@ -1800,8 +1821,8 @@ class lbank(Exchange, ImplicitAPI):
|
|
1800
1821
|
# "ts":1648506641469
|
1801
1822
|
# }
|
1802
1823
|
#
|
1803
|
-
|
1804
|
-
return
|
1824
|
+
data = self.safe_list(response, 'data', [])
|
1825
|
+
return self.parse_orders(data)
|
1805
1826
|
|
1806
1827
|
def get_network_code_for_currency(self, currencyCode, params):
|
1807
1828
|
defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
|
ccxt/base/exchange.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.3.
|
7
|
+
__version__ = '4.3.56'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -1449,7 +1449,7 @@ class Exchange(object):
|
|
1449
1449
|
@staticmethod
|
1450
1450
|
def eddsa(request, secret, curve='ed25519'):
|
1451
1451
|
if isinstance(secret, str):
|
1452
|
-
Exchange.encode(secret)
|
1452
|
+
secret = Exchange.encode(secret)
|
1453
1453
|
private_key = ed25519.Ed25519PrivateKey.from_private_bytes(secret) if len(secret) == 32 else load_pem_private_key(secret, None)
|
1454
1454
|
return Exchange.binary_to_base64(private_key.sign(request))
|
1455
1455
|
|
@@ -3734,7 +3734,23 @@ class Exchange(object):
|
|
3734
3734
|
self.last_request_headers = request['headers']
|
3735
3735
|
self.last_request_body = request['body']
|
3736
3736
|
self.last_request_url = request['url']
|
3737
|
-
|
3737
|
+
retries = None
|
3738
|
+
retries, params = self.handle_option_and_params(params, path, 'maxRetriesOnFailure', 0)
|
3739
|
+
retryDelay = None
|
3740
|
+
retryDelay, params = self.handle_option_and_params(params, path, 'maxRetriesOnFailureDelay', 0)
|
3741
|
+
for i in range(0, retries + 1):
|
3742
|
+
try:
|
3743
|
+
return self.fetch(request['url'], request['method'], request['headers'], request['body'])
|
3744
|
+
except Exception as e:
|
3745
|
+
if isinstance(e, NetworkError):
|
3746
|
+
if i < retries:
|
3747
|
+
if self.verbose:
|
3748
|
+
self.log('Request failed with the error: ' + str(e) + ', retrying ' + (i + str(1)) + ' of ' + str(retries) + '...')
|
3749
|
+
if (retryDelay is not None) and (retryDelay != 0):
|
3750
|
+
self.sleep(retryDelay)
|
3751
|
+
continue
|
3752
|
+
raise e
|
3753
|
+
return None # self line is never reached, but exists for c# value return requirement
|
3738
3754
|
|
3739
3755
|
def request(self, path, api: Any = 'public', method='GET', params={}, headers: Any = None, body: Any = None, config={}):
|
3740
3756
|
return self.fetch2(path, api, method, params, headers, body, config)
|
ccxt/binance.py
CHANGED
@@ -1566,7 +1566,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1566
1566
|
'-3042': BadRequest, # {"code":-3042,"msg":"PriceIndex not available for self margin pair."}
|
1567
1567
|
'-3043': PermissionDenied, # {"code":-3043,"msg":"Transferring in not allowed."}
|
1568
1568
|
'-3044': OperationFailed, # {"code":-3044,"msg":"System busy."}
|
1569
|
-
'-3045':
|
1569
|
+
'-3045': OperationRejected, # {"code":-3045,"msg":"The system doesn't have enough asset now."}
|
1570
1570
|
'-3999': PermissionDenied, # {"code":-3999,"msg":"This function is only available for invited users."}
|
1571
1571
|
#
|
1572
1572
|
# 4xxx(different from contract markets)
|
@@ -1585,7 +1585,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1585
1585
|
'-4011': BadRequest, # {"code":-4011 ,"msg":"White list mail is invalid."}
|
1586
1586
|
'-4012': PermissionDenied, # {"code":-4012 ,"msg":"White list is not opened."}
|
1587
1587
|
'-4013': AuthenticationError, # {"code":-4013 ,"msg":"2FA is not opened."}
|
1588
|
-
'-4014':
|
1588
|
+
'-4014': OperationRejected, # {"code":-4014 ,"msg":"Withdraw is not allowed within 2 min login."}
|
1589
1589
|
'-4015': PermissionDenied, # {"code":-4015 ,"msg":"Withdraw is limited."}
|
1590
1590
|
'-4016': PermissionDenied, # {"code":-4016 ,"msg":"Within 24 hours after password modification, withdrawal is prohibited."}
|
1591
1591
|
'-4017': PermissionDenied, # {"code":-4017 ,"msg":"Within 24 hours after the release of 2FA, withdrawal is prohibited."}
|
@@ -1594,7 +1594,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1594
1594
|
'-4020': ExchangeError, # override commons
|
1595
1595
|
'-4021': BadRequest, # {"code":-4021,"msg":"Asset withdrawal must be an %s multiple of %s."}
|
1596
1596
|
'-4022': BadRequest, # {"code":-4022,"msg":"Not less than the minimum pick-up quantity %s."}
|
1597
|
-
'-4023':
|
1597
|
+
'-4023': OperationRejected, # {"code":-4023,"msg":"Within 24 hours, the withdrawal exceeds the maximum amount."}
|
1598
1598
|
'-4024': InsufficientFunds, # {"code":-4024,"msg":"You don't have self asset."}
|
1599
1599
|
'-4025': InsufficientFunds, # {"code":-4025,"msg":"The number of hold asset is less than zero."}
|
1600
1600
|
'-4026': InsufficientFunds, # {"code":-4026,"msg":"You have insufficient balance."}
|
@@ -1603,7 +1603,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1603
1603
|
'-4029': BadRequest, # {"code":-4029,"msg":"The withdrawal record does not exist."}
|
1604
1604
|
'-4030': BadResponse, # {"code":-4030,"msg":"Confirmation of successful asset withdrawal. [TODO] possible bug in docs"}
|
1605
1605
|
'-4031': OperationFailed, # {"code":-4031,"msg":"Cancellation failed."}
|
1606
|
-
'-4032':
|
1606
|
+
'-4032': OperationRejected, # {"code":-4032,"msg":"Withdraw verification exception."}
|
1607
1607
|
'-4033': BadRequest, # {"code":-4033,"msg":"Illegal address."}
|
1608
1608
|
'-4034': OperationRejected, # {"code":-4034,"msg":"The address is suspected of fake."}
|
1609
1609
|
'-4035': PermissionDenied, # {"code":-4035,"msg":"This address is not on the whitelist. Please join and try again."}
|
@@ -1726,7 +1726,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1726
1726
|
'-5003': InsufficientFunds, # You don't have self asset.
|
1727
1727
|
'-5004': OperationRejected, # The residual balances of %s have exceeded 0.001BTC, Please re-choose.
|
1728
1728
|
'-5005': OperationRejected, # The residual balances of %s is too low, Please re-choose.
|
1729
|
-
'-5006':
|
1729
|
+
'-5006': OperationRejected, # Only transfer once in 24 hours.
|
1730
1730
|
'-5007': BadRequest, # Quantity must be greater than zero.
|
1731
1731
|
'-5008': OperationRejected, # Insufficient amount of returnable assets.
|
1732
1732
|
'-5009': BadSymbol, # Product does not exist.
|
@@ -1744,8 +1744,8 @@ class binance(Exchange, ImplicitAPI):
|
|
1744
1744
|
'-6004': BadRequest, # Product not in purchase status
|
1745
1745
|
'-6005': BadRequest, # Smaller than min purchase limit
|
1746
1746
|
'-6006': BadRequest, # Redeem amount error
|
1747
|
-
'-6007':
|
1748
|
-
'-6008':
|
1747
|
+
'-6007': OperationRejected, # Not in redeem time
|
1748
|
+
'-6008': OperationRejected, # Product not in redeem status
|
1749
1749
|
'-6009': RateLimitExceeded, # Request frequency too high
|
1750
1750
|
'-6011': OperationRejected, # Exceeding the maximum num allowed to purchase per user
|
1751
1751
|
'-6012': InsufficientFunds, # Balance not enough
|
ccxt/bingx.py
CHANGED
@@ -115,6 +115,7 @@ class bingx(Exchange, ImplicitAPI):
|
|
115
115
|
'subAccount': 'https://open-api.{hostname}/openApi',
|
116
116
|
'account': 'https://open-api.{hostname}/openApi',
|
117
117
|
'copyTrading': 'https://open-api.{hostname}/openApi',
|
118
|
+
'cswap': 'https://open-api.{hostname}/openApi',
|
118
119
|
},
|
119
120
|
'test': {
|
120
121
|
'swap': 'https://open-api-vst.{hostname}/openApi', # only swap is really "test" but since the API keys are the same, we want to keep all the functionalities when the user enables the sandboxmode
|
@@ -277,6 +278,36 @@ class bingx(Exchange, ImplicitAPI):
|
|
277
278
|
},
|
278
279
|
},
|
279
280
|
},
|
281
|
+
'cswap': {
|
282
|
+
'v1': {
|
283
|
+
'public': {
|
284
|
+
'get': {
|
285
|
+
'market/contracts': 1,
|
286
|
+
'market/premiumIndex': 1,
|
287
|
+
'market/openInterest': 1,
|
288
|
+
'market/klines': 1,
|
289
|
+
'market/depth': 1,
|
290
|
+
'market/ticker': 1,
|
291
|
+
},
|
292
|
+
},
|
293
|
+
'private': {
|
294
|
+
'get': {
|
295
|
+
'trade/leverage': 2,
|
296
|
+
'trade/forceOrders': 2,
|
297
|
+
'trade/allFillOrders': 2,
|
298
|
+
'user/commissionRate': 2,
|
299
|
+
'user/positions': 2,
|
300
|
+
'user/balance': 2,
|
301
|
+
},
|
302
|
+
'post': {
|
303
|
+
'trade/order': 2,
|
304
|
+
'trade/leverage': 2,
|
305
|
+
'trade/allOpenOrders': 2,
|
306
|
+
'trade/closeAllPositions': 2,
|
307
|
+
},
|
308
|
+
},
|
309
|
+
},
|
310
|
+
},
|
280
311
|
'contract': {
|
281
312
|
'v1': {
|
282
313
|
'private': {
|
@@ -1465,6 +1496,8 @@ class bingx(Exchange, ImplicitAPI):
|
|
1465
1496
|
percentage = percentage.replace('%', '')
|
1466
1497
|
change = self.safe_string(ticker, 'priceChange')
|
1467
1498
|
ts = self.safe_integer(ticker, 'closeTime')
|
1499
|
+
if ts == 0:
|
1500
|
+
ts = None
|
1468
1501
|
datetime = self.iso8601(ts)
|
1469
1502
|
bid = self.safe_string(ticker, 'bidPrice')
|
1470
1503
|
bidVolume = self.safe_string(ticker, 'bidQty')
|
ccxt/bitflyer.py
CHANGED
@@ -566,7 +566,13 @@ class bitflyer(Exchange, ImplicitAPI):
|
|
566
566
|
'product_code': self.market_id(symbol),
|
567
567
|
'child_order_acceptance_id': id,
|
568
568
|
}
|
569
|
-
|
569
|
+
response = self.privatePostCancelchildorder(self.extend(request, params))
|
570
|
+
#
|
571
|
+
# 200 OK.
|
572
|
+
#
|
573
|
+
return self.safe_order({
|
574
|
+
'info': response,
|
575
|
+
})
|
570
576
|
|
571
577
|
def parse_order_status(self, status: Str):
|
572
578
|
statuses: dict = {
|
ccxt/bitopro.py
CHANGED
@@ -1038,6 +1038,20 @@ class bitopro(Exchange, ImplicitAPI):
|
|
1038
1038
|
#
|
1039
1039
|
return self.parse_order(response, market)
|
1040
1040
|
|
1041
|
+
def parse_cancel_orders(self, data):
|
1042
|
+
dataKeys = list(data.keys())
|
1043
|
+
orders = []
|
1044
|
+
for i in range(0, len(dataKeys)):
|
1045
|
+
marketId = dataKeys[i]
|
1046
|
+
orderIds = data[marketId]
|
1047
|
+
for j in range(0, len(orderIds)):
|
1048
|
+
orders.append(self.safe_order({
|
1049
|
+
'info': orderIds[j],
|
1050
|
+
'id': orderIds[j],
|
1051
|
+
'symbol': self.safe_symbol(marketId),
|
1052
|
+
}))
|
1053
|
+
return orders
|
1054
|
+
|
1041
1055
|
def cancel_orders(self, ids, symbol: Str = None, params={}):
|
1042
1056
|
"""
|
1043
1057
|
cancel multiple orders
|
@@ -1065,7 +1079,8 @@ class bitopro(Exchange, ImplicitAPI):
|
|
1065
1079
|
# }
|
1066
1080
|
# }
|
1067
1081
|
#
|
1068
|
-
|
1082
|
+
data = self.safe_dict(response, 'data')
|
1083
|
+
return self.parse_cancel_orders(data)
|
1069
1084
|
|
1070
1085
|
def cancel_all_orders(self, symbol: Str = None, params={}):
|
1071
1086
|
"""
|
@@ -1086,7 +1101,7 @@ class bitopro(Exchange, ImplicitAPI):
|
|
1086
1101
|
response = self.privateDeleteOrdersPair(self.extend(request, params))
|
1087
1102
|
else:
|
1088
1103
|
response = self.privateDeleteOrdersAll(self.extend(request, params))
|
1089
|
-
|
1104
|
+
data = self.safe_value(response, 'data', {})
|
1090
1105
|
#
|
1091
1106
|
# {
|
1092
1107
|
# "data":{
|
@@ -1097,7 +1112,7 @@ class bitopro(Exchange, ImplicitAPI):
|
|
1097
1112
|
# }
|
1098
1113
|
# }
|
1099
1114
|
#
|
1100
|
-
return
|
1115
|
+
return self.parse_cancel_orders(data)
|
1101
1116
|
|
1102
1117
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1103
1118
|
"""
|
ccxt/btcmarkets.py
CHANGED
@@ -14,7 +14,6 @@ from ccxt.base.errors import BadRequest
|
|
14
14
|
from ccxt.base.errors import InsufficientFunds
|
15
15
|
from ccxt.base.errors import InvalidOrder
|
16
16
|
from ccxt.base.errors import OrderNotFound
|
17
|
-
from ccxt.base.errors import DDoSProtection
|
18
17
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
19
18
|
from ccxt.base.precise import Precise
|
20
19
|
|
@@ -161,16 +160,18 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
161
160
|
},
|
162
161
|
'precisionMode': TICK_SIZE,
|
163
162
|
'exceptions': {
|
164
|
-
'
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
163
|
+
'exact': {
|
164
|
+
'InsufficientFund': InsufficientFunds,
|
165
|
+
'InvalidPrice': InvalidOrder,
|
166
|
+
'InvalidAmount': InvalidOrder,
|
167
|
+
'MissingArgument': BadRequest,
|
168
|
+
'OrderAlreadyCancelled': InvalidOrder,
|
169
|
+
'OrderNotFound': OrderNotFound,
|
170
|
+
'OrderStatusIsFinal': InvalidOrder,
|
171
|
+
'InvalidPaginationParameter': BadRequest,
|
172
|
+
},
|
173
|
+
'broad': {
|
174
|
+
},
|
174
175
|
},
|
175
176
|
'fees': {
|
176
177
|
'percentage': True,
|
@@ -370,7 +371,8 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
370
371
|
# "minOrderAmount":"0.00007",
|
371
372
|
# "maxOrderAmount":"1000000",
|
372
373
|
# "amountDecimals":"8",
|
373
|
-
# "priceDecimals":"2"
|
374
|
+
# "priceDecimals":"2",
|
375
|
+
# "status": "Online"
|
374
376
|
# }
|
375
377
|
# ]
|
376
378
|
#
|
@@ -387,6 +389,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
387
389
|
pricePrecision = self.parse_number(self.parse_precision(self.safe_string(market, 'priceDecimals')))
|
388
390
|
minAmount = self.safe_number(market, 'minOrderAmount')
|
389
391
|
maxAmount = self.safe_number(market, 'maxOrderAmount')
|
392
|
+
status = self.safe_string(market, 'status')
|
390
393
|
minPrice = None
|
391
394
|
if quote == 'AUD':
|
392
395
|
minPrice = pricePrecision
|
@@ -405,7 +408,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
405
408
|
'swap': False,
|
406
409
|
'future': False,
|
407
410
|
'option': False,
|
408
|
-
'active':
|
411
|
+
'active': (status == 'Online'),
|
409
412
|
'contract': False,
|
410
413
|
'linear': None,
|
411
414
|
'inverse': None,
|
@@ -1204,18 +1207,16 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
1204
1207
|
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1205
1208
|
if response is None:
|
1206
1209
|
return None # fallback to default error handler
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
if code >= 400:
|
1215
|
-
errorCode = self.safe_string(response, 'code')
|
1216
|
-
message = self.safe_string(response, 'message')
|
1210
|
+
#
|
1211
|
+
# {"code":"UnAuthorized","message":"invalid access token"}
|
1212
|
+
# {"code":"MarketNotFound","message":"invalid marketId"}
|
1213
|
+
#
|
1214
|
+
errorCode = self.safe_string(response, 'code')
|
1215
|
+
message = self.safe_string(response, 'message')
|
1216
|
+
if errorCode is not None:
|
1217
1217
|
feedback = self.id + ' ' + body
|
1218
|
-
self.throw_exactly_matched_exception(self.exceptions,
|
1219
|
-
self.throw_exactly_matched_exception(self.exceptions,
|
1220
|
-
|
1218
|
+
self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
|
1219
|
+
self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
|
1220
|
+
self.throw_broadly_matched_exception(self.exceptions['broad'], message, feedback)
|
1221
|
+
raise ExchangeError(feedback) # unknown message
|
1221
1222
|
return None
|
ccxt/bybit.py
CHANGED
@@ -2921,14 +2921,17 @@ class bybit(Exchange, ImplicitAPI):
|
|
2921
2921
|
enableUnifiedMargin, enableUnifiedAccount = self.is_unified_enabled()
|
2922
2922
|
isUnifiedAccount = (enableUnifiedMargin or enableUnifiedAccount)
|
2923
2923
|
type = None
|
2924
|
-
type, params = self.
|
2924
|
+
type, params = self.get_bybit_type('fetchBalance', None, params)
|
2925
2925
|
isSpot = (type == 'spot')
|
2926
|
-
|
2926
|
+
isLinear = (type == 'linear')
|
2927
|
+
isInverse = (type == 'inverse')
|
2927
2928
|
if isUnifiedAccount:
|
2928
|
-
if
|
2929
|
+
if isInverse:
|
2930
|
+
type = 'contract'
|
2931
|
+
else:
|
2929
2932
|
type = 'unified'
|
2930
2933
|
else:
|
2931
|
-
if
|
2934
|
+
if isLinear or isInverse:
|
2932
2935
|
type = 'contract'
|
2933
2936
|
accountTypes = self.safe_dict(self.options, 'accountsByType', {})
|
2934
2937
|
unifiedType = self.safe_string_upper(accountTypes, type, type)
|
@@ -3231,7 +3234,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
3231
3234
|
else:
|
3232
3235
|
feeCurrencyCode = market['base'] if market['inverse'] else market['settle']
|
3233
3236
|
fee = {
|
3234
|
-
'cost': feeCostString,
|
3237
|
+
'cost': self.parse_number(feeCostString),
|
3235
3238
|
'currency': feeCurrencyCode,
|
3236
3239
|
}
|
3237
3240
|
clientOrderId = self.safe_string(order, 'orderLinkId')
|
ccxt/delta.py
CHANGED
@@ -1946,7 +1946,11 @@ class delta(Exchange, ImplicitAPI):
|
|
1946
1946
|
# "success":true
|
1947
1947
|
# }
|
1948
1948
|
#
|
1949
|
-
return
|
1949
|
+
return [
|
1950
|
+
self.safe_order({
|
1951
|
+
'info': response,
|
1952
|
+
}),
|
1953
|
+
]
|
1950
1954
|
|
1951
1955
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1952
1956
|
"""
|
ccxt/gate.py
CHANGED
ccxt/hyperliquid.py
CHANGED
ccxt/lbank.py
CHANGED
@@ -1416,6 +1416,27 @@ class lbank(Exchange, ImplicitAPI):
|
|
1416
1416
|
# "status":-1
|
1417
1417
|
# }
|
1418
1418
|
#
|
1419
|
+
# cancelOrder
|
1420
|
+
#
|
1421
|
+
# {
|
1422
|
+
# "executedQty":0.0,
|
1423
|
+
# "price":0.05,
|
1424
|
+
# "origQty":100.0,
|
1425
|
+
# "tradeType":"buy",
|
1426
|
+
# "status":0
|
1427
|
+
# }
|
1428
|
+
#
|
1429
|
+
# cancelAllOrders
|
1430
|
+
#
|
1431
|
+
# {
|
1432
|
+
# "executedQty":0.00000000000000000000,
|
1433
|
+
# "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
|
1434
|
+
# "price":0.05000000000000000000,
|
1435
|
+
# "origQty":100.00000000000000000000,
|
1436
|
+
# "tradeType":"buy",
|
1437
|
+
# "status":0
|
1438
|
+
# }
|
1439
|
+
#
|
1419
1440
|
id = self.safe_string_2(order, 'orderId', 'order_id')
|
1420
1441
|
clientOrderId = self.safe_string_2(order, 'clientOrderId', 'custom_id')
|
1421
1442
|
timestamp = self.safe_integer_2(order, 'time', 'create_time')
|
@@ -1425,7 +1446,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1425
1446
|
timeInForce = None
|
1426
1447
|
postOnly = False
|
1427
1448
|
type = 'limit'
|
1428
|
-
rawType = self.
|
1449
|
+
rawType = self.safe_string_2(order, 'type', 'tradeType') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
|
1429
1450
|
parts = rawType.split('_')
|
1430
1451
|
side = self.safe_string(parts, 0)
|
1431
1452
|
typePart = self.safe_string(parts, 1) # market, maker, ioc, fok or None(limit)
|
@@ -1759,12 +1780,12 @@ class lbank(Exchange, ImplicitAPI):
|
|
1759
1780
|
# "origQty":100.0,
|
1760
1781
|
# "tradeType":"buy",
|
1761
1782
|
# "status":0
|
1762
|
-
#
|
1783
|
+
# },
|
1763
1784
|
# "error_code":0,
|
1764
1785
|
# "ts":1648501286196
|
1765
1786
|
# }
|
1766
|
-
|
1767
|
-
return
|
1787
|
+
data = self.safe_dict(response, 'data', {})
|
1788
|
+
return self.parse_order(data)
|
1768
1789
|
|
1769
1790
|
def cancel_all_orders(self, symbol: Str = None, params={}):
|
1770
1791
|
"""
|
@@ -1799,8 +1820,8 @@ class lbank(Exchange, ImplicitAPI):
|
|
1799
1820
|
# "ts":1648506641469
|
1800
1821
|
# }
|
1801
1822
|
#
|
1802
|
-
|
1803
|
-
return
|
1823
|
+
data = self.safe_list(response, 'data', [])
|
1824
|
+
return self.parse_orders(data)
|
1804
1825
|
|
1805
1826
|
def get_network_code_for_currency(self, currencyCode, params):
|
1806
1827
|
defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
|
ccxt/pro/__init__.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.3.
|
3
|
+
Version: 4.3.56
|
4
4
|
Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
|
5
5
|
Home-page: https://ccxt.com
|
6
6
|
Author: Igor Kroitor
|
@@ -71,8 +71,6 @@ Current feature list:
|
|
71
71
|
|
72
72
|
## Sponsored Promotion
|
73
73
|
|
74
|
-
[](https://www.bitmex.com/app/register/NZTR1q)
|
75
|
-
|
76
74
|
## See Also
|
77
75
|
|
78
76
|
- <sub>[](https://tab-trader.com/?utm_source=ccxt)</sub> **[TabTrader](https://tab-trader.com/?utm_source=ccxt)** – trading on all exchanges in one app. Available on **[Android](https://play.google.com/store/apps/details?id=com.tabtrader.android&referrer=utm_source%3Dccxt)** and **[iOS](https://itunes.apple.com/app/apple-store/id1095716562?mt=8)**!
|
@@ -270,13 +268,13 @@ console.log(version, Object.keys(exchanges));
|
|
270
268
|
|
271
269
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
272
270
|
|
273
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
274
|
-
* unpkg: https://unpkg.com/ccxt@4.3.
|
271
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.56/dist/ccxt.browser.min.js
|
272
|
+
* unpkg: https://unpkg.com/ccxt@4.3.56/dist/ccxt.browser.min.js
|
275
273
|
|
276
274
|
CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
|
277
275
|
|
278
276
|
```HTML
|
279
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
277
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.56/dist/ccxt.browser.min.js"></script>
|
280
278
|
```
|
281
279
|
|
282
280
|
Creates a global `ccxt` object:
|
@@ -1,14 +1,14 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=e19B_MWkPqqUP6DO56U6QJMqj3rbGgsPbrcbGrYeris,16236
|
2
2
|
ccxt/ace.py,sha256=as3MdzaTeU3DZU9AdCJMb6m7oOlwPThoCcaGezMA2oA,41674
|
3
3
|
ccxt/alpaca.py,sha256=0a7EdCZHvyRapkoI6obaUJBkFxDQJ5Vet5M6A1QmFGU,47325
|
4
4
|
ccxt/ascendex.py,sha256=4aEwibO_me6khr66z8JFqDBxe2gtFOWIFBE7ulBEJPs,151933
|
5
5
|
ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
|
6
6
|
ccxt/bigone.py,sha256=yJ8Defzc8EObAeoa7882MASXxD4bK8Gal6Xj4b5n37k,92434
|
7
|
-
ccxt/binance.py,sha256=
|
7
|
+
ccxt/binance.py,sha256=vuamBl7h8Gs4CVudPnf88RmX-elVG9BG5g3SBvEaa9Q,629421
|
8
8
|
ccxt/binancecoinm.py,sha256=arFnEh8mErSyi23eVPWE4iwoT7PWQyxGGVJCKCy6UJY,1702
|
9
9
|
ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
|
10
10
|
ccxt/binanceusdm.py,sha256=bAPcJj5HLxoCdPolriM8sJpoTBwbV78vBTbKRmWhNP4,2632
|
11
|
-
ccxt/bingx.py,sha256=
|
11
|
+
ccxt/bingx.py,sha256=EFmLX2N-76vklYQjM-TGllN8btM40ObtJJOPWmXtUEM,190158
|
12
12
|
ccxt/bit2c.py,sha256=KwHefm2dfgcSR5LeGbHpFQlSI3LNot8tmDEgRJc2gBc,37061
|
13
13
|
ccxt/bitbank.py,sha256=bHLOW6EAbNsjK2nXCtmxj23f2geW_-E_xfHXAvARMtw,43534
|
14
14
|
ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
|
@@ -16,12 +16,12 @@ ccxt/bitbns.py,sha256=BxvljEPDCGPnaFGaWIIPF_xs079B2OnnbGWNfYlraHE,48269
|
|
16
16
|
ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
|
17
17
|
ccxt/bitfinex.py,sha256=kCRsPTyeQrerA0EGp445B3LQR0U_ScthuuGa2sAYIW0,72449
|
18
18
|
ccxt/bitfinex2.py,sha256=xljaXYKVS0vzWIeaWH8g5h-4-NkQnYMUB0Iu9SD2F1s,160640
|
19
|
-
ccxt/bitflyer.py,sha256=
|
19
|
+
ccxt/bitflyer.py,sha256=biQ8-J_HSb9_S6HE1LBDd6BGpIZSMxK5JyTZ3Xg1SdI,41683
|
20
20
|
ccxt/bitget.py,sha256=ZKnoaX5wbKzU2C9T-cOtYYy45wAVxwTHee8J-LLjVvI,423551
|
21
21
|
ccxt/bithumb.py,sha256=Fo9NyJKahYfn-_05-zIzSXb9-CxOMw-M1Vb9mSUjS0A,45847
|
22
22
|
ccxt/bitmart.py,sha256=TtLl4zpmxvMRu9tu_BE0zsQFNFVpyR6PLUHoeaSfbek,208411
|
23
23
|
ccxt/bitmex.py,sha256=oOFatIOxvXIPOdOeeVau-IdryOeYpdCtTPGxX05HA9A,126861
|
24
|
-
ccxt/bitopro.py,sha256=
|
24
|
+
ccxt/bitopro.py,sha256=0m104rrKQXuXa3dThHGgqq0leIIcdN_nQTR3a9YJLLM,69322
|
25
25
|
ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
|
26
26
|
ccxt/bitrue.py,sha256=fHWfPafQ8P7aWQNvKpVwA6GEeXctrT8dxpf9uzIGUCU,136649
|
27
27
|
ccxt/bitso.py,sha256=Y0MRhrBpxwmkQqZGe8w33DLpZB6Az2PNPuoW23RDC40,71438
|
@@ -33,9 +33,9 @@ ccxt/blockchaincom.py,sha256=hUYegjsT8e-eMRoEUH45l3916HgW00mJh_AOkwxNCCE,48795
|
|
33
33
|
ccxt/blofin.py,sha256=-vzzUV1aMOQpBOZTLPnEbaabc7Cek6oOItlVvRsQu_o,99499
|
34
34
|
ccxt/btcalpha.py,sha256=UcCCDZ_7EM-Q2tHU1IQPEA2DErFsLhrSfX-Oy-Q2uL4,36715
|
35
35
|
ccxt/btcbox.py,sha256=4j3yXT2PxnBE23185MgwMWccm9OsFgbBRAg1YuxuwBA,23587
|
36
|
-
ccxt/btcmarkets.py,sha256=
|
36
|
+
ccxt/btcmarkets.py,sha256=0gMC0vvmuDJwcnllHMUZsQRV6QWA1-Cbq1N1F9rIUW8,52697
|
37
37
|
ccxt/btcturk.py,sha256=bQ8sJq5iEj9oq2R17uDadPWKcnIQG8id5UmdlpHfFy8,36992
|
38
|
-
ccxt/bybit.py,sha256=
|
38
|
+
ccxt/bybit.py,sha256=1uidBWrfElJS3cv3waW3UcGYO8p1CklxQJuV3pWqwzg,415061
|
39
39
|
ccxt/cex.py,sha256=71EK1bB4ulMH-GY-SwsOrY5R33qcsJejtSUBtcyhSdE,70084
|
40
40
|
ccxt/coinbase.py,sha256=OLcnNdnOxnbTY54BEvptJCysDBU3ZZGw6eJcHalaFFc,217105
|
41
41
|
ccxt/coinbaseadvanced.py,sha256=d5g6nRx-NCcCwZDdtp8FsI2D-pRjSvnAP9ISSKY_nCQ,538
|
@@ -51,12 +51,12 @@ ccxt/coinsph.py,sha256=kyTXZGOtQ-8uz52LqzN4Gt89S-qL91JfyA68htNLJr0,90858
|
|
51
51
|
ccxt/coinspot.py,sha256=-9oRdHdc6iWrkxXxcVF9zBashNcRJSoFORwHRa9scMc,23876
|
52
52
|
ccxt/cryptocom.py,sha256=On1dv9dS1_0cyEmyQIDBip-bLiTeQlsjmGVy_RV2qtE,130043
|
53
53
|
ccxt/currencycom.py,sha256=1VrbHSrzDkf0VnzhEQLLGJPRF2LDtOq_gsj-4ZwT3ZY,87046
|
54
|
-
ccxt/delta.py,sha256=
|
54
|
+
ccxt/delta.py,sha256=2DotO5rmhl2JkaUyM13N4WR3jAqKBMlaZ4Wlv2tDBg0,150832
|
55
55
|
ccxt/deribit.py,sha256=n6Folkmf6Z47XL7RBII8665NWilgDqsaBm46FDaIhcY,161016
|
56
56
|
ccxt/digifinex.py,sha256=2fnkjz1eWP_Wjj0FOSPRcJ_hoQOy7zgLWZjFuCNOCUw,168477
|
57
57
|
ccxt/exmo.py,sha256=KlQqGZey31br-SVwhQg6mWIESyeM_wiIKRDOzIekuSs,114638
|
58
58
|
ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
|
59
|
-
ccxt/gate.py,sha256=
|
59
|
+
ccxt/gate.py,sha256=VxIjYqUs-rHgGReSOGg7PR8Dy4Ysj-piI7w7mGaW-bM,322824
|
60
60
|
ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
|
61
61
|
ccxt/gemini.py,sha256=6dMbdLFa4GFjhvXprqj8kugg2Bclh5EuZ8FxZSK-zpQ,80837
|
62
62
|
ccxt/hitbtc.py,sha256=iqyd0otbWmIHUJiJ6gzIfe34IOa8PCEeS8nG6s6Ogc0,153398
|
@@ -65,7 +65,7 @@ ccxt/hollaex.py,sha256=2KIbenZ3vcBDN_rs2CxG5_foKLaYxJd73vVV7M8n_8E,76140
|
|
65
65
|
ccxt/htx.py,sha256=SxHRlX2QyXt_w1nMBXMnHPQtRfCG9Mqx_HTM82TU43M,425183
|
66
66
|
ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
|
67
67
|
ccxt/huobijp.py,sha256=7KxT6RhlnOiVcqaUuFJR40fMT88ZQzOJ1kdZ2ODDOjg,88182
|
68
|
-
ccxt/hyperliquid.py,sha256=
|
68
|
+
ccxt/hyperliquid.py,sha256=hphleFSojYaz0raCABmnos5GAhvfBJpcJl5GPLQZRbY,102673
|
69
69
|
ccxt/idex.py,sha256=P2jNsxiwIlMgrfPKbtmjLJQrzFcWp_TjgJaLq793oco,73255
|
70
70
|
ccxt/independentreserve.py,sha256=aGmNqAGhAKThkMOT-CW6M97JME-7oSar-G2eBZ9QGZE,33489
|
71
71
|
ccxt/indodax.py,sha256=rFfAwlYalCXdHQvhjmb7Zt4fGYqjoPv_koL21CBv-O8,53431
|
@@ -75,7 +75,7 @@ ccxt/kucoin.py,sha256=7qDg7nnhUt6xbPQ3ouXk7GutSXDzhNWK1g29ilXXAlY,225988
|
|
75
75
|
ccxt/kucoinfutures.py,sha256=Mn9eflwmD_FmTCHYkRvyfxG3SU3Pgv9Hpj-6umYT3h8,124558
|
76
76
|
ccxt/kuna.py,sha256=xkPCqoFB64f7mWNcXhhX4RrHzOtDGqOMMQ9gz7o0lcY,96187
|
77
77
|
ccxt/latoken.py,sha256=rLmJYMLZxKowQnrnBV4FFwJvi5cVvMDRj4SC82nh0pE,79392
|
78
|
-
ccxt/lbank.py,sha256=
|
78
|
+
ccxt/lbank.py,sha256=Glx9CN_jdQMiUngJLYioxzwDfgFTdusdOfK53_Bg6A8,116045
|
79
79
|
ccxt/luno.py,sha256=mJqzQFX-DneQ6Wo0Dqfc7sG0OVmaPSKAkmRs1pM7Yj8,46191
|
80
80
|
ccxt/lykke.py,sha256=RqjZ8TXHN_Bok2gXNsJX5jgMDb7GqMbpPPqBMHiLb0E,51408
|
81
81
|
ccxt/mercado.py,sha256=SYh5_TQF4TwsoJjITFiwLPo9VKHmx3Q9I79SPtQajX8,35470
|
@@ -117,7 +117,7 @@ ccxt/abstract/binance.py,sha256=7wM257-q5tvZkqJLTeJy7xawGN05FGQ2JeamuGkKKck,9306
|
|
117
117
|
ccxt/abstract/binancecoinm.py,sha256=7wM257-q5tvZkqJLTeJy7xawGN05FGQ2JeamuGkKKck,93066
|
118
118
|
ccxt/abstract/binanceus.py,sha256=mnsyS9y9D5UrO7QrfNz0MHfzE39zKDxc4yHOfZPgydw,99786
|
119
119
|
ccxt/abstract/binanceusdm.py,sha256=7wM257-q5tvZkqJLTeJy7xawGN05FGQ2JeamuGkKKck,93066
|
120
|
-
ccxt/abstract/bingx.py,sha256
|
120
|
+
ccxt/abstract/bingx.py,sha256=LxRViS_3uHrlnpcmancoCc49mqAv4brn4r5IzjKbyzY,19546
|
121
121
|
ccxt/abstract/bit2c.py,sha256=np6i756kSB5dO3Nj6POLKxkWkpYcsGg-4LS8BwPrizI,2830
|
122
122
|
ccxt/abstract/bitbank.py,sha256=hrHsD7Uvtyy2o2lzCHau3-eNq16pnZ3-YDQ6Tq_sxYU,2735
|
123
123
|
ccxt/abstract/bitbay.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
|
@@ -216,17 +216,17 @@ ccxt/abstract/xt.py,sha256=xHHv2viFGK0_iPZ4gu6Wb0aOrpcKhr9zoY-BIPWh5bs,27028
|
|
216
216
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
217
217
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
218
218
|
ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
|
219
|
-
ccxt/async_support/__init__.py,sha256=
|
219
|
+
ccxt/async_support/__init__.py,sha256=c-eci1b8oKVXQGzaFwnaYvo9Y07eOm9KM1_93Xms4G8,16039
|
220
220
|
ccxt/async_support/ace.py,sha256=DkgKo6nZy3tv6j92mIkzhy9uDXQZt-jZ5iyEeeYoLwo,41898
|
221
221
|
ccxt/async_support/alpaca.py,sha256=a_OZIimQ-RblwXK_auxRrA1sZZhPl2UMLk3_CoEvDkA,47537
|
222
222
|
ccxt/async_support/ascendex.py,sha256=LK259BdUqU0_STGRH6DmTgaR-7lXqFpZHFVACf2um5c,152721
|
223
223
|
ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
|
224
224
|
ccxt/async_support/bigone.py,sha256=npKU8z85dcv6B1JNz5e1I4i-srur_gxJcMUl4yLaHoU,92888
|
225
|
-
ccxt/async_support/binance.py,sha256=
|
225
|
+
ccxt/async_support/binance.py,sha256=Vop1XLBoCTy_-7YwfFH4R4hV8m2CiNMRxzAXwYPPgYk,632137
|
226
226
|
ccxt/async_support/binancecoinm.py,sha256=yeE73xG5UXD_X3VPul6DMGnV_mgJfWYskpas1BUDdCU,1740
|
227
227
|
ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
|
228
228
|
ccxt/async_support/binanceusdm.py,sha256=8ugRkx7vyYmn67wdkEEf2f-DFMGAoC4t09usKlPVNyw,2670
|
229
|
-
ccxt/async_support/bingx.py,sha256=
|
229
|
+
ccxt/async_support/bingx.py,sha256=_F4UqdwmDGH3bESMCYw7JYERqm3tSudRZ2mOMyFd4tg,191194
|
230
230
|
ccxt/async_support/bit2c.py,sha256=1s8GGFqdk9FHfG6-fCmJGePppIpHDHZkjN7u6gPekP8,37273
|
231
231
|
ccxt/async_support/bitbank.py,sha256=To1wSMT8i2bVRZABSXIuB2pyeLhmKkE6CHP4i9LMQQU,43794
|
232
232
|
ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
|
@@ -234,12 +234,12 @@ ccxt/async_support/bitbns.py,sha256=-z6MBwHpn0FXwfKffbOXSdZD2ZYEepMz1VU2ii84xN0,
|
|
234
234
|
ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85-8A,516
|
235
235
|
ccxt/async_support/bitfinex.py,sha256=B8nxACqMxUcmuekpMWtbrOA01lqoc9jneZO_mNLkizI,72889
|
236
236
|
ccxt/async_support/bitfinex2.py,sha256=r_hyChSP4OVNjoqQkjtZSZ-BNT7Cup7Mj1ICwvajrEc,161374
|
237
|
-
ccxt/async_support/bitflyer.py,sha256=
|
237
|
+
ccxt/async_support/bitflyer.py,sha256=hIrGMxaM78V1i-gHN2FRFAhI2aaLR21mPAoIE33fW70,41991
|
238
238
|
ccxt/async_support/bitget.py,sha256=-lEr0HXKo9J4rZwunIHk-yBwTsFVVYY3xHkSYOKc3Fo,425175
|
239
239
|
ccxt/async_support/bithumb.py,sha256=oBk763YnXA9hsF1TCXAqWmIpd3hNGHuvFLk9HeNn10E,46077
|
240
240
|
ccxt/async_support/bitmart.py,sha256=P7s4Obn75lcb-cUOJZkpq6rDcDZVZvKjTT5w_qe5Sfg,209367
|
241
241
|
ccxt/async_support/bitmex.py,sha256=qSKH_dXDtpY5BUrLUbESI3a3WQhBFrc1ucv1N5GDuIU,127439
|
242
|
-
ccxt/async_support/bitopro.py,sha256=
|
242
|
+
ccxt/async_support/bitopro.py,sha256=HHESL0hiE0Rc0GRhFeIKnTs-eBzHEtOqqECANTSp0e0,69726
|
243
243
|
ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4U,485
|
244
244
|
ccxt/async_support/bitrue.py,sha256=v8yJ8XYqHyfS55YcQ6nADI6WaAxfGrEi_6NwVTM5SI4,137307
|
245
245
|
ccxt/async_support/bitso.py,sha256=knxb3DRVjWTn_WsXb4HSAe_2nCDiJE3BKki6QvJP9t8,71824
|
@@ -251,9 +251,9 @@ ccxt/async_support/blockchaincom.py,sha256=h5LUIfI916FbTANFanqUKYpK35aRkIsFSEPkZ
|
|
251
251
|
ccxt/async_support/blofin.py,sha256=Buo3UD9XrsK2g3RoagTIA9Si0SJOu6o6-9FiqKuqfDs,100083
|
252
252
|
ccxt/async_support/btcalpha.py,sha256=DgzrJ6cczUCDZr-QLUxMpazeudEFdQ_OzXiQiJM4HbM,36993
|
253
253
|
ccxt/async_support/btcbox.py,sha256=34KcTfJ7liDTomyJKA9kZa9EHd0rMtHyUgOAhHHfV7g,23781
|
254
|
-
ccxt/async_support/btcmarkets.py,sha256=
|
254
|
+
ccxt/async_support/btcmarkets.py,sha256=x1-s5uVioHyvNJoBxhxP8eUUslTDwQnZMU0FWfu1Fd4,53047
|
255
255
|
ccxt/async_support/btcturk.py,sha256=P3bg0XG0sAi-8ge9ZFzQqZHsoGOGfxBjkhIDo4VPSK4,37210
|
256
|
-
ccxt/async_support/bybit.py,sha256=
|
256
|
+
ccxt/async_support/bybit.py,sha256=tuR97AA6a9PM0uHVQwYqWK1YPWgqzW5p2t1lUFC9xwU,416889
|
257
257
|
ccxt/async_support/cex.py,sha256=GbzByJZPS_puV7somv9XgbyE2DEK03OtXWlLg2lFmCw,70434
|
258
258
|
ccxt/async_support/coinbase.py,sha256=RMcQFh7tSzTe8QqFaz9WmH2Op8sXD8jWpZfLBt_13QQ,218259
|
259
259
|
ccxt/async_support/coinbaseadvanced.py,sha256=Kupwnuxiu_qTjwCNV2asacoDUNFQvcaHNAznUJPhdQs,552
|
@@ -269,12 +269,12 @@ ccxt/async_support/coinsph.py,sha256=8BKDibWuUgmbA589V3co-RsabjCq4T7sYV6_p0w39_0
|
|
269
269
|
ccxt/async_support/coinspot.py,sha256=54ogK4qq8RNEnUIR17lpbGPIR9Ed1SXlDtxSKoxi1uQ,24034
|
270
270
|
ccxt/async_support/cryptocom.py,sha256=QhxHap0FFVDIRjPed2SFFOmFP2XbqLjctjK6MU11nCc,130615
|
271
271
|
ccxt/async_support/currencycom.py,sha256=BRWAn5uBDcwR-1SyjJCSwkS83T_5tfUmCDymr9ZHFEs,87468
|
272
|
-
ccxt/async_support/delta.py,sha256=
|
272
|
+
ccxt/async_support/delta.py,sha256=aUIysAyPQgS3XV_T41R3HEPAB2xKCG5mF1UXQ-bS1K0,151440
|
273
273
|
ccxt/async_support/deribit.py,sha256=_Q2LcEW01ktuz2BKeFQRlsP5GDjC1XJFCjWKoqTdM5Y,161792
|
274
274
|
ccxt/async_support/digifinex.py,sha256=YHL4lB4a07Kic2MRljzTiG5Oth0g1n4h0lfGn9qKvhk,169447
|
275
275
|
ccxt/async_support/exmo.py,sha256=uVJsy3mfNLpfbY0ndl2EF9hipUylEw8J58J3wCGyyA0,115270
|
276
276
|
ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
|
277
|
-
ccxt/async_support/gate.py,sha256=
|
277
|
+
ccxt/async_support/gate.py,sha256=czec_NC7NYUFacBb8fp3_ei7cSbNq1xw1LS2gV5SLZc,324502
|
278
278
|
ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
|
279
279
|
ccxt/async_support/gemini.py,sha256=197OkPq1ndBA27J3fKqFY3iMJ_8W-Iu6Af0wNGqvO7I,81350
|
280
280
|
ccxt/async_support/hitbtc.py,sha256=jWmyRAy_wkpEidgjCxU0gWur99YJjYHPjD9CN4vJbUE,154444
|
@@ -283,7 +283,7 @@ ccxt/async_support/hollaex.py,sha256=msUnnbWLNeCxFW77BnfLoFWBdvQIDwV7Rtbi9TA4TYY
|
|
283
283
|
ccxt/async_support/htx.py,sha256=fZEC1TA827-NgXLMnEE3LPyc_JWMym6jVyYfE3zMHbQ,427575
|
284
284
|
ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
|
285
285
|
ccxt/async_support/huobijp.py,sha256=qsmTSeLuexvi1_wXvbC-dD14CCDn9xAfQu_nbXknUTY,88682
|
286
|
-
ccxt/async_support/hyperliquid.py,sha256=
|
286
|
+
ccxt/async_support/hyperliquid.py,sha256=78zRnwQ4ct5tT0mGppWVy6K1eKlxWU_6bsPU__iz2ao,103193
|
287
287
|
ccxt/async_support/idex.py,sha256=UcAvdMc2CP_6E8lET4rmQiIP-RaUfZHSo6pQeA17v-g,73731
|
288
288
|
ccxt/async_support/independentreserve.py,sha256=6da0B8N4rNrd1CjxjtYU-mHpmemIBexXrKAB2r4SVPc,33749
|
289
289
|
ccxt/async_support/indodax.py,sha256=m6F8bSiEz9c6UQuadeOfC40rnmlAVKkj94C1uvsc9k0,53739
|
@@ -293,7 +293,7 @@ ccxt/async_support/kucoin.py,sha256=h46uaxi5SBk_-1UvZFjaStIEnxZibMPfd3vyAdxwPoM,
|
|
293
293
|
ccxt/async_support/kucoinfutures.py,sha256=uy8gNsJOI6SggxhYMH1TSTFM6rlzWvLknZL_KgCDLBE,125196
|
294
294
|
ccxt/async_support/kuna.py,sha256=7PMrbVQaW0OHC3MnKjmepZjuJ86LpdSKMFMXJM4L1dQ,96603
|
295
295
|
ccxt/async_support/latoken.py,sha256=PxdWq1e4vKiTHwTUy6vXpJzRf1465Z4L8nTSpo1KRi0,79868
|
296
|
-
ccxt/async_support/lbank.py,sha256=
|
296
|
+
ccxt/async_support/lbank.py,sha256=MeqPjECSmsplCtatu7Ns6sHRwzAGP_6S5MwB2BomnXk,116757
|
297
297
|
ccxt/async_support/luno.py,sha256=F4t6XgboOe688S6bZCEnaF_ZEh_6f1YTqV6wRaddWo0,46529
|
298
298
|
ccxt/async_support/lykke.py,sha256=UXQmNfWucuylickY0EBbrkahAoU-68B7k1B-EBNpC00,51722
|
299
299
|
ccxt/async_support/mercado.py,sha256=jcYNU9OUHVYW8XgWsuv9EeCVvleNErOCas99X5lD-tk,35712
|
@@ -326,7 +326,7 @@ ccxt/async_support/yobit.py,sha256=4Wwy8piYAfsxnldU2LRXk986I4kY5mlzhxxeuIJg0fc,5
|
|
326
326
|
ccxt/async_support/zaif.py,sha256=-ZTr8M2JaIRCL90VrbCDXBMAsZwbiwsFChSQ2rWODuQ,29044
|
327
327
|
ccxt/async_support/zonda.py,sha256=ef9Ch_ESnBldY8zHlqsff6hzU_pU8bdvUbWNLpFvUBM,81720
|
328
328
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
329
|
-
ccxt/async_support/base/exchange.py,sha256=
|
329
|
+
ccxt/async_support/base/exchange.py,sha256=XlYFiELNZaySpKc1kw2D10k3d0PSR_uH9ZRGCDWXU6Y,110787
|
330
330
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
331
331
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
332
332
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
|
@@ -340,10 +340,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
|
|
340
340
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
341
341
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
342
342
|
ccxt/base/errors.py,sha256=FGdyULeNCNcl52gA_CNhe2dZmat9GJGkTdlIyDXAF_A,4213
|
343
|
-
ccxt/base/exchange.py,sha256=
|
343
|
+
ccxt/base/exchange.py,sha256=ZKxFjxq7S_lAmMEMFO92uK1LZeK6JlqG6c2fZgBKo-U,281804
|
344
344
|
ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
|
345
345
|
ccxt/base/types.py,sha256=JfD1eNzfKS06XwwLUobK9d2SfVGRqbVfMY0ApU-Hn9A,9349
|
346
|
-
ccxt/pro/__init__.py,sha256
|
346
|
+
ccxt/pro/__init__.py,sha256=-tOAM6g193Ziq2Gj8d7POVNP7yjEinAJZaOVceTwbEY,7308
|
347
347
|
ccxt/pro/alpaca.py,sha256=QA_Dmxu1ockCSYJMbOodbNke3t1tAl0hFL-q56UMQWE,27224
|
348
348
|
ccxt/pro/ascendex.py,sha256=181FIeztchLqGmgecRJEN8F8xEM45D5aMKhC-5nuNfU,35467
|
349
349
|
ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
|
@@ -513,8 +513,8 @@ ccxt/test/tests_async.py,sha256=A7x_JRK--w7Yin1laqoKmfdrAxu9ebjPVNzMRUFau-Y,8091
|
|
513
513
|
ccxt/test/tests_helpers.py,sha256=V0cdMs_YOgSJ-oKTemutiTAG6y_0pdMasnuF7_xHsBg,9688
|
514
514
|
ccxt/test/tests_init.py,sha256=gH_brb5irCCBXOIL09xjoQIRV2852lhV_PxnZpIhPUc,992
|
515
515
|
ccxt/test/tests_sync.py,sha256=bNkfdsbLylzSQITtJ_j0qw_aItx218c95bK35tr1qpM,80018
|
516
|
-
ccxt-4.3.
|
517
|
-
ccxt-4.3.
|
518
|
-
ccxt-4.3.
|
519
|
-
ccxt-4.3.
|
520
|
-
ccxt-4.3.
|
516
|
+
ccxt-4.3.56.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
|
517
|
+
ccxt-4.3.56.dist-info/METADATA,sha256=fNiNu1p6TLWHOx_E9tbXJgUxde03y8J4gVJ-GHRH6Fc,115795
|
518
|
+
ccxt-4.3.56.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
|
519
|
+
ccxt-4.3.56.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
520
|
+
ccxt-4.3.56.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|