ccxt 4.1.76__py2.py3-none-any.whl → 4.1.77__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.1.76'
25
+ __version__ = '4.1.77'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.1.76'
7
+ __version__ = '4.1.77'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.1.76'
5
+ __version__ = '4.1.77'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -45,6 +45,8 @@ class bingx(Exchange, ImplicitAPI):
45
45
  'cancelAllOrders': True,
46
46
  'cancelOrder': True,
47
47
  'cancelOrders': True,
48
+ 'closeAllPosition': True,
49
+ 'closePosition': False,
48
50
  'createMarketBuyOrderWithCost': True,
49
51
  'createMarketOrderWithCost': True,
50
52
  'createMarketSellOrderWithCost': True,
@@ -393,7 +393,11 @@ class bitmex(Exchange, ImplicitAPI):
393
393
  finalAmount = Precise.string_div(amountString, precision)
394
394
  return self.parse_number(finalAmount)
395
395
 
396
- def convert_to_real_amount(self, code: str, amount: str):
396
+ def convert_to_real_amount(self, code: Str, amount: Str):
397
+ if code is None:
398
+ return amount
399
+ elif amount is None:
400
+ return None
397
401
  currency = self.currency(code)
398
402
  precision = self.safe_string(currency, 'precision')
399
403
  return Precise.string_mul(amount, precision)
@@ -53,6 +53,9 @@ class bitrue(Exchange, ImplicitAPI):
53
53
  'option': False,
54
54
  'cancelAllOrders': True,
55
55
  'cancelOrder': True,
56
+ 'createMarketBuyOrderWithCost': True,
57
+ 'createMarketOrderWithCost': False,
58
+ 'createMarketSellOrderWithCost': False,
56
59
  'createOrder': True,
57
60
  'createStopLimitOrder': True,
58
61
  'createStopMarketOrder': True,
@@ -1804,6 +1807,23 @@ class bitrue(Exchange, ImplicitAPI):
1804
1807
  'trades': fills,
1805
1808
  }, market)
1806
1809
 
1810
+ async def create_market_buy_order_with_cost(self, symbol: str, cost, params={}):
1811
+ """
1812
+ create a market buy order by providing the symbol and cost
1813
+ :see: https://www.bitrue.com/api-docs#new-order-trade-hmac-sha256
1814
+ :see: https://www.bitrue.com/api_docs_includes_file/delivery.html#new-order-trade-hmac-sha256
1815
+ :param str symbol: unified symbol of the market to create an order in
1816
+ :param float cost: how much you want to trade in units of the quote currency
1817
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1818
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1819
+ """
1820
+ await self.load_markets()
1821
+ market = self.market(symbol)
1822
+ if not market['swap']:
1823
+ raise NotSupported(self.id + ' createMarketBuyOrderWithCost() supports swap orders only')
1824
+ params['createMarketBuyOrderRequiresPrice'] = False
1825
+ return await self.create_order(symbol, 'market', 'buy', cost, None, params)
1826
+
1807
1827
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount, price=None, params={}):
1808
1828
  """
1809
1829
  create a trade order
@@ -1825,6 +1845,7 @@ class bitrue(Exchange, ImplicitAPI):
1825
1845
  * EXCHANGE SPECIFIC PARAMETERS
1826
1846
  :param decimal [params.icebergQty]:
1827
1847
  :param long [params.recvWindow]:
1848
+ :param float [params.cost]: *swap market buy only* the quote quantity that can be used alternative for the amount
1828
1849
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1829
1850
  """
1830
1851
  await self.load_markets()
@@ -1856,7 +1877,9 @@ class bitrue(Exchange, ImplicitAPI):
1856
1877
  elif timeInForce == 'ioc':
1857
1878
  request['type'] = 'IOC'
1858
1879
  request['contractName'] = market['id']
1859
- if isMarket and (side == 'buy') and (self.options['createMarketBuyOrderRequiresPrice']):
1880
+ createMarketBuyOrderRequiresPrice = True
1881
+ createMarketBuyOrderRequiresPrice, params = self.handle_option_and_params(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', True)
1882
+ if isMarket and (side == 'buy') and createMarketBuyOrderRequiresPrice:
1860
1883
  cost = self.safe_string(params, 'cost')
1861
1884
  params = self.omit(params, 'cost')
1862
1885
  if price is None and cost is None:
@@ -1007,6 +1007,7 @@ class bitstamp(Exchange, ImplicitAPI):
1007
1007
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
1008
1008
  """
1009
1009
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1010
+ :see: https://www.bitstamp.net/api/#tag/Market-info/operation/GetOHLCData
1010
1011
  :param str symbol: unified symbol of the market to fetch OHLCV data for
1011
1012
  :param str timeframe: the length of time each candle represents
1012
1013
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -1028,13 +1029,13 @@ class bitstamp(Exchange, ImplicitAPI):
1028
1029
  limit = 1000
1029
1030
  start = self.parse_to_int(since / 1000)
1030
1031
  request['start'] = start
1031
- request['end'] = self.sum(start, limit * duration)
1032
+ request['end'] = self.sum(start, duration * (limit - 1))
1032
1033
  request['limit'] = limit
1033
1034
  else:
1034
1035
  if since is not None:
1035
1036
  start = self.parse_to_int(since / 1000)
1036
1037
  request['start'] = start
1037
- request['end'] = self.sum(start, limit * duration)
1038
+ request['end'] = self.sum(start, duration * (limit - 1))
1038
1039
  request['limit'] = min(limit, 1000) # min 1, max 1000
1039
1040
  response = await self.publicGetOhlcPair(self.extend(request, params))
1040
1041
  #
@@ -51,7 +51,10 @@ class coinbase(Exchange, ImplicitAPI):
51
51
  'createLimitBuyOrder': True,
52
52
  'createLimitSellOrder': True,
53
53
  'createMarketBuyOrder': True,
54
+ 'createMarketBuyOrderWithCost': True,
55
+ 'createMarketOrderWithCost': False,
54
56
  'createMarketSellOrder': True,
57
+ 'createMarketSellOrderWithCost': False,
55
58
  'createOrder': True,
56
59
  'createPostOnlyOrder': True,
57
60
  'createReduceOnlyOrder': False,
@@ -2010,6 +2013,22 @@ class coinbase(Exchange, ImplicitAPI):
2010
2013
  request['limit'] = limit
2011
2014
  return request
2012
2015
 
2016
+ async def create_market_buy_order_with_cost(self, symbol: str, cost, params={}):
2017
+ """
2018
+ create a market buy order by providing the symbol and cost
2019
+ :see: https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_postorder
2020
+ :param str symbol: unified symbol of the market to create an order in
2021
+ :param float cost: how much you want to trade in units of the quote currency
2022
+ :param dict [params]: extra parameters specific to the exchange API endpoint
2023
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
2024
+ """
2025
+ await self.load_markets()
2026
+ market = self.market(symbol)
2027
+ if not market['spot']:
2028
+ raise NotSupported(self.id + ' createMarketBuyOrderWithCost() supports spot orders only')
2029
+ params['createMarketBuyOrderRequiresPrice'] = False
2030
+ return await self.create_order(symbol, 'market', 'buy', cost, None, params)
2031
+
2013
2032
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount, price=None, params={}):
2014
2033
  """
2015
2034
  create a trade order
@@ -2028,6 +2047,7 @@ class coinbase(Exchange, ImplicitAPI):
2028
2047
  :param str [params.timeInForce]: 'GTC', 'IOC', 'GTD' or 'PO'
2029
2048
  :param str [params.stop_direction]: 'UNKNOWN_STOP_DIRECTION', 'STOP_DIRECTION_STOP_UP', 'STOP_DIRECTION_STOP_DOWN' the direction the stopPrice is triggered from
2030
2049
  :param str [params.end_time]: '2023-05-25T17:01:05.092Z' for 'GTD' orders
2050
+ :param float [params.cost]: *spot market buy only* the quote quantity that can be used alternative for the amount
2031
2051
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
2032
2052
  """
2033
2053
  await self.load_markets()
@@ -2114,18 +2134,23 @@ class coinbase(Exchange, ImplicitAPI):
2114
2134
  if isStop or isStopLoss or isTakeProfit:
2115
2135
  raise NotSupported(self.id + ' createOrder() only stop limit orders are supported')
2116
2136
  if side == 'buy':
2117
- createMarketBuyOrderRequiresPrice = self.safe_value(self.options, 'createMarketBuyOrderRequiresPrice', True)
2118
2137
  total = None
2119
- if createMarketBuyOrderRequiresPrice:
2138
+ createMarketBuyOrderRequiresPrice = True
2139
+ createMarketBuyOrderRequiresPrice, params = self.handle_option_and_params(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', True)
2140
+ cost = self.safe_number(params, 'cost')
2141
+ params = self.omit(params, 'cost')
2142
+ if cost is not None:
2143
+ total = self.cost_to_precision(symbol, cost)
2144
+ elif createMarketBuyOrderRequiresPrice:
2120
2145
  if price is None:
2121
- raise InvalidOrder(self.id + ' createOrder() requires a price argument for market buy orders on spot markets to calculate the total amount to spend(amount * price), alternatively set the createMarketBuyOrderRequiresPrice option to False and pass in the cost to spend into the amount parameter')
2146
+ raise InvalidOrder(self.id + ' createOrder() requires a price argument for market buy orders on spot markets to calculate the total amount to spend(amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to False and pass the cost to spend in the amount argument')
2122
2147
  else:
2123
2148
  amountString = self.number_to_string(amount)
2124
2149
  priceString = self.number_to_string(price)
2125
- cost = self.parse_number(Precise.string_mul(amountString, priceString))
2126
- total = self.price_to_precision(symbol, cost)
2150
+ costRequest = Precise.string_mul(amountString, priceString)
2151
+ total = self.cost_to_precision(symbol, costRequest)
2127
2152
  else:
2128
- total = self.price_to_precision(symbol, amount)
2153
+ total = self.cost_to_precision(symbol, amount)
2129
2154
  request['order_configuration'] = {
2130
2155
  'market_market_ioc': {
2131
2156
  'quote_size': total,
@@ -561,6 +561,7 @@ class gate(Exchange, ImplicitAPI):
561
561
  '15m': '15m',
562
562
  '30m': '30m',
563
563
  '1h': '1h',
564
+ '2h': '2h',
564
565
  '4h': '4h',
565
566
  '8h': '8h',
566
567
  '1d': '1d',
ccxt/async_support/okx.py CHANGED
@@ -42,7 +42,7 @@ class okx(Exchange, ImplicitAPI):
42
42
  'name': 'OKX',
43
43
  'countries': ['CN', 'US'],
44
44
  'version': 'v5',
45
- 'rateLimit': 100,
45
+ 'rateLimit': 100 * 1.03, # 3% tolerance because of #20229
46
46
  'pro': True,
47
47
  'certified': True,
48
48
  'has': {
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.1.76'
7
+ __version__ = '4.1.77'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/bingx.py CHANGED
@@ -44,6 +44,8 @@ class bingx(Exchange, ImplicitAPI):
44
44
  'cancelAllOrders': True,
45
45
  'cancelOrder': True,
46
46
  'cancelOrders': True,
47
+ 'closeAllPosition': True,
48
+ 'closePosition': False,
47
49
  'createMarketBuyOrderWithCost': True,
48
50
  'createMarketOrderWithCost': True,
49
51
  'createMarketSellOrderWithCost': True,
ccxt/bitmex.py CHANGED
@@ -393,7 +393,11 @@ class bitmex(Exchange, ImplicitAPI):
393
393
  finalAmount = Precise.string_div(amountString, precision)
394
394
  return self.parse_number(finalAmount)
395
395
 
396
- def convert_to_real_amount(self, code: str, amount: str):
396
+ def convert_to_real_amount(self, code: Str, amount: Str):
397
+ if code is None:
398
+ return amount
399
+ elif amount is None:
400
+ return None
397
401
  currency = self.currency(code)
398
402
  precision = self.safe_string(currency, 'precision')
399
403
  return Precise.string_mul(amount, precision)
ccxt/bitrue.py CHANGED
@@ -52,6 +52,9 @@ class bitrue(Exchange, ImplicitAPI):
52
52
  'option': False,
53
53
  'cancelAllOrders': True,
54
54
  'cancelOrder': True,
55
+ 'createMarketBuyOrderWithCost': True,
56
+ 'createMarketOrderWithCost': False,
57
+ 'createMarketSellOrderWithCost': False,
55
58
  'createOrder': True,
56
59
  'createStopLimitOrder': True,
57
60
  'createStopMarketOrder': True,
@@ -1803,6 +1806,23 @@ class bitrue(Exchange, ImplicitAPI):
1803
1806
  'trades': fills,
1804
1807
  }, market)
1805
1808
 
1809
+ def create_market_buy_order_with_cost(self, symbol: str, cost, params={}):
1810
+ """
1811
+ create a market buy order by providing the symbol and cost
1812
+ :see: https://www.bitrue.com/api-docs#new-order-trade-hmac-sha256
1813
+ :see: https://www.bitrue.com/api_docs_includes_file/delivery.html#new-order-trade-hmac-sha256
1814
+ :param str symbol: unified symbol of the market to create an order in
1815
+ :param float cost: how much you want to trade in units of the quote currency
1816
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1817
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1818
+ """
1819
+ self.load_markets()
1820
+ market = self.market(symbol)
1821
+ if not market['swap']:
1822
+ raise NotSupported(self.id + ' createMarketBuyOrderWithCost() supports swap orders only')
1823
+ params['createMarketBuyOrderRequiresPrice'] = False
1824
+ return self.create_order(symbol, 'market', 'buy', cost, None, params)
1825
+
1806
1826
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount, price=None, params={}):
1807
1827
  """
1808
1828
  create a trade order
@@ -1824,6 +1844,7 @@ class bitrue(Exchange, ImplicitAPI):
1824
1844
  * EXCHANGE SPECIFIC PARAMETERS
1825
1845
  :param decimal [params.icebergQty]:
1826
1846
  :param long [params.recvWindow]:
1847
+ :param float [params.cost]: *swap market buy only* the quote quantity that can be used alternative for the amount
1827
1848
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1828
1849
  """
1829
1850
  self.load_markets()
@@ -1855,7 +1876,9 @@ class bitrue(Exchange, ImplicitAPI):
1855
1876
  elif timeInForce == 'ioc':
1856
1877
  request['type'] = 'IOC'
1857
1878
  request['contractName'] = market['id']
1858
- if isMarket and (side == 'buy') and (self.options['createMarketBuyOrderRequiresPrice']):
1879
+ createMarketBuyOrderRequiresPrice = True
1880
+ createMarketBuyOrderRequiresPrice, params = self.handle_option_and_params(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', True)
1881
+ if isMarket and (side == 'buy') and createMarketBuyOrderRequiresPrice:
1859
1882
  cost = self.safe_string(params, 'cost')
1860
1883
  params = self.omit(params, 'cost')
1861
1884
  if price is None and cost is None:
ccxt/bitstamp.py CHANGED
@@ -1007,6 +1007,7 @@ class bitstamp(Exchange, ImplicitAPI):
1007
1007
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
1008
1008
  """
1009
1009
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1010
+ :see: https://www.bitstamp.net/api/#tag/Market-info/operation/GetOHLCData
1010
1011
  :param str symbol: unified symbol of the market to fetch OHLCV data for
1011
1012
  :param str timeframe: the length of time each candle represents
1012
1013
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -1028,13 +1029,13 @@ class bitstamp(Exchange, ImplicitAPI):
1028
1029
  limit = 1000
1029
1030
  start = self.parse_to_int(since / 1000)
1030
1031
  request['start'] = start
1031
- request['end'] = self.sum(start, limit * duration)
1032
+ request['end'] = self.sum(start, duration * (limit - 1))
1032
1033
  request['limit'] = limit
1033
1034
  else:
1034
1035
  if since is not None:
1035
1036
  start = self.parse_to_int(since / 1000)
1036
1037
  request['start'] = start
1037
- request['end'] = self.sum(start, limit * duration)
1038
+ request['end'] = self.sum(start, duration * (limit - 1))
1038
1039
  request['limit'] = min(limit, 1000) # min 1, max 1000
1039
1040
  response = self.publicGetOhlcPair(self.extend(request, params))
1040
1041
  #
ccxt/coinbase.py CHANGED
@@ -51,7 +51,10 @@ class coinbase(Exchange, ImplicitAPI):
51
51
  'createLimitBuyOrder': True,
52
52
  'createLimitSellOrder': True,
53
53
  'createMarketBuyOrder': True,
54
+ 'createMarketBuyOrderWithCost': True,
55
+ 'createMarketOrderWithCost': False,
54
56
  'createMarketSellOrder': True,
57
+ 'createMarketSellOrderWithCost': False,
55
58
  'createOrder': True,
56
59
  'createPostOnlyOrder': True,
57
60
  'createReduceOnlyOrder': False,
@@ -2010,6 +2013,22 @@ class coinbase(Exchange, ImplicitAPI):
2010
2013
  request['limit'] = limit
2011
2014
  return request
2012
2015
 
2016
+ def create_market_buy_order_with_cost(self, symbol: str, cost, params={}):
2017
+ """
2018
+ create a market buy order by providing the symbol and cost
2019
+ :see: https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_postorder
2020
+ :param str symbol: unified symbol of the market to create an order in
2021
+ :param float cost: how much you want to trade in units of the quote currency
2022
+ :param dict [params]: extra parameters specific to the exchange API endpoint
2023
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
2024
+ """
2025
+ self.load_markets()
2026
+ market = self.market(symbol)
2027
+ if not market['spot']:
2028
+ raise NotSupported(self.id + ' createMarketBuyOrderWithCost() supports spot orders only')
2029
+ params['createMarketBuyOrderRequiresPrice'] = False
2030
+ return self.create_order(symbol, 'market', 'buy', cost, None, params)
2031
+
2013
2032
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount, price=None, params={}):
2014
2033
  """
2015
2034
  create a trade order
@@ -2028,6 +2047,7 @@ class coinbase(Exchange, ImplicitAPI):
2028
2047
  :param str [params.timeInForce]: 'GTC', 'IOC', 'GTD' or 'PO'
2029
2048
  :param str [params.stop_direction]: 'UNKNOWN_STOP_DIRECTION', 'STOP_DIRECTION_STOP_UP', 'STOP_DIRECTION_STOP_DOWN' the direction the stopPrice is triggered from
2030
2049
  :param str [params.end_time]: '2023-05-25T17:01:05.092Z' for 'GTD' orders
2050
+ :param float [params.cost]: *spot market buy only* the quote quantity that can be used alternative for the amount
2031
2051
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
2032
2052
  """
2033
2053
  self.load_markets()
@@ -2114,18 +2134,23 @@ class coinbase(Exchange, ImplicitAPI):
2114
2134
  if isStop or isStopLoss or isTakeProfit:
2115
2135
  raise NotSupported(self.id + ' createOrder() only stop limit orders are supported')
2116
2136
  if side == 'buy':
2117
- createMarketBuyOrderRequiresPrice = self.safe_value(self.options, 'createMarketBuyOrderRequiresPrice', True)
2118
2137
  total = None
2119
- if createMarketBuyOrderRequiresPrice:
2138
+ createMarketBuyOrderRequiresPrice = True
2139
+ createMarketBuyOrderRequiresPrice, params = self.handle_option_and_params(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', True)
2140
+ cost = self.safe_number(params, 'cost')
2141
+ params = self.omit(params, 'cost')
2142
+ if cost is not None:
2143
+ total = self.cost_to_precision(symbol, cost)
2144
+ elif createMarketBuyOrderRequiresPrice:
2120
2145
  if price is None:
2121
- raise InvalidOrder(self.id + ' createOrder() requires a price argument for market buy orders on spot markets to calculate the total amount to spend(amount * price), alternatively set the createMarketBuyOrderRequiresPrice option to False and pass in the cost to spend into the amount parameter')
2146
+ raise InvalidOrder(self.id + ' createOrder() requires a price argument for market buy orders on spot markets to calculate the total amount to spend(amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to False and pass the cost to spend in the amount argument')
2122
2147
  else:
2123
2148
  amountString = self.number_to_string(amount)
2124
2149
  priceString = self.number_to_string(price)
2125
- cost = self.parse_number(Precise.string_mul(amountString, priceString))
2126
- total = self.price_to_precision(symbol, cost)
2150
+ costRequest = Precise.string_mul(amountString, priceString)
2151
+ total = self.cost_to_precision(symbol, costRequest)
2127
2152
  else:
2128
- total = self.price_to_precision(symbol, amount)
2153
+ total = self.cost_to_precision(symbol, amount)
2129
2154
  request['order_configuration'] = {
2130
2155
  'market_market_ioc': {
2131
2156
  'quote_size': total,
ccxt/gate.py CHANGED
@@ -560,6 +560,7 @@ class gate(Exchange, ImplicitAPI):
560
560
  '15m': '15m',
561
561
  '30m': '30m',
562
562
  '1h': '1h',
563
+ '2h': '2h',
563
564
  '4h': '4h',
564
565
  '8h': '8h',
565
566
  '1d': '1d',
ccxt/okx.py CHANGED
@@ -41,7 +41,7 @@ class okx(Exchange, ImplicitAPI):
41
41
  'name': 'OKX',
42
42
  'countries': ['CN', 'US'],
43
43
  'version': 'v5',
44
- 'rateLimit': 100,
44
+ 'rateLimit': 100 * 1.03, # 3% tolerance because of #20229
45
45
  'pro': True,
46
46
  'certified': True,
47
47
  'has': {
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.1.76'
7
+ __version__ = '4.1.77'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.1.76
3
+ Version: 4.1.77
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
@@ -258,13 +258,13 @@ console.log(version, Object.keys(exchanges));
258
258
 
259
259
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
260
260
 
261
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.1.76/dist/ccxt.browser.js
262
- * unpkg: https://unpkg.com/ccxt@4.1.76/dist/ccxt.browser.js
261
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.1.77/dist/ccxt.browser.js
262
+ * unpkg: https://unpkg.com/ccxt@4.1.77/dist/ccxt.browser.js
263
263
 
264
264
  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.
265
265
 
266
266
  ```HTML
267
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.1.76/dist/ccxt.browser.js"></script>
267
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.1.77/dist/ccxt.browser.js"></script>
268
268
  ```
269
269
 
270
270
  Creates a global `ccxt` object:
@@ -1,4 +1,4 @@
1
- ccxt/__init__.py,sha256=P5MNgOPBVO14AOVKxMxGvo7s0OUUWM_rkE7qNJcMWDE,15081
1
+ ccxt/__init__.py,sha256=NK5qAeq23uUSgEvJiDK_RknzdkkFd59-jhENPS-AZKQ,15081
2
2
  ccxt/ace.py,sha256=bB8RjymWAEI2MYEHMW70GwbIowmOMN9r4RY1tlj4gjY,41348
3
3
  ccxt/alpaca.py,sha256=Tnc7yGp1b1iRLCZiR14iphBLEe5_01vZdbZsoy3FRao,46028
4
4
  ccxt/ascendex.py,sha256=EQjZX2RRa2vBCIPnKsfaRpam9MCEGHe_zWOwMkGJ_b0,143331
@@ -8,7 +8,7 @@ ccxt/binance.py,sha256=jIPu6e63jpirjppsCYNTLuRGR9mN5ybPnKT5_9z0yHM,444225
8
8
  ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
9
9
  ccxt/binanceus.py,sha256=VuAty9YMKtrRhPzu9uN9OtLpEcTuih_rwW5y24QILkU,3554
10
10
  ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
11
- ccxt/bingx.py,sha256=czJOp_8vCt0P205tIvLvvTmckulVtdMSSapqWPzkq1I,138872
11
+ ccxt/bingx.py,sha256=BCijmkgNSOKFzXjcUg3EOHIW-YUgPtxyH57CJSp1-WE,138954
12
12
  ccxt/bit2c.py,sha256=hIqfedh-2SauVWQnhiZyuS4sf9dy-NApYL7USMayqKo,36068
13
13
  ccxt/bitbank.py,sha256=eGEd_9eGcSJHCRpSETeqvJQJoiguLU-nLZrkq3nVze4,41604
14
14
  ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
@@ -21,12 +21,12 @@ ccxt/bitforex.py,sha256=pdgV_sR-qHkMUBmASOSGinbmGCn0FKZN10hJgwXlY0Y,33761
21
21
  ccxt/bitget.py,sha256=H5QLjI0suJpKZ6WgbL9_T_3ADUmG2vgF_bLZQgrsSL4,333699
22
22
  ccxt/bithumb.py,sha256=mji93l7rEBQVhoJKxHQnEIMtMvk7wkIRrfN7o0hxYPI,43325
23
23
  ccxt/bitmart.py,sha256=fkNVvPOPDG4YGkCgG7eszINhdJ0L2sIdfykiQOsfidU,183971
24
- ccxt/bitmex.py,sha256=Rkq9dcvirx7iDulIA2s9gEulv17UZsEMcwy7dNSprHI,119569
24
+ ccxt/bitmex.py,sha256=YK2AOrNmvWcxVdNwh33Zv86U1MUjpD3qHARKn1ZJ0WY,119673
25
25
  ccxt/bitopro.py,sha256=ziUX4lmEIcgQgnGIXvcot97X9tvZ0pBLr8jZMCDYREQ,68055
26
26
  ccxt/bitpanda.py,sha256=udZVycV9g-XXGNYudNwvnHZL7eEK16zp8AlSoQbGmQk,87916
27
- ccxt/bitrue.py,sha256=B4ZiW8pTSm2GQ0OlE-MRmWvo9FUAiDHEc-e8lDaMDzs,134655
27
+ ccxt/bitrue.py,sha256=bTjy5FdKi5KfutpQDBaR7Vbpltkq1RCkEK2AidmRAN4,136147
28
28
  ccxt/bitso.py,sha256=tXGh_sjBF3xWciIBR26Ql6VzJvkBcarNIVy8V6w5_iI,69522
29
- ccxt/bitstamp.py,sha256=-p_14BkIRUclDZqjke_Q4bD8RrGA3ICKCdU2hcVxm5Q,85365
29
+ ccxt/bitstamp.py,sha256=6d8S_jBUBsHh8QfmEal_zmbsysc93qSuVk2SQfaDqZQ,85459
30
30
  ccxt/bittrex.py,sha256=c6oR_M-BrMX4jugWjsXVUb-gqoqVYAqMCG9xO78yROA,96641
31
31
  ccxt/bitvavo.py,sha256=hiSDtxO3fNsuTDM99cyuBsD4lMlsRUYUUjba6BTBA5E,84672
32
32
  ccxt/bl3p.py,sha256=X9vdABvIrH0-PyPX2nwJM_3ErKYdxmnq8WJTvsOAWts,17767
@@ -37,7 +37,7 @@ ccxt/btcmarkets.py,sha256=d9il29c2YsdPO56SKy1WsfxuILIHxQJRF-fVJ37rl4E,48582
37
37
  ccxt/btcturk.py,sha256=j51LBBkUqnikl6Xa7AZ1Wl8XAvA_KnFLzb42dMZoSds,35458
38
38
  ccxt/bybit.py,sha256=thO1RUCZmP4RB2rQp6-DcXCirBqBx03V-1-M6LnBW_Y,354420
39
39
  ccxt/cex.py,sha256=XCdjEFY0ulfeUucO4rKZnVHXSl6wESq9u_FujLGGuB8,68727
40
- ccxt/coinbase.py,sha256=gylFJZKDBzuT6bGE-eFDXsjRF1eriy8UJUw_Tj2O1pM,143595
40
+ ccxt/coinbase.py,sha256=qpotVdK6NQS_GbuYe7EqzrZYlOgQaLHYp4heh2E8Tpc,145123
41
41
  ccxt/coinbaseprime.py,sha256=Ygvljulxb2uKdei5yimCj1LMjLlUJNvP-G7ns1HpUFk,1219
42
42
  ccxt/coinbasepro.py,sha256=gpe6UVg4pDDpvzjVGE_fKeoDmkdIyzNucANptY9FeH8,80087
43
43
  ccxt/coincheck.py,sha256=g_gMrlcnNimI3k1SxI9Du7gmmpqd9dZSn-u3SVgHgkQ,34627
@@ -55,7 +55,7 @@ ccxt/digifinex.py,sha256=5OeiNfFIM-w3AAPvMXE7SIWIrtfV4bUvyxiaeCSCEo4,165923
55
55
  ccxt/exmo.py,sha256=Vpp-5PSHf4sC8C_2aNIQG9MO2vavYftf2WpZHK3DIhs,111768
56
56
  ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
57
57
  ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
58
- ccxt/gate.py,sha256=y6HtMu4XYA7zRLKDzUur_waewpdgicn4hNCgM3jAIws,294187
58
+ ccxt/gate.py,sha256=FDkuXNuTFbCMcQZRo_KeauvgkiMDCIcDJ8KpIsmQaNw,294215
59
59
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
60
60
  ccxt/gemini.py,sha256=uKUl5-1e1fXUmTgItn_CiIa9oyCxzhCe1QtgdWTi9Uw,74637
61
61
  ccxt/hitbtc.py,sha256=4L--cDzLMh2ckUFJzm-lll1Jzg7lOrGUAfO1DHD6Kuc,140528
@@ -86,7 +86,7 @@ ccxt/oceanex.py,sha256=aEnK9rjZYACIw_heL0NQ9AsvxlTq2dnhXx_LTkZyIgw,37630
86
86
  ccxt/okcoin.py,sha256=nv6n4Hu0rQcD2vzgxEQXgxIEfZUXL0OX0QFPLidqUWU,145598
87
87
  ccxt/okex.py,sha256=nVDSzVztmboH593DVByjzFoOpFTzumcQFH_T9kdVKlE,434
88
88
  ccxt/okex5.py,sha256=LKTogVF1svNkqW_-Cx0AuAopu6esgFf7ucbv7CaodUg,441
89
- ccxt/okx.py,sha256=IKui9oYsUB93h-g1AvUw21DFT7Py1HVn5sjnWyuShxY,322695
89
+ ccxt/okx.py,sha256=blwweJ51OkIFVFiqWGUUyV7D7l8FiDCOF8lT8HSmp7s,322737
90
90
  ccxt/p2b.py,sha256=drrJDIulMgC3ZicZTTCNQuiHJ4Q5yWKQZp8WglUmrjA,54043
91
91
  ccxt/paymium.py,sha256=oH4zQkMF7IGkq9co953Riz8wuhUj6xxKSmqs7Rz2n1s,24122
92
92
  ccxt/phemex.py,sha256=LgkusilxAEpZazFkIaiUbRX4RF4hOMHlpYctVtqZQ1Q,205280
@@ -204,7 +204,7 @@ ccxt/abstract/woo.py,sha256=Z3ua45hKE0Tf9rtfSEYYgGEztaTO1Ri3mKl_hIo3OHs,8768
204
204
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
205
205
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
206
206
  ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
207
- ccxt/async_support/__init__.py,sha256=2PrTYP9gOR5lwNeMdusLeLIx38MiIAey_lGrNUHitDA,14794
207
+ ccxt/async_support/__init__.py,sha256=0JNZ2hDunad4dWeQuzbF3CDqs-kruHZVqEWCrJxbnII,14794
208
208
  ccxt/async_support/ace.py,sha256=5fHmmLyH7G-Dh0RvvHYmO7X6kmuMlanS4LmD_RqX8-s,41572
209
209
  ccxt/async_support/alpaca.py,sha256=Hx87_BHTcOWoyogACXP1OoBWIMGq9TuuN4AfpGeKjVI,46240
210
210
  ccxt/async_support/ascendex.py,sha256=GHeezJpE30VFKhVC-AKtLM5GJsGav0nNgCrvlRkN5gE,144071
@@ -214,7 +214,7 @@ ccxt/async_support/binance.py,sha256=HP2EYa_FLXG14dLIxaA-5Yp31NGMmMWbOLRbZXM2Aes
214
214
  ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
215
215
  ccxt/async_support/binanceus.py,sha256=ENoZ52LuAo4x-OLdAlXJvEdD3VjofqWQpUzgiGoSZIw,3568
216
216
  ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
217
- ccxt/async_support/bingx.py,sha256=idy6tPH6dtapPfbmiKDHufCS-zmPlpHVWB24iVjCkYI,139698
217
+ ccxt/async_support/bingx.py,sha256=zkATHnfgYG0-1lQu2vbopcDvmNjCbWeryCnM9f8VQP0,139780
218
218
  ccxt/async_support/bit2c.py,sha256=yl5ur2ejyyxTSoc5_Bj8LNWx_GhK9Aows-v9NZuu8x0,36274
219
219
  ccxt/async_support/bitbank.py,sha256=rUeL8JyeagI5HOy00UrTPvwB2xFX6Rf0rwXhoXK3oEs,41864
220
220
  ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
@@ -227,12 +227,12 @@ ccxt/async_support/bitforex.py,sha256=B0YnnDV8OCcY9VPY3UXo4DBZ8QF9xYH1jHNdBFi7Zf
227
227
  ccxt/async_support/bitget.py,sha256=cL4LBfw0tSUTN-kFYbrm-zDoXJXvDFqeQfNcZIQq3VU,335113
228
228
  ccxt/async_support/bithumb.py,sha256=D2vQybc5kOv5S5VfwQUjw2Ri_tvItfZkzw4FW3TlGvo,43543
229
229
  ccxt/async_support/bitmart.py,sha256=v38YBX4GXdKlmlxku-Z4yOlInz7setYz29LPpFlcJUc,184879
230
- ccxt/async_support/bitmex.py,sha256=FRJ4atymKQnfnInSh3H2RnHtfcgsepBYF_Z8ONHWshQ,120111
230
+ ccxt/async_support/bitmex.py,sha256=3JhJOASP0TF4rwJlsXdW5yrA2EKZKjqDxDfSSV3otHY,120215
231
231
  ccxt/async_support/bitopro.py,sha256=WS89yAscqwyZYtMFLpF45XhcTEsQgfqs6CpX_0Fuh7o,68447
232
232
  ccxt/async_support/bitpanda.py,sha256=4kMrriboIdTLslQUHV7wQkOC9wavo7tXDU5ArAmtWT8,88368
233
- ccxt/async_support/bitrue.py,sha256=vKpCJtEsEoLaMwoy23SKvnTeN2l955g32VbcJN7cIcA,135307
233
+ ccxt/async_support/bitrue.py,sha256=0urgKMo9epxQgBKn41LdYGamM99jvmwoDfqFyDdPBiY,136817
234
234
  ccxt/async_support/bitso.py,sha256=pzY1N0FQZOY23yVn4Gln3M5tGBCOmMzrQ_SWdPZOoCk,69908
235
- ccxt/async_support/bitstamp.py,sha256=HBSpfsC2k88xDtOT7o3ACsshsFLbQm30aUNq_XmC8GA,85805
235
+ ccxt/async_support/bitstamp.py,sha256=Yj-a1f6f-ua3kf7uCTYMrJv2zehvYIi-30XuqTLMsTM,85899
236
236
  ccxt/async_support/bittrex.py,sha256=60pkyqZJ0WZOhlSFGuj1fOt3t-kSBeGeiXYlW6XOH1Y,97171
237
237
  ccxt/async_support/bitvavo.py,sha256=MOhbZQ21Z4QRtG3tP29Ltsq5eybQuhFolBhwkW5QpLk,85106
238
238
  ccxt/async_support/bl3p.py,sha256=8fvFQCUOGLYe2q2ElCTdpAWyqt0a4k09kbZ207leADM,17877
@@ -243,7 +243,7 @@ ccxt/async_support/btcmarkets.py,sha256=i1H6KESr8nL7xDuFqmRvy0VQmHnAKrQkD_RPP7Zt
243
243
  ccxt/async_support/btcturk.py,sha256=3zAGyyBqjTTbMhQNijsf5C9I1CdpElWz8B8gOkNYYCM,35676
244
244
  ccxt/async_support/bybit.py,sha256=Jmrox-Fy1_BXkhUTJ3E-jIhe0QnrSvxTn_CECgnn2UQ,355882
245
245
  ccxt/async_support/cex.py,sha256=Y7BhBRl240JStGJc9PeeVWP2Q4ESiQyUtAnPfbd1Vyw,69071
246
- ccxt/async_support/coinbase.py,sha256=aj9rKANHlQpNtIP2aojmyK5Wbk-lfTDNrQxsotkEkrQ,144359
246
+ ccxt/async_support/coinbase.py,sha256=1MdVsicCyCqJkB2lRARRxOgJwtnzZwqw0vm7GlwexR8,145905
247
247
  ccxt/async_support/coinbaseprime.py,sha256=M5Ez1DsFcW3-vJ-4QoZzwYBAKjAAtJnJpkfnV4sWAIc,1233
248
248
  ccxt/async_support/coinbasepro.py,sha256=yfHm6Hx0afMSogFlNLtKPc38YPip1l211285XYewRfk,80611
249
249
  ccxt/async_support/coincheck.py,sha256=5W5TXe7eDAwy1LkuMOB1JE6wzQIQYlZ9orS2ct9uRk4,34833
@@ -261,7 +261,7 @@ ccxt/async_support/digifinex.py,sha256=tza4_wKbBQpDKyNXHUYtjA1aSVQC86yo41oV8NQ0W
261
261
  ccxt/async_support/exmo.py,sha256=PsAnyAt10JIr9sN0SsMiNOywcxoU6k_kz9qO-U4gv6I,112400
262
262
  ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
263
263
  ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
264
- ccxt/async_support/gate.py,sha256=tE5m19swJqeiYXFVqYBJXe5ShqMmcFtSPlGHoN5bR9c,295679
264
+ ccxt/async_support/gate.py,sha256=EqT27DNzq4gf04GHxWDidYmV4MTn3APjyuCjMCNGNN4,295707
265
265
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
266
266
  ccxt/async_support/gemini.py,sha256=n9DU6a648p32Wfcb6z9hQ8swQFq-BXTWY7dA1BXPUBk,75139
267
267
  ccxt/async_support/hitbtc.py,sha256=03XsnK7JR4mQQZ9G7DhX2Zk7xvE4lb6rpm2jvzLWwqQ,141334
@@ -292,7 +292,7 @@ ccxt/async_support/oceanex.py,sha256=fvjFGdRVza2wPzwLCeShmf9ujJfsoSG2mieY-jiPxXU
292
292
  ccxt/async_support/okcoin.py,sha256=S06CKWHUzXM8GCRV0RgWzG0IOfPHs6HVYIy4KznHoIo,146080
293
293
  ccxt/async_support/okex.py,sha256=6dbtH4bC1C2x4cQUK6W62y7PuDgO3YazuFa7DYhM4Jw,448
294
294
  ccxt/async_support/okex5.py,sha256=tq41tKx06j3DDO9pu9iKInpjayVprbobVNTK8qb7hoM,455
295
- ccxt/async_support/okx.py,sha256=6m6AhISD7ayrUVebmIZdwnvnpzal8aJqJd60icAm60U,323994
295
+ ccxt/async_support/okx.py,sha256=WIAYWedXQKwa8a06yJfS9QFaBQAGFcQPaF9qx_uF6YM,324036
296
296
  ccxt/async_support/p2b.py,sha256=c5EU7roZl3hfIqznpNgl7HtTLtSwb6hNy8b2j31EuV0,54285
297
297
  ccxt/async_support/paymium.py,sha256=ytSECSpo34-Uz_AcKYmcXgfewmymtBEspkHlVyHLPAE,24310
298
298
  ccxt/async_support/phemex.py,sha256=bwvM7vG3aQ4aWYa07LnOyvaopaRS94rXp9dmz6XmQiI,206062
@@ -311,7 +311,7 @@ ccxt/async_support/yobit.py,sha256=d9bkNQqL47g7zwt4g_PnhoTQETISVwL8TfhmInvKvkU,5
311
311
  ccxt/async_support/zaif.py,sha256=-YCjZLw87m9m-JXxUCr6AEC8KfnNX8b7IVSv5caW3QQ,28158
312
312
  ccxt/async_support/zonda.py,sha256=huZYyfwcqQ6kxkxnkf7CW0nXbYWe6nTWnSJjxy5W3po,80676
313
313
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
314
- ccxt/async_support/base/exchange.py,sha256=wwmBsqesTVVSfrfl5l6Rm3q0zXm-7zcDGUZmWdrVELg,70409
314
+ ccxt/async_support/base/exchange.py,sha256=vrMpFdk1e2x5bV9yK88JbjHpiZmVNgzwEY704BRPFiw,70409
315
315
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
316
316
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
317
317
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=_qjsl_x-rd88QmzQeGVWovMDK0XoD3f4m5GHqxZRajs,5203
@@ -325,10 +325,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
325
325
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
326
326
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
327
327
  ccxt/base/errors.py,sha256=1C38u76jlNGq06N_uwfw8b8FZHK8_3_90wM1rKfU_Rg,3878
328
- ccxt/base/exchange.py,sha256=6sxu7CYfpYICsXkRtSOk4E38ALAlHv_EQyITAtxzvdU,216767
328
+ ccxt/base/exchange.py,sha256=_RVP3hfhnh097kKXP3i2LOCWCOn5gDHbzHAUloG6-j0,216767
329
329
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
330
330
  ccxt/base/types.py,sha256=LN8MOE5oGr8ATL6VNuMAnE9f6o2fZ9zbeLLyXLndlEk,5528
331
- ccxt/pro/__init__.py,sha256=DSj0IECISm-SzrrWMc98419h8nWYFJBCBAdwaUfa1B8,6376
331
+ ccxt/pro/__init__.py,sha256=kb3L8CjhVP0JKxPT2LJNfhu3LUzY3jVPT9DmBBQkVLs,6376
332
332
  ccxt/pro/alpaca.py,sha256=fy1mLmw4yac7DKvGPpaqEBuA8briQqaRwPbvKsKUJwY,26974
333
333
  ccxt/pro/ascendex.py,sha256=GqH6QOPZfQtbAYhdB65zJ9iIMQDGsXugSyAPUsKXk40,34730
334
334
  ccxt/pro/bequant.py,sha256=3IeQ0vPg-eVqPiGMfX7yqH9qtXKm1ZqocQDeLwpA8EE,1093
@@ -438,7 +438,7 @@ ccxt/test/base/test_ticker.py,sha256=5J8KHgFhJLgcWyFwt3bhJ-tldMho3K7LD5yJnnUyrT4
438
438
  ccxt/test/base/test_trade.py,sha256=AN3emAdEPhdFyunap43cKqZTS1cbaShZKTjYue67jEU,2297
439
439
  ccxt/test/base/test_trading_fee.py,sha256=2_WCp3qJ2UpraQQoGFlGJYwHD-T0Bm5W7KIw4zpFvSM,1068
440
440
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
441
- ccxt-4.1.76.dist-info/METADATA,sha256=i88Bg23EZMzhDZ6iLC35rnCbPQAeHbyuf-Ll7VkXnxw,106139
442
- ccxt-4.1.76.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
443
- ccxt-4.1.76.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
444
- ccxt-4.1.76.dist-info/RECORD,,
441
+ ccxt-4.1.77.dist-info/METADATA,sha256=edLZZ1IYKhK3PvedVztO7LpKPyFewmxku5KeJNoMLI0,106139
442
+ ccxt-4.1.77.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
443
+ ccxt-4.1.77.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
444
+ ccxt-4.1.77.dist-info/RECORD,,
File without changes