ccxt 4.3.81__py2.py3-none-any.whl → 4.3.83__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.3.81'
25
+ __version__ = '4.3.83'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.81'
7
+ __version__ = '4.3.83'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.81'
5
+ __version__ = '4.3.83'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -3364,7 +3364,13 @@ class binance(Exchange, ImplicitAPI):
3364
3364
  response = await self.papiGetBalance(self.extend(request, query))
3365
3365
  elif self.is_linear(type, subType):
3366
3366
  type = 'linear'
3367
- response = await self.fapiPrivateV3GetAccount(self.extend(request, query))
3367
+ useV2 = None
3368
+ useV2, params = self.handle_option_and_params(params, 'fetchBalance', 'useV2', False)
3369
+ params = self.extend(request, query)
3370
+ if not useV2:
3371
+ response = await self.fapiPrivateV3GetAccount(params)
3372
+ else:
3373
+ response = await self.fapiPrivateV2GetAccount(params)
3368
3374
  elif self.is_inverse(type, subType):
3369
3375
  type = 'inverse'
3370
3376
  response = await self.dapiPrivateGetAccount(self.extend(request, query))
@@ -9550,6 +9556,7 @@ class binance(Exchange, ImplicitAPI):
9550
9556
  :param str[] [symbols]: list of unified market symbols
9551
9557
  :param dict [params]: extra parameters specific to the exchange API endpoint
9552
9558
  :param str [method]: method name to call, "positionRisk", "account" or "option", default is "positionRisk"
9559
+ :param bool [params.useV2]: set to True if you want to use the obsolete endpoint, where some more additional fields were provided
9553
9560
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
9554
9561
  """
9555
9562
  defaultMethod = None
@@ -9701,6 +9708,7 @@ class binance(Exchange, ImplicitAPI):
9701
9708
  :param dict [params]: extra parameters specific to the exchange API endpoint
9702
9709
  :param boolean [params.portfolioMargin]: set to True if you would like to fetch positions for a portfolio margin account
9703
9710
  :param str [params.subType]: "linear" or "inverse"
9711
+ :param bool [params.useV2]: set to True if you want to use the obsolete endpoint, where some more additional fields were provided
9704
9712
  :returns dict: data on the positions risk
9705
9713
  """
9706
9714
  if symbols is not None:
@@ -9722,7 +9730,13 @@ class binance(Exchange, ImplicitAPI):
9722
9730
  if isPortfolioMargin:
9723
9731
  response = await self.papiGetUmPositionRisk(self.extend(request, params))
9724
9732
  else:
9725
- response = await self.fapiPrivateV3GetPositionRisk(self.extend(request, params))
9733
+ useV2 = None
9734
+ useV2, params = self.handle_option_and_params(params, 'fetchPositionsRisk', 'useV2', False)
9735
+ params = self.extend(request, params)
9736
+ if not useV2:
9737
+ response = await self.fapiPrivateV3GetPositionRisk(params)
9738
+ else:
9739
+ response = await self.fapiPrivateV2GetPositionRisk(params)
9726
9740
  #
9727
9741
  # [
9728
9742
  # {
@@ -10097,7 +10111,7 @@ class binance(Exchange, ImplicitAPI):
10097
10111
  longLeverage = None
10098
10112
  shortLeverage = None
10099
10113
  leverageValue = self.safe_integer(leverage, 'leverage')
10100
- if side == 'both':
10114
+ if (side is None) or (side == 'both'):
10101
10115
  longLeverage = leverageValue
10102
10116
  shortLeverage = leverageValue
10103
10117
  elif side == 'long':
@@ -12230,7 +12244,7 @@ class binance(Exchange, ImplicitAPI):
12230
12244
  request['startTime'] = since
12231
12245
  else:
12232
12246
  request['startTime'] = now - msInThirtyDays
12233
- endTime = self.safe_string_2(params, 'endTime', 'until')
12247
+ endTime = self.safe_integer_2(params, 'endTime', 'until')
12234
12248
  if endTime is not None:
12235
12249
  request['endTime'] = endTime
12236
12250
  else:
@@ -12268,6 +12282,8 @@ class binance(Exchange, ImplicitAPI):
12268
12282
  # }
12269
12283
  #
12270
12284
  else:
12285
+ if (request['endTime'] - request['startTime']) > msInThirtyDays:
12286
+ raise BadRequest(self.id + ' fetchConvertTradeHistory() the max interval between startTime and endTime is 30 days.')
12271
12287
  if limit is not None:
12272
12288
  request['limit'] = limit
12273
12289
  fromCurrencyKey = 'fromAsset'
@@ -5761,6 +5761,8 @@ class bybit(Exchange, ImplicitAPI):
5761
5761
  :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
5762
5762
  """
5763
5763
  tag, params = self.handle_withdraw_tag_and_params(tag, params)
5764
+ accountType = None
5765
+ accountType, params = self.handle_option_and_params(params, 'withdraw', 'accountType', 'SPOT')
5764
5766
  await self.load_markets()
5765
5767
  self.check_address(address)
5766
5768
  currency = self.currency(code)
@@ -5769,6 +5771,7 @@ class bybit(Exchange, ImplicitAPI):
5769
5771
  'amount': self.number_to_string(amount),
5770
5772
  'address': address,
5771
5773
  'timestamp': self.milliseconds(),
5774
+ 'accountType': accountType,
5772
5775
  }
5773
5776
  if tag is not None:
5774
5777
  request['tag'] = tag
@@ -3969,9 +3969,9 @@ class gate(Exchange, ImplicitAPI):
3969
3969
  request['amount'] = self.amount_to_precision(symbol, amount)
3970
3970
  else:
3971
3971
  if side == 'sell':
3972
- request['size'] = Precise.string_neg(self.amount_to_precision(symbol, amount))
3972
+ request['size'] = self.parse_to_numeric(Precise.string_neg(self.amount_to_precision(symbol, amount)))
3973
3973
  else:
3974
- request['size'] = self.amount_to_precision(symbol, amount)
3974
+ request['size'] = self.parse_to_numeric(self.amount_to_precision(symbol, amount))
3975
3975
  if price is not None:
3976
3976
  request['price'] = self.price_to_precision(symbol, price)
3977
3977
  if not market['spot']:
@@ -2821,7 +2821,7 @@ class phemex(Exchange, ImplicitAPI):
2821
2821
  if market['settle'] == 'USDT':
2822
2822
  response = await self.privateGetApiDataGFuturesOrdersByOrderId(self.extend(request, params))
2823
2823
  elif market['spot']:
2824
- response = await self.privateGetSpotOrdersActive(self.extend(request, params))
2824
+ response = await self.privateGetApiDataSpotsOrdersByOrderId(self.extend(request, params))
2825
2825
  else:
2826
2826
  response = await self.privateGetExchangeOrder(self.extend(request, params))
2827
2827
  data = self.safe_value(response, 'data', {})
@@ -2833,7 +2833,10 @@ class phemex(Exchange, ImplicitAPI):
2833
2833
  raise OrderNotFound(self.id + ' fetchOrder() ' + symbol + ' order with clientOrderId ' + clientOrderId + ' not found')
2834
2834
  else:
2835
2835
  raise OrderNotFound(self.id + ' fetchOrder() ' + symbol + ' order with id ' + id + ' not found')
2836
- order = self.safe_value(data, 0, {})
2836
+ order = self.safe_dict(data, 0, {})
2837
+ elif market['spot']:
2838
+ rows = self.safe_list(data, 'rows', [])
2839
+ order = self.safe_dict(rows, 0, {})
2837
2840
  return self.parse_order(order, market)
2838
2841
 
2839
2842
  async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
@@ -2864,7 +2867,7 @@ class phemex(Exchange, ImplicitAPI):
2864
2867
  elif market['swap']:
2865
2868
  response = await self.privateGetExchangeOrderList(self.extend(request, params))
2866
2869
  else:
2867
- response = await self.privateGetSpotOrders(self.extend(request, params))
2870
+ response = await self.privateGetApiDataSpotsOrders(self.extend(request, params))
2868
2871
  data = self.safe_value(response, 'data', {})
2869
2872
  rows = self.safe_list(data, 'rows', data)
2870
2873
  return self.parse_orders(rows, market, since, limit)
@@ -1239,7 +1239,8 @@ class wavesexchange(Exchange, ImplicitAPI):
1239
1239
  if (isMarketOrder) and (price is None):
1240
1240
  raise InvalidOrder(self.id + ' createOrder() requires a price argument for ' + type + ' orders to determine the max price for buy and the min price for sell')
1241
1241
  timestamp = self.milliseconds()
1242
- defaultExpiryDelta = self.safe_integer(self.options, 'createOrderDefaultExpiry', 2419200000)
1242
+ defaultExpiryDelta = None
1243
+ defaultExpiryDelta, params = self.handle_option_and_params(params, 'createOrder', 'defaultExpiry', self.safe_integer(self.options, 'createOrderDefaultExpiry', 2419200000))
1243
1244
  expiration = self.sum(timestamp, defaultExpiryDelta)
1244
1245
  matcherFees = await self.get_fees_for_asset(symbol, side, amount, price)
1245
1246
  # {
@@ -1374,11 +1375,11 @@ class wavesexchange(Exchange, ImplicitAPI):
1374
1375
  # }
1375
1376
  #
1376
1377
  if isMarketOrder:
1377
- response = await self.matcherPostMatcherOrderbookMarket(body)
1378
+ response = await self.matcherPostMatcherOrderbookMarket(self.extend(body, params))
1378
1379
  value = self.safe_dict(response, 'message')
1379
1380
  return self.parse_order(value, market)
1380
1381
  else:
1381
- response = await self.matcherPostMatcherOrderbook(body)
1382
+ response = await self.matcherPostMatcherOrderbook(self.extend(body, params))
1382
1383
  value = self.safe_dict(response, 'message')
1383
1384
  return self.parse_order(value, market)
1384
1385
 
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.81'
7
+ __version__ = '4.3.83'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/binance.py CHANGED
@@ -3363,7 +3363,13 @@ class binance(Exchange, ImplicitAPI):
3363
3363
  response = self.papiGetBalance(self.extend(request, query))
3364
3364
  elif self.is_linear(type, subType):
3365
3365
  type = 'linear'
3366
- response = self.fapiPrivateV3GetAccount(self.extend(request, query))
3366
+ useV2 = None
3367
+ useV2, params = self.handle_option_and_params(params, 'fetchBalance', 'useV2', False)
3368
+ params = self.extend(request, query)
3369
+ if not useV2:
3370
+ response = self.fapiPrivateV3GetAccount(params)
3371
+ else:
3372
+ response = self.fapiPrivateV2GetAccount(params)
3367
3373
  elif self.is_inverse(type, subType):
3368
3374
  type = 'inverse'
3369
3375
  response = self.dapiPrivateGetAccount(self.extend(request, query))
@@ -9549,6 +9555,7 @@ class binance(Exchange, ImplicitAPI):
9549
9555
  :param str[] [symbols]: list of unified market symbols
9550
9556
  :param dict [params]: extra parameters specific to the exchange API endpoint
9551
9557
  :param str [method]: method name to call, "positionRisk", "account" or "option", default is "positionRisk"
9558
+ :param bool [params.useV2]: set to True if you want to use the obsolete endpoint, where some more additional fields were provided
9552
9559
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
9553
9560
  """
9554
9561
  defaultMethod = None
@@ -9700,6 +9707,7 @@ class binance(Exchange, ImplicitAPI):
9700
9707
  :param dict [params]: extra parameters specific to the exchange API endpoint
9701
9708
  :param boolean [params.portfolioMargin]: set to True if you would like to fetch positions for a portfolio margin account
9702
9709
  :param str [params.subType]: "linear" or "inverse"
9710
+ :param bool [params.useV2]: set to True if you want to use the obsolete endpoint, where some more additional fields were provided
9703
9711
  :returns dict: data on the positions risk
9704
9712
  """
9705
9713
  if symbols is not None:
@@ -9721,7 +9729,13 @@ class binance(Exchange, ImplicitAPI):
9721
9729
  if isPortfolioMargin:
9722
9730
  response = self.papiGetUmPositionRisk(self.extend(request, params))
9723
9731
  else:
9724
- response = self.fapiPrivateV3GetPositionRisk(self.extend(request, params))
9732
+ useV2 = None
9733
+ useV2, params = self.handle_option_and_params(params, 'fetchPositionsRisk', 'useV2', False)
9734
+ params = self.extend(request, params)
9735
+ if not useV2:
9736
+ response = self.fapiPrivateV3GetPositionRisk(params)
9737
+ else:
9738
+ response = self.fapiPrivateV2GetPositionRisk(params)
9725
9739
  #
9726
9740
  # [
9727
9741
  # {
@@ -10096,7 +10110,7 @@ class binance(Exchange, ImplicitAPI):
10096
10110
  longLeverage = None
10097
10111
  shortLeverage = None
10098
10112
  leverageValue = self.safe_integer(leverage, 'leverage')
10099
- if side == 'both':
10113
+ if (side is None) or (side == 'both'):
10100
10114
  longLeverage = leverageValue
10101
10115
  shortLeverage = leverageValue
10102
10116
  elif side == 'long':
@@ -12229,7 +12243,7 @@ class binance(Exchange, ImplicitAPI):
12229
12243
  request['startTime'] = since
12230
12244
  else:
12231
12245
  request['startTime'] = now - msInThirtyDays
12232
- endTime = self.safe_string_2(params, 'endTime', 'until')
12246
+ endTime = self.safe_integer_2(params, 'endTime', 'until')
12233
12247
  if endTime is not None:
12234
12248
  request['endTime'] = endTime
12235
12249
  else:
@@ -12267,6 +12281,8 @@ class binance(Exchange, ImplicitAPI):
12267
12281
  # }
12268
12282
  #
12269
12283
  else:
12284
+ if (request['endTime'] - request['startTime']) > msInThirtyDays:
12285
+ raise BadRequest(self.id + ' fetchConvertTradeHistory() the max interval between startTime and endTime is 30 days.')
12270
12286
  if limit is not None:
12271
12287
  request['limit'] = limit
12272
12288
  fromCurrencyKey = 'fromAsset'
ccxt/bybit.py CHANGED
@@ -5760,6 +5760,8 @@ class bybit(Exchange, ImplicitAPI):
5760
5760
  :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
5761
5761
  """
5762
5762
  tag, params = self.handle_withdraw_tag_and_params(tag, params)
5763
+ accountType = None
5764
+ accountType, params = self.handle_option_and_params(params, 'withdraw', 'accountType', 'SPOT')
5763
5765
  self.load_markets()
5764
5766
  self.check_address(address)
5765
5767
  currency = self.currency(code)
@@ -5768,6 +5770,7 @@ class bybit(Exchange, ImplicitAPI):
5768
5770
  'amount': self.number_to_string(amount),
5769
5771
  'address': address,
5770
5772
  'timestamp': self.milliseconds(),
5773
+ 'accountType': accountType,
5771
5774
  }
5772
5775
  if tag is not None:
5773
5776
  request['tag'] = tag
ccxt/gate.py CHANGED
@@ -3968,9 +3968,9 @@ class gate(Exchange, ImplicitAPI):
3968
3968
  request['amount'] = self.amount_to_precision(symbol, amount)
3969
3969
  else:
3970
3970
  if side == 'sell':
3971
- request['size'] = Precise.string_neg(self.amount_to_precision(symbol, amount))
3971
+ request['size'] = self.parse_to_numeric(Precise.string_neg(self.amount_to_precision(symbol, amount)))
3972
3972
  else:
3973
- request['size'] = self.amount_to_precision(symbol, amount)
3973
+ request['size'] = self.parse_to_numeric(self.amount_to_precision(symbol, amount))
3974
3974
  if price is not None:
3975
3975
  request['price'] = self.price_to_precision(symbol, price)
3976
3976
  if not market['spot']:
ccxt/phemex.py CHANGED
@@ -2821,7 +2821,7 @@ class phemex(Exchange, ImplicitAPI):
2821
2821
  if market['settle'] == 'USDT':
2822
2822
  response = self.privateGetApiDataGFuturesOrdersByOrderId(self.extend(request, params))
2823
2823
  elif market['spot']:
2824
- response = self.privateGetSpotOrdersActive(self.extend(request, params))
2824
+ response = self.privateGetApiDataSpotsOrdersByOrderId(self.extend(request, params))
2825
2825
  else:
2826
2826
  response = self.privateGetExchangeOrder(self.extend(request, params))
2827
2827
  data = self.safe_value(response, 'data', {})
@@ -2833,7 +2833,10 @@ class phemex(Exchange, ImplicitAPI):
2833
2833
  raise OrderNotFound(self.id + ' fetchOrder() ' + symbol + ' order with clientOrderId ' + clientOrderId + ' not found')
2834
2834
  else:
2835
2835
  raise OrderNotFound(self.id + ' fetchOrder() ' + symbol + ' order with id ' + id + ' not found')
2836
- order = self.safe_value(data, 0, {})
2836
+ order = self.safe_dict(data, 0, {})
2837
+ elif market['spot']:
2838
+ rows = self.safe_list(data, 'rows', [])
2839
+ order = self.safe_dict(rows, 0, {})
2837
2840
  return self.parse_order(order, market)
2838
2841
 
2839
2842
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
@@ -2864,7 +2867,7 @@ class phemex(Exchange, ImplicitAPI):
2864
2867
  elif market['swap']:
2865
2868
  response = self.privateGetExchangeOrderList(self.extend(request, params))
2866
2869
  else:
2867
- response = self.privateGetSpotOrders(self.extend(request, params))
2870
+ response = self.privateGetApiDataSpotsOrders(self.extend(request, params))
2868
2871
  data = self.safe_value(response, 'data', {})
2869
2872
  rows = self.safe_list(data, 'rows', data)
2870
2873
  return self.parse_orders(rows, market, since, limit)
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.81'
7
+ __version__ = '4.3.83'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/okx.py CHANGED
@@ -335,6 +335,8 @@ class okx(ccxt.async_support.okx):
335
335
  channel = None
336
336
  channel, params = self.handle_option_and_params(params, 'watchTicker', 'channel', 'tickers')
337
337
  params['channel'] = channel
338
+ market = self.market(symbol)
339
+ symbol = market['symbol']
338
340
  ticker = await self.watch_tickers([symbol], params)
339
341
  return self.safe_value(ticker, symbol)
340
342
 
ccxt/pro/phemex.py CHANGED
@@ -31,6 +31,7 @@ class phemex(ccxt.async_support.phemex):
31
31
  'watchOrderBookForSymbols': False,
32
32
  'watchTradesForSymbols': False,
33
33
  'watchOHLCVForSymbols': False,
34
+ 'watchBalance': True,
34
35
  },
35
36
  'urls': {
36
37
  'test': {
ccxt/wavesexchange.py CHANGED
@@ -1238,7 +1238,8 @@ class wavesexchange(Exchange, ImplicitAPI):
1238
1238
  if (isMarketOrder) and (price is None):
1239
1239
  raise InvalidOrder(self.id + ' createOrder() requires a price argument for ' + type + ' orders to determine the max price for buy and the min price for sell')
1240
1240
  timestamp = self.milliseconds()
1241
- defaultExpiryDelta = self.safe_integer(self.options, 'createOrderDefaultExpiry', 2419200000)
1241
+ defaultExpiryDelta = None
1242
+ defaultExpiryDelta, params = self.handle_option_and_params(params, 'createOrder', 'defaultExpiry', self.safe_integer(self.options, 'createOrderDefaultExpiry', 2419200000))
1242
1243
  expiration = self.sum(timestamp, defaultExpiryDelta)
1243
1244
  matcherFees = self.get_fees_for_asset(symbol, side, amount, price)
1244
1245
  # {
@@ -1373,11 +1374,11 @@ class wavesexchange(Exchange, ImplicitAPI):
1373
1374
  # }
1374
1375
  #
1375
1376
  if isMarketOrder:
1376
- response = self.matcherPostMatcherOrderbookMarket(body)
1377
+ response = self.matcherPostMatcherOrderbookMarket(self.extend(body, params))
1377
1378
  value = self.safe_dict(response, 'message')
1378
1379
  return self.parse_order(value, market)
1379
1380
  else:
1380
- response = self.matcherPostMatcherOrderbook(body)
1381
+ response = self.matcherPostMatcherOrderbook(self.extend(body, params))
1381
1382
  value = self.safe_dict(response, 'message')
1382
1383
  return self.parse_order(value, market)
1383
1384
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.81
3
+ Version: 4.3.83
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
@@ -70,7 +70,6 @@ Current feature list:
70
70
 
71
71
 
72
72
  ## Sponsored Promotion
73
- [![bingx-campaign](https://github.com/user-attachments/assets/374fd5de-7d70-4281-85aa-d827afeb7270)](https://bingx.com/en/act/contestNew/7947320527/)
74
73
 
75
74
  ## See Also
76
75
 
@@ -270,13 +269,13 @@ console.log(version, Object.keys(exchanges));
270
269
 
271
270
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
272
271
 
273
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.81/dist/ccxt.browser.min.js
274
- * unpkg: https://unpkg.com/ccxt@4.3.81/dist/ccxt.browser.min.js
272
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.83/dist/ccxt.browser.min.js
273
+ * unpkg: https://unpkg.com/ccxt@4.3.83/dist/ccxt.browser.min.js
275
274
 
276
275
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
277
276
 
278
277
  ```HTML
279
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.81/dist/ccxt.browser.min.js"></script>
278
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.83/dist/ccxt.browser.min.js"></script>
280
279
  ```
281
280
 
282
281
  Creates a global `ccxt` object:
@@ -1,10 +1,10 @@
1
- ccxt/__init__.py,sha256=oX0SQ2U9Ze2mY1h-d0RSJ9fMZ18zj60A-Jq2YbjWtrU,16417
1
+ ccxt/__init__.py,sha256=8tFXcexJq_6UZubNfQ3dRitGEVyHJ7TjevH7jIeUzzQ,16417
2
2
  ccxt/ace.py,sha256=Gee4ymA83iAuBFm3J8NaTb7qmu9buV2trA676KCtSVg,42383
3
3
  ccxt/alpaca.py,sha256=HQuhQZSFGRlT-BaCUSEZmxpzYp6tll2zn63qn3gTmoU,47470
4
4
  ccxt/ascendex.py,sha256=4aEwibO_me6khr66z8JFqDBxe2gtFOWIFBE7ulBEJPs,151933
5
5
  ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
6
6
  ccxt/bigone.py,sha256=PBciIENMufQQ6cxukdze5hhQ5vFOqBtMHDfTwT4nUuY,93086
7
- ccxt/binance.py,sha256=bzrq8F5iCWbC1JnDkcmw63hJ3Toq4Mpv5V6bxMZGlC0,640182
7
+ ccxt/binance.py,sha256=b-d3-S9ENpW8QCcHmyrOayAO6UqYnK9IRoCKg7uKKxY,641250
8
8
  ccxt/binancecoinm.py,sha256=arFnEh8mErSyi23eVPWE4iwoT7PWQyxGGVJCKCy6UJY,1702
9
9
  ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
10
10
  ccxt/binanceusdm.py,sha256=bAPcJj5HLxoCdPolriM8sJpoTBwbV78vBTbKRmWhNP4,2632
@@ -35,7 +35,7 @@ ccxt/btcalpha.py,sha256=UcCCDZ_7EM-Q2tHU1IQPEA2DErFsLhrSfX-Oy-Q2uL4,36715
35
35
  ccxt/btcbox.py,sha256=9-P15L-OiZRzz0ZOtgO3bf73kuHro9u3NYf3QjeYv4k,27744
36
36
  ccxt/btcmarkets.py,sha256=0gMC0vvmuDJwcnllHMUZsQRV6QWA1-Cbq1N1F9rIUW8,52697
37
37
  ccxt/btcturk.py,sha256=bQ8sJq5iEj9oq2R17uDadPWKcnIQG8id5UmdlpHfFy8,36992
38
- ccxt/bybit.py,sha256=0f9LMR-RZ1SCXdQRk9jovoPd9Q7dcsLJPs5GqSZhU_U,418689
38
+ ccxt/bybit.py,sha256=8RVgRPc2A4-fs2_EdLYHMB9_Lx-2e4EC4H3B84tKrUQ,418859
39
39
  ccxt/cex.py,sha256=YQtARIBP7cY3y-AqRarEH_mVh7_ftt18jLebhpL3hxQ,70084
40
40
  ccxt/coinbase.py,sha256=3L5CDWhg4MQlDkdZnuJxxOjmsWEh-gnqcV4R6nCq7rg,217483
41
41
  ccxt/coinbaseadvanced.py,sha256=d5g6nRx-NCcCwZDdtp8FsI2D-pRjSvnAP9ISSKY_nCQ,538
@@ -56,7 +56,7 @@ ccxt/deribit.py,sha256=hs6yUT8s7sfmO-GJ9RZ9nQC7Y9vnp_2puTRrd9r1Plw,161350
56
56
  ccxt/digifinex.py,sha256=pUPM7EEeRFoenX_jzNJM1RNuIUjATy6GB4J2osJJ4bY,169282
57
57
  ccxt/exmo.py,sha256=KlQqGZey31br-SVwhQg6mWIESyeM_wiIKRDOzIekuSs,114638
58
58
  ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
59
- ccxt/gate.py,sha256=IJjP0zfV_BUdQLR6UxweOyqNkRB83j4YYIWQa0DQmtk,327599
59
+ ccxt/gate.py,sha256=dlKwcUQOvriaUmopMaF4BiziBTFdIoaEgt3-LKS8lk8,327645
60
60
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
61
61
  ccxt/gemini.py,sha256=ddoOnPZzu-l899JGVw4b9wwT9HI20mVqLz7iihhZxng,80876
62
62
  ccxt/hitbtc.py,sha256=iqyd0otbWmIHUJiJ6gzIfe34IOa8PCEeS8nG6s6Ogc0,153398
@@ -90,7 +90,7 @@ ccxt/oxfun.py,sha256=2d8Tr3c5SC2okb7mEWi3Y1lq9UC-enln54ydtDClCnY,124657
90
90
  ccxt/p2b.py,sha256=V_P8GTdb6SkeaVptVtc-LbjwUKUinfYFtO4nzmKG0N0,54333
91
91
  ccxt/paradex.py,sha256=-o0MAEgItYeo-juKgh2D-lnQIsjRKWMCupyMVPldsG8,85602
92
92
  ccxt/paymium.py,sha256=Xz-H66MQWQcQ1KJbciSMeremCD9kl2up_-IQUvBt22Y,24419
93
- ccxt/phemex.py,sha256=Xi0Cb6Zfe2_tZ0GZ_Iam_m2NEJ7fIDjHpOYc1vJ-VQk,223106
93
+ ccxt/phemex.py,sha256=-8diyEiBoscia_N33w-e6hTP7dGO8qND0s8OXQBl-oM,223253
94
94
  ccxt/poloniex.py,sha256=vaLhyTpZpzBvrrM6dCA_TVypLwLICXotixqiM27q-MA,102301
95
95
  ccxt/poloniexfutures.py,sha256=E0S38NKWPCKRM8RV-TJVxhhOj0vjF-9qR3cbtgmsIdk,78551
96
96
  ccxt/probit.py,sha256=MFA0bFG-xEx3ZDQIWebUKaP83mCjYKVcztk3e61Zx8Y,76165
@@ -99,7 +99,7 @@ ccxt/tokocrypto.py,sha256=aV-98hzr75iQO3GEmiUyTNufDqHfoze04Z2Fk195B3Q,123192
99
99
  ccxt/tradeogre.py,sha256=DCxTLjtGW7ADRA-jekCkGAn81-GIgdOAxbJFcBLYOFU,24211
100
100
  ccxt/upbit.py,sha256=W_W8aETJyopwhYfZd2tWvhPvi7BjQ4KSIOdn8nzyWv8,85413
101
101
  ccxt/vertex.py,sha256=YoKnzxhem56C19SckA6yHUPH1bk86PfZ4Z-T01TFygg,121761
102
- ccxt/wavesexchange.py,sha256=8KrV-euIdDeARQ-h-T-nTlFJ9hk6TLuwGl8U7Xr_Lgk,114825
102
+ ccxt/wavesexchange.py,sha256=vmzv9h1QjthvpKUGajQn_tdCJ5tWmzEA6r7ow_y6ASY,114980
103
103
  ccxt/wazirx.py,sha256=LVHNdononi8FrZpT0pYiJoS-NrNi7_uIZ6Qbu8dJRPc,52405
104
104
  ccxt/whitebit.py,sha256=fkM0Clt74bSiOJ_L-CehR2Gkn3v3kZksCQT0JCCG5rs,119340
105
105
  ccxt/woo.py,sha256=VSW2iQ6t9SCB5GYlRClLfUD468HNW2SOhM6uEo3A_e4,153142
@@ -218,13 +218,13 @@ ccxt/abstract/xt.py,sha256=JkWvsic3L2O968BCr9H5Wd5NIbRE9aTT2A-9WbAtl0c,27146
218
218
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
219
219
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
220
220
  ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
221
- ccxt/async_support/__init__.py,sha256=QynwkYy707CJqolFuuc7f_mx91VTyZ7s_c0Or9ve-Hc,16230
221
+ ccxt/async_support/__init__.py,sha256=m_-Y9JVCtfU0Mxb5kSMaGiOwa0zNQg1PU0azwrhbWzk,16230
222
222
  ccxt/async_support/ace.py,sha256=zBmLUKH691a2BH1sPzlJPg-uO7lD6Ys92Rv8WSzNtoo,42607
223
223
  ccxt/async_support/alpaca.py,sha256=495vDvdF1IWlsh9QhUnMtkMuINdD0EzeFGlUVqCf8TE,47682
224
224
  ccxt/async_support/ascendex.py,sha256=LK259BdUqU0_STGRH6DmTgaR-7lXqFpZHFVACf2um5c,152721
225
225
  ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
226
226
  ccxt/async_support/bigone.py,sha256=PZcs9u6FI6uAyJKiiNGIGDA-uainz4aKEOrC1Q6KIk4,93540
227
- ccxt/async_support/binance.py,sha256=nYDNOInWD94OIpVhzb_JOmjh2zDYaBaPIi_YUJXxq7Q,642904
227
+ ccxt/async_support/binance.py,sha256=UmSmhtKJOpSzWDbZO-OnMYjoztbduzDN2hZcKrZ1a1k,643984
228
228
  ccxt/async_support/binancecoinm.py,sha256=yeE73xG5UXD_X3VPul6DMGnV_mgJfWYskpas1BUDdCU,1740
229
229
  ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
230
230
  ccxt/async_support/binanceusdm.py,sha256=8ugRkx7vyYmn67wdkEEf2f-DFMGAoC4t09usKlPVNyw,2670
@@ -255,7 +255,7 @@ ccxt/async_support/btcalpha.py,sha256=DgzrJ6cczUCDZr-QLUxMpazeudEFdQ_OzXiQiJM4Hb
255
255
  ccxt/async_support/btcbox.py,sha256=FGIj8il6VZL56_dDYsAMwp4DpdKNt_vbMXV6VZ2boCI,27968
256
256
  ccxt/async_support/btcmarkets.py,sha256=x1-s5uVioHyvNJoBxhxP8eUUslTDwQnZMU0FWfu1Fd4,53047
257
257
  ccxt/async_support/btcturk.py,sha256=P3bg0XG0sAi-8ge9ZFzQqZHsoGOGfxBjkhIDo4VPSK4,37210
258
- ccxt/async_support/bybit.py,sha256=ALkt2mzwRFL3jE1BjW4LZonhwWsBjLF18HPB9VIeDRI,420565
258
+ ccxt/async_support/bybit.py,sha256=PcNgqEEBqggWY4xHLUX2TZHhY7-U96Ne1Ps5CDGfoIw,420735
259
259
  ccxt/async_support/cex.py,sha256=5KZ9qt4WsUAkH2rkHn7zW7SwlB9FumruLELdKF4LFoE,70434
260
260
  ccxt/async_support/coinbase.py,sha256=Ch_hFo2zj0qp4kuDUnebGD16pUeKs6h3HJxs5Fdpkco,218637
261
261
  ccxt/async_support/coinbaseadvanced.py,sha256=Kupwnuxiu_qTjwCNV2asacoDUNFQvcaHNAznUJPhdQs,552
@@ -276,7 +276,7 @@ ccxt/async_support/deribit.py,sha256=JfdtFswWctlKE_GOjoxFIVKTNq-LUeuVik59MAx-u8s
276
276
  ccxt/async_support/digifinex.py,sha256=6fj4RPpxV8ArNSBXm5_y_Mt7fzjYxYOSO8mcxGKXpUU,170252
277
277
  ccxt/async_support/exmo.py,sha256=uVJsy3mfNLpfbY0ndl2EF9hipUylEw8J58J3wCGyyA0,115270
278
278
  ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
279
- ccxt/async_support/gate.py,sha256=LS5x5skfemCLaH9LFmVEs6g5oLVV3Uq1XCGMYYQoLy0,329319
279
+ ccxt/async_support/gate.py,sha256=Y4dVM0if4e3a3uG_Wgj10t4oWRBHdjt-0Sp0v3yIWNg,329365
280
280
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
281
281
  ccxt/async_support/gemini.py,sha256=7X5-PE3rPrPycUVXu3FtAcDFjNR3QUwYd6lPRQYQeEw,81389
282
282
  ccxt/async_support/hitbtc.py,sha256=jWmyRAy_wkpEidgjCxU0gWur99YJjYHPjD9CN4vJbUE,154444
@@ -310,7 +310,7 @@ ccxt/async_support/oxfun.py,sha256=_Pv8E4yIKS10iPOpPuCFQgBuqGDzxuwvxROdJjwrYvc,1
310
310
  ccxt/async_support/p2b.py,sha256=aU_69L8hyfZEQ_yFJb6UoR_l0EbaeCTRgNvdDtk4QPs,54575
311
311
  ccxt/async_support/paradex.py,sha256=iN1obpvPvLikj30KiE4I7BGlBVBRLHpHifEH8vn8JdY,86210
312
312
  ccxt/async_support/paymium.py,sha256=GIAgyOjR11o1pfq8om4Pwr68jMkLoEwEz7sB8lIDMI0,24607
313
- ccxt/async_support/phemex.py,sha256=Xfa8kxrN6mEr6BGLNDnquGhMq0sk42qJ7P5Ckmb-0BE,223924
313
+ ccxt/async_support/phemex.py,sha256=NBo_6hAQUWCwH6EdQ8vIkBK2mV2N-qcAbW2wzROiunk,224071
314
314
  ccxt/async_support/poloniex.py,sha256=hYmiGQfwKyYcaPp1Q1Qa4gPP0TaqJrG2367y-q0WxXE,102849
315
315
  ccxt/async_support/poloniexfutures.py,sha256=iXEtcjHZBTEhgwkp8xbIqxObZf-OhfUr2yVwq5WlsMg,78937
316
316
  ccxt/async_support/probit.py,sha256=8XCtYbAIIQNjfdLfMVwjaJ9vM_7QWnEQ86yYZYPlS8M,76557
@@ -319,7 +319,7 @@ ccxt/async_support/tokocrypto.py,sha256=nzJhrGTCTWMbbjI4P_IKfO1O84td8pSssCgZhTqQ
319
319
  ccxt/async_support/tradeogre.py,sha256=A4DEbbRL_g_5WAp7WOB96s08-zgXfGQ9lYZnDX5H1eI,24405
320
320
  ccxt/async_support/upbit.py,sha256=GmhV24xdjd5NSCronYkqLCM8rr_hNdpt4NEDA5jEkLw,85895
321
321
  ccxt/async_support/vertex.py,sha256=_KDPAVq5Bew-w77wiGQpivZCGRs6yGKoW9HGh8PhOLc,122261
322
- ccxt/async_support/wavesexchange.py,sha256=kdF7Nm5a34mtgIj2HWTLuV3plt4K3EBKMpLENIxtoMk,115375
322
+ ccxt/async_support/wavesexchange.py,sha256=wHxvsBQydDEYRgeAZKI9WO4TLBKmmSPTLm0eT0pKB5g,115530
323
323
  ccxt/async_support/wazirx.py,sha256=bnUpw9be3o4l2Hxm3jcfNXn5bMyZlgqoG8BGPusuIzs,52707
324
324
  ccxt/async_support/whitebit.py,sha256=haF5nFYGuJzkplHBIyLLDJ6N3ThIDPpgjeI3S-TYs98,119990
325
325
  ccxt/async_support/woo.py,sha256=uaNh3timNm6_DNhiOn5l4Za4wagj4AhlxkDh4Fbhxfk,154110
@@ -329,7 +329,7 @@ ccxt/async_support/yobit.py,sha256=GQhvYrsGHQrVdTrNHQxx9isEGqUABexlllzao9HL3f8,5
329
329
  ccxt/async_support/zaif.py,sha256=-ZTr8M2JaIRCL90VrbCDXBMAsZwbiwsFChSQ2rWODuQ,29044
330
330
  ccxt/async_support/zonda.py,sha256=jncr6Wg12S72CTpu6mCKCse1pm1f8oefVQurQSrFvP0,81733
331
331
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
332
- ccxt/async_support/base/exchange.py,sha256=c95NbqMjGCTRAr31pdj438saYwJD9MsUZqH-Ko49PoA,110799
332
+ ccxt/async_support/base/exchange.py,sha256=eiFSxjEXpVJpvTiWiWLVzJcqY8l8XmSOx1-FXqT8BvE,110799
333
333
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
334
334
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
335
335
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
@@ -343,10 +343,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
343
343
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
344
344
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
345
345
  ccxt/base/errors.py,sha256=tosnf1tDaBn4YMCbWVNWyDYzqft-ImVtyjqJb6q83Y4,4369
346
- ccxt/base/exchange.py,sha256=ahEDjXHHBtn78_S5B1razurc-8AcS9bQTBysVHBhOCI,295904
346
+ ccxt/base/exchange.py,sha256=jbPRXxH1ZpZALXu_XPg-v6IEzLrAhaDiG-oRfiUoVt0,295904
347
347
  ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
348
348
  ccxt/base/types.py,sha256=TaP_RElKjGEZWuzyp4o4u2YhREyTG3rUeVT6gDffY9A,9613
349
- ccxt/pro/__init__.py,sha256=yBtRJJWZ4Ji03DLCU4G4sFPTVe4xLt4_He0yUqqhTdM,7608
349
+ ccxt/pro/__init__.py,sha256=Tpck3GHnu8DOL4i2mRnxwNBApGC4Ysth6ZHtFGiHxhw,7608
350
350
  ccxt/pro/alpaca.py,sha256=xh1yg1Ok-Zh_Mfx-MBjNrfJDs6MUU0exFfEj3GuQPC4,27631
351
351
  ccxt/pro/ascendex.py,sha256=181FIeztchLqGmgecRJEN8F8xEM45D5aMKhC-5nuNfU,35467
352
352
  ccxt/pro/bequant.py,sha256=33OEUWBi4D9-2w8CmkwN3aF1qS-AlLqX3pxrWwNbXPY,1552
@@ -401,12 +401,12 @@ ccxt/pro/luno.py,sha256=AzLK0_C0Hu25ukMNkMLP_sY3D4UG9FT38oawpo4jzTg,12336
401
401
  ccxt/pro/mexc.py,sha256=yiLfthMojs2T-sUzzhDjmTTNFc8Ob8S85ovpPb_I7Ts,43270
402
402
  ccxt/pro/ndax.py,sha256=fQsoYtrTEsCZB3hl-pavQytwQAaiMAiTyaCiOy1sVTg,22715
403
403
  ccxt/pro/okcoin.py,sha256=elwHzrWUSuU7Edp1oisxAnvst5IpxjyzgqLVMEHZWIU,30429
404
- ccxt/pro/okx.py,sha256=Fw1vYXvik0E1l_IQ1ATymUtvxk5jXEMV-isVMbXQXQI,84823
404
+ ccxt/pro/okx.py,sha256=J59wN1DpFT6X3_OsD2sxqnB1OczrLPBKs-xvHGmYE60,84894
405
405
  ccxt/pro/onetrading.py,sha256=Qlr6LRRqO8te7QyTIhCk5nXJnupH8MtRWhQnH3Zc9yE,54769
406
406
  ccxt/pro/oxfun.py,sha256=gcmnoD0pzEDVIaiHyuU2ABoQBrxi0CTP62H2xZD0T7g,43943
407
407
  ccxt/pro/p2b.py,sha256=qulHrptdJ48MtOQ0bOZH3h_An8Ybu14cU6cJrySV5KQ,17897
408
408
  ccxt/pro/paradex.py,sha256=9SkO-QV08sGeh5e349hL36u4snxAYuqjdVvJlKgQhH0,14299
409
- ccxt/pro/phemex.py,sha256=iwdftOXQIiP_Ns7PHD-5vlL74H5vtPUWOQ1zh7fyuD8,61069
409
+ ccxt/pro/phemex.py,sha256=ZFQLhlrFKxzoFziHAvM2G1pzf-goRYjdZ-ikVGfeNXw,61107
410
410
  ccxt/pro/poloniex.py,sha256=e81Vkvg2oRW51nXECf6lF7Cjj5CbHv7Np2QSy6z0h3k,52108
411
411
  ccxt/pro/poloniexfutures.py,sha256=Iy8Q_Z8I3rUtNcZoxwVzMK2C1qLIiHjFXdZd_rr3Sww,41972
412
412
  ccxt/pro/probit.py,sha256=ngY30aRwNClc_q_Pirajg4-K-mJ3bvipgD2-jBuPs6g,23110
@@ -648,8 +648,8 @@ ccxt/test/tests_async.py,sha256=NShOLO2-HzYsh07U7aiUGssiv-AZ_p88h-NuQub9OKU,8468
648
648
  ccxt/test/tests_helpers.py,sha256=xhOILoZ_x3RSfQjtKt6AQlkp9DkOtpTQe8GAUUZoM6s,10069
649
649
  ccxt/test/tests_init.py,sha256=eVwwUHujX9t4rjgo4TqEeg7DDhR1Hb_e2SJN8NVGyl0,998
650
650
  ccxt/test/tests_sync.py,sha256=6Arr2TcJpNg9eEpH_JQeBbLzaMPlb94J1P11HGlbpPg,83761
651
- ccxt-4.3.81.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
652
- ccxt-4.3.81.dist-info/METADATA,sha256=gQiQeuBWzcSMq7fHSGHmhk87kJToVPIL3K0WCUp27GU,116642
653
- ccxt-4.3.81.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
654
- ccxt-4.3.81.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
655
- ccxt-4.3.81.dist-info/RECORD,,
651
+ ccxt-4.3.83.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
652
+ ccxt-4.3.83.dist-info/METADATA,sha256=ZV0KJpl5E1uFTWNFh1V-1KxFfaOqM2o0672ozfs4zJ8,116492
653
+ ccxt-4.3.83.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
654
+ ccxt-4.3.83.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
655
+ ccxt-4.3.83.dist-info/RECORD,,
File without changes