ccxt 4.3.19__py2.py3-none-any.whl → 4.3.20__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.
- ccxt/__init__.py +1 -1
- ccxt/abstract/bitget.py +3 -0
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +3 -1
- ccxt/async_support/bitget.py +3 -0
- ccxt/async_support/bybit.py +35 -9
- ccxt/async_support/coinex.py +38 -23
- ccxt/async_support/phemex.py +14 -6
- ccxt/base/exchange.py +3 -1
- ccxt/bitget.py +3 -0
- ccxt/bybit.py +35 -9
- ccxt/coinex.py +38 -23
- ccxt/phemex.py +14 -6
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/htx.py +12 -6
- {ccxt-4.3.19.dist-info → ccxt-4.3.20.dist-info}/METADATA +4 -4
- {ccxt-4.3.19.dist-info → ccxt-4.3.20.dist-info}/RECORD +19 -19
- {ccxt-4.3.19.dist-info → ccxt-4.3.20.dist-info}/WHEEL +0 -0
- {ccxt-4.3.19.dist-info → ccxt-4.3.20.dist-info}/top_level.txt +0 -0
ccxt/__init__.py
CHANGED
ccxt/abstract/bitget.py
CHANGED
@@ -101,6 +101,9 @@ class ImplicitAPI:
|
|
101
101
|
private_spot_get_v2_spot_account_subaccount_assets = privateSpotGetV2SpotAccountSubaccountAssets = Entry('v2/spot/account/subaccount-assets', ['private', 'spot'], 'GET', {'cost': 2})
|
102
102
|
private_spot_get_v2_spot_account_bills = privateSpotGetV2SpotAccountBills = Entry('v2/spot/account/bills', ['private', 'spot'], 'GET', {'cost': 2})
|
103
103
|
private_spot_get_v2_spot_account_transferrecords = privateSpotGetV2SpotAccountTransferRecords = Entry('v2/spot/account/transferRecords', ['private', 'spot'], 'GET', {'cost': 1})
|
104
|
+
private_spot_get_v2_account_funding_assets = privateSpotGetV2AccountFundingAssets = Entry('v2/account/funding-assets', ['private', 'spot'], 'GET', {'cost': 2})
|
105
|
+
private_spot_get_v2_account_bot_assets = privateSpotGetV2AccountBotAssets = Entry('v2/account/bot-assets', ['private', 'spot'], 'GET', {'cost': 2})
|
106
|
+
private_spot_get_v2_account_all_account_balance = privateSpotGetV2AccountAllAccountBalance = Entry('v2/account/all-account-balance', ['private', 'spot'], 'GET', {'cost': 20})
|
104
107
|
private_spot_get_v2_spot_wallet_deposit_address = privateSpotGetV2SpotWalletDepositAddress = Entry('v2/spot/wallet/deposit-address', ['private', 'spot'], 'GET', {'cost': 2})
|
105
108
|
private_spot_get_v2_spot_wallet_deposit_records = privateSpotGetV2SpotWalletDepositRecords = Entry('v2/spot/wallet/deposit-records', ['private', 'spot'], 'GET', {'cost': 2})
|
106
109
|
private_spot_get_v2_spot_wallet_withdrawal_records = privateSpotGetV2SpotWalletWithdrawalRecords = Entry('v2/spot/wallet/withdrawal-records', ['private', 'spot'], '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.20'
|
6
6
|
|
7
7
|
# -----------------------------------------------------------------------------
|
8
8
|
|
@@ -1841,6 +1841,8 @@ class Exchange(BaseExchange):
|
|
1841
1841
|
response = None
|
1842
1842
|
if method == 'fetchAccounts':
|
1843
1843
|
response = await getattr(self, method)(params)
|
1844
|
+
elif method == 'getLeverageTiersPaginated':
|
1845
|
+
response = await getattr(self, method)(symbol, params)
|
1844
1846
|
else:
|
1845
1847
|
response = await getattr(self, method)(symbol, since, maxEntriesPerRequest, params)
|
1846
1848
|
errors = 0
|
ccxt/async_support/bitget.py
CHANGED
@@ -332,6 +332,9 @@ class bitget(Exchange, ImplicitAPI):
|
|
332
332
|
'v2/spot/account/subaccount-assets': 2,
|
333
333
|
'v2/spot/account/bills': 2,
|
334
334
|
'v2/spot/account/transferRecords': 1,
|
335
|
+
'v2/account/funding-assets': 2,
|
336
|
+
'v2/account/bot-assets': 2,
|
337
|
+
'v2/account/all-account-balance': 20,
|
335
338
|
'v2/spot/wallet/deposit-address': 2,
|
336
339
|
'v2/spot/wallet/deposit-records': 2,
|
337
340
|
'v2/spot/wallet/withdrawal-records': 2,
|
ccxt/async_support/bybit.py
CHANGED
@@ -7582,6 +7582,33 @@ class bybit(Exchange, ImplicitAPI):
|
|
7582
7582
|
'datetime': self.iso8601(timestamp),
|
7583
7583
|
})
|
7584
7584
|
|
7585
|
+
async def get_leverage_tiers_paginated(self, symbol: Str = None, params={}):
|
7586
|
+
await self.load_markets()
|
7587
|
+
market = None
|
7588
|
+
if symbol is not None:
|
7589
|
+
market = self.market(symbol)
|
7590
|
+
paginate = False
|
7591
|
+
paginate, params = self.handle_option_and_params(params, 'getLeverageTiersPaginated', 'paginate')
|
7592
|
+
if paginate:
|
7593
|
+
return await self.fetch_paginated_call_cursor('getLeverageTiersPaginated', symbol, None, None, params, 'nextPageCursor', 'cursor', None, 100)
|
7594
|
+
subType = None
|
7595
|
+
subType, params = self.handle_sub_type_and_params('getLeverageTiersPaginated', market, params, 'linear')
|
7596
|
+
request = {
|
7597
|
+
'category': subType,
|
7598
|
+
}
|
7599
|
+
response = await self.publicGetV5MarketRiskLimit(self.extend(request, params))
|
7600
|
+
result = self.add_pagination_cursor_to_result(response)
|
7601
|
+
first = self.safe_dict(result, 0)
|
7602
|
+
total = len(result)
|
7603
|
+
lastIndex = total - 1
|
7604
|
+
last = self.safe_dict(result, lastIndex)
|
7605
|
+
cursorValue = self.safe_string(first, 'nextPageCursor')
|
7606
|
+
last['info'] = {
|
7607
|
+
'nextPageCursor': cursorValue,
|
7608
|
+
}
|
7609
|
+
result[lastIndex] = last
|
7610
|
+
return result
|
7611
|
+
|
7585
7612
|
async def fetch_leverage_tiers(self, symbols: Strings = None, params={}):
|
7586
7613
|
"""
|
7587
7614
|
:see: https://bybit-exchange.github.io/docs/v5/market/risk-limit
|
@@ -7589,22 +7616,18 @@ class bybit(Exchange, ImplicitAPI):
|
|
7589
7616
|
:param str[] [symbols]: a list of unified market symbols
|
7590
7617
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
7591
7618
|
:param str [params.subType]: market subType, ['linear', 'inverse'], default is 'linear'
|
7619
|
+
:param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
7592
7620
|
:returns dict: a dictionary of `leverage tiers structures <https://docs.ccxt.com/#/?id=leverage-tiers-structure>`, indexed by market symbols
|
7593
7621
|
"""
|
7594
7622
|
await self.load_markets()
|
7595
7623
|
market = None
|
7624
|
+
symbol = None
|
7596
7625
|
if symbols is not None:
|
7597
7626
|
market = self.market(symbols[0])
|
7598
7627
|
if market['spot']:
|
7599
7628
|
raise NotSupported(self.id + ' fetchLeverageTiers() is not supported for spot market')
|
7600
|
-
|
7601
|
-
|
7602
|
-
request = {
|
7603
|
-
'category': subType,
|
7604
|
-
}
|
7605
|
-
response = await self.publicGetV5MarketRiskLimit(self.extend(request, params))
|
7606
|
-
result = self.safe_dict(response, 'result', {})
|
7607
|
-
data = self.safe_list(result, 'list', [])
|
7629
|
+
symbol = market['symbol']
|
7630
|
+
data = await self.get_leverage_tiers_paginated(symbol, self.extend({'paginate': True, 'paginationCalls': 20}, params))
|
7608
7631
|
symbols = self.market_symbols(symbols)
|
7609
7632
|
return self.parse_leverage_tiers(data, symbols, 'symbol')
|
7610
7633
|
|
@@ -7630,9 +7653,12 @@ class bybit(Exchange, ImplicitAPI):
|
|
7630
7653
|
for i in range(0, len(keys)):
|
7631
7654
|
marketId = keys[i]
|
7632
7655
|
entry = grouped[marketId]
|
7656
|
+
for j in range(0, len(entry)):
|
7657
|
+
id = self.safe_integer(entry[j], 'id')
|
7658
|
+
entry[j]['id'] = id
|
7633
7659
|
market = self.safe_market(marketId, None, None, 'contract')
|
7634
7660
|
symbol = market['symbol']
|
7635
|
-
tiers[symbol] = self.parse_market_leverage_tiers(entry, market)
|
7661
|
+
tiers[symbol] = self.parse_market_leverage_tiers(self.sort_by(entry, 'id'), market)
|
7636
7662
|
return tiers
|
7637
7663
|
|
7638
7664
|
def parse_market_leverage_tiers(self, info, market: Market = None):
|
ccxt/async_support/coinex.py
CHANGED
@@ -3925,47 +3925,62 @@ class coinex(Exchange, ImplicitAPI):
|
|
3925
3925
|
async def fetch_leverage_tiers(self, symbols: Strings = None, params={}):
|
3926
3926
|
"""
|
3927
3927
|
retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes
|
3928
|
-
:see: https://
|
3928
|
+
:see: https://docs.coinex.com/api/v2/futures/market/http/list-market-position-level
|
3929
3929
|
:param str[]|None symbols: list of unified market symbols
|
3930
3930
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3931
3931
|
:returns dict: a dictionary of `leverage tiers structures <https://docs.ccxt.com/#/?id=leverage-tiers-structure>`, indexed by market symbols
|
3932
3932
|
"""
|
3933
3933
|
await self.load_markets()
|
3934
|
-
|
3934
|
+
request = {}
|
3935
|
+
if symbols is not None:
|
3936
|
+
marketIds = self.market_ids(symbols)
|
3937
|
+
request['market'] = ','.join(marketIds)
|
3938
|
+
response = await self.v2PublicGetFuturesPositionLevel(self.extend(request, params))
|
3935
3939
|
#
|
3936
3940
|
# {
|
3937
3941
|
# "code": 0,
|
3938
|
-
# "data":
|
3939
|
-
#
|
3940
|
-
#
|
3941
|
-
#
|
3942
|
-
#
|
3943
|
-
#
|
3944
|
-
#
|
3945
|
-
#
|
3946
|
-
#
|
3947
|
-
#
|
3948
|
-
#
|
3942
|
+
# "data": [
|
3943
|
+
# {
|
3944
|
+
# "level": [
|
3945
|
+
# {
|
3946
|
+
# "amount": "20001",
|
3947
|
+
# "leverage": "20",
|
3948
|
+
# "maintenance_margin_rate": "0.02",
|
3949
|
+
# "min_initial_margin_rate": "0.05"
|
3950
|
+
# },
|
3951
|
+
# {
|
3952
|
+
# "amount": "50001",
|
3953
|
+
# "leverage": "10",
|
3954
|
+
# "maintenance_margin_rate": "0.04",
|
3955
|
+
# "min_initial_margin_rate": "0.1"
|
3956
|
+
# },
|
3957
|
+
# ],
|
3958
|
+
# "market": "MINAUSDT"
|
3959
|
+
# },
|
3960
|
+
# ],
|
3949
3961
|
# "message": "OK"
|
3950
3962
|
# }
|
3951
3963
|
#
|
3952
|
-
data = self.
|
3953
|
-
return self.parse_leverage_tiers(data, symbols,
|
3964
|
+
data = self.safe_list(response, 'data', [])
|
3965
|
+
return self.parse_leverage_tiers(data, symbols, 'market')
|
3954
3966
|
|
3955
|
-
def parse_market_leverage_tiers(self,
|
3967
|
+
def parse_market_leverage_tiers(self, info, market: Market = None):
|
3956
3968
|
tiers = []
|
3969
|
+
brackets = self.safe_list(info, 'level', [])
|
3957
3970
|
minNotional = 0
|
3958
|
-
for
|
3959
|
-
|
3960
|
-
|
3971
|
+
for i in range(0, len(brackets)):
|
3972
|
+
tier = brackets[i]
|
3973
|
+
marketId = self.safe_string(info, 'market')
|
3974
|
+
market = self.safe_market(marketId, market, None, 'swap')
|
3975
|
+
maxNotional = self.safe_number(tier, 'amount')
|
3961
3976
|
tiers.append({
|
3962
|
-
'tier':
|
3977
|
+
'tier': self.sum(i, 1),
|
3963
3978
|
'currency': market['base'] if market['linear'] else market['quote'],
|
3964
3979
|
'minNotional': minNotional,
|
3965
3980
|
'maxNotional': maxNotional,
|
3966
|
-
'maintenanceMarginRate': self.safe_number(
|
3967
|
-
'maxLeverage': self.safe_integer(
|
3968
|
-
'info':
|
3981
|
+
'maintenanceMarginRate': self.safe_number(tier, 'maintenance_margin_rate'),
|
3982
|
+
'maxLeverage': self.safe_integer(tier, 'leverage'),
|
3983
|
+
'info': tier,
|
3969
3984
|
})
|
3970
3985
|
minNotional = maxNotional
|
3971
3986
|
return tiers
|
ccxt/async_support/phemex.py
CHANGED
@@ -2347,12 +2347,14 @@ class phemex(Exchange, ImplicitAPI):
|
|
2347
2347
|
"""
|
2348
2348
|
create a trade order
|
2349
2349
|
:see: https://github.com/phemex/phemex-api-docs/blob/master/Public-Hedged-Perpetual-API.md#place-order
|
2350
|
+
:see: https://phemex-docs.github.io/#place-order-http-put-prefered-3
|
2350
2351
|
:param str symbol: unified symbol of the market to create an order in
|
2351
2352
|
:param str type: 'market' or 'limit'
|
2352
2353
|
:param str side: 'buy' or 'sell'
|
2353
2354
|
:param float amount: how much of currency you want to trade in units of base currency
|
2354
2355
|
:param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
|
2355
2356
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2357
|
+
:param float [params.trigger]: trigger price for conditional orders
|
2356
2358
|
:param dict [params.takeProfit]: *swap only* *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered(perpetual swap markets only)
|
2357
2359
|
:param float [params.takeProfit.triggerPrice]: take profit trigger price
|
2358
2360
|
:param dict [params.stopLoss]: *swap only* *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered(perpetual swap markets only)
|
@@ -2363,7 +2365,7 @@ class phemex(Exchange, ImplicitAPI):
|
|
2363
2365
|
market = self.market(symbol)
|
2364
2366
|
requestSide = self.capitalize(side)
|
2365
2367
|
type = self.capitalize(type)
|
2366
|
-
reduceOnly = self.
|
2368
|
+
reduceOnly = self.safe_bool(params, 'reduceOnly')
|
2367
2369
|
request = {
|
2368
2370
|
# common
|
2369
2371
|
'symbol': market['id'],
|
@@ -2404,18 +2406,24 @@ class phemex(Exchange, ImplicitAPI):
|
|
2404
2406
|
else:
|
2405
2407
|
request['clOrdID'] = clientOrderId
|
2406
2408
|
params = self.omit(params, ['clOrdID', 'clientOrderId'])
|
2407
|
-
|
2408
|
-
if
|
2409
|
+
triggerPrice = self.safe_string_n(params, ['stopPx', 'stopPrice', 'triggerPrice'])
|
2410
|
+
if triggerPrice is not None:
|
2409
2411
|
if market['settle'] == 'USDT':
|
2410
|
-
request['stopPxRp'] = self.price_to_precision(symbol,
|
2412
|
+
request['stopPxRp'] = self.price_to_precision(symbol, triggerPrice)
|
2411
2413
|
else:
|
2412
|
-
request['stopPxEp'] = self.to_ep(
|
2414
|
+
request['stopPxEp'] = self.to_ep(triggerPrice, market)
|
2413
2415
|
params = self.omit(params, ['stopPx', 'stopPrice', 'stopLoss', 'takeProfit', 'triggerPrice'])
|
2414
2416
|
if market['spot']:
|
2415
2417
|
qtyType = self.safe_value(params, 'qtyType', 'ByBase')
|
2416
2418
|
if (type == 'Market') or (type == 'Stop') or (type == 'MarketIfTouched'):
|
2417
2419
|
if price is not None:
|
2418
2420
|
qtyType = 'ByQuote'
|
2421
|
+
if triggerPrice is not None:
|
2422
|
+
if type == 'Limit':
|
2423
|
+
request['ordType'] = 'StopLimit'
|
2424
|
+
elif type == 'Market':
|
2425
|
+
request['ordType'] = 'Stop'
|
2426
|
+
request['trigger'] = 'ByLastPrice'
|
2419
2427
|
request['qtyType'] = qtyType
|
2420
2428
|
if qtyType == 'ByQuote':
|
2421
2429
|
cost = self.safe_number(params, 'cost')
|
@@ -2446,7 +2454,7 @@ class phemex(Exchange, ImplicitAPI):
|
|
2446
2454
|
request['orderQtyRq'] = amount
|
2447
2455
|
else:
|
2448
2456
|
request['orderQty'] = self.parse_to_int(amount)
|
2449
|
-
if
|
2457
|
+
if triggerPrice is not None:
|
2450
2458
|
triggerType = self.safe_string(params, 'triggerType', 'ByMarkPrice')
|
2451
2459
|
request['triggerType'] = triggerType
|
2452
2460
|
if stopLossDefined or takeProfitDefined:
|
ccxt/base/exchange.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.3.
|
7
|
+
__version__ = '4.3.20'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -5559,6 +5559,8 @@ class Exchange(object):
|
|
5559
5559
|
response = None
|
5560
5560
|
if method == 'fetchAccounts':
|
5561
5561
|
response = getattr(self, method)(params)
|
5562
|
+
elif method == 'getLeverageTiersPaginated':
|
5563
|
+
response = getattr(self, method)(symbol, params)
|
5562
5564
|
else:
|
5563
5565
|
response = getattr(self, method)(symbol, since, maxEntriesPerRequest, params)
|
5564
5566
|
errors = 0
|
ccxt/bitget.py
CHANGED
@@ -331,6 +331,9 @@ class bitget(Exchange, ImplicitAPI):
|
|
331
331
|
'v2/spot/account/subaccount-assets': 2,
|
332
332
|
'v2/spot/account/bills': 2,
|
333
333
|
'v2/spot/account/transferRecords': 1,
|
334
|
+
'v2/account/funding-assets': 2,
|
335
|
+
'v2/account/bot-assets': 2,
|
336
|
+
'v2/account/all-account-balance': 20,
|
334
337
|
'v2/spot/wallet/deposit-address': 2,
|
335
338
|
'v2/spot/wallet/deposit-records': 2,
|
336
339
|
'v2/spot/wallet/withdrawal-records': 2,
|
ccxt/bybit.py
CHANGED
@@ -7581,6 +7581,33 @@ class bybit(Exchange, ImplicitAPI):
|
|
7581
7581
|
'datetime': self.iso8601(timestamp),
|
7582
7582
|
})
|
7583
7583
|
|
7584
|
+
def get_leverage_tiers_paginated(self, symbol: Str = None, params={}):
|
7585
|
+
self.load_markets()
|
7586
|
+
market = None
|
7587
|
+
if symbol is not None:
|
7588
|
+
market = self.market(symbol)
|
7589
|
+
paginate = False
|
7590
|
+
paginate, params = self.handle_option_and_params(params, 'getLeverageTiersPaginated', 'paginate')
|
7591
|
+
if paginate:
|
7592
|
+
return self.fetch_paginated_call_cursor('getLeverageTiersPaginated', symbol, None, None, params, 'nextPageCursor', 'cursor', None, 100)
|
7593
|
+
subType = None
|
7594
|
+
subType, params = self.handle_sub_type_and_params('getLeverageTiersPaginated', market, params, 'linear')
|
7595
|
+
request = {
|
7596
|
+
'category': subType,
|
7597
|
+
}
|
7598
|
+
response = self.publicGetV5MarketRiskLimit(self.extend(request, params))
|
7599
|
+
result = self.add_pagination_cursor_to_result(response)
|
7600
|
+
first = self.safe_dict(result, 0)
|
7601
|
+
total = len(result)
|
7602
|
+
lastIndex = total - 1
|
7603
|
+
last = self.safe_dict(result, lastIndex)
|
7604
|
+
cursorValue = self.safe_string(first, 'nextPageCursor')
|
7605
|
+
last['info'] = {
|
7606
|
+
'nextPageCursor': cursorValue,
|
7607
|
+
}
|
7608
|
+
result[lastIndex] = last
|
7609
|
+
return result
|
7610
|
+
|
7584
7611
|
def fetch_leverage_tiers(self, symbols: Strings = None, params={}):
|
7585
7612
|
"""
|
7586
7613
|
:see: https://bybit-exchange.github.io/docs/v5/market/risk-limit
|
@@ -7588,22 +7615,18 @@ class bybit(Exchange, ImplicitAPI):
|
|
7588
7615
|
:param str[] [symbols]: a list of unified market symbols
|
7589
7616
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
7590
7617
|
:param str [params.subType]: market subType, ['linear', 'inverse'], default is 'linear'
|
7618
|
+
:param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
7591
7619
|
:returns dict: a dictionary of `leverage tiers structures <https://docs.ccxt.com/#/?id=leverage-tiers-structure>`, indexed by market symbols
|
7592
7620
|
"""
|
7593
7621
|
self.load_markets()
|
7594
7622
|
market = None
|
7623
|
+
symbol = None
|
7595
7624
|
if symbols is not None:
|
7596
7625
|
market = self.market(symbols[0])
|
7597
7626
|
if market['spot']:
|
7598
7627
|
raise NotSupported(self.id + ' fetchLeverageTiers() is not supported for spot market')
|
7599
|
-
|
7600
|
-
|
7601
|
-
request = {
|
7602
|
-
'category': subType,
|
7603
|
-
}
|
7604
|
-
response = self.publicGetV5MarketRiskLimit(self.extend(request, params))
|
7605
|
-
result = self.safe_dict(response, 'result', {})
|
7606
|
-
data = self.safe_list(result, 'list', [])
|
7628
|
+
symbol = market['symbol']
|
7629
|
+
data = self.get_leverage_tiers_paginated(symbol, self.extend({'paginate': True, 'paginationCalls': 20}, params))
|
7607
7630
|
symbols = self.market_symbols(symbols)
|
7608
7631
|
return self.parse_leverage_tiers(data, symbols, 'symbol')
|
7609
7632
|
|
@@ -7629,9 +7652,12 @@ class bybit(Exchange, ImplicitAPI):
|
|
7629
7652
|
for i in range(0, len(keys)):
|
7630
7653
|
marketId = keys[i]
|
7631
7654
|
entry = grouped[marketId]
|
7655
|
+
for j in range(0, len(entry)):
|
7656
|
+
id = self.safe_integer(entry[j], 'id')
|
7657
|
+
entry[j]['id'] = id
|
7632
7658
|
market = self.safe_market(marketId, None, None, 'contract')
|
7633
7659
|
symbol = market['symbol']
|
7634
|
-
tiers[symbol] = self.parse_market_leverage_tiers(entry, market)
|
7660
|
+
tiers[symbol] = self.parse_market_leverage_tiers(self.sort_by(entry, 'id'), market)
|
7635
7661
|
return tiers
|
7636
7662
|
|
7637
7663
|
def parse_market_leverage_tiers(self, info, market: Market = None):
|
ccxt/coinex.py
CHANGED
@@ -3924,47 +3924,62 @@ class coinex(Exchange, ImplicitAPI):
|
|
3924
3924
|
def fetch_leverage_tiers(self, symbols: Strings = None, params={}):
|
3925
3925
|
"""
|
3926
3926
|
retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes
|
3927
|
-
:see: https://
|
3927
|
+
:see: https://docs.coinex.com/api/v2/futures/market/http/list-market-position-level
|
3928
3928
|
:param str[]|None symbols: list of unified market symbols
|
3929
3929
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3930
3930
|
:returns dict: a dictionary of `leverage tiers structures <https://docs.ccxt.com/#/?id=leverage-tiers-structure>`, indexed by market symbols
|
3931
3931
|
"""
|
3932
3932
|
self.load_markets()
|
3933
|
-
|
3933
|
+
request = {}
|
3934
|
+
if symbols is not None:
|
3935
|
+
marketIds = self.market_ids(symbols)
|
3936
|
+
request['market'] = ','.join(marketIds)
|
3937
|
+
response = self.v2PublicGetFuturesPositionLevel(self.extend(request, params))
|
3934
3938
|
#
|
3935
3939
|
# {
|
3936
3940
|
# "code": 0,
|
3937
|
-
# "data":
|
3938
|
-
#
|
3939
|
-
#
|
3940
|
-
#
|
3941
|
-
#
|
3942
|
-
#
|
3943
|
-
#
|
3944
|
-
#
|
3945
|
-
#
|
3946
|
-
#
|
3947
|
-
#
|
3941
|
+
# "data": [
|
3942
|
+
# {
|
3943
|
+
# "level": [
|
3944
|
+
# {
|
3945
|
+
# "amount": "20001",
|
3946
|
+
# "leverage": "20",
|
3947
|
+
# "maintenance_margin_rate": "0.02",
|
3948
|
+
# "min_initial_margin_rate": "0.05"
|
3949
|
+
# },
|
3950
|
+
# {
|
3951
|
+
# "amount": "50001",
|
3952
|
+
# "leverage": "10",
|
3953
|
+
# "maintenance_margin_rate": "0.04",
|
3954
|
+
# "min_initial_margin_rate": "0.1"
|
3955
|
+
# },
|
3956
|
+
# ],
|
3957
|
+
# "market": "MINAUSDT"
|
3958
|
+
# },
|
3959
|
+
# ],
|
3948
3960
|
# "message": "OK"
|
3949
3961
|
# }
|
3950
3962
|
#
|
3951
|
-
data = self.
|
3952
|
-
return self.parse_leverage_tiers(data, symbols,
|
3963
|
+
data = self.safe_list(response, 'data', [])
|
3964
|
+
return self.parse_leverage_tiers(data, symbols, 'market')
|
3953
3965
|
|
3954
|
-
def parse_market_leverage_tiers(self,
|
3966
|
+
def parse_market_leverage_tiers(self, info, market: Market = None):
|
3955
3967
|
tiers = []
|
3968
|
+
brackets = self.safe_list(info, 'level', [])
|
3956
3969
|
minNotional = 0
|
3957
|
-
for
|
3958
|
-
|
3959
|
-
|
3970
|
+
for i in range(0, len(brackets)):
|
3971
|
+
tier = brackets[i]
|
3972
|
+
marketId = self.safe_string(info, 'market')
|
3973
|
+
market = self.safe_market(marketId, market, None, 'swap')
|
3974
|
+
maxNotional = self.safe_number(tier, 'amount')
|
3960
3975
|
tiers.append({
|
3961
|
-
'tier':
|
3976
|
+
'tier': self.sum(i, 1),
|
3962
3977
|
'currency': market['base'] if market['linear'] else market['quote'],
|
3963
3978
|
'minNotional': minNotional,
|
3964
3979
|
'maxNotional': maxNotional,
|
3965
|
-
'maintenanceMarginRate': self.safe_number(
|
3966
|
-
'maxLeverage': self.safe_integer(
|
3967
|
-
'info':
|
3980
|
+
'maintenanceMarginRate': self.safe_number(tier, 'maintenance_margin_rate'),
|
3981
|
+
'maxLeverage': self.safe_integer(tier, 'leverage'),
|
3982
|
+
'info': tier,
|
3968
3983
|
})
|
3969
3984
|
minNotional = maxNotional
|
3970
3985
|
return tiers
|
ccxt/phemex.py
CHANGED
@@ -2347,12 +2347,14 @@ class phemex(Exchange, ImplicitAPI):
|
|
2347
2347
|
"""
|
2348
2348
|
create a trade order
|
2349
2349
|
:see: https://github.com/phemex/phemex-api-docs/blob/master/Public-Hedged-Perpetual-API.md#place-order
|
2350
|
+
:see: https://phemex-docs.github.io/#place-order-http-put-prefered-3
|
2350
2351
|
:param str symbol: unified symbol of the market to create an order in
|
2351
2352
|
:param str type: 'market' or 'limit'
|
2352
2353
|
:param str side: 'buy' or 'sell'
|
2353
2354
|
:param float amount: how much of currency you want to trade in units of base currency
|
2354
2355
|
:param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
|
2355
2356
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2357
|
+
:param float [params.trigger]: trigger price for conditional orders
|
2356
2358
|
:param dict [params.takeProfit]: *swap only* *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered(perpetual swap markets only)
|
2357
2359
|
:param float [params.takeProfit.triggerPrice]: take profit trigger price
|
2358
2360
|
:param dict [params.stopLoss]: *swap only* *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered(perpetual swap markets only)
|
@@ -2363,7 +2365,7 @@ class phemex(Exchange, ImplicitAPI):
|
|
2363
2365
|
market = self.market(symbol)
|
2364
2366
|
requestSide = self.capitalize(side)
|
2365
2367
|
type = self.capitalize(type)
|
2366
|
-
reduceOnly = self.
|
2368
|
+
reduceOnly = self.safe_bool(params, 'reduceOnly')
|
2367
2369
|
request = {
|
2368
2370
|
# common
|
2369
2371
|
'symbol': market['id'],
|
@@ -2404,18 +2406,24 @@ class phemex(Exchange, ImplicitAPI):
|
|
2404
2406
|
else:
|
2405
2407
|
request['clOrdID'] = clientOrderId
|
2406
2408
|
params = self.omit(params, ['clOrdID', 'clientOrderId'])
|
2407
|
-
|
2408
|
-
if
|
2409
|
+
triggerPrice = self.safe_string_n(params, ['stopPx', 'stopPrice', 'triggerPrice'])
|
2410
|
+
if triggerPrice is not None:
|
2409
2411
|
if market['settle'] == 'USDT':
|
2410
|
-
request['stopPxRp'] = self.price_to_precision(symbol,
|
2412
|
+
request['stopPxRp'] = self.price_to_precision(symbol, triggerPrice)
|
2411
2413
|
else:
|
2412
|
-
request['stopPxEp'] = self.to_ep(
|
2414
|
+
request['stopPxEp'] = self.to_ep(triggerPrice, market)
|
2413
2415
|
params = self.omit(params, ['stopPx', 'stopPrice', 'stopLoss', 'takeProfit', 'triggerPrice'])
|
2414
2416
|
if market['spot']:
|
2415
2417
|
qtyType = self.safe_value(params, 'qtyType', 'ByBase')
|
2416
2418
|
if (type == 'Market') or (type == 'Stop') or (type == 'MarketIfTouched'):
|
2417
2419
|
if price is not None:
|
2418
2420
|
qtyType = 'ByQuote'
|
2421
|
+
if triggerPrice is not None:
|
2422
|
+
if type == 'Limit':
|
2423
|
+
request['ordType'] = 'StopLimit'
|
2424
|
+
elif type == 'Market':
|
2425
|
+
request['ordType'] = 'Stop'
|
2426
|
+
request['trigger'] = 'ByLastPrice'
|
2419
2427
|
request['qtyType'] = qtyType
|
2420
2428
|
if qtyType == 'ByQuote':
|
2421
2429
|
cost = self.safe_number(params, 'cost')
|
@@ -2446,7 +2454,7 @@ class phemex(Exchange, ImplicitAPI):
|
|
2446
2454
|
request['orderQtyRq'] = amount
|
2447
2455
|
else:
|
2448
2456
|
request['orderQty'] = self.parse_to_int(amount)
|
2449
|
-
if
|
2457
|
+
if triggerPrice is not None:
|
2450
2458
|
triggerType = self.safe_string(params, 'triggerType', 'ByMarkPrice')
|
2451
2459
|
request['triggerType'] = triggerType
|
2452
2460
|
if stopLossDefined or takeProfitDefined:
|
ccxt/pro/__init__.py
CHANGED
ccxt/pro/htx.py
CHANGED
@@ -1772,7 +1772,7 @@ class htx(ccxt.async_support.htx):
|
|
1772
1772
|
# "data": {"user-id": "35930539"}
|
1773
1773
|
# }
|
1774
1774
|
#
|
1775
|
-
promise = client.futures['
|
1775
|
+
promise = client.futures['auth']
|
1776
1776
|
promise.resolve(message)
|
1777
1777
|
|
1778
1778
|
def handle_error_message(self, client: Client, message):
|
@@ -1800,6 +1800,12 @@ class htx(ccxt.async_support.htx):
|
|
1800
1800
|
# 'err-msg': "Non - single account user is not available, please check through the cross and isolated account asset interface",
|
1801
1801
|
# "ts": 1698419490189
|
1802
1802
|
# }
|
1803
|
+
# {
|
1804
|
+
# "action":"req",
|
1805
|
+
# "code":2002,
|
1806
|
+
# "ch":"auth",
|
1807
|
+
# "message":"auth.fail"
|
1808
|
+
# }
|
1803
1809
|
#
|
1804
1810
|
status = self.safe_string(message, 'status')
|
1805
1811
|
if status == 'error':
|
@@ -1810,6 +1816,7 @@ class htx(ccxt.async_support.htx):
|
|
1810
1816
|
errorCode = self.safe_string(message, 'err-code')
|
1811
1817
|
try:
|
1812
1818
|
self.throw_exactly_matched_exception(self.exceptions['ws']['exact'], errorCode, self.json(message))
|
1819
|
+
raise ExchangeError(self.json(message))
|
1813
1820
|
except Exception as e:
|
1814
1821
|
messageHash = self.safe_string(subscription, 'messageHash')
|
1815
1822
|
client.reject(e, messageHash)
|
@@ -1817,11 +1824,12 @@ class htx(ccxt.async_support.htx):
|
|
1817
1824
|
if id in client.subscriptions:
|
1818
1825
|
del client.subscriptions[id]
|
1819
1826
|
return False
|
1820
|
-
code = self.
|
1821
|
-
if code is not None and ((code != 200) and (code != 0)):
|
1827
|
+
code = self.safe_string_2(message, 'code', 'err-code')
|
1828
|
+
if code is not None and ((code != '200') and (code != '0')):
|
1822
1829
|
feedback = self.id + ' ' + self.json(message)
|
1823
1830
|
try:
|
1824
1831
|
self.throw_exactly_matched_exception(self.exceptions['ws']['exact'], code, feedback)
|
1832
|
+
raise ExchangeError(feedback)
|
1825
1833
|
except Exception as e:
|
1826
1834
|
if isinstance(e, AuthenticationError):
|
1827
1835
|
client.reject(e, 'auth')
|
@@ -2137,8 +2145,6 @@ class htx(ccxt.async_support.htx):
|
|
2137
2145
|
'url': url,
|
2138
2146
|
'hostname': hostname,
|
2139
2147
|
}
|
2140
|
-
if type == 'spot':
|
2141
|
-
self.options['ws']['gunzip'] = False
|
2142
2148
|
await self.authenticate(authParams)
|
2143
2149
|
return await self.watch(url, messageHash, self.extend(request, params), channel, extendedSubsription)
|
2144
2150
|
|
@@ -2149,7 +2155,7 @@ class htx(ccxt.async_support.htx):
|
|
2149
2155
|
if url is None or hostname is None or type is None:
|
2150
2156
|
raise ArgumentsRequired(self.id + ' authenticate requires a url, hostname and type argument')
|
2151
2157
|
self.check_required_credentials()
|
2152
|
-
messageHash = '
|
2158
|
+
messageHash = 'auth'
|
2153
2159
|
relativePath = url.replace('wss://' + hostname, '')
|
2154
2160
|
client = self.client(url)
|
2155
2161
|
future = client.future(messageHash)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.3.
|
3
|
+
Version: 4.3.20
|
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
|
@@ -264,13 +264,13 @@ console.log(version, Object.keys(exchanges));
|
|
264
264
|
|
265
265
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
266
266
|
|
267
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
268
|
-
* unpkg: https://unpkg.com/ccxt@4.3.
|
267
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.20/dist/ccxt.browser.js
|
268
|
+
* unpkg: https://unpkg.com/ccxt@4.3.20/dist/ccxt.browser.js
|
269
269
|
|
270
270
|
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.
|
271
271
|
|
272
272
|
```HTML
|
273
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
273
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.20/dist/ccxt.browser.js"></script>
|
274
274
|
```
|
275
275
|
|
276
276
|
Creates a global `ccxt` object:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=xvVPh6kYJGGz6AguCbHgKs_8ehqH9q21FsCrlvY2pvA,15838
|
2
2
|
ccxt/ace.py,sha256=IAbVQ73OhU5xdTLO6dtedqa3bSuZ63Me55Se1zotYUY,41656
|
3
3
|
ccxt/alpaca.py,sha256=NadHil-XkNFteqE7GwzIhKCCRjQ7m0xBQBCUlKxS6Sc,47215
|
4
4
|
ccxt/ascendex.py,sha256=lAGf_eam_1VCVOlbdUyiSZjqwhHLA0aDKippHQBoPNo,151465
|
@@ -17,7 +17,7 @@ ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
|
|
17
17
|
ccxt/bitfinex.py,sha256=vxAmPp9rZKPLb1k8hkWjdv8r8lMx9WmdL5uRs-rZIgY,72278
|
18
18
|
ccxt/bitfinex2.py,sha256=vM8zqvKqufDCcgXjNlUTrJf069f_-ZgLA6kdGFdlhuI,158515
|
19
19
|
ccxt/bitflyer.py,sha256=xY72j19f0YM8CnU0UN_Kv-RteE1NdtMvs_kMxBimCVA,41397
|
20
|
-
ccxt/bitget.py,sha256=
|
20
|
+
ccxt/bitget.py,sha256=TjoVIoIWhz4qGN_nBzk8ftdBzJhrKGoizLtNqCJpTYQ,422511
|
21
21
|
ccxt/bithumb.py,sha256=JPlhrlnPGyvSztPiNVHSDIx5fjVoHvPGsD8vx1yFfF8,45534
|
22
22
|
ccxt/bitmart.py,sha256=kM0SaiFm7LMGSSh-9iHSyexet0t7C9gLnKFfyORscEU,199137
|
23
23
|
ccxt/bitmex.py,sha256=Pr96ieP5UyvsGMTjcUScE7zktX5M0zaaFmyWxFZXGfA,126453
|
@@ -35,13 +35,13 @@ ccxt/btcalpha.py,sha256=gr0o6e__HMwRLaaiLpuMCEHuow4ipjwa5vCY80bgR6w,36701
|
|
35
35
|
ccxt/btcbox.py,sha256=M-aOkxcyv6N3-32u1gfCWAo9_tO98mY9Z6pqNQprtYw,23492
|
36
36
|
ccxt/btcmarkets.py,sha256=hz5nGYJUku1EjoCFGlq3Wfas-H9nInG4gKYw6kPyU74,51484
|
37
37
|
ccxt/btcturk.py,sha256=9RFC0mCWjW_jW8Hgz5cuwb1gaeLf469FOXae4p_KQJM,36657
|
38
|
-
ccxt/bybit.py,sha256=
|
38
|
+
ccxt/bybit.py,sha256=OCRuZpug2qrIFy97l_7xSAxRa0y8Vua1lamHxSo6IwE,412519
|
39
39
|
ccxt/cex.py,sha256=_EDbKQQiIKS5UVztu1wrQq-WQPJxa3GnLelfOkd6O2k,69930
|
40
40
|
ccxt/coinbase.py,sha256=xZUHwSI_MTXGGzIlH1xFzD_G-Pcl4kaoX0BCcdhZjaQ,211999
|
41
41
|
ccxt/coinbaseinternational.py,sha256=wieWUwsLsBYAgNpvnnrKseqAE7aOw__apSP6MQK9u9E,87240
|
42
42
|
ccxt/coinbasepro.py,sha256=SFMlNzdnl_vbE_KqnopNmj-u8As_g2D9qFmrpicNsZw,78671
|
43
43
|
ccxt/coincheck.py,sha256=jg8KHt_XUMPlbG1BYUiSHu9-DDBWdnQwV15P9IzKqbY,35664
|
44
|
-
ccxt/coinex.py,sha256
|
44
|
+
ccxt/coinex.py,sha256=-7mAEIgzv-KooaGvrLuJM9wcIqDQefwswZMuanxcJDU,260410
|
45
45
|
ccxt/coinlist.py,sha256=EU4jtqWALdcLG5X3m2q4xPbQ3-h5-H63Eeb_R3wW-5s,103140
|
46
46
|
ccxt/coinmate.py,sha256=EsXu0mcAkVFwg2VOg47qr6g95a3bDPN2I9AuFQxgkQg,45946
|
47
47
|
ccxt/coinmetro.py,sha256=tZjLAz5XufybO3BU3QGXMrLzinoY4UBhn0JIyXivnys,80700
|
@@ -87,7 +87,7 @@ ccxt/okx.py,sha256=CagRTsREwzicph-SCSZJtweWO9MoTolLFATlZFQK-tM,376894
|
|
87
87
|
ccxt/onetrading.py,sha256=MdzNJW9ViYhpx4S5cmoVu9SCX1nD3oZYfVfnPkhhfwE,88113
|
88
88
|
ccxt/p2b.py,sha256=FYxL36KwtaLIIQ793frJEtqtHyzm39hNK0mJEzAAH0U,54213
|
89
89
|
ccxt/paymium.py,sha256=kuMPTXyqU98kMpKeiSMicD51bSwprXHU0WrgLlAsxGY,24244
|
90
|
-
ccxt/phemex.py,sha256=
|
90
|
+
ccxt/phemex.py,sha256=ocgoZUZjmNRQtg8CjCUoXziqddiGQHS7vh7dMpPX_Fc,219356
|
91
91
|
ccxt/poloniex.py,sha256=WfJ93JWxt5BiIidD2aiC09GSZI-EFhwdeBbJYZ47v1E,101991
|
92
92
|
ccxt/poloniexfutures.py,sha256=3bxdkVWbe_T6r4IvekvM6x-Hd7cSng5SDaDjgPZSk8k,77799
|
93
93
|
ccxt/probit.py,sha256=0WNy6ZsZq9qz7tt_V_h8lxOgvM5-PwNSJSDb3G4RUZ0,76379
|
@@ -122,7 +122,7 @@ ccxt/abstract/bitcoincom.py,sha256=OTBtNu3DQeAqAC_Lbi0NePUs-ZQQllcLrVDI2G04nwQ,1
|
|
122
122
|
ccxt/abstract/bitfinex.py,sha256=OLUXdJEycyN_qrBhPuTTOVlwu3jkqVWenoTmS-W3bOE,7605
|
123
123
|
ccxt/abstract/bitfinex2.py,sha256=82sdkbjDb6D2JePGAa2yYwApDwdeF9Tvlo-hWB2ZUBs,19194
|
124
124
|
ccxt/abstract/bitflyer.py,sha256=3ngG1GJJCNMzYMWoNXCEEgLxmTl7eRf7_JU4M0P2rqo,3576
|
125
|
-
ccxt/abstract/bitget.py,sha256=
|
125
|
+
ccxt/abstract/bitget.py,sha256=TxCeMdFtDvfOtuwe3j4dnDlefjBDhZs4tyDSI0NPpSQ,90336
|
126
126
|
ccxt/abstract/bithumb.py,sha256=GR7QJ6CwTBne59SaGRVj9Rdz_zecG-8imRWX7oe6MoQ,3443
|
127
127
|
ccxt/abstract/bitmart.py,sha256=oZG8LLYf1XOBBRl5xT9fTnUDdUUHEIZjSGZ5BsQ-Ih4,14031
|
128
128
|
ccxt/abstract/bitmex.py,sha256=v15OP-vSO_eotD6KVf1BgKrbPxCPl2eXXYIuzWF1dl4,10774
|
@@ -208,7 +208,7 @@ ccxt/abstract/woofipro.py,sha256=El50vWGAV-4QPIDhgSnd4egfvk246NB6vTC-8h722vs,160
|
|
208
208
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
209
209
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
210
210
|
ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
|
211
|
-
ccxt/async_support/__init__.py,sha256=
|
211
|
+
ccxt/async_support/__init__.py,sha256=FLH-v2mNsOmsPEBaRdXDO0sqmWJ-d8yugz2WmHd0TwQ,15601
|
212
212
|
ccxt/async_support/ace.py,sha256=xVxaTocpMapAIl4ApPApw69Rd-RDuU0_vleJnVt_qhI,41880
|
213
213
|
ccxt/async_support/alpaca.py,sha256=rjD8PdQr1B5e9hvaoTQBKVtWwHLs04e6_-gooXl4eEE,47427
|
214
214
|
ccxt/async_support/ascendex.py,sha256=Wx99HSSvYDOqOUvTkOLOHsq7-El9IATGEpt2lp-6uec,152253
|
@@ -227,7 +227,7 @@ ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85
|
|
227
227
|
ccxt/async_support/bitfinex.py,sha256=oS5QBr6YaR5PKR2Lca0S8mEkz_mBczGfMuAIUKQ6kKU,72718
|
228
228
|
ccxt/async_support/bitfinex2.py,sha256=aXWqz-Ub3HMd-eHyrAZEAV8FYkOX9ej-uBLG30Byn2E,159249
|
229
229
|
ccxt/async_support/bitflyer.py,sha256=KNOVDnBONry4JUJiyPKXQvP_OkxKTluly7ZdtCl-_M0,41705
|
230
|
-
ccxt/async_support/bitget.py,sha256=
|
230
|
+
ccxt/async_support/bitget.py,sha256=39hP1C8oT8BaAObhs7wrV4aTwnFgwr3iM0h2RlTIOng,424135
|
231
231
|
ccxt/async_support/bithumb.py,sha256=gasefOqFJX0Aav2PWMILHS1kr1lcHhJf3OdKaXuVF6M,45764
|
232
232
|
ccxt/async_support/bitmart.py,sha256=wKlX--oFHZI8rWzdrR8jeYvg4dWfuARfSZ67yO9JgFc,200057
|
233
233
|
ccxt/async_support/bitmex.py,sha256=CfW7GjqbJh0dexI53Py1b2u5_EUD5IVVutY96VrRR30,127031
|
@@ -245,13 +245,13 @@ ccxt/async_support/btcalpha.py,sha256=U51IdY13evFeA9q6tdT-Br83yPJ5quVgF_EHho_fDM
|
|
245
245
|
ccxt/async_support/btcbox.py,sha256=byG2YtL1rhzH5_vuDaKCLinCQxOppRwvgqZRQYEZCxM,23686
|
246
246
|
ccxt/async_support/btcmarkets.py,sha256=vQQN9ITp68EYWjY8UiXFNDvL9gXUhNIZjlfZ3i7PkbA,51834
|
247
247
|
ccxt/async_support/btcturk.py,sha256=EMrvQcRRGtO9Hu3StUvalUiaTgueI7UM86IYS0Dgj6I,36875
|
248
|
-
ccxt/async_support/bybit.py,sha256=
|
248
|
+
ccxt/async_support/bybit.py,sha256=4wjZKMH6UthYB1qIeA0gAcoaHk71fEnQii8xPIM3-VI,414323
|
249
249
|
ccxt/async_support/cex.py,sha256=MMVgApSlmqtfnEJHdsL4WXd7_5uFri-F0QjSWOsyoEU,70280
|
250
250
|
ccxt/async_support/coinbase.py,sha256=vxeIN4tbnXWt6ihGSRhdwVmKtwmyI67Rk-nwoTGFUD0,213105
|
251
251
|
ccxt/async_support/coinbaseinternational.py,sha256=fuU-h5UpO_nVs1j8KA7oGsQlP0kQefuPycZrc8ph6OQ,87794
|
252
252
|
ccxt/async_support/coinbasepro.py,sha256=GnzjqgXso5wqAVZbkMcMjcpQ1BJ7um3BtBbhrM_X0rI,79177
|
253
253
|
ccxt/async_support/coincheck.py,sha256=ThRQX8E3NZrGc9Z__UIb7p0AtHgnq_DBhe9GzE9SlaQ,35870
|
254
|
-
ccxt/async_support/coinex.py,sha256=
|
254
|
+
ccxt/async_support/coinex.py,sha256=Dw4z9vwS-75nIOuD2VZaU8qlT6Xs0DEujKYuJy5JDCQ,261704
|
255
255
|
ccxt/async_support/coinlist.py,sha256=MKLhRyaw0DHkpRfR-Vj9NS0SwCpYUx8nOxZJ26swIMY,103628
|
256
256
|
ccxt/async_support/coinmate.py,sha256=lc8p0aQXu-oSf2whiqvm0QoBhDVx9wf50CcFeucdXcY,46212
|
257
257
|
ccxt/async_support/coinmetro.py,sha256=NLqNdcJ_zXcNqaxqkrloL9PqnogbQ6OzA5e_Gl4ACtk,81020
|
@@ -297,7 +297,7 @@ ccxt/async_support/okx.py,sha256=iPJmMdxXbHO6Qv-uMFNMAgJt2rX-PB33Y5HWCrU1JHo,378
|
|
297
297
|
ccxt/async_support/onetrading.py,sha256=Px7iH4HjaGmAVMNjLwZdD8RJwspUleMdABCGQvmoNbA,88565
|
298
298
|
ccxt/async_support/p2b.py,sha256=KrNc3sLbHQCxbgShyqWytuQVaQfKa42Q6_HcUYNUaKI,54455
|
299
299
|
ccxt/async_support/paymium.py,sha256=_YfQn6Xwy0k9VMVOqmDGCfI8FhN_WKmyE7Eo9jR5u9I,24432
|
300
|
-
ccxt/async_support/phemex.py,sha256
|
300
|
+
ccxt/async_support/phemex.py,sha256=-1fIw7CsP5OvF-QCZnwYC5o7GFS3Xeza7dfIVs2xRkg,220168
|
301
301
|
ccxt/async_support/poloniex.py,sha256=tGl5AoEd2P0K0Af6twI2uwcNV81WDe2PCN4VAPkb3nQ,102539
|
302
302
|
ccxt/async_support/poloniexfutures.py,sha256=VL4oNy3YJXw-UsiixEsU7wzw4JTpICXu6GdFdpcAKrw,78185
|
303
303
|
ccxt/async_support/probit.py,sha256=oRpeioq1soJtild3vH6QE7ufX1RLfyQUBCsmyQW-j3w,76771
|
@@ -314,7 +314,7 @@ ccxt/async_support/yobit.py,sha256=kvMIVVjf8XxE7cKt51iHtqH7zgmFKc5ZVhk1dKDtlxE,5
|
|
314
314
|
ccxt/async_support/zaif.py,sha256=lzrmIYPlNJquYkK-fq9DjqS8EfiAtofXnPcTMf3XOMM,28161
|
315
315
|
ccxt/async_support/zonda.py,sha256=bS_Oq8FVjbLxnxFVVg-_5ZlNS0CH9QxSUVKL91IR9rc,80912
|
316
316
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
317
|
-
ccxt/async_support/base/exchange.py,sha256=
|
317
|
+
ccxt/async_support/base/exchange.py,sha256=CagmEBQISMvrDQ7DV4hDaCF2uLSRm7aUSaFxJZR-fq0,108636
|
318
318
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
319
319
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
320
320
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
|
@@ -328,10 +328,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
|
|
328
328
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
329
329
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
330
330
|
ccxt/base/errors.py,sha256=FGdyULeNCNcl52gA_CNhe2dZmat9GJGkTdlIyDXAF_A,4213
|
331
|
-
ccxt/base/exchange.py,sha256=
|
331
|
+
ccxt/base/exchange.py,sha256=_VrF3CssEBRD-OJ3UeMP2yAGCEr5sFVTkCjbXKHJBs0,278166
|
332
332
|
ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
|
333
333
|
ccxt/base/types.py,sha256=3hBdiD2EO7W-pwmBrDeDYMEdFGcnT0QqQZa3l8ywTVM,9027
|
334
|
-
ccxt/pro/__init__.py,sha256=
|
334
|
+
ccxt/pro/__init__.py,sha256=GZ0d9pYzkdvH7XOZGD9-O9bloc1idCpdQSJU9z1jtEQ,7102
|
335
335
|
ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
|
336
336
|
ccxt/pro/ascendex.py,sha256=fCM3EujSfJvtvffqI56UAstTtwjXFIocwukm15cF8rE,35432
|
337
337
|
ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
|
@@ -370,7 +370,7 @@ ccxt/pro/gateio.py,sha256=_uBWXYQbmsHRivKnZOJDmxJ9tWLO_0HAxmOjAEUy9nE,391
|
|
370
370
|
ccxt/pro/gemini.py,sha256=a8yZNyLnv1VI6FPhSK-d8MzG7wEX60wL8uUJrqeWmOI,36641
|
371
371
|
ccxt/pro/hitbtc.py,sha256=JLlqcR0h6yz02FPZ2zT_hC1QEyvMwtkej4jnaDp7XE8,56284
|
372
372
|
ccxt/pro/hollaex.py,sha256=q233J-P83OZj1DN_WRRgoq2gfur5AjlW2krlkKUoQTs,21957
|
373
|
-
ccxt/pro/htx.py,sha256=
|
373
|
+
ccxt/pro/htx.py,sha256=R8vmY3fXky7p-wGUw7EPCA15Y9yYGu1pmbb9MI7aEt0,96052
|
374
374
|
ccxt/pro/huobi.py,sha256=rKZVgYqEr-MmZzTqAk4FoJt8qWFjCi_FY0ci_mWZrL0,385
|
375
375
|
ccxt/pro/huobijp.py,sha256=fcC66ECLwrR9LN_AYZZltoE_w9EltT5DcXimPOHKJk0,23174
|
376
376
|
ccxt/pro/hyperliquid.py,sha256=V6ev_19ttD0jmlaejvJwTl429_K1eyt0O3mUusQcrgk,20791
|
@@ -531,7 +531,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
|
|
531
531
|
ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
|
532
532
|
ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
|
533
533
|
ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
|
534
|
-
ccxt-4.3.
|
535
|
-
ccxt-4.3.
|
536
|
-
ccxt-4.3.
|
537
|
-
ccxt-4.3.
|
534
|
+
ccxt-4.3.20.dist-info/METADATA,sha256=wtc6qHer3HgDEF3aT7iFUTnu697rL3b2CtWp6GRO-CU,112795
|
535
|
+
ccxt-4.3.20.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
|
536
|
+
ccxt-4.3.20.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
537
|
+
ccxt-4.3.20.dist-info/RECORD,,
|
File without changes
|
File without changes
|