ccxt 4.2.87__py2.py3-none-any.whl → 4.2.88__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/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/binance.py +10 -6
- ccxt/async_support/bitget.py +17 -16
- ccxt/async_support/cryptocom.py +1 -1
- ccxt/async_support/gate.py +14 -14
- ccxt/async_support/krakenfutures.py +2 -1
- ccxt/async_support/kucoin.py +7 -4
- ccxt/async_support/mexc.py +1 -1
- ccxt/base/exchange.py +22 -3
- ccxt/binance.py +10 -6
- ccxt/bitget.py +17 -16
- ccxt/cryptocom.py +1 -1
- ccxt/gate.py +14 -14
- ccxt/krakenfutures.py +2 -1
- ccxt/kucoin.py +7 -4
- ccxt/mexc.py +1 -1
- ccxt/pro/__init__.py +1 -1
- {ccxt-4.2.87.dist-info → ccxt-4.2.88.dist-info}/METADATA +5 -6
- {ccxt-4.2.87.dist-info → ccxt-4.2.88.dist-info}/RECORD +23 -23
- {ccxt-4.2.87.dist-info → ccxt-4.2.88.dist-info}/WHEEL +0 -0
- {ccxt-4.2.87.dist-info → ccxt-4.2.88.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/async_support/__init__.py
CHANGED
ccxt/async_support/binance.py
CHANGED
@@ -1883,7 +1883,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1883
1883
|
'-4140': BadRequest, # Invalid symbol status for opening position
|
1884
1884
|
'-4141': OperationRejected, # Symbol is closed
|
1885
1885
|
'-4144': BadSymbol, # Invalid pair
|
1886
|
-
'-4164':
|
1886
|
+
'-4164': InvalidOrder, # {"code":-4164,"msg":"Order's notional must be no smaller than 20(unless you choose reduce only)."}
|
1887
1887
|
'-4165': BadRequest, # Invalid time interval
|
1888
1888
|
'-4167': BadRequest, # Unable to adjust to Multi-Assets mode with symbols of USDⓈ-M Futures under isolated-margin mode.
|
1889
1889
|
'-4168': BadRequest, # Unable to adjust to isolated-margin mode under the Multi-Assets mode.
|
@@ -8500,7 +8500,7 @@ class binance(Exchange, ImplicitAPI):
|
|
8500
8500
|
'previousFundingDatetime': None,
|
8501
8501
|
}
|
8502
8502
|
|
8503
|
-
def parse_account_positions(self, account):
|
8503
|
+
def parse_account_positions(self, account, filterClosed=False):
|
8504
8504
|
positions = self.safe_list(account, 'positions')
|
8505
8505
|
assets = self.safe_list(account, 'assets', [])
|
8506
8506
|
balances = {}
|
@@ -8522,7 +8522,8 @@ class binance(Exchange, ImplicitAPI):
|
|
8522
8522
|
code = market['quote'] if market['linear'] else market['base']
|
8523
8523
|
maintenanceMargin = self.safe_string(position, 'maintMargin')
|
8524
8524
|
# check for maintenance margin so empty positions are not returned
|
8525
|
-
|
8525
|
+
isPositionOpen = (maintenanceMargin != '0') and (maintenanceMargin != '0.00000000')
|
8526
|
+
if not filterClosed or isPositionOpen:
|
8526
8527
|
# sometimes not all the codes are correctly returned...
|
8527
8528
|
if code in balances:
|
8528
8529
|
parsed = self.parse_account_position(self.extend(position, {
|
@@ -9288,10 +9289,11 @@ class binance(Exchange, ImplicitAPI):
|
|
9288
9289
|
:see: https://binance-docs.github.io/apidocs/delivery/en/#account-information-user_data
|
9289
9290
|
:see: https://binance-docs.github.io/apidocs/pm/en/#get-um-account-detail-user_data
|
9290
9291
|
:see: https://binance-docs.github.io/apidocs/pm/en/#get-cm-account-detail-user_data
|
9291
|
-
:param str[]
|
9292
|
+
:param str[] [symbols]: list of unified market symbols
|
9292
9293
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
9293
9294
|
:param boolean [params.portfolioMargin]: set to True if you would like to fetch positions in a portfolio margin account
|
9294
9295
|
:param str [params.subType]: "linear" or "inverse"
|
9296
|
+
:param boolean [params.filterClosed]: set to True if you would like to filter out closed positions, default is False
|
9295
9297
|
:returns dict: data on account positions
|
9296
9298
|
"""
|
9297
9299
|
if symbols is not None:
|
@@ -9319,7 +9321,9 @@ class binance(Exchange, ImplicitAPI):
|
|
9319
9321
|
response = await self.dapiPrivateGetAccount(params)
|
9320
9322
|
else:
|
9321
9323
|
raise NotSupported(self.id + ' fetchPositions() supports linear and inverse contracts only')
|
9322
|
-
|
9324
|
+
filterClosed = None
|
9325
|
+
filterClosed, params = self.handle_option_and_params(params, 'fetchAccountPositions', 'filterClosed', False)
|
9326
|
+
result = self.parse_account_positions(response, filterClosed)
|
9323
9327
|
symbols = self.market_symbols(symbols)
|
9324
9328
|
return self.filter_by_array_positions(result, 'symbol', symbols, False)
|
9325
9329
|
|
@@ -10287,7 +10291,7 @@ class binance(Exchange, ImplicitAPI):
|
|
10287
10291
|
raise NotSupported(self.id + ' add / reduce margin only supported with type future or delivery')
|
10288
10292
|
await self.load_markets()
|
10289
10293
|
market = self.market(symbol)
|
10290
|
-
amount = self.
|
10294
|
+
amount = self.amount_to_precision(symbol, amount)
|
10291
10295
|
request = {
|
10292
10296
|
'type': addOrReduce,
|
10293
10297
|
'symbol': market['id'],
|
ccxt/async_support/bitget.py
CHANGED
@@ -1317,6 +1317,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
1317
1317
|
'commonCurrencies': {
|
1318
1318
|
'JADE': 'Jade Protocol',
|
1319
1319
|
'DEGEN': 'DegenReborn',
|
1320
|
+
'TONCOIN': 'TON',
|
1320
1321
|
},
|
1321
1322
|
'options': {
|
1322
1323
|
'timeframes': {
|
@@ -1854,8 +1855,8 @@ class bitget(Exchange, ImplicitAPI):
|
|
1854
1855
|
data = self.safe_value(response, 'data', [])
|
1855
1856
|
for i in range(0, len(data)):
|
1856
1857
|
entry = data[i]
|
1857
|
-
id = self.safe_string(entry, 'coinId')
|
1858
|
-
code = self.safe_currency_code(
|
1858
|
+
id = self.safe_string(entry, 'coin') # we don't use 'coinId' has no use. it is 'coin' field that needs to be used in currency related endpoints(deposit, withdraw, etc..)
|
1859
|
+
code = self.safe_currency_code(id)
|
1859
1860
|
chains = self.safe_value(entry, 'chains', [])
|
1860
1861
|
networks = {}
|
1861
1862
|
deposit = False
|
@@ -1972,7 +1973,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
1972
1973
|
raise ArgumentsRequired(self.id + ' fetchMarketLeverageTiers() requires a code argument')
|
1973
1974
|
params = self.omit(params, 'code')
|
1974
1975
|
currency = self.currency(code)
|
1975
|
-
request['coin'] = currency['
|
1976
|
+
request['coin'] = currency['id']
|
1976
1977
|
response = await self.privateMarginGetV2MarginCrossedTierData(self.extend(request, params))
|
1977
1978
|
else:
|
1978
1979
|
raise BadRequest(self.id + ' fetchMarketLeverageTiers() symbol does not support market ' + market['symbol'])
|
@@ -2119,7 +2120,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
2119
2120
|
if since is None:
|
2120
2121
|
since = self.milliseconds() - 7776000000 # 90 days
|
2121
2122
|
request = {
|
2122
|
-
'coin': currency['
|
2123
|
+
'coin': currency['id'],
|
2123
2124
|
'startTime': since,
|
2124
2125
|
'endTime': self.milliseconds(),
|
2125
2126
|
}
|
@@ -2174,7 +2175,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
2174
2175
|
currency = self.currency(code)
|
2175
2176
|
networkId = self.network_code_to_id(chain)
|
2176
2177
|
request = {
|
2177
|
-
'coin': currency['
|
2178
|
+
'coin': currency['id'],
|
2178
2179
|
'address': address,
|
2179
2180
|
'chain': networkId,
|
2180
2181
|
'size': amount,
|
@@ -2253,7 +2254,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
2253
2254
|
if since is None:
|
2254
2255
|
since = self.milliseconds() - 7776000000 # 90 days
|
2255
2256
|
request = {
|
2256
|
-
'coin': currency['
|
2257
|
+
'coin': currency['id'],
|
2257
2258
|
'startTime': since,
|
2258
2259
|
'endTime': self.milliseconds(),
|
2259
2260
|
}
|
@@ -2391,7 +2392,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
2391
2392
|
networkId = self.network_code_to_id(networkCode, code)
|
2392
2393
|
currency = self.currency(code)
|
2393
2394
|
request = {
|
2394
|
-
'coin': currency['
|
2395
|
+
'coin': currency['id'],
|
2395
2396
|
}
|
2396
2397
|
if networkId is not None:
|
2397
2398
|
request['chain'] = networkId
|
@@ -5493,7 +5494,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
5493
5494
|
request = {}
|
5494
5495
|
if code is not None:
|
5495
5496
|
currency = self.currency(code)
|
5496
|
-
request['coin'] = currency['
|
5497
|
+
request['coin'] = currency['id']
|
5497
5498
|
request, params = self.handle_until_option('endTime', request, params)
|
5498
5499
|
if since is not None:
|
5499
5500
|
request['startTime'] = since
|
@@ -6807,7 +6808,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
6807
6808
|
type = self.safe_string(accountsByType, fromAccount)
|
6808
6809
|
currency = self.currency(code)
|
6809
6810
|
request = {
|
6810
|
-
'coin': currency['
|
6811
|
+
'coin': currency['id'],
|
6811
6812
|
'fromType': type,
|
6812
6813
|
}
|
6813
6814
|
if since is not None:
|
@@ -6862,7 +6863,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
6862
6863
|
'fromType': fromType,
|
6863
6864
|
'toType': toType,
|
6864
6865
|
'amount': amount,
|
6865
|
-
'coin': currency['
|
6866
|
+
'coin': currency['id'],
|
6866
6867
|
}
|
6867
6868
|
symbol = self.safe_string(params, 'symbol')
|
6868
6869
|
params = self.omit(params, 'symbol')
|
@@ -7042,7 +7043,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7042
7043
|
await self.load_markets()
|
7043
7044
|
currency = self.currency(code)
|
7044
7045
|
request = {
|
7045
|
-
'coin': currency['
|
7046
|
+
'coin': currency['id'],
|
7046
7047
|
'borrowAmount': self.currency_to_precision(code, amount),
|
7047
7048
|
}
|
7048
7049
|
response = await self.privateMarginPostV2MarginCrossedAccountBorrow(self.extend(request, params))
|
@@ -7075,7 +7076,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7075
7076
|
currency = self.currency(code)
|
7076
7077
|
market = self.market(symbol)
|
7077
7078
|
request = {
|
7078
|
-
'coin': currency['
|
7079
|
+
'coin': currency['id'],
|
7079
7080
|
'borrowAmount': self.currency_to_precision(code, amount),
|
7080
7081
|
'symbol': market['id'],
|
7081
7082
|
}
|
@@ -7110,7 +7111,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7110
7111
|
currency = self.currency(code)
|
7111
7112
|
market = self.market(symbol)
|
7112
7113
|
request = {
|
7113
|
-
'coin': currency['
|
7114
|
+
'coin': currency['id'],
|
7114
7115
|
'repayAmount': self.currency_to_precision(code, amount),
|
7115
7116
|
'symbol': market['id'],
|
7116
7117
|
}
|
@@ -7144,7 +7145,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7144
7145
|
await self.load_markets()
|
7145
7146
|
currency = self.currency(code)
|
7146
7147
|
request = {
|
7147
|
-
'coin': currency['
|
7148
|
+
'coin': currency['id'],
|
7148
7149
|
'repayAmount': self.currency_to_precision(code, amount),
|
7149
7150
|
}
|
7150
7151
|
response = await self.privateMarginPostV2MarginCrossedAccountRepay(self.extend(request, params))
|
@@ -7490,7 +7491,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7490
7491
|
await self.load_markets()
|
7491
7492
|
currency = self.currency(code)
|
7492
7493
|
request = {
|
7493
|
-
'coin': currency['
|
7494
|
+
'coin': currency['id'],
|
7494
7495
|
}
|
7495
7496
|
response = await self.privateMarginGetV2MarginCrossedInterestRateAndLimit(self.extend(request, params))
|
7496
7497
|
#
|
@@ -7581,7 +7582,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7581
7582
|
currency = None
|
7582
7583
|
if code is not None:
|
7583
7584
|
currency = self.currency(code)
|
7584
|
-
request['coin'] = currency['
|
7585
|
+
request['coin'] = currency['id']
|
7585
7586
|
if since is not None:
|
7586
7587
|
request['startTime'] = since
|
7587
7588
|
else:
|
ccxt/async_support/cryptocom.py
CHANGED
@@ -2565,7 +2565,7 @@ class cryptocom(Exchange, ImplicitAPI):
|
|
2565
2565
|
#
|
2566
2566
|
result = self.safe_dict(response, 'result', {})
|
2567
2567
|
data = self.safe_list(result, 'data', [])
|
2568
|
-
return self.parse_position(data
|
2568
|
+
return self.parse_position(self.safe_dict(data, 0), market)
|
2569
2569
|
|
2570
2570
|
async def fetch_positions(self, symbols: Strings = None, params={}):
|
2571
2571
|
"""
|
ccxt/async_support/gate.py
CHANGED
@@ -1824,7 +1824,7 @@ class gate(Exchange, ImplicitAPI):
|
|
1824
1824
|
await self.load_markets()
|
1825
1825
|
currency = self.currency(code)
|
1826
1826
|
request = {
|
1827
|
-
'currency': currency['id'],
|
1827
|
+
'currency': currency['id'], # todo: currencies have network-junctions
|
1828
1828
|
}
|
1829
1829
|
response = await self.privateWalletGetDepositAddress(self.extend(request, params))
|
1830
1830
|
addresses = self.safe_value(response, 'multichain_addresses')
|
@@ -1871,7 +1871,7 @@ class gate(Exchange, ImplicitAPI):
|
|
1871
1871
|
rawNetwork = self.safe_string_upper(params, 'network')
|
1872
1872
|
params = self.omit(params, 'network')
|
1873
1873
|
request = {
|
1874
|
-
'currency': currency['id'],
|
1874
|
+
'currency': currency['id'], # todo: currencies have network-junctions
|
1875
1875
|
}
|
1876
1876
|
response = await self.privateWalletGetDepositAddress(self.extend(request, params))
|
1877
1877
|
#
|
@@ -3346,7 +3346,7 @@ class gate(Exchange, ImplicitAPI):
|
|
3346
3346
|
currency = None
|
3347
3347
|
if code is not None:
|
3348
3348
|
currency = self.currency(code)
|
3349
|
-
request['currency'] = currency['id']
|
3349
|
+
request['currency'] = currency['id'] # todo: currencies have network-junctions
|
3350
3350
|
if limit is not None:
|
3351
3351
|
request['limit'] = limit
|
3352
3352
|
if since is not None:
|
@@ -3378,7 +3378,7 @@ class gate(Exchange, ImplicitAPI):
|
|
3378
3378
|
currency = None
|
3379
3379
|
if code is not None:
|
3380
3380
|
currency = self.currency(code)
|
3381
|
-
request['currency'] = currency['id']
|
3381
|
+
request['currency'] = currency['id'] # todo: currencies have network-junctions
|
3382
3382
|
if limit is not None:
|
3383
3383
|
request['limit'] = limit
|
3384
3384
|
if since is not None:
|
@@ -3405,7 +3405,7 @@ class gate(Exchange, ImplicitAPI):
|
|
3405
3405
|
await self.load_markets()
|
3406
3406
|
currency = self.currency(code)
|
3407
3407
|
request = {
|
3408
|
-
'currency': currency['id'],
|
3408
|
+
'currency': currency['id'], # todo: currencies have network-junctions
|
3409
3409
|
'address': address,
|
3410
3410
|
'amount': self.currency_to_precision(code, amount),
|
3411
3411
|
}
|
@@ -3418,7 +3418,7 @@ class gate(Exchange, ImplicitAPI):
|
|
3418
3418
|
request['chain'] = network
|
3419
3419
|
params = self.omit(params, 'network')
|
3420
3420
|
else:
|
3421
|
-
request['chain'] = currency['id']
|
3421
|
+
request['chain'] = currency['id'] # todo: currencies have network-junctions
|
3422
3422
|
response = await self.privateWithdrawalsPostWithdrawals(self.extend(request, params))
|
3423
3423
|
#
|
3424
3424
|
# {
|
@@ -4762,7 +4762,7 @@ class gate(Exchange, ImplicitAPI):
|
|
4762
4762
|
toId = self.convert_type_to_account(toAccount)
|
4763
4763
|
truncated = self.currency_to_precision(code, amount)
|
4764
4764
|
request = {
|
4765
|
-
'currency': currency['id'],
|
4765
|
+
'currency': currency['id'], # todo: currencies have network-junctions
|
4766
4766
|
'amount': truncated,
|
4767
4767
|
}
|
4768
4768
|
if not (fromId in self.options['accountsByType']):
|
@@ -4783,7 +4783,7 @@ class gate(Exchange, ImplicitAPI):
|
|
4783
4783
|
request['currency_pair'] = market['id']
|
4784
4784
|
params = self.omit(params, 'symbol')
|
4785
4785
|
if (toId == 'futures') or (toId == 'delivery') or (fromId == 'futures') or (fromId == 'delivery'):
|
4786
|
-
request['settle'] = currency['id']
|
4786
|
+
request['settle'] = currency['id'] # todo: currencies have network-junctions
|
4787
4787
|
response = await self.privateWalletPostTransfers(self.extend(request, params))
|
4788
4788
|
#
|
4789
4789
|
# according to the docs(however actual response seems to be an empty string '')
|
@@ -5396,7 +5396,7 @@ class gate(Exchange, ImplicitAPI):
|
|
5396
5396
|
await self.load_markets()
|
5397
5397
|
currency = self.currency(code)
|
5398
5398
|
request = {
|
5399
|
-
'currency': currency['id'].upper(),
|
5399
|
+
'currency': currency['id'].upper(), # todo: currencies have network-junctions
|
5400
5400
|
'amount': self.currency_to_precision(code, amount),
|
5401
5401
|
}
|
5402
5402
|
market = self.market(symbol)
|
@@ -5423,7 +5423,7 @@ class gate(Exchange, ImplicitAPI):
|
|
5423
5423
|
await self.load_markets()
|
5424
5424
|
currency = self.currency(code)
|
5425
5425
|
request = {
|
5426
|
-
'currency': currency['id'].upper(),
|
5426
|
+
'currency': currency['id'].upper(), # todo: currencies have network-junctions
|
5427
5427
|
'amount': self.currency_to_precision(code, amount),
|
5428
5428
|
}
|
5429
5429
|
response = await self.privateMarginPostCrossRepayments(self.extend(request, params))
|
@@ -5460,7 +5460,7 @@ class gate(Exchange, ImplicitAPI):
|
|
5460
5460
|
await self.load_markets()
|
5461
5461
|
currency = self.currency(code)
|
5462
5462
|
request = {
|
5463
|
-
'currency': currency['id'].upper(),
|
5463
|
+
'currency': currency['id'].upper(), # todo: currencies have network-junctions
|
5464
5464
|
'amount': self.currency_to_precision(code, amount),
|
5465
5465
|
}
|
5466
5466
|
response = None
|
@@ -5503,7 +5503,7 @@ class gate(Exchange, ImplicitAPI):
|
|
5503
5503
|
await self.load_markets()
|
5504
5504
|
currency = self.currency(code)
|
5505
5505
|
request = {
|
5506
|
-
'currency': currency['id'].upper(),
|
5506
|
+
'currency': currency['id'].upper(), # todo: currencies have network-junctions
|
5507
5507
|
'amount': self.currency_to_precision(code, amount),
|
5508
5508
|
}
|
5509
5509
|
response = await self.privateMarginPostCrossLoans(self.extend(request, params))
|
@@ -5996,7 +5996,7 @@ class gate(Exchange, ImplicitAPI):
|
|
5996
5996
|
if (type == 'spot') or (type == 'margin'):
|
5997
5997
|
if code is not None:
|
5998
5998
|
currency = self.currency(code)
|
5999
|
-
request['currency'] = currency['id']
|
5999
|
+
request['currency'] = currency['id'] # todo: currencies have network-junctions
|
6000
6000
|
if (type == 'swap') or (type == 'future'):
|
6001
6001
|
defaultSettle = 'usdt' if (type == 'swap') else 'btc'
|
6002
6002
|
settle = self.safe_string_lower(params, 'settle', defaultSettle)
|
@@ -6754,7 +6754,7 @@ class gate(Exchange, ImplicitAPI):
|
|
6754
6754
|
await self.load_markets()
|
6755
6755
|
currency = self.currency(code)
|
6756
6756
|
request = {
|
6757
|
-
'underlying': currency['code'] + '_USDT',
|
6757
|
+
'underlying': currency['code'] + '_USDT', # todo: currency['id'].upper() & network junctions
|
6758
6758
|
}
|
6759
6759
|
response = await self.publicOptionsGetContracts(self.extend(request, params))
|
6760
6760
|
#
|
@@ -363,7 +363,8 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
363
363
|
# swap == perpetual
|
364
364
|
settle = None
|
365
365
|
settleId = None
|
366
|
-
|
366
|
+
cvtp = self.safe_string(market, 'contractValueTradePrecision')
|
367
|
+
amountPrecision = self.parse_number(self.integer_precision_to_amount(cvtp))
|
367
368
|
pricePrecision = self.safe_number(market, 'tickSize')
|
368
369
|
contract = (swap or future or index)
|
369
370
|
swapOrFutures = (swap or future)
|
ccxt/async_support/kucoin.py
CHANGED
@@ -3326,9 +3326,9 @@ class kucoin(Exchange, ImplicitAPI):
|
|
3326
3326
|
async def fetch_balance(self, params={}) -> Balances:
|
3327
3327
|
"""
|
3328
3328
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
3329
|
-
:see: https://docs.kucoin.com/#list-accounts
|
3330
3329
|
:see: https://www.kucoin.com/docs/rest/account/basic-info/get-account-list-spot-margin-trade_hf
|
3331
|
-
:see: https://
|
3330
|
+
:see: https://www.kucoin.com/docs/rest/funding/funding-overview/get-account-detail-margin
|
3331
|
+
:see: https://www.kucoin.com/docs/rest/funding/funding-overview/get-account-detail-isolated-margin
|
3332
3332
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3333
3333
|
:param dict [params.marginMode]: 'cross' or 'isolated', margin type for fetching margin balance
|
3334
3334
|
:param dict [params.type]: extra parameters specific to the exchange API endpoint
|
@@ -3353,7 +3353,7 @@ class kucoin(Exchange, ImplicitAPI):
|
|
3353
3353
|
response = None
|
3354
3354
|
request = {}
|
3355
3355
|
isolated = (marginMode == 'isolated') or (type == 'isolated')
|
3356
|
-
cross = (marginMode == 'cross') or (type == '
|
3356
|
+
cross = (marginMode == 'cross') or (type == 'margin')
|
3357
3357
|
if isolated:
|
3358
3358
|
if currency is not None:
|
3359
3359
|
request['balanceCurrency'] = currency['id']
|
@@ -3418,13 +3418,14 @@ class kucoin(Exchange, ImplicitAPI):
|
|
3418
3418
|
# }
|
3419
3419
|
# }
|
3420
3420
|
#
|
3421
|
-
data =
|
3421
|
+
data = None
|
3422
3422
|
result = {
|
3423
3423
|
'info': response,
|
3424
3424
|
'timestamp': None,
|
3425
3425
|
'datetime': None,
|
3426
3426
|
}
|
3427
3427
|
if isolated:
|
3428
|
+
data = self.safe_dict(response, 'data', {})
|
3428
3429
|
assets = self.safe_value(data, 'assets', data)
|
3429
3430
|
for i in range(0, len(assets)):
|
3430
3431
|
entry = assets[i]
|
@@ -3439,6 +3440,7 @@ class kucoin(Exchange, ImplicitAPI):
|
|
3439
3440
|
subResult[quoteCode] = self.parse_balance_helper(quote)
|
3440
3441
|
result[symbol] = self.safe_balance(subResult)
|
3441
3442
|
elif cross:
|
3443
|
+
data = self.safe_dict(response, 'data', {})
|
3442
3444
|
accounts = self.safe_list(data, 'accounts', [])
|
3443
3445
|
for i in range(0, len(accounts)):
|
3444
3446
|
balance = accounts[i]
|
@@ -3446,6 +3448,7 @@ class kucoin(Exchange, ImplicitAPI):
|
|
3446
3448
|
codeInner = self.safe_currency_code(currencyId)
|
3447
3449
|
result[codeInner] = self.parse_balance_helper(balance)
|
3448
3450
|
else:
|
3451
|
+
data = self.safe_list(response, 'data', [])
|
3449
3452
|
for i in range(0, len(data)):
|
3450
3453
|
balance = data[i]
|
3451
3454
|
balanceType = self.safe_string(balance, 'type')
|
ccxt/async_support/mexc.py
CHANGED
@@ -4228,7 +4228,7 @@ class mexc(Exchange, ImplicitAPI):
|
|
4228
4228
|
key = self.safe_string(keys, 0)
|
4229
4229
|
result = self.safe_dict(addressStructures, key)
|
4230
4230
|
if result is None:
|
4231
|
-
raise InvalidAddress(self.id + ' fetchDepositAddress() cannot find a deposit address for ' + code + ', and network' + network + 'consider creating one using
|
4231
|
+
raise InvalidAddress(self.id + ' fetchDepositAddress() cannot find a deposit address for ' + code + ', and network' + network + 'consider creating one using .createDepositAddress() method or in MEXC website')
|
4232
4232
|
return result
|
4233
4233
|
|
4234
4234
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
ccxt/base/exchange.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.2.
|
7
|
+
__version__ = '4.2.88'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -4525,6 +4525,25 @@ class Exchange(object):
|
|
4525
4525
|
parsedPrecision = parsedPrecision + '0'
|
4526
4526
|
return parsedPrecision + '1'
|
4527
4527
|
|
4528
|
+
def integer_precision_to_amount(self, precision: Str):
|
4529
|
+
"""
|
4530
|
+
* @ignore
|
4531
|
+
handles positive & negative numbers too. parsePrecision() does not handle negative numbers, but self method handles
|
4532
|
+
:param str precision: The number of digits to the right of the decimal
|
4533
|
+
:returns str: a string number equal to 1e-precision
|
4534
|
+
"""
|
4535
|
+
if precision is None:
|
4536
|
+
return None
|
4537
|
+
if Precise.string_ge(precision, '0'):
|
4538
|
+
return self.parse_precision(precision)
|
4539
|
+
else:
|
4540
|
+
positivePrecisionString = Precise.string_abs(precision)
|
4541
|
+
positivePrecision = int(positivePrecisionString)
|
4542
|
+
parsedPrecision = '1'
|
4543
|
+
for i in range(0, positivePrecision - 1):
|
4544
|
+
parsedPrecision = parsedPrecision + '0'
|
4545
|
+
return parsedPrecision + '0'
|
4546
|
+
|
4528
4547
|
def load_time_difference(self, params={}):
|
4529
4548
|
serverTime = self.fetch_time(params)
|
4530
4549
|
after = self.milliseconds()
|
@@ -4935,8 +4954,8 @@ class Exchange(object):
|
|
4935
4954
|
entry = responseKeys[i]
|
4936
4955
|
dictionary = entry if isArray else response[entry]
|
4937
4956
|
currencyId = self.safe_string(dictionary, currencyIdKey) if isArray else entry
|
4938
|
-
currency = self.
|
4939
|
-
code = self.safe_string(currency, 'code'
|
4957
|
+
currency = self.safe_currency(currencyId)
|
4958
|
+
code = self.safe_string(currency, 'code')
|
4940
4959
|
if (codes is None) or (self.in_array(code, codes)):
|
4941
4960
|
depositWithdrawFees[code] = self.parseDepositWithdrawFee(dictionary, currency)
|
4942
4961
|
return depositWithdrawFees
|
ccxt/binance.py
CHANGED
@@ -1882,7 +1882,7 @@ class binance(Exchange, ImplicitAPI):
|
|
1882
1882
|
'-4140': BadRequest, # Invalid symbol status for opening position
|
1883
1883
|
'-4141': OperationRejected, # Symbol is closed
|
1884
1884
|
'-4144': BadSymbol, # Invalid pair
|
1885
|
-
'-4164':
|
1885
|
+
'-4164': InvalidOrder, # {"code":-4164,"msg":"Order's notional must be no smaller than 20(unless you choose reduce only)."}
|
1886
1886
|
'-4165': BadRequest, # Invalid time interval
|
1887
1887
|
'-4167': BadRequest, # Unable to adjust to Multi-Assets mode with symbols of USDⓈ-M Futures under isolated-margin mode.
|
1888
1888
|
'-4168': BadRequest, # Unable to adjust to isolated-margin mode under the Multi-Assets mode.
|
@@ -8499,7 +8499,7 @@ class binance(Exchange, ImplicitAPI):
|
|
8499
8499
|
'previousFundingDatetime': None,
|
8500
8500
|
}
|
8501
8501
|
|
8502
|
-
def parse_account_positions(self, account):
|
8502
|
+
def parse_account_positions(self, account, filterClosed=False):
|
8503
8503
|
positions = self.safe_list(account, 'positions')
|
8504
8504
|
assets = self.safe_list(account, 'assets', [])
|
8505
8505
|
balances = {}
|
@@ -8521,7 +8521,8 @@ class binance(Exchange, ImplicitAPI):
|
|
8521
8521
|
code = market['quote'] if market['linear'] else market['base']
|
8522
8522
|
maintenanceMargin = self.safe_string(position, 'maintMargin')
|
8523
8523
|
# check for maintenance margin so empty positions are not returned
|
8524
|
-
|
8524
|
+
isPositionOpen = (maintenanceMargin != '0') and (maintenanceMargin != '0.00000000')
|
8525
|
+
if not filterClosed or isPositionOpen:
|
8525
8526
|
# sometimes not all the codes are correctly returned...
|
8526
8527
|
if code in balances:
|
8527
8528
|
parsed = self.parse_account_position(self.extend(position, {
|
@@ -9287,10 +9288,11 @@ class binance(Exchange, ImplicitAPI):
|
|
9287
9288
|
:see: https://binance-docs.github.io/apidocs/delivery/en/#account-information-user_data
|
9288
9289
|
:see: https://binance-docs.github.io/apidocs/pm/en/#get-um-account-detail-user_data
|
9289
9290
|
:see: https://binance-docs.github.io/apidocs/pm/en/#get-cm-account-detail-user_data
|
9290
|
-
:param str[]
|
9291
|
+
:param str[] [symbols]: list of unified market symbols
|
9291
9292
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
9292
9293
|
:param boolean [params.portfolioMargin]: set to True if you would like to fetch positions in a portfolio margin account
|
9293
9294
|
:param str [params.subType]: "linear" or "inverse"
|
9295
|
+
:param boolean [params.filterClosed]: set to True if you would like to filter out closed positions, default is False
|
9294
9296
|
:returns dict: data on account positions
|
9295
9297
|
"""
|
9296
9298
|
if symbols is not None:
|
@@ -9318,7 +9320,9 @@ class binance(Exchange, ImplicitAPI):
|
|
9318
9320
|
response = self.dapiPrivateGetAccount(params)
|
9319
9321
|
else:
|
9320
9322
|
raise NotSupported(self.id + ' fetchPositions() supports linear and inverse contracts only')
|
9321
|
-
|
9323
|
+
filterClosed = None
|
9324
|
+
filterClosed, params = self.handle_option_and_params(params, 'fetchAccountPositions', 'filterClosed', False)
|
9325
|
+
result = self.parse_account_positions(response, filterClosed)
|
9322
9326
|
symbols = self.market_symbols(symbols)
|
9323
9327
|
return self.filter_by_array_positions(result, 'symbol', symbols, False)
|
9324
9328
|
|
@@ -10286,7 +10290,7 @@ class binance(Exchange, ImplicitAPI):
|
|
10286
10290
|
raise NotSupported(self.id + ' add / reduce margin only supported with type future or delivery')
|
10287
10291
|
self.load_markets()
|
10288
10292
|
market = self.market(symbol)
|
10289
|
-
amount = self.
|
10293
|
+
amount = self.amount_to_precision(symbol, amount)
|
10290
10294
|
request = {
|
10291
10295
|
'type': addOrReduce,
|
10292
10296
|
'symbol': market['id'],
|
ccxt/bitget.py
CHANGED
@@ -1316,6 +1316,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
1316
1316
|
'commonCurrencies': {
|
1317
1317
|
'JADE': 'Jade Protocol',
|
1318
1318
|
'DEGEN': 'DegenReborn',
|
1319
|
+
'TONCOIN': 'TON',
|
1319
1320
|
},
|
1320
1321
|
'options': {
|
1321
1322
|
'timeframes': {
|
@@ -1853,8 +1854,8 @@ class bitget(Exchange, ImplicitAPI):
|
|
1853
1854
|
data = self.safe_value(response, 'data', [])
|
1854
1855
|
for i in range(0, len(data)):
|
1855
1856
|
entry = data[i]
|
1856
|
-
id = self.safe_string(entry, 'coinId')
|
1857
|
-
code = self.safe_currency_code(
|
1857
|
+
id = self.safe_string(entry, 'coin') # we don't use 'coinId' has no use. it is 'coin' field that needs to be used in currency related endpoints(deposit, withdraw, etc..)
|
1858
|
+
code = self.safe_currency_code(id)
|
1858
1859
|
chains = self.safe_value(entry, 'chains', [])
|
1859
1860
|
networks = {}
|
1860
1861
|
deposit = False
|
@@ -1971,7 +1972,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
1971
1972
|
raise ArgumentsRequired(self.id + ' fetchMarketLeverageTiers() requires a code argument')
|
1972
1973
|
params = self.omit(params, 'code')
|
1973
1974
|
currency = self.currency(code)
|
1974
|
-
request['coin'] = currency['
|
1975
|
+
request['coin'] = currency['id']
|
1975
1976
|
response = self.privateMarginGetV2MarginCrossedTierData(self.extend(request, params))
|
1976
1977
|
else:
|
1977
1978
|
raise BadRequest(self.id + ' fetchMarketLeverageTiers() symbol does not support market ' + market['symbol'])
|
@@ -2118,7 +2119,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
2118
2119
|
if since is None:
|
2119
2120
|
since = self.milliseconds() - 7776000000 # 90 days
|
2120
2121
|
request = {
|
2121
|
-
'coin': currency['
|
2122
|
+
'coin': currency['id'],
|
2122
2123
|
'startTime': since,
|
2123
2124
|
'endTime': self.milliseconds(),
|
2124
2125
|
}
|
@@ -2173,7 +2174,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
2173
2174
|
currency = self.currency(code)
|
2174
2175
|
networkId = self.network_code_to_id(chain)
|
2175
2176
|
request = {
|
2176
|
-
'coin': currency['
|
2177
|
+
'coin': currency['id'],
|
2177
2178
|
'address': address,
|
2178
2179
|
'chain': networkId,
|
2179
2180
|
'size': amount,
|
@@ -2252,7 +2253,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
2252
2253
|
if since is None:
|
2253
2254
|
since = self.milliseconds() - 7776000000 # 90 days
|
2254
2255
|
request = {
|
2255
|
-
'coin': currency['
|
2256
|
+
'coin': currency['id'],
|
2256
2257
|
'startTime': since,
|
2257
2258
|
'endTime': self.milliseconds(),
|
2258
2259
|
}
|
@@ -2390,7 +2391,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
2390
2391
|
networkId = self.network_code_to_id(networkCode, code)
|
2391
2392
|
currency = self.currency(code)
|
2392
2393
|
request = {
|
2393
|
-
'coin': currency['
|
2394
|
+
'coin': currency['id'],
|
2394
2395
|
}
|
2395
2396
|
if networkId is not None:
|
2396
2397
|
request['chain'] = networkId
|
@@ -5492,7 +5493,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
5492
5493
|
request = {}
|
5493
5494
|
if code is not None:
|
5494
5495
|
currency = self.currency(code)
|
5495
|
-
request['coin'] = currency['
|
5496
|
+
request['coin'] = currency['id']
|
5496
5497
|
request, params = self.handle_until_option('endTime', request, params)
|
5497
5498
|
if since is not None:
|
5498
5499
|
request['startTime'] = since
|
@@ -6806,7 +6807,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
6806
6807
|
type = self.safe_string(accountsByType, fromAccount)
|
6807
6808
|
currency = self.currency(code)
|
6808
6809
|
request = {
|
6809
|
-
'coin': currency['
|
6810
|
+
'coin': currency['id'],
|
6810
6811
|
'fromType': type,
|
6811
6812
|
}
|
6812
6813
|
if since is not None:
|
@@ -6861,7 +6862,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
6861
6862
|
'fromType': fromType,
|
6862
6863
|
'toType': toType,
|
6863
6864
|
'amount': amount,
|
6864
|
-
'coin': currency['
|
6865
|
+
'coin': currency['id'],
|
6865
6866
|
}
|
6866
6867
|
symbol = self.safe_string(params, 'symbol')
|
6867
6868
|
params = self.omit(params, 'symbol')
|
@@ -7041,7 +7042,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7041
7042
|
self.load_markets()
|
7042
7043
|
currency = self.currency(code)
|
7043
7044
|
request = {
|
7044
|
-
'coin': currency['
|
7045
|
+
'coin': currency['id'],
|
7045
7046
|
'borrowAmount': self.currency_to_precision(code, amount),
|
7046
7047
|
}
|
7047
7048
|
response = self.privateMarginPostV2MarginCrossedAccountBorrow(self.extend(request, params))
|
@@ -7074,7 +7075,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7074
7075
|
currency = self.currency(code)
|
7075
7076
|
market = self.market(symbol)
|
7076
7077
|
request = {
|
7077
|
-
'coin': currency['
|
7078
|
+
'coin': currency['id'],
|
7078
7079
|
'borrowAmount': self.currency_to_precision(code, amount),
|
7079
7080
|
'symbol': market['id'],
|
7080
7081
|
}
|
@@ -7109,7 +7110,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7109
7110
|
currency = self.currency(code)
|
7110
7111
|
market = self.market(symbol)
|
7111
7112
|
request = {
|
7112
|
-
'coin': currency['
|
7113
|
+
'coin': currency['id'],
|
7113
7114
|
'repayAmount': self.currency_to_precision(code, amount),
|
7114
7115
|
'symbol': market['id'],
|
7115
7116
|
}
|
@@ -7143,7 +7144,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7143
7144
|
self.load_markets()
|
7144
7145
|
currency = self.currency(code)
|
7145
7146
|
request = {
|
7146
|
-
'coin': currency['
|
7147
|
+
'coin': currency['id'],
|
7147
7148
|
'repayAmount': self.currency_to_precision(code, amount),
|
7148
7149
|
}
|
7149
7150
|
response = self.privateMarginPostV2MarginCrossedAccountRepay(self.extend(request, params))
|
@@ -7489,7 +7490,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7489
7490
|
self.load_markets()
|
7490
7491
|
currency = self.currency(code)
|
7491
7492
|
request = {
|
7492
|
-
'coin': currency['
|
7493
|
+
'coin': currency['id'],
|
7493
7494
|
}
|
7494
7495
|
response = self.privateMarginGetV2MarginCrossedInterestRateAndLimit(self.extend(request, params))
|
7495
7496
|
#
|
@@ -7580,7 +7581,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
7580
7581
|
currency = None
|
7581
7582
|
if code is not None:
|
7582
7583
|
currency = self.currency(code)
|
7583
|
-
request['coin'] = currency['
|
7584
|
+
request['coin'] = currency['id']
|
7584
7585
|
if since is not None:
|
7585
7586
|
request['startTime'] = since
|
7586
7587
|
else:
|
ccxt/cryptocom.py
CHANGED
@@ -2565,7 +2565,7 @@ class cryptocom(Exchange, ImplicitAPI):
|
|
2565
2565
|
#
|
2566
2566
|
result = self.safe_dict(response, 'result', {})
|
2567
2567
|
data = self.safe_list(result, 'data', [])
|
2568
|
-
return self.parse_position(data
|
2568
|
+
return self.parse_position(self.safe_dict(data, 0), market)
|
2569
2569
|
|
2570
2570
|
def fetch_positions(self, symbols: Strings = None, params={}):
|
2571
2571
|
"""
|
ccxt/gate.py
CHANGED
@@ -1823,7 +1823,7 @@ class gate(Exchange, ImplicitAPI):
|
|
1823
1823
|
self.load_markets()
|
1824
1824
|
currency = self.currency(code)
|
1825
1825
|
request = {
|
1826
|
-
'currency': currency['id'],
|
1826
|
+
'currency': currency['id'], # todo: currencies have network-junctions
|
1827
1827
|
}
|
1828
1828
|
response = self.privateWalletGetDepositAddress(self.extend(request, params))
|
1829
1829
|
addresses = self.safe_value(response, 'multichain_addresses')
|
@@ -1870,7 +1870,7 @@ class gate(Exchange, ImplicitAPI):
|
|
1870
1870
|
rawNetwork = self.safe_string_upper(params, 'network')
|
1871
1871
|
params = self.omit(params, 'network')
|
1872
1872
|
request = {
|
1873
|
-
'currency': currency['id'],
|
1873
|
+
'currency': currency['id'], # todo: currencies have network-junctions
|
1874
1874
|
}
|
1875
1875
|
response = self.privateWalletGetDepositAddress(self.extend(request, params))
|
1876
1876
|
#
|
@@ -3345,7 +3345,7 @@ class gate(Exchange, ImplicitAPI):
|
|
3345
3345
|
currency = None
|
3346
3346
|
if code is not None:
|
3347
3347
|
currency = self.currency(code)
|
3348
|
-
request['currency'] = currency['id']
|
3348
|
+
request['currency'] = currency['id'] # todo: currencies have network-junctions
|
3349
3349
|
if limit is not None:
|
3350
3350
|
request['limit'] = limit
|
3351
3351
|
if since is not None:
|
@@ -3377,7 +3377,7 @@ class gate(Exchange, ImplicitAPI):
|
|
3377
3377
|
currency = None
|
3378
3378
|
if code is not None:
|
3379
3379
|
currency = self.currency(code)
|
3380
|
-
request['currency'] = currency['id']
|
3380
|
+
request['currency'] = currency['id'] # todo: currencies have network-junctions
|
3381
3381
|
if limit is not None:
|
3382
3382
|
request['limit'] = limit
|
3383
3383
|
if since is not None:
|
@@ -3404,7 +3404,7 @@ class gate(Exchange, ImplicitAPI):
|
|
3404
3404
|
self.load_markets()
|
3405
3405
|
currency = self.currency(code)
|
3406
3406
|
request = {
|
3407
|
-
'currency': currency['id'],
|
3407
|
+
'currency': currency['id'], # todo: currencies have network-junctions
|
3408
3408
|
'address': address,
|
3409
3409
|
'amount': self.currency_to_precision(code, amount),
|
3410
3410
|
}
|
@@ -3417,7 +3417,7 @@ class gate(Exchange, ImplicitAPI):
|
|
3417
3417
|
request['chain'] = network
|
3418
3418
|
params = self.omit(params, 'network')
|
3419
3419
|
else:
|
3420
|
-
request['chain'] = currency['id']
|
3420
|
+
request['chain'] = currency['id'] # todo: currencies have network-junctions
|
3421
3421
|
response = self.privateWithdrawalsPostWithdrawals(self.extend(request, params))
|
3422
3422
|
#
|
3423
3423
|
# {
|
@@ -4761,7 +4761,7 @@ class gate(Exchange, ImplicitAPI):
|
|
4761
4761
|
toId = self.convert_type_to_account(toAccount)
|
4762
4762
|
truncated = self.currency_to_precision(code, amount)
|
4763
4763
|
request = {
|
4764
|
-
'currency': currency['id'],
|
4764
|
+
'currency': currency['id'], # todo: currencies have network-junctions
|
4765
4765
|
'amount': truncated,
|
4766
4766
|
}
|
4767
4767
|
if not (fromId in self.options['accountsByType']):
|
@@ -4782,7 +4782,7 @@ class gate(Exchange, ImplicitAPI):
|
|
4782
4782
|
request['currency_pair'] = market['id']
|
4783
4783
|
params = self.omit(params, 'symbol')
|
4784
4784
|
if (toId == 'futures') or (toId == 'delivery') or (fromId == 'futures') or (fromId == 'delivery'):
|
4785
|
-
request['settle'] = currency['id']
|
4785
|
+
request['settle'] = currency['id'] # todo: currencies have network-junctions
|
4786
4786
|
response = self.privateWalletPostTransfers(self.extend(request, params))
|
4787
4787
|
#
|
4788
4788
|
# according to the docs(however actual response seems to be an empty string '')
|
@@ -5395,7 +5395,7 @@ class gate(Exchange, ImplicitAPI):
|
|
5395
5395
|
self.load_markets()
|
5396
5396
|
currency = self.currency(code)
|
5397
5397
|
request = {
|
5398
|
-
'currency': currency['id'].upper(),
|
5398
|
+
'currency': currency['id'].upper(), # todo: currencies have network-junctions
|
5399
5399
|
'amount': self.currency_to_precision(code, amount),
|
5400
5400
|
}
|
5401
5401
|
market = self.market(symbol)
|
@@ -5422,7 +5422,7 @@ class gate(Exchange, ImplicitAPI):
|
|
5422
5422
|
self.load_markets()
|
5423
5423
|
currency = self.currency(code)
|
5424
5424
|
request = {
|
5425
|
-
'currency': currency['id'].upper(),
|
5425
|
+
'currency': currency['id'].upper(), # todo: currencies have network-junctions
|
5426
5426
|
'amount': self.currency_to_precision(code, amount),
|
5427
5427
|
}
|
5428
5428
|
response = self.privateMarginPostCrossRepayments(self.extend(request, params))
|
@@ -5459,7 +5459,7 @@ class gate(Exchange, ImplicitAPI):
|
|
5459
5459
|
self.load_markets()
|
5460
5460
|
currency = self.currency(code)
|
5461
5461
|
request = {
|
5462
|
-
'currency': currency['id'].upper(),
|
5462
|
+
'currency': currency['id'].upper(), # todo: currencies have network-junctions
|
5463
5463
|
'amount': self.currency_to_precision(code, amount),
|
5464
5464
|
}
|
5465
5465
|
response = None
|
@@ -5502,7 +5502,7 @@ class gate(Exchange, ImplicitAPI):
|
|
5502
5502
|
self.load_markets()
|
5503
5503
|
currency = self.currency(code)
|
5504
5504
|
request = {
|
5505
|
-
'currency': currency['id'].upper(),
|
5505
|
+
'currency': currency['id'].upper(), # todo: currencies have network-junctions
|
5506
5506
|
'amount': self.currency_to_precision(code, amount),
|
5507
5507
|
}
|
5508
5508
|
response = self.privateMarginPostCrossLoans(self.extend(request, params))
|
@@ -5995,7 +5995,7 @@ class gate(Exchange, ImplicitAPI):
|
|
5995
5995
|
if (type == 'spot') or (type == 'margin'):
|
5996
5996
|
if code is not None:
|
5997
5997
|
currency = self.currency(code)
|
5998
|
-
request['currency'] = currency['id']
|
5998
|
+
request['currency'] = currency['id'] # todo: currencies have network-junctions
|
5999
5999
|
if (type == 'swap') or (type == 'future'):
|
6000
6000
|
defaultSettle = 'usdt' if (type == 'swap') else 'btc'
|
6001
6001
|
settle = self.safe_string_lower(params, 'settle', defaultSettle)
|
@@ -6753,7 +6753,7 @@ class gate(Exchange, ImplicitAPI):
|
|
6753
6753
|
self.load_markets()
|
6754
6754
|
currency = self.currency(code)
|
6755
6755
|
request = {
|
6756
|
-
'underlying': currency['code'] + '_USDT',
|
6756
|
+
'underlying': currency['code'] + '_USDT', # todo: currency['id'].upper() & network junctions
|
6757
6757
|
}
|
6758
6758
|
response = self.publicOptionsGetContracts(self.extend(request, params))
|
6759
6759
|
#
|
ccxt/krakenfutures.py
CHANGED
@@ -363,7 +363,8 @@ class krakenfutures(Exchange, ImplicitAPI):
|
|
363
363
|
# swap == perpetual
|
364
364
|
settle = None
|
365
365
|
settleId = None
|
366
|
-
|
366
|
+
cvtp = self.safe_string(market, 'contractValueTradePrecision')
|
367
|
+
amountPrecision = self.parse_number(self.integer_precision_to_amount(cvtp))
|
367
368
|
pricePrecision = self.safe_number(market, 'tickSize')
|
368
369
|
contract = (swap or future or index)
|
369
370
|
swapOrFutures = (swap or future)
|
ccxt/kucoin.py
CHANGED
@@ -3325,9 +3325,9 @@ class kucoin(Exchange, ImplicitAPI):
|
|
3325
3325
|
def fetch_balance(self, params={}) -> Balances:
|
3326
3326
|
"""
|
3327
3327
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
3328
|
-
:see: https://docs.kucoin.com/#list-accounts
|
3329
3328
|
:see: https://www.kucoin.com/docs/rest/account/basic-info/get-account-list-spot-margin-trade_hf
|
3330
|
-
:see: https://
|
3329
|
+
:see: https://www.kucoin.com/docs/rest/funding/funding-overview/get-account-detail-margin
|
3330
|
+
:see: https://www.kucoin.com/docs/rest/funding/funding-overview/get-account-detail-isolated-margin
|
3331
3331
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3332
3332
|
:param dict [params.marginMode]: 'cross' or 'isolated', margin type for fetching margin balance
|
3333
3333
|
:param dict [params.type]: extra parameters specific to the exchange API endpoint
|
@@ -3352,7 +3352,7 @@ class kucoin(Exchange, ImplicitAPI):
|
|
3352
3352
|
response = None
|
3353
3353
|
request = {}
|
3354
3354
|
isolated = (marginMode == 'isolated') or (type == 'isolated')
|
3355
|
-
cross = (marginMode == 'cross') or (type == '
|
3355
|
+
cross = (marginMode == 'cross') or (type == 'margin')
|
3356
3356
|
if isolated:
|
3357
3357
|
if currency is not None:
|
3358
3358
|
request['balanceCurrency'] = currency['id']
|
@@ -3417,13 +3417,14 @@ class kucoin(Exchange, ImplicitAPI):
|
|
3417
3417
|
# }
|
3418
3418
|
# }
|
3419
3419
|
#
|
3420
|
-
data =
|
3420
|
+
data = None
|
3421
3421
|
result = {
|
3422
3422
|
'info': response,
|
3423
3423
|
'timestamp': None,
|
3424
3424
|
'datetime': None,
|
3425
3425
|
}
|
3426
3426
|
if isolated:
|
3427
|
+
data = self.safe_dict(response, 'data', {})
|
3427
3428
|
assets = self.safe_value(data, 'assets', data)
|
3428
3429
|
for i in range(0, len(assets)):
|
3429
3430
|
entry = assets[i]
|
@@ -3438,6 +3439,7 @@ class kucoin(Exchange, ImplicitAPI):
|
|
3438
3439
|
subResult[quoteCode] = self.parse_balance_helper(quote)
|
3439
3440
|
result[symbol] = self.safe_balance(subResult)
|
3440
3441
|
elif cross:
|
3442
|
+
data = self.safe_dict(response, 'data', {})
|
3441
3443
|
accounts = self.safe_list(data, 'accounts', [])
|
3442
3444
|
for i in range(0, len(accounts)):
|
3443
3445
|
balance = accounts[i]
|
@@ -3445,6 +3447,7 @@ class kucoin(Exchange, ImplicitAPI):
|
|
3445
3447
|
codeInner = self.safe_currency_code(currencyId)
|
3446
3448
|
result[codeInner] = self.parse_balance_helper(balance)
|
3447
3449
|
else:
|
3450
|
+
data = self.safe_list(response, 'data', [])
|
3448
3451
|
for i in range(0, len(data)):
|
3449
3452
|
balance = data[i]
|
3450
3453
|
balanceType = self.safe_string(balance, 'type')
|
ccxt/mexc.py
CHANGED
@@ -4228,7 +4228,7 @@ class mexc(Exchange, ImplicitAPI):
|
|
4228
4228
|
key = self.safe_string(keys, 0)
|
4229
4229
|
result = self.safe_dict(addressStructures, key)
|
4230
4230
|
if result is None:
|
4231
|
-
raise InvalidAddress(self.id + ' fetchDepositAddress() cannot find a deposit address for ' + code + ', and network' + network + 'consider creating one using
|
4231
|
+
raise InvalidAddress(self.id + ' fetchDepositAddress() cannot find a deposit address for ' + code + ', and network' + network + 'consider creating one using .createDepositAddress() method or in MEXC website')
|
4232
4232
|
return result
|
4233
4233
|
|
4234
4234
|
def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
ccxt/pro/__init__.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.2.
|
3
|
+
Version: 4.2.88
|
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
|
@@ -69,7 +69,6 @@ Current feature list:
|
|
69
69
|
|
70
70
|
|
71
71
|
## Sponsored Promotion
|
72
|
-
[](https://www.bitget.com/events/competition/86c98f96df155e6bb397e866dcd86afc?channelCode=ccxt&vipCode=tg9j)
|
73
72
|
|
74
73
|
## See Also
|
75
74
|
|
@@ -102,7 +101,7 @@ Current feature list:
|
|
102
101
|
| [](https://www.okx.com/join/CCXT2023) | okx | [OKX](https://www.okx.com/join/CCXT2023) | [](https://www.okx.com/docs-v5/en/) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) | [](https://www.okx.com/join/CCXT2023) |
|
103
102
|
| [](https://x.woo.org/register?ref=YWOWC96B) | woo | [WOO X](https://x.woo.org/register?ref=YWOWC96B) | [](https://docs.woo.org/) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) | [](https://x.woo.org/register?ref=YWOWC96B) |
|
104
103
|
|
105
|
-
## Supported Cryptocurrency
|
104
|
+
## Supported Cryptocurrency Exchanges
|
106
105
|
|
107
106
|
The CCXT library currently supports the following 97 cryptocurrency exchange markets and trading APIs:
|
108
107
|
|
@@ -262,13 +261,13 @@ console.log(version, Object.keys(exchanges));
|
|
262
261
|
|
263
262
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
264
263
|
|
265
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
266
|
-
* unpkg: https://unpkg.com/ccxt@4.2.
|
264
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.88/dist/ccxt.browser.js
|
265
|
+
* unpkg: https://unpkg.com/ccxt@4.2.88/dist/ccxt.browser.js
|
267
266
|
|
268
267
|
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.
|
269
268
|
|
270
269
|
```HTML
|
271
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
270
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.88/dist/ccxt.browser.js"></script>
|
272
271
|
```
|
273
272
|
|
274
273
|
Creates a global `ccxt` object:
|
@@ -1,10 +1,10 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=zWW1HsB9zW_WsZs0boJ4Bec8SChFiFb5NkbsbS08qgs,15656
|
2
2
|
ccxt/ace.py,sha256=IsKHO7u3J8rJT9wCMdtwlmwPdtjnAwC9ZTMC0uNfs9A,41420
|
3
3
|
ccxt/alpaca.py,sha256=6P2wAEGJQOjjoKQbzv1KvSuZvEZmOX987a1NqB7z9mk,46908
|
4
4
|
ccxt/ascendex.py,sha256=1tvSlxB6kCxlpAilo5lsOYrtf_607IGCDwqlsGlSTgg,151137
|
5
5
|
ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
|
6
6
|
ccxt/bigone.py,sha256=IY9nFoxY9XhieTnaRBOXlFOyJvE8iBOdDpIZaiHQ1kU,92159
|
7
|
-
ccxt/binance.py,sha256=
|
7
|
+
ccxt/binance.py,sha256=tEvZ8doLPWGDU7esHObDCT0bfts-xNVDRHGgUB7Xv-U,591366
|
8
8
|
ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
|
9
9
|
ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
|
10
10
|
ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
|
@@ -17,7 +17,7 @@ ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
|
|
17
17
|
ccxt/bitfinex.py,sha256=U4f8Oe5nxAatOpuUkJd5OPxglMMTO4wP9F-qpZ2PW_M,71500
|
18
18
|
ccxt/bitfinex2.py,sha256=CZvg12UsV2SkqXYDRshct7QRTHqdPyhgWpU3-TzJSSs,158037
|
19
19
|
ccxt/bitflyer.py,sha256=VjBZQbY-BB4MQ3h7u1K6yFRBGXn4hawBVWIAGc3uYEw,41279
|
20
|
-
ccxt/bitget.py,sha256=
|
20
|
+
ccxt/bitget.py,sha256=z9iWClcp9-q2s7xq6LfRpJ9DvNQ006bWqv7DuRvDBzk,407361
|
21
21
|
ccxt/bithumb.py,sha256=3as78FD3VF-dcTfXnUG0FBdh202TFGtmumit8ZPQI7w,45334
|
22
22
|
ccxt/bitmart.py,sha256=va5p5p_GS_rgPyf44GIvcErdXdl7tFYpJJ062v-Nd-A,198947
|
23
23
|
ccxt/bitmex.py,sha256=AVvk4b57uRQH7z7qAyXAoGBlHISCz3IwdV_-QVgG0HU,125327
|
@@ -48,7 +48,7 @@ ccxt/coinmetro.py,sha256=BDENHzBbAt0cCzu5Y0YX6Z_jtcXogWEzw3jmb9nMyLs,80383
|
|
48
48
|
ccxt/coinone.py,sha256=ZhdWCm87QSpI7gJMa4e_5uS8fU7tm7U797ASKUHN4Uk,46719
|
49
49
|
ccxt/coinsph.py,sha256=-6WEnLxfyMhvvMEnGcqfmcpXYggKBR-I1DKnJbcmpak,90274
|
50
50
|
ccxt/coinspot.py,sha256=rtHhup6v6HbDCAVrZyVJJqOooJ_zoRWU0OqkEjLYL3E,23463
|
51
|
-
ccxt/cryptocom.py,sha256=
|
51
|
+
ccxt/cryptocom.py,sha256=mmOzjdDp_tFVJfgnFyfbjtyTtlalbJvr5JIennEgWTo,128103
|
52
52
|
ccxt/currencycom.py,sha256=7HoKIs_S3JefwCQiVp6tzS-d9sAQdG8qb-P89Js0j6c,86705
|
53
53
|
ccxt/delta.py,sha256=i2QMWS0PsVP9jjVHPZbBU7IQlkdsKPUb3LUksuecBWU,150373
|
54
54
|
ccxt/deribit.py,sha256=zYQBv64tA5snW3q3xmjAFfdKqq6guJJTB1Z0dhl8-iY,159127
|
@@ -56,7 +56,7 @@ ccxt/digifinex.py,sha256=4sANd8_Fz2v97kzu71IuUGHBOrISziccAqcKNLk4nmQ,169545
|
|
56
56
|
ccxt/exmo.py,sha256=0I80ZO7-GawTaraH2EQNUbxtQWB1Ds0uuBJdk_FL9Kg,114111
|
57
57
|
ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
|
58
58
|
ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
|
59
|
-
ccxt/gate.py,sha256=
|
59
|
+
ccxt/gate.py,sha256=LWNEp9iWUWdkrrUheMF1NzopohLkOpje5x_pu6mqyHQ,314930
|
60
60
|
ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
|
61
61
|
ccxt/gemini.py,sha256=B8_5McLOK6tqSgIUpNIhgc7kOSEHFzALniQKO1343vY,79456
|
62
62
|
ccxt/hitbtc.py,sha256=3zGp4Zz6YMUJP7kXwEbHT3ccsD4_ApFc_4Q1UjX8glg,152585
|
@@ -70,8 +70,8 @@ ccxt/idex.py,sha256=ZZvZ6M2Nc21dvJ7s-wCDNykTYvIblP1bvs_TeYQvnvE,72755
|
|
70
70
|
ccxt/independentreserve.py,sha256=EmmR6gJy6aoBJApG6M_A8Ink-90TghAaTDtaaILDzbs,31996
|
71
71
|
ccxt/indodax.py,sha256=xC7of6o3UWGfy3U6SNFEK_SKlkrFbLjJGut2fZyC53E,51779
|
72
72
|
ccxt/kraken.py,sha256=u_UKSp2fEfuKJWA6FxA5L7UWEGAHlWr_dP-1e6TcD_U,121967
|
73
|
-
ccxt/krakenfutures.py,sha256=
|
74
|
-
ccxt/kucoin.py,sha256=
|
73
|
+
ccxt/krakenfutures.py,sha256=w3YaTs65H5mlodhRAcLsroCbzkRlb7XICkuq6bVPcWs,115673
|
74
|
+
ccxt/kucoin.py,sha256=bPN3cGL9B_mC8uOriVkiQ-rXLqwvKQxgH1bFd1F9kIQ,213696
|
75
75
|
ccxt/kucoinfutures.py,sha256=LRv9jlG90jqPF6oJRgGVKC88jhCaBBoIRFrwkb7eKZA,116663
|
76
76
|
ccxt/kuna.py,sha256=aYEucvgyCo9mzI-wVUiR84nCYoAGqDsIC50RN4yvV3g,95954
|
77
77
|
ccxt/latoken.py,sha256=cYDzToJ0HUhUiN5Mr081ena03b4pYCve3M8IFZYa0-M,78584
|
@@ -79,7 +79,7 @@ ccxt/lbank.py,sha256=wTz2Hjtx1LQrF1ZmXwJaCbTHABayiqVLbUSA3uhKvCM,114982
|
|
79
79
|
ccxt/luno.py,sha256=khH7_HPDbeAYf3Jx0LCPP6sZdOY5iAeLkot5RMqXWwE,45536
|
80
80
|
ccxt/lykke.py,sha256=hueiiLEqMygSpDu4RgkWFNTpd9zTd-bYBWQkR_rxAKQ,50803
|
81
81
|
ccxt/mercado.py,sha256=4UE6juAVhS73-b55YWGqQEZ04v3izmeAO7oZtu7_b_k,35183
|
82
|
-
ccxt/mexc.py,sha256=
|
82
|
+
ccxt/mexc.py,sha256=VTSCZVUnDMbOp6xu4b9OCEWYCvolbQtAEhrBQ4Ycoj0,234331
|
83
83
|
ccxt/ndax.py,sha256=J2L0Y-26LJPWZPU52MWDU_oxVUwF219SAg6z6NoiDIg,108342
|
84
84
|
ccxt/novadax.py,sha256=Y2n3RRTmr-HUKach_m1pv3yZdp2Zl0a1QdmSIrk-93Y,64105
|
85
85
|
ccxt/oceanex.py,sha256=XAnfRtmMPldpG9bf3df9Q_-gq_ObP2ZzG9sch99XKyU,37832
|
@@ -207,13 +207,13 @@ ccxt/abstract/woo.py,sha256=E-QXVJKVI4EOW72NX6wv99px9EyitWtd9KWvXUc9Tyo,10216
|
|
207
207
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
208
208
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
209
209
|
ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
|
210
|
-
ccxt/async_support/__init__.py,sha256
|
210
|
+
ccxt/async_support/__init__.py,sha256=nfShAagjdXYq3fx4dcBHLCsmyT2z6Bqqm_vPk_ONZD8,15409
|
211
211
|
ccxt/async_support/ace.py,sha256=IYTj0FJAAPvSrpgIpbzO6ftADPgLnQT1uk54MSSM7UA,41644
|
212
212
|
ccxt/async_support/alpaca.py,sha256=Nsaff9RczBhiNF19RlqI6wggvEibV_2ICgB8H5Qiuck,47120
|
213
213
|
ccxt/async_support/ascendex.py,sha256=6Urz_G0HkTowaypD-2_fhra013G1PsO8B5iWL4wYFLY,151925
|
214
214
|
ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
|
215
215
|
ccxt/async_support/bigone.py,sha256=Ut_4zYmpAde6mn4KYPR9ho6N_WNKGwUegp0CEX9m6bI,92613
|
216
|
-
ccxt/async_support/binance.py,sha256=
|
216
|
+
ccxt/async_support/binance.py,sha256=ZNS2ZX2x_EDl_JeF53jrRO-4BPrF0_CtO2ppbMDs3Lo,593902
|
217
217
|
ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
|
218
218
|
ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
|
219
219
|
ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
|
@@ -226,7 +226,7 @@ ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85
|
|
226
226
|
ccxt/async_support/bitfinex.py,sha256=PrQmqrwmrv_DCZ6QgrF7m4tyD8WglRKGXUBzaY9GkjE,71940
|
227
227
|
ccxt/async_support/bitfinex2.py,sha256=yG0d55fhziX7b6FTn4XBsjW1YjQxahC8ggfq9FGMDm8,158771
|
228
228
|
ccxt/async_support/bitflyer.py,sha256=sfvh-bsIh7jz3EEFPCjeYWWyUxLXHOuyd3kCB2HEY54,41587
|
229
|
-
ccxt/async_support/bitget.py,sha256=
|
229
|
+
ccxt/async_support/bitget.py,sha256=7VK41Cy64wG6-0sgy49cmk0c8gOC33snvFiBYlCh_2k,408895
|
230
230
|
ccxt/async_support/bithumb.py,sha256=wjVV8R94Of6fatNQAtpCeLuCkvpAbniLncRwh4KcJbs,45564
|
231
231
|
ccxt/async_support/bitmart.py,sha256=h6N6cKAXtsHmWMvsWU_HGhiWAZBjVrFYjbfAg7cgUeI,199867
|
232
232
|
ccxt/async_support/bitmex.py,sha256=NHm71vOprRDv54nwbgj87G_KKWAXqeWacZpnsVvxHac,125887
|
@@ -257,7 +257,7 @@ ccxt/async_support/coinmetro.py,sha256=1mNOihy1kpzz-jwMEYmF_NvqUWoz8wogrx1SHMd_W
|
|
257
257
|
ccxt/async_support/coinone.py,sha256=NvAtYLboYVSW15yhFHDLZW3zKEzRWeRXZDgP0Kf9fzo,46961
|
258
258
|
ccxt/async_support/coinsph.py,sha256=ah1P7Jr6DtPv2RQe0k0lNVAzDlbijMUxvJ0Okcq951Q,90708
|
259
259
|
ccxt/async_support/coinspot.py,sha256=DqWK2WouFRRfchKlNFOAIhDcVK3pFfI-kHyg1BgH8P8,23615
|
260
|
-
ccxt/async_support/cryptocom.py,sha256=
|
260
|
+
ccxt/async_support/cryptocom.py,sha256=wqY3_Qi4-UjulWGSjJpVcrcUTRXa7FmlAEXPHJP3ZDc,128657
|
261
261
|
ccxt/async_support/currencycom.py,sha256=PY2dH-FEc4_NLwc41lK5y7zdHYdseTKGwOCGGTTztCo,87127
|
262
262
|
ccxt/async_support/delta.py,sha256=wDCtuEa9XLJEG21UiyZCbU9lbXXdAeUohIQ_jloO0Kc,150981
|
263
263
|
ccxt/async_support/deribit.py,sha256=E541ZvFFBSYaO_akT1MgDkV516YYdr4iIUWVpLo1Zbg,159897
|
@@ -265,7 +265,7 @@ ccxt/async_support/digifinex.py,sha256=nbDx3ynwpfcf31Rj7yi4oNHcuCrhFBlf1G7_ndrTY
|
|
265
265
|
ccxt/async_support/exmo.py,sha256=eRygc3DHGUhEkCcdhMND4c08_oarXYYr63JphSHVpq8,114743
|
266
266
|
ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
|
267
267
|
ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
|
268
|
-
ccxt/async_support/gate.py,sha256=
|
268
|
+
ccxt/async_support/gate.py,sha256=OSlylQ9z2Z5ssBSiJ0wGLX-Mcwd6r0WVXCiwDCBcON4,316584
|
269
269
|
ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
|
270
270
|
ccxt/async_support/gemini.py,sha256=JwWrmpBfOOmj3z6FI05vRnqKaw2BudDDPiH9EKJAEpg,79969
|
271
271
|
ccxt/async_support/hitbtc.py,sha256=yea-4EzKdhIu8mWHRCYIucsC3JIpb7gVQvCHpfn_eR4,153631
|
@@ -279,8 +279,8 @@ ccxt/async_support/idex.py,sha256=cECcQjOyPThcP0v7dMrsUbKYXiVr5linXnkUO4OiArM,73
|
|
279
279
|
ccxt/async_support/independentreserve.py,sha256=7st7UBewv0j5ZJtThbm1sdyIU4b8eYgIa577pp8G30s,32256
|
280
280
|
ccxt/async_support/indodax.py,sha256=A2-LUvN4BgGOu_IOnsCLjyBTQBXnxCNPJWLcuy2oyPQ,52087
|
281
281
|
ccxt/async_support/kraken.py,sha256=iPhMDhF7ZpfZ04o3p6PIBK-rUxHJpyw0hzvAjm7dXng,122551
|
282
|
-
ccxt/async_support/krakenfutures.py,sha256=
|
283
|
-
ccxt/async_support/kucoin.py,sha256=
|
282
|
+
ccxt/async_support/krakenfutures.py,sha256=LxUUDt8BH69IRbtFYCSsyKZhW_QHEvhqFnAbdYNmzsA,116143
|
283
|
+
ccxt/async_support/kucoin.py,sha256=XdQacAolaHilo87uCpSrWEE0We13g_grriuI7SzXoOI,214750
|
284
284
|
ccxt/async_support/kucoinfutures.py,sha256=DFWz5xjGMbbQhM-buATMV6WPVWvFufd7h6789nrCSj8,117241
|
285
285
|
ccxt/async_support/kuna.py,sha256=8bqVXt9ExmN7VRDYjvhyjNm88EzPvmwgTeXuqbMQQVQ,96370
|
286
286
|
ccxt/async_support/latoken.py,sha256=kd7_aKlm4AbiuV3kv14w0eQKxJ2jGWz46gFkrO1YUXk,79060
|
@@ -288,7 +288,7 @@ ccxt/async_support/lbank.py,sha256=EDplXjuFE1b_R-f6_DlSLPrgUbqdOy-9yFd92OPLsM8,1
|
|
288
288
|
ccxt/async_support/luno.py,sha256=1BXtV6PPSgEg1kMXPgWgwnPh0UFTyWPqpGpbwpRIIws,45874
|
289
289
|
ccxt/async_support/lykke.py,sha256=Rifr7_QWTEQicQou-i8---xvudqjiwqPORkFrUVcPh4,51117
|
290
290
|
ccxt/async_support/mercado.py,sha256=1iK75kOrUKB638xvgsxB2ELN0TB_d2mh10Nptz-8DjQ,35425
|
291
|
-
ccxt/async_support/mexc.py,sha256=
|
291
|
+
ccxt/async_support/mexc.py,sha256=dNSOhWZFqTHoGfx0yvGAfJ7Rfkbe9eGiVHzx-upMn8s,235491
|
292
292
|
ccxt/async_support/ndax.py,sha256=WUNN4I8md8q2eWQu6T6e6nGvjyXguRmgy8-47L1W0Bk,108866
|
293
293
|
ccxt/async_support/novadax.py,sha256=oUNfqlpIuKhOrYuu3WMwUW3hmH-cp52NXY1-5tuwAyM,64473
|
294
294
|
ccxt/async_support/oceanex.py,sha256=ApoQrb9p7YIUUCHXMccZTsBcggf-0fdVeOhvxzyqLyA,38152
|
@@ -313,7 +313,7 @@ ccxt/async_support/yobit.py,sha256=wH9UBovJv56iJcWs0kGbvHkBydPGVWcI_-Y2_FsFfQs,5
|
|
313
313
|
ccxt/async_support/zaif.py,sha256=PaHcaNijKkhocrw6DZoSBNUjBOLNlkUYtsJvPAqkx68,28134
|
314
314
|
ccxt/async_support/zonda.py,sha256=0o0Q1rFuTbdhm8m_rlo8D1qLsgZhhBqnefsHi0rVA_A,80866
|
315
315
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
316
|
-
ccxt/async_support/base/exchange.py,sha256
|
316
|
+
ccxt/async_support/base/exchange.py,sha256=cwg5l2AJ63L1QDG0UNIyNLnZJSbka76fg3BzqVIioR0,90374
|
317
317
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
318
318
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
319
319
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
|
@@ -327,10 +327,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
|
|
327
327
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
328
328
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
329
329
|
ccxt/base/errors.py,sha256=JBn3zTrtru7tLgyEi6MzKAUwiZe0fltQLYoJcsdP-AA,4099
|
330
|
-
ccxt/base/exchange.py,sha256=
|
330
|
+
ccxt/base/exchange.py,sha256=JiW_sjkWxTzY-M_-4BBqhSIFDRbb9Qp6SV0uMZPSi8s,251117
|
331
331
|
ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
|
332
332
|
ccxt/base/types.py,sha256=BQvl53Qwu51LGUSINkLPv9RNokqoz53iyjCGMv2T6Gg,7070
|
333
|
-
ccxt/pro/__init__.py,sha256=
|
333
|
+
ccxt/pro/__init__.py,sha256=0zoA4b4KRe2qiT1FWzr5dbkBgu82hs81o382196g6c0,6999
|
334
334
|
ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
|
335
335
|
ccxt/pro/ascendex.py,sha256=0RlrxSqh4-lW99T-Y8AxrU612Cpy03u2loVMeRUPXlg,35432
|
336
336
|
ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
|
@@ -529,7 +529,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
|
|
529
529
|
ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
|
530
530
|
ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
|
531
531
|
ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
|
532
|
-
ccxt-4.2.
|
533
|
-
ccxt-4.2.
|
534
|
-
ccxt-4.2.
|
535
|
-
ccxt-4.2.
|
532
|
+
ccxt-4.2.88.dist-info/METADATA,sha256=nXQ_N7csKFzwn4B1uvZ8n_MEvEnssWzyFw3FSb-4Law,110281
|
533
|
+
ccxt-4.2.88.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
|
534
|
+
ccxt-4.2.88.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
535
|
+
ccxt-4.2.88.dist-info/RECORD,,
|
File without changes
|
File without changes
|