ccxt 4.0.36__py2.py3-none-any.whl → 4.0.38__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 CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.0.36'
25
+ __version__ = '4.0.38'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
ccxt/abstract/binance.py CHANGED
@@ -298,8 +298,9 @@ class ImplicitAPI:
298
298
  sapi_post_loan_vip_repay = sapiPostLoanVipRepay = Entry('loan/vip/repay', 'sapi', 'POST', {'cost': 40})
299
299
  sapi_post_convert_getquote = sapiPostConvertGetQuote = Entry('convert/getQuote', 'sapi', 'POST', {'cost': 20.001})
300
300
  sapi_post_convert_acceptquote = sapiPostConvertAcceptQuote = Entry('convert/acceptQuote', 'sapi', 'POST', {'cost': 3.3335})
301
- sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 0.6667})
302
- sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 0.6667})
301
+ sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 150})
302
+ sapi_post_portfolio_asset_collection = sapiPostPortfolioAssetCollection = Entry('portfolio/asset-collection', 'sapi', 'POST', {'cost': 6})
303
+ sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 150})
303
304
  sapi_post_portfolio_repay_futures_switch = sapiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'sapi', 'POST', {'cost': 150})
304
305
  sapi_post_portfolio_repay_futures_negative_balance = sapiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'sapi', 'POST', {'cost': 150})
305
306
  sapi_post_lending_auto_invest_plan_add = sapiPostLendingAutoInvestPlanAdd = Entry('lending/auto-invest/plan/add', 'sapi', 'POST', {'cost': 0.1})
@@ -492,6 +493,8 @@ class ImplicitAPI:
492
493
  eapiprivate_get_usertrades = eapiPrivateGetUserTrades = Entry('userTrades', 'eapiPrivate', 'GET', {'cost': 5})
493
494
  eapiprivate_get_exerciserecord = eapiPrivateGetExerciseRecord = Entry('exerciseRecord', 'eapiPrivate', 'GET', {'cost': 5})
494
495
  eapiprivate_get_bill = eapiPrivateGetBill = Entry('bill', 'eapiPrivate', 'GET', {'cost': 1})
496
+ eapiprivate_get_income_asyn = eapiPrivateGetIncomeAsyn = Entry('income/asyn', 'eapiPrivate', 'GET', {'cost': 5})
497
+ eapiprivate_get_income_asyn_id = eapiPrivateGetIncomeAsynId = Entry('income/asyn/id', 'eapiPrivate', 'GET', {'cost': 5})
495
498
  eapiprivate_get_marginaccount = eapiPrivateGetMarginAccount = Entry('marginAccount', 'eapiPrivate', 'GET', {'cost': 3})
496
499
  eapiprivate_get_mmp = eapiPrivateGetMmp = Entry('mmp', 'eapiPrivate', 'GET', {'cost': 1})
497
500
  eapiprivate_get_countdowncancelall = eapiPrivateGetCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'GET', {'cost': 1})
@@ -298,8 +298,9 @@ class ImplicitAPI:
298
298
  sapi_post_loan_vip_repay = sapiPostLoanVipRepay = Entry('loan/vip/repay', 'sapi', 'POST', {'cost': 40})
299
299
  sapi_post_convert_getquote = sapiPostConvertGetQuote = Entry('convert/getQuote', 'sapi', 'POST', {'cost': 20.001})
300
300
  sapi_post_convert_acceptquote = sapiPostConvertAcceptQuote = Entry('convert/acceptQuote', 'sapi', 'POST', {'cost': 3.3335})
301
- sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 0.6667})
302
- sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 0.6667})
301
+ sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 150})
302
+ sapi_post_portfolio_asset_collection = sapiPostPortfolioAssetCollection = Entry('portfolio/asset-collection', 'sapi', 'POST', {'cost': 6})
303
+ sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 150})
303
304
  sapi_post_portfolio_repay_futures_switch = sapiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'sapi', 'POST', {'cost': 150})
304
305
  sapi_post_portfolio_repay_futures_negative_balance = sapiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'sapi', 'POST', {'cost': 150})
305
306
  sapi_post_lending_auto_invest_plan_add = sapiPostLendingAutoInvestPlanAdd = Entry('lending/auto-invest/plan/add', 'sapi', 'POST', {'cost': 0.1})
@@ -492,6 +493,8 @@ class ImplicitAPI:
492
493
  eapiprivate_get_usertrades = eapiPrivateGetUserTrades = Entry('userTrades', 'eapiPrivate', 'GET', {'cost': 5})
493
494
  eapiprivate_get_exerciserecord = eapiPrivateGetExerciseRecord = Entry('exerciseRecord', 'eapiPrivate', 'GET', {'cost': 5})
494
495
  eapiprivate_get_bill = eapiPrivateGetBill = Entry('bill', 'eapiPrivate', 'GET', {'cost': 1})
496
+ eapiprivate_get_income_asyn = eapiPrivateGetIncomeAsyn = Entry('income/asyn', 'eapiPrivate', 'GET', {'cost': 5})
497
+ eapiprivate_get_income_asyn_id = eapiPrivateGetIncomeAsynId = Entry('income/asyn/id', 'eapiPrivate', 'GET', {'cost': 5})
495
498
  eapiprivate_get_marginaccount = eapiPrivateGetMarginAccount = Entry('marginAccount', 'eapiPrivate', 'GET', {'cost': 3})
496
499
  eapiprivate_get_mmp = eapiPrivateGetMmp = Entry('mmp', 'eapiPrivate', 'GET', {'cost': 1})
497
500
  eapiprivate_get_countdowncancelall = eapiPrivateGetCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'GET', {'cost': 1})
@@ -298,8 +298,9 @@ class ImplicitAPI:
298
298
  sapi_post_loan_vip_repay = sapiPostLoanVipRepay = Entry('loan/vip/repay', 'sapi', 'POST', {'cost': 40})
299
299
  sapi_post_convert_getquote = sapiPostConvertGetQuote = Entry('convert/getQuote', 'sapi', 'POST', {'cost': 20.001})
300
300
  sapi_post_convert_acceptquote = sapiPostConvertAcceptQuote = Entry('convert/acceptQuote', 'sapi', 'POST', {'cost': 3.3335})
301
- sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 0.6667})
302
- sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 0.6667})
301
+ sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 150})
302
+ sapi_post_portfolio_asset_collection = sapiPostPortfolioAssetCollection = Entry('portfolio/asset-collection', 'sapi', 'POST', {'cost': 6})
303
+ sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 150})
303
304
  sapi_post_portfolio_repay_futures_switch = sapiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'sapi', 'POST', {'cost': 150})
304
305
  sapi_post_portfolio_repay_futures_negative_balance = sapiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'sapi', 'POST', {'cost': 150})
305
306
  sapi_post_lending_auto_invest_plan_add = sapiPostLendingAutoInvestPlanAdd = Entry('lending/auto-invest/plan/add', 'sapi', 'POST', {'cost': 0.1})
@@ -492,6 +493,8 @@ class ImplicitAPI:
492
493
  eapiprivate_get_usertrades = eapiPrivateGetUserTrades = Entry('userTrades', 'eapiPrivate', 'GET', {'cost': 5})
493
494
  eapiprivate_get_exerciserecord = eapiPrivateGetExerciseRecord = Entry('exerciseRecord', 'eapiPrivate', 'GET', {'cost': 5})
494
495
  eapiprivate_get_bill = eapiPrivateGetBill = Entry('bill', 'eapiPrivate', 'GET', {'cost': 1})
496
+ eapiprivate_get_income_asyn = eapiPrivateGetIncomeAsyn = Entry('income/asyn', 'eapiPrivate', 'GET', {'cost': 5})
497
+ eapiprivate_get_income_asyn_id = eapiPrivateGetIncomeAsynId = Entry('income/asyn/id', 'eapiPrivate', 'GET', {'cost': 5})
495
498
  eapiprivate_get_marginaccount = eapiPrivateGetMarginAccount = Entry('marginAccount', 'eapiPrivate', 'GET', {'cost': 3})
496
499
  eapiprivate_get_mmp = eapiPrivateGetMmp = Entry('mmp', 'eapiPrivate', 'GET', {'cost': 1})
497
500
  eapiprivate_get_countdowncancelall = eapiPrivateGetCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'GET', {'cost': 1})
@@ -298,8 +298,9 @@ class ImplicitAPI:
298
298
  sapi_post_loan_vip_repay = sapiPostLoanVipRepay = Entry('loan/vip/repay', 'sapi', 'POST', {'cost': 40})
299
299
  sapi_post_convert_getquote = sapiPostConvertGetQuote = Entry('convert/getQuote', 'sapi', 'POST', {'cost': 20.001})
300
300
  sapi_post_convert_acceptquote = sapiPostConvertAcceptQuote = Entry('convert/acceptQuote', 'sapi', 'POST', {'cost': 3.3335})
301
- sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 0.6667})
302
- sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 0.6667})
301
+ sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 150})
302
+ sapi_post_portfolio_asset_collection = sapiPostPortfolioAssetCollection = Entry('portfolio/asset-collection', 'sapi', 'POST', {'cost': 6})
303
+ sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 150})
303
304
  sapi_post_portfolio_repay_futures_switch = sapiPostPortfolioRepayFuturesSwitch = Entry('portfolio/repay-futures-switch', 'sapi', 'POST', {'cost': 150})
304
305
  sapi_post_portfolio_repay_futures_negative_balance = sapiPostPortfolioRepayFuturesNegativeBalance = Entry('portfolio/repay-futures-negative-balance', 'sapi', 'POST', {'cost': 150})
305
306
  sapi_post_lending_auto_invest_plan_add = sapiPostLendingAutoInvestPlanAdd = Entry('lending/auto-invest/plan/add', 'sapi', 'POST', {'cost': 0.1})
@@ -492,6 +493,8 @@ class ImplicitAPI:
492
493
  eapiprivate_get_usertrades = eapiPrivateGetUserTrades = Entry('userTrades', 'eapiPrivate', 'GET', {'cost': 5})
493
494
  eapiprivate_get_exerciserecord = eapiPrivateGetExerciseRecord = Entry('exerciseRecord', 'eapiPrivate', 'GET', {'cost': 5})
494
495
  eapiprivate_get_bill = eapiPrivateGetBill = Entry('bill', 'eapiPrivate', 'GET', {'cost': 1})
496
+ eapiprivate_get_income_asyn = eapiPrivateGetIncomeAsyn = Entry('income/asyn', 'eapiPrivate', 'GET', {'cost': 5})
497
+ eapiprivate_get_income_asyn_id = eapiPrivateGetIncomeAsynId = Entry('income/asyn/id', 'eapiPrivate', 'GET', {'cost': 5})
495
498
  eapiprivate_get_marginaccount = eapiPrivateGetMarginAccount = Entry('marginAccount', 'eapiPrivate', 'GET', {'cost': 3})
496
499
  eapiprivate_get_mmp = eapiPrivateGetMmp = Entry('mmp', 'eapiPrivate', 'GET', {'cost': 1})
497
500
  eapiprivate_get_countdowncancelall = eapiPrivateGetCountdownCancelAll = Entry('countdownCancelAll', 'eapiPrivate', 'GET', {'cost': 1})
ccxt/abstract/gate.py CHANGED
@@ -136,6 +136,8 @@ class ImplicitAPI:
136
136
  private_margin_patch_loans_loan_id = privateMarginPatchLoansLoanId = Entry('loans/{loan_id}', ['private', 'margin'], 'PATCH', {'cost': 1.5})
137
137
  private_margin_patch_loan_records_loan_record_id = privateMarginPatchLoanRecordsLoanRecordId = Entry('loan_records/{loan_record_id}', ['private', 'margin'], 'PATCH', {'cost': 1.5})
138
138
  private_margin_delete_loans_loan_id = privateMarginDeleteLoansLoanId = Entry('loans/{loan_id}', ['private', 'margin'], 'DELETE', {'cost': 1.5})
139
+ private_flash_swap_get_currencies = privateFlash_swapGetCurrencies = Entry('currencies', ['private', 'flash_swap'], 'GET', {'cost': 1.5})
140
+ private_flash_swap_get_currency_pairs = privateFlash_swapGetCurrencyPairs = Entry('currency_pairs', ['private', 'flash_swap'], 'GET', {'cost': 1.5})
139
141
  private_flash_swap_get_orders = privateFlash_swapGetOrders = Entry('orders', ['private', 'flash_swap'], 'GET', {'cost': 1.5})
140
142
  private_flash_swap_get_orders_order_id = privateFlash_swapGetOrdersOrderId = Entry('orders/{order_id}', ['private', 'flash_swap'], 'GET', {'cost': 1.5})
141
143
  private_flash_swap_post_orders = privateFlash_swapPostOrders = Entry('orders', ['private', 'flash_swap'], 'POST', {'cost': 1.5})
ccxt/abstract/gateio.py CHANGED
@@ -136,6 +136,8 @@ class ImplicitAPI:
136
136
  private_margin_patch_loans_loan_id = privateMarginPatchLoansLoanId = Entry('loans/{loan_id}', ['private', 'margin'], 'PATCH', {'cost': 1.5})
137
137
  private_margin_patch_loan_records_loan_record_id = privateMarginPatchLoanRecordsLoanRecordId = Entry('loan_records/{loan_record_id}', ['private', 'margin'], 'PATCH', {'cost': 1.5})
138
138
  private_margin_delete_loans_loan_id = privateMarginDeleteLoansLoanId = Entry('loans/{loan_id}', ['private', 'margin'], 'DELETE', {'cost': 1.5})
139
+ private_flash_swap_get_currencies = privateFlash_swapGetCurrencies = Entry('currencies', ['private', 'flash_swap'], 'GET', {'cost': 1.5})
140
+ private_flash_swap_get_currency_pairs = privateFlash_swapGetCurrencyPairs = Entry('currency_pairs', ['private', 'flash_swap'], 'GET', {'cost': 1.5})
139
141
  private_flash_swap_get_orders = privateFlash_swapGetOrders = Entry('orders', ['private', 'flash_swap'], 'GET', {'cost': 1.5})
140
142
  private_flash_swap_get_orders_order_id = privateFlash_swapGetOrdersOrderId = Entry('orders/{order_id}', ['private', 'flash_swap'], 'GET', {'cost': 1.5})
141
143
  private_flash_swap_post_orders = privateFlash_swapPostOrders = Entry('orders', ['private', 'flash_swap'], 'POST', {'cost': 1.5})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.36'
7
+ __version__ = '4.0.38'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.0.36'
5
+ __version__ = '4.0.38'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -599,7 +599,7 @@ class Exchange(BaseExchange):
599
599
  value = self.safe_value(entry, key)
600
600
  if value and (value >= since):
601
601
  result.append(entry)
602
- if tail:
602
+ if tail and limit is not None:
603
603
  return self.arraySlice(result, -limit)
604
604
  return self.filter_by_limit(result, limit, key)
605
605
 
@@ -620,7 +620,7 @@ class Exchange(BaseExchange):
620
620
  secondCondition = entryKeyGESince if sinceIsDefined else True
621
621
  if firstCondition and secondCondition:
622
622
  result.append(entry)
623
- if tail:
623
+ if tail and limit is not None:
624
624
  return self.arraySlice(result, -limit)
625
625
  return self.filter_by_limit(result, limit, key)
626
626
 
@@ -542,8 +542,9 @@ class binance(Exchange, ImplicitAPI):
542
542
  'loan/vip/repay': 40, # Weight(UID): 6000 => cost = 0.006667 * 6000 = 40
543
543
  'convert/getQuote': 20.001,
544
544
  'convert/acceptQuote': 3.3335,
545
- 'portfolio/auto-collection': 0.6667, # Weight(UID): 100 => cost = 0.006667 * 100 = 0.6667
546
- 'portfolio/bnb-transfer': 0.6667, # Weight(UID): 100 => cost = 0.006667 * 100 = 0.6667
545
+ 'portfolio/auto-collection': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
546
+ 'portfolio/asset-collection': 6, # Weight(IP): 60 => cost = 0.1 * 60 = 6
547
+ 'portfolio/bnb-transfer': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
547
548
  'portfolio/repay-futures-switch': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
548
549
  'portfolio/repay-futures-negative-balance': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
549
550
  'lending/auto-invest/plan/add': 0.1, # Weight(IP): 1 => cost = 0.1 * 1 = 0.1
@@ -818,6 +819,8 @@ class binance(Exchange, ImplicitAPI):
818
819
  'userTrades': 5,
819
820
  'exerciseRecord': 5,
820
821
  'bill': 1,
822
+ 'income/asyn': 5,
823
+ 'income/asyn/id': 5,
821
824
  'marginAccount': 3,
822
825
  'mmp': 1,
823
826
  'countdownCancelAll': 1,
@@ -3070,30 +3070,30 @@ class coinex(Exchange, ImplicitAPI):
3070
3070
 
3071
3071
  async def set_leverage(self, leverage, symbol: Optional[str] = None, params={}):
3072
3072
  """
3073
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http014_adjust_leverage
3073
3074
  set the level of leverage for a market
3074
3075
  :param float leverage: the rate of leverage
3075
3076
  :param str symbol: unified market symbol
3076
3077
  :param dict [params]: extra parameters specific to the coinex api endpoint
3078
+ :param str [params.marginMode]: 'cross' or 'isolated'(default is 'cross')
3077
3079
  :returns dict: response from the exchange
3078
3080
  """
3079
- if symbol is None:
3080
- raise ArgumentsRequired(self.id + ' setLeverage() requires a symbol argument')
3081
+ self.check_required_symbol('setLeverage', symbol)
3081
3082
  await self.load_markets()
3082
- defaultMarginMode = self.safe_string_2(self.options, 'defaultMarginMode', 'marginMode')
3083
- defaultPositionType = None
3084
- if defaultMarginMode == 'isolated':
3085
- defaultPositionType = 1
3086
- elif defaultMarginMode == 'cross':
3087
- defaultPositionType = 2
3088
- positionType = self.safe_integer(params, 'position_type', defaultPositionType)
3089
- if positionType is None:
3090
- raise ArgumentsRequired(self.id + ' setLeverage() requires a position_type parameter that will transfer margin to the specified trading pair')
3091
3083
  market = self.market(symbol)
3092
- maxLeverage = self.safe_integer(market['limits']['leverage'], 'max', 100)
3093
- if market['type'] != 'swap':
3084
+ if not market['swap']:
3094
3085
  raise BadSymbol(self.id + ' setLeverage() supports swap contracts only')
3095
- if (leverage < 3) or (leverage > maxLeverage):
3096
- raise BadRequest(self.id + ' setLeverage() leverage should be between 3 and ' + str(maxLeverage) + ' for ' + symbol)
3086
+ marginMode = None
3087
+ marginMode, params = self.handle_margin_mode_and_params('setLeverage', params, 'cross')
3088
+ positionType = None
3089
+ if marginMode == 'isolated':
3090
+ positionType = 1
3091
+ elif marginMode == 'cross':
3092
+ positionType = 2
3093
+ minLeverage = self.safe_integer(market['limits']['leverage'], 'min', 1)
3094
+ maxLeverage = self.safe_integer(market['limits']['leverage'], 'max', 100)
3095
+ if (leverage < minLeverage) or (leverage > maxLeverage):
3096
+ raise BadRequest(self.id + ' setLeverage() leverage should be between ' + str(minLeverage) + ' and ' + str(maxLeverage) + ' for ' + symbol)
3097
3097
  request = {
3098
3098
  'market': market['id'],
3099
3099
  'leverage': str(leverage),
@@ -373,6 +373,8 @@ class gate(Exchange, ImplicitAPI):
373
373
  },
374
374
  'flash_swap': {
375
375
  'get': {
376
+ 'currencies': 1.5,
377
+ 'currency_pairs': 1.5,
376
378
  'orders': 1.5,
377
379
  'orders/{order_id}': 1.5,
378
380
  },
@@ -783,6 +785,7 @@ class gate(Exchange, ImplicitAPI):
783
785
  'REPAY_TOO_MUCH': ExchangeError,
784
786
  'TOO_MANY_CURRENCY_PAIRS': InvalidOrder,
785
787
  'TOO_MANY_ORDERS': InvalidOrder,
788
+ 'TOO_MANY_REQUESTS': RateLimitExceeded,
786
789
  'MIXED_ACCOUNT_TYPE': InvalidOrder,
787
790
  'AUTO_BORROW_TOO_MUCH': ExchangeError,
788
791
  'TRADE_RESTRICTED': InsufficientFunds,
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.36'
7
+ __version__ = '4.0.38'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -1772,7 +1772,7 @@ class Exchange(object):
1772
1772
  value = self.safe_value(entry, key)
1773
1773
  if value and (value >= since):
1774
1774
  result.append(entry)
1775
- if tail:
1775
+ if tail and limit is not None:
1776
1776
  return self.arraySlice(result, -limit)
1777
1777
  return self.filter_by_limit(result, limit, key)
1778
1778
 
@@ -1793,7 +1793,7 @@ class Exchange(object):
1793
1793
  secondCondition = entryKeyGESince if sinceIsDefined else True
1794
1794
  if firstCondition and secondCondition:
1795
1795
  result.append(entry)
1796
- if tail:
1796
+ if tail and limit is not None:
1797
1797
  return self.arraySlice(result, -limit)
1798
1798
  return self.filter_by_limit(result, limit, key)
1799
1799
 
ccxt/binance.py CHANGED
@@ -541,8 +541,9 @@ class binance(Exchange, ImplicitAPI):
541
541
  'loan/vip/repay': 40, # Weight(UID): 6000 => cost = 0.006667 * 6000 = 40
542
542
  'convert/getQuote': 20.001,
543
543
  'convert/acceptQuote': 3.3335,
544
- 'portfolio/auto-collection': 0.6667, # Weight(UID): 100 => cost = 0.006667 * 100 = 0.6667
545
- 'portfolio/bnb-transfer': 0.6667, # Weight(UID): 100 => cost = 0.006667 * 100 = 0.6667
544
+ 'portfolio/auto-collection': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
545
+ 'portfolio/asset-collection': 6, # Weight(IP): 60 => cost = 0.1 * 60 = 6
546
+ 'portfolio/bnb-transfer': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
546
547
  'portfolio/repay-futures-switch': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
547
548
  'portfolio/repay-futures-negative-balance': 150, # Weight(IP): 1500 => cost = 0.1 * 1500 = 150
548
549
  'lending/auto-invest/plan/add': 0.1, # Weight(IP): 1 => cost = 0.1 * 1 = 0.1
@@ -817,6 +818,8 @@ class binance(Exchange, ImplicitAPI):
817
818
  'userTrades': 5,
818
819
  'exerciseRecord': 5,
819
820
  'bill': 1,
821
+ 'income/asyn': 5,
822
+ 'income/asyn/id': 5,
820
823
  'marginAccount': 3,
821
824
  'mmp': 1,
822
825
  'countdownCancelAll': 1,
ccxt/coinex.py CHANGED
@@ -3069,30 +3069,30 @@ class coinex(Exchange, ImplicitAPI):
3069
3069
 
3070
3070
  def set_leverage(self, leverage, symbol: Optional[str] = None, params={}):
3071
3071
  """
3072
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http014_adjust_leverage
3072
3073
  set the level of leverage for a market
3073
3074
  :param float leverage: the rate of leverage
3074
3075
  :param str symbol: unified market symbol
3075
3076
  :param dict [params]: extra parameters specific to the coinex api endpoint
3077
+ :param str [params.marginMode]: 'cross' or 'isolated'(default is 'cross')
3076
3078
  :returns dict: response from the exchange
3077
3079
  """
3078
- if symbol is None:
3079
- raise ArgumentsRequired(self.id + ' setLeverage() requires a symbol argument')
3080
+ self.check_required_symbol('setLeverage', symbol)
3080
3081
  self.load_markets()
3081
- defaultMarginMode = self.safe_string_2(self.options, 'defaultMarginMode', 'marginMode')
3082
- defaultPositionType = None
3083
- if defaultMarginMode == 'isolated':
3084
- defaultPositionType = 1
3085
- elif defaultMarginMode == 'cross':
3086
- defaultPositionType = 2
3087
- positionType = self.safe_integer(params, 'position_type', defaultPositionType)
3088
- if positionType is None:
3089
- raise ArgumentsRequired(self.id + ' setLeverage() requires a position_type parameter that will transfer margin to the specified trading pair')
3090
3082
  market = self.market(symbol)
3091
- maxLeverage = self.safe_integer(market['limits']['leverage'], 'max', 100)
3092
- if market['type'] != 'swap':
3083
+ if not market['swap']:
3093
3084
  raise BadSymbol(self.id + ' setLeverage() supports swap contracts only')
3094
- if (leverage < 3) or (leverage > maxLeverage):
3095
- raise BadRequest(self.id + ' setLeverage() leverage should be between 3 and ' + str(maxLeverage) + ' for ' + symbol)
3085
+ marginMode = None
3086
+ marginMode, params = self.handle_margin_mode_and_params('setLeverage', params, 'cross')
3087
+ positionType = None
3088
+ if marginMode == 'isolated':
3089
+ positionType = 1
3090
+ elif marginMode == 'cross':
3091
+ positionType = 2
3092
+ minLeverage = self.safe_integer(market['limits']['leverage'], 'min', 1)
3093
+ maxLeverage = self.safe_integer(market['limits']['leverage'], 'max', 100)
3094
+ if (leverage < minLeverage) or (leverage > maxLeverage):
3095
+ raise BadRequest(self.id + ' setLeverage() leverage should be between ' + str(minLeverage) + ' and ' + str(maxLeverage) + ' for ' + symbol)
3096
3096
  request = {
3097
3097
  'market': market['id'],
3098
3098
  'leverage': str(leverage),
ccxt/gate.py CHANGED
@@ -372,6 +372,8 @@ class gate(Exchange, ImplicitAPI):
372
372
  },
373
373
  'flash_swap': {
374
374
  'get': {
375
+ 'currencies': 1.5,
376
+ 'currency_pairs': 1.5,
375
377
  'orders': 1.5,
376
378
  'orders/{order_id}': 1.5,
377
379
  },
@@ -782,6 +784,7 @@ class gate(Exchange, ImplicitAPI):
782
784
  'REPAY_TOO_MUCH': ExchangeError,
783
785
  'TOO_MANY_CURRENCY_PAIRS': InvalidOrder,
784
786
  'TOO_MANY_ORDERS': InvalidOrder,
787
+ 'TOO_MANY_REQUESTS': RateLimitExceeded,
785
788
  'MIXED_ACCOUNT_TYPE': InvalidOrder,
786
789
  'AUTO_BORROW_TOO_MUCH': ExchangeError,
787
790
  'TRADE_RESTRICTED': InsufficientFunds,
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.36'
7
+ __version__ = '4.0.38'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.0.36
3
+ Version: 4.0.38
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -260,13 +260,13 @@ console.log(version, Object.keys(exchanges));
260
260
 
261
261
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
262
262
 
263
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.36/dist/ccxt.browser.js
264
- * unpkg: https://unpkg.com/ccxt@4.0.36/dist/ccxt.browser.js
263
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.38/dist/ccxt.browser.js
264
+ * unpkg: https://unpkg.com/ccxt@4.0.38/dist/ccxt.browser.js
265
265
 
266
266
  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.
267
267
 
268
268
  ```HTML
269
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.36/dist/ccxt.browser.js"></script>
269
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.38/dist/ccxt.browser.js"></script>
270
270
  ```
271
271
 
272
272
  Creates a global `ccxt` object:
@@ -1,10 +1,10 @@
1
- ccxt/__init__.py,sha256=yTK57FwfEvPcKXiUeujufSu62hr7uGAjkvp-I5Cevfk,15438
1
+ ccxt/__init__.py,sha256=OEXnJg5MHbafgj_KsEpQkrUM7Sorn14UhDeWQ4uaaXc,15438
2
2
  ccxt/ace.py,sha256=8uTO7fzyxHnEhE3Y8VDP2EcWxh9gjs9xPMbuXjkUA7A,41372
3
3
  ccxt/alpaca.py,sha256=_cPmZ0obENxKSzsqLu0t1Ae-rUwN8z1DUB3Af8Kh4sA,33434
4
4
  ccxt/ascendex.py,sha256=rGD9sFxbRf_lEZavZpa6UEBIeX1tMydeFZzDOaQ3s8o,132537
5
5
  ccxt/bequant.py,sha256=1wDyg1jmS1H9WkODiqztoLVhQog7R6n7MUZsOhIRwRU,1136
6
6
  ccxt/bigone.py,sha256=3hAbaUMHIttNIte0xVSLUfiV914Fj6JsuyseQ4AIVk8,75446
7
- ccxt/binance.py,sha256=3At51VDXbdKEFW2iWX87BXyYS97r1N3oNgPv65J0uqo,392524
7
+ ccxt/binance.py,sha256=MAjK1-hpLKspvE_oAlYoFwLjQX9HAg3PhMMt1us78BY,392689
8
8
  ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
9
9
  ccxt/binanceus.py,sha256=RoC8nReBHXUJzRNyqMe4vhta6gLGuh1fyFkI8FOMKBE,2151
10
10
  ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
@@ -44,7 +44,7 @@ ccxt/coinbase.py,sha256=aswSRpuvEpWPGy5EdeYbz6bTFRZw5-yboIJbBPa7n7U,129413
44
44
  ccxt/coinbaseprime.py,sha256=Ygvljulxb2uKdei5yimCj1LMjLlUJNvP-G7ns1HpUFk,1219
45
45
  ccxt/coinbasepro.py,sha256=_U1ZVWUGvUdqiwn9O2ijxIh0o9pdi1qXHLq7zg7CI5Q,73870
46
46
  ccxt/coincheck.py,sha256=0Y7Z49gpWfMuFcuJXAnCHAMjh1QUpgcaR95lPTD0h9o,34219
47
- ccxt/coinex.py,sha256=76nu8OLI7okHYixp1ZAnDPjPTR8tssAvl9ejYUoJOgQ,194478
47
+ ccxt/coinex.py,sha256=gWnkRw3kQEJfE0s8FZniYDONzoNrekbiZ9CEmyTEjkc,194426
48
48
  ccxt/coinfalcon.py,sha256=0NCXdTVU5qAEROVf0GRidmONJpV1zsOr2p_PW7yK-vE,38972
49
49
  ccxt/coinmate.py,sha256=CoK00164_37RGO2hKHVPAOMZx578ADZ4eTNWZbqVhTI,39561
50
50
  ccxt/coinone.py,sha256=8wX92TU-3QPbCzgYZrEMrnFyBZyca6lbLV3GttWfxfc,35261
@@ -58,7 +58,7 @@ ccxt/digifinex.py,sha256=jbP6esId7yqvSkbzsyg66EOd8Et3UKUT4q3omKjXYDQ,150987
58
58
  ccxt/exmo.py,sha256=bZQg1t8yrKscH3FWDKd5DmGsjR9d5-vJnOIoGG1swfk,88943
59
59
  ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
60
60
  ccxt/fmfwio.py,sha256=ww13viYsuW8IzHhr3HST8uuroYsCZ2aynyG4i_SE0LU,1238
61
- ccxt/gate.py,sha256=6aMsJhZRGMKAezxYPD142E35u4nDE4NShqMa0x6G0_c,251940
61
+ ccxt/gate.py,sha256=GkqMvu9sQMIfe9TRC0d-uu0O-jDKG4JYKUFaFMwnBDs,252098
62
62
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
63
63
  ccxt/gemini.py,sha256=1VOPAe_VzFnMWuCXiVgP8Ra7wl7Osp3G_dvrGX6mHec,73902
64
64
  ccxt/hitbtc.py,sha256=Xj9-g6b8vzpCm6g-FrIjFGUa2CgroKc2bLyrSP22Uj0,62285
@@ -112,10 +112,10 @@ ccxt/abstract/alpaca.py,sha256=GKGGXKJ9WzW9V3SmOX_Jjaea_QTa04Eg5nYhQgFErGI,1861
112
112
  ccxt/abstract/ascendex.py,sha256=lMrOIR7VWJXoNaA8rjCNI8p-WTYsVlpC_D4jpDg5k_8,11197
113
113
  ccxt/abstract/bequant.py,sha256=0T5QJsSdYh5qcydcL76kC78pip1XrMDvaKkpxkcBsfc,8376
114
114
  ccxt/abstract/bigone.py,sha256=kuQi7l8C_zqTHdfXiBOfDR7424mzST2OjtN9wMStkWc,2457
115
- ccxt/abstract/binance.py,sha256=Do6RXAVw6s3A7ru_NdSLbHSlRcpn2hJtRZ8sJypvHYM,77791
116
- ccxt/abstract/binancecoinm.py,sha256=Do6RXAVw6s3A7ru_NdSLbHSlRcpn2hJtRZ8sJypvHYM,77791
117
- ccxt/abstract/binanceus.py,sha256=Do6RXAVw6s3A7ru_NdSLbHSlRcpn2hJtRZ8sJypvHYM,77791
118
- ccxt/abstract/binanceusdm.py,sha256=Do6RXAVw6s3A7ru_NdSLbHSlRcpn2hJtRZ8sJypvHYM,77791
115
+ ccxt/abstract/binance.py,sha256=2aF9mTT65cyPjioK2siADelfAKui-5PiiTz2xGn1wTc,78170
116
+ ccxt/abstract/binancecoinm.py,sha256=2aF9mTT65cyPjioK2siADelfAKui-5PiiTz2xGn1wTc,78170
117
+ ccxt/abstract/binanceus.py,sha256=2aF9mTT65cyPjioK2siADelfAKui-5PiiTz2xGn1wTc,78170
118
+ ccxt/abstract/binanceusdm.py,sha256=2aF9mTT65cyPjioK2siADelfAKui-5PiiTz2xGn1wTc,78170
119
119
  ccxt/abstract/bingx.py,sha256=PJzOcIO960mxEAPy8bFEZ3vJHrqUM3hkCc-6QERkkwU,7635
120
120
  ccxt/abstract/bit2c.py,sha256=np6i756kSB5dO3Nj6POLKxkWkpYcsGg-4LS8BwPrizI,2830
121
121
  ccxt/abstract/bitbank.py,sha256=k5D8PoPW2N79K_24NL9yY0qkwaCgzi_VoYUlqnj2bs8,2606
@@ -165,8 +165,8 @@ ccxt/abstract/deribit.py,sha256=rS_982u8dOVsh2vGSB5TO7K8Tye0Alq-Rg9fYZwz8hg,1549
165
165
  ccxt/abstract/digifinex.py,sha256=2tlP2G6Niu6TSbNUcgxvXdHfln6VhAZliXV7upFwpas,9386
166
166
  ccxt/abstract/exmo.py,sha256=yq9zis5G9Qjsecs-YSHAghDjad6y52jFteWSBJZFg8o,6177
167
167
  ccxt/abstract/fmfwio.py,sha256=0T5QJsSdYh5qcydcL76kC78pip1XrMDvaKkpxkcBsfc,8376
168
- ccxt/abstract/gate.py,sha256=W3TR-RwnBznNGR5ULU4zm5jS63UELRw1I5kjMq6kPjQ,33222
169
- ccxt/abstract/gateio.py,sha256=W3TR-RwnBznNGR5ULU4zm5jS63UELRw1I5kjMq6kPjQ,33222
168
+ ccxt/abstract/gate.py,sha256=c6k6EJqNLp9CkqWq9KYjCNJUkWHr0a51S6tQ38Jwm-o,33517
169
+ ccxt/abstract/gateio.py,sha256=c6k6EJqNLp9CkqWq9KYjCNJUkWHr0a51S6tQ38Jwm-o,33517
170
170
  ccxt/abstract/gemini.py,sha256=6TyBUDw-e4b02J5ToCX0eaXQfF0Knvkf7ToLcseqcIY,6915
171
171
  ccxt/abstract/hitbtc.py,sha256=0T5QJsSdYh5qcydcL76kC78pip1XrMDvaKkpxkcBsfc,8376
172
172
  ccxt/abstract/hitbtc3.py,sha256=-bjb83y_4FGdHtHMo-naHYoI5JyltlF2M-TzjAZJ3Hg,10949
@@ -213,13 +213,13 @@ ccxt/abstract/woo.py,sha256=ah_izsOyPt18l_rl1nzgbtwpRTeAo1_MJE8_qMvdCCg,7747
213
213
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
214
214
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
215
215
  ccxt/abstract/zonda.py,sha256=VoxuPkSq8vAvKnDvOqnByhwsIf09m7yIrs8HejFrDk4,5482
216
- ccxt/async_support/__init__.py,sha256=3lGXqjFjVOdzW_3zPLtE3Vfho0UZPtlLCQP5Z2ciSMM,15221
216
+ ccxt/async_support/__init__.py,sha256=Uz78x7djWK85nem2ikky8IIuyE4I6OEc5SNpGf9TR_E,15221
217
217
  ccxt/async_support/ace.py,sha256=xTtzqhVgpoDI4YgR9rRTRHTV2UsQmNYNfbuJc6aBKxA,41596
218
218
  ccxt/async_support/alpaca.py,sha256=hWimV0LrPixw15-FH7lMFB6s6EMEOjDlZOhWjznzu3g,33580
219
219
  ccxt/async_support/ascendex.py,sha256=tHwC-p_ilrM8r6k7w4Q59v8-PLOGlbsUCLHeKLLwbns,133169
220
220
  ccxt/async_support/bequant.py,sha256=BbfFIcAuK3qC0huDHr44hskFTHt1SG1Pp5XSgYnaiuA,1150
221
221
  ccxt/async_support/bigone.py,sha256=rNfleAZHUqHUx20fXBH8_-rn4wpwjVDZkxERElUERcU,75844
222
- ccxt/async_support/binance.py,sha256=Go4NCE0n_g93ulxj6kqfAeMgQI5m_PEEpj5EKbFYOKM,393770
222
+ ccxt/async_support/binance.py,sha256=HzdTWhXLsmT3TieP31HiTVKKKePQf6_v7Mb_nLJhE0w,393935
223
223
  ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
224
224
  ccxt/async_support/binanceus.py,sha256=Jtyl0jtSOpdjAAAYcSUzH6YRVxe88RJ6f4_IUge5gWg,2165
225
225
  ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
@@ -259,7 +259,7 @@ ccxt/async_support/coinbase.py,sha256=ylb26vPGyVuePoSUvEhKLlbdX5CYCw3HMCgBLcuG9X
259
259
  ccxt/async_support/coinbaseprime.py,sha256=M5Ez1DsFcW3-vJ-4QoZzwYBAKjAAtJnJpkfnV4sWAIc,1233
260
260
  ccxt/async_support/coinbasepro.py,sha256=Gdq6-Dn3TmzqkybYNm5C3WHou5BkRA8A2MK8JAiIHSI,74376
261
261
  ccxt/async_support/coincheck.py,sha256=scNw54Oj_iGHDPLiFjNEMGMU3ti_wKn5ltM-AD85LB8,34425
262
- ccxt/async_support/coinex.py,sha256=9D2MCCXbtWe_1csqiBHSrJt8WxJ0jxlS0xUw8ftP7vM,195376
262
+ ccxt/async_support/coinex.py,sha256=61DlAIQECxabpsGOwSXCNziM-uNikzTf9ohn7GBoAiY,195324
263
263
  ccxt/async_support/coinfalcon.py,sha256=_X3-uP5cFEkZ20pt6WgkSJIlUFcqJYdkzJJdz5tgvU0,39268
264
264
  ccxt/async_support/coinmate.py,sha256=SoCqsz6uVWFCvijivKqRDE02y7z3RXsyzC3IkXWlUAE,39809
265
265
  ccxt/async_support/coinone.py,sha256=vhygwEqCs5C-kSpTt3cwP-eLVsNMsO29ep437lipzAI,35485
@@ -273,7 +273,7 @@ ccxt/async_support/digifinex.py,sha256=vCpv_8FoZNs21uX0plWZioxdZDnTU9QQ2LngoMt84
273
273
  ccxt/async_support/exmo.py,sha256=ocg9JUh_6p3OFA_DJdhP5tVkTuYnFfgIeMqMNzvg9XY,89485
274
274
  ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
275
275
  ccxt/async_support/fmfwio.py,sha256=h4X-aN7XOxJ0ODBurN0KlnmvZFS06wrRnAbDAifxugk,1252
276
- ccxt/async_support/gate.py,sha256=tKsJhUUh0vmdQ-pNrMwfKwSqwCcxB4OFcqpYv9QUs_g,252868
276
+ ccxt/async_support/gate.py,sha256=Kl5NsEHL5N3t2970U9ygu7w3jeg1LHZn76QlCgt9ivM,253026
277
277
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
278
278
  ccxt/async_support/gemini.py,sha256=dfyJ83asotNsCBLZAMVDn8kuQ1WliXM3hk4LVrPsU7k,74392
279
279
  ccxt/async_support/hitbtc.py,sha256=m1bOvV7lBMQWzvenbJ0uwa4Ab_tbIcqUBdq7M7L9Q_Q,62719
@@ -322,7 +322,7 @@ ccxt/async_support/yobit.py,sha256=cRJgQNE-EfjXAligG8-iKxYA-yt9tKGilGnXg1PDrbg,5
322
322
  ccxt/async_support/zaif.py,sha256=Bg4Bfk63mluMSp1_8VE4_JPZEXSb940MocZGFisG9IA,28985
323
323
  ccxt/async_support/zonda.py,sha256=9je6awNUpQAHqF8uKfqIqjXyG8CQOPmzU1xDdxzpNDo,79823
324
324
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
325
- ccxt/async_support/base/exchange.py,sha256=yiCkDmpb3Bm9zcObkGcuC_TTgOhpmKeMA6sTwmPSTPQ,142998
325
+ ccxt/async_support/base/exchange.py,sha256=Ewqz_elUvxNXvef1dfpb7GufNa5n0Gey2O6nyLPdhbM,143042
326
326
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
327
327
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
328
328
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=xmlZV30Vb9Kq7JCm3D5FuEmuj1zp5H4F4hrz8-Y-Ir4,4999
@@ -336,10 +336,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GH-475Ni0mLOx7mUDnz4jjzaGkh
336
336
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
337
337
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
338
338
  ccxt/base/errors.py,sha256=-LVeTNyXvu3QEgb-p-KzMpcBgzHlvFTwDzmZK7Gfc14,3401
339
- ccxt/base/exchange.py,sha256=ry97j61sECKVUp62u9BBhRcO9pU55cRQaWPTBL991os,182616
339
+ ccxt/base/exchange.py,sha256=vKpzU5okif_dKfMxNg-dhGJoLnBwgss8N_fmPKQj87k,182660
340
340
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
341
341
  ccxt/base/types.py,sha256=be7MU-iLHhynL-GmIzPxb0SD6GIps-w3PmPN05irsAA,1406
342
- ccxt/pro/__init__.py,sha256=Ss2Nglxn9wpQyugutnXWP2ZJHoLRW347HlMxvF-hy5U,6480
342
+ ccxt/pro/__init__.py,sha256=y31FULiheoDIGYi8RV64NF59wBm1rbmpQF4IoGLFGto,6480
343
343
  ccxt/pro/alpaca.py,sha256=dHcK0EFjEkzs_nZn2DGpwMauOkw2XPKaqYezx4dcDis,26671
344
344
  ccxt/pro/ascendex.py,sha256=QVvtQlv_AZaQTaZcczXocmrf9gL1zFpsLRVcNF21qCI,34555
345
345
  ccxt/pro/bequant.py,sha256=qz8JjnpkAQY_CFiFSKGqrjjgZ2167_TBKjSJOb9NeDw,1081
@@ -450,7 +450,7 @@ ccxt/test/base/test_ticker.py,sha256=h9AV_O6s-Ax3vB3sFoN0Mz22rMOi65i9BDv0SNejH98
450
450
  ccxt/test/base/test_trade.py,sha256=bL9o3S_TGW8Nnlxu-BYkRG8NyRzKAWrU66uO5jJCM3A,2259
451
451
  ccxt/test/base/test_trading_fee.py,sha256=yRCpLHLg_ca9JQXdZB3_pIMHgHLGEfeQF95E6d1e2Bc,1125
452
452
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
453
- ccxt-4.0.36.dist-info/METADATA,sha256=xv-5qmZ3I54MzYI3afs8yIyjqy-EqnWtfQ3hlWK-b0I,111485
454
- ccxt-4.0.36.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
455
- ccxt-4.0.36.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
456
- ccxt-4.0.36.dist-info/RECORD,,
453
+ ccxt-4.0.38.dist-info/METADATA,sha256=xVb_Z3LpojDbov0o7lo7gr7mSZYGuIgq1ZeBF_kAKfM,111485
454
+ ccxt-4.0.38.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
455
+ ccxt-4.0.38.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
456
+ ccxt-4.0.38.dist-info/RECORD,,
File without changes