ccxt 4.2.86__py2.py3-none-any.whl → 4.2.88__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ccxt might be problematic. Click here for more details.

Files changed (82) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/ascendex.py +16 -6
  3. ccxt/async_support/__init__.py +1 -1
  4. ccxt/async_support/ascendex.py +16 -6
  5. ccxt/async_support/base/exchange.py +1 -1
  6. ccxt/async_support/binance.py +28 -11
  7. ccxt/async_support/bingx.py +39 -3
  8. ccxt/async_support/bitfinex.py +2 -0
  9. ccxt/async_support/bitfinex2.py +18 -4
  10. ccxt/async_support/bitflyer.py +18 -0
  11. ccxt/async_support/bitget.py +37 -22
  12. ccxt/async_support/bitopro.py +2 -0
  13. ccxt/async_support/bitrue.py +16 -8
  14. ccxt/async_support/bitvavo.py +2 -0
  15. ccxt/async_support/btcmarkets.py +1 -1
  16. ccxt/async_support/btcturk.py +2 -1
  17. ccxt/async_support/coinex.py +182 -58
  18. ccxt/async_support/cryptocom.py +1 -1
  19. ccxt/async_support/currencycom.py +1 -1
  20. ccxt/async_support/delta.py +8 -6
  21. ccxt/async_support/digifinex.py +9 -7
  22. ccxt/async_support/exmo.py +15 -15
  23. ccxt/async_support/gate.py +23 -20
  24. ccxt/async_support/hitbtc.py +31 -7
  25. ccxt/async_support/htx.py +2 -2
  26. ccxt/async_support/huobijp.py +1 -1
  27. ccxt/async_support/hyperliquid.py +242 -16
  28. ccxt/async_support/idex.py +1 -1
  29. ccxt/async_support/krakenfutures.py +4 -5
  30. ccxt/async_support/kucoin.py +7 -4
  31. ccxt/async_support/kucoinfutures.py +2 -2
  32. ccxt/async_support/lbank.py +2 -0
  33. ccxt/async_support/mexc.py +4 -4
  34. ccxt/async_support/oceanex.py +1 -1
  35. ccxt/async_support/okx.py +29 -15
  36. ccxt/async_support/phemex.py +6 -4
  37. ccxt/async_support/wazirx.py +1 -1
  38. ccxt/async_support/zonda.py +2 -0
  39. ccxt/base/exchange.py +22 -3
  40. ccxt/base/types.py +12 -0
  41. ccxt/binance.py +28 -11
  42. ccxt/bingx.py +39 -3
  43. ccxt/bitfinex.py +2 -0
  44. ccxt/bitfinex2.py +18 -4
  45. ccxt/bitflyer.py +18 -0
  46. ccxt/bitget.py +37 -22
  47. ccxt/bitopro.py +2 -0
  48. ccxt/bitrue.py +16 -8
  49. ccxt/bitvavo.py +2 -0
  50. ccxt/btcmarkets.py +1 -1
  51. ccxt/btcturk.py +2 -1
  52. ccxt/coinex.py +182 -58
  53. ccxt/cryptocom.py +1 -1
  54. ccxt/currencycom.py +1 -1
  55. ccxt/delta.py +8 -6
  56. ccxt/digifinex.py +9 -7
  57. ccxt/exmo.py +15 -15
  58. ccxt/gate.py +23 -20
  59. ccxt/hitbtc.py +31 -7
  60. ccxt/htx.py +2 -2
  61. ccxt/huobijp.py +1 -1
  62. ccxt/hyperliquid.py +241 -16
  63. ccxt/idex.py +1 -1
  64. ccxt/krakenfutures.py +4 -5
  65. ccxt/kucoin.py +7 -4
  66. ccxt/kucoinfutures.py +2 -2
  67. ccxt/lbank.py +2 -0
  68. ccxt/mexc.py +4 -4
  69. ccxt/oceanex.py +1 -1
  70. ccxt/okx.py +29 -15
  71. ccxt/phemex.py +6 -4
  72. ccxt/pro/__init__.py +1 -1
  73. ccxt/pro/kucoin.py +10 -6
  74. ccxt/test/base/test_last_price.py +0 -1
  75. ccxt/test/base/test_shared_methods.py +1 -2
  76. ccxt/test/base/test_status.py +1 -1
  77. ccxt/wazirx.py +1 -1
  78. ccxt/zonda.py +2 -0
  79. {ccxt-4.2.86.dist-info → ccxt-4.2.88.dist-info}/METADATA +5 -6
  80. {ccxt-4.2.86.dist-info → ccxt-4.2.88.dist-info}/RECORD +82 -82
  81. {ccxt-4.2.86.dist-info → ccxt-4.2.88.dist-info}/WHEEL +0 -0
  82. {ccxt-4.2.86.dist-info → ccxt-4.2.88.dist-info}/top_level.txt +0 -0
ccxt/krakenfutures.py CHANGED
@@ -363,7 +363,8 @@ class krakenfutures(Exchange, ImplicitAPI):
363
363
  # swap == perpetual
364
364
  settle = None
365
365
  settleId = None
366
- amountPrecision = self.parse_number(self.parse_precision(self.safe_string(market, 'contractValueTradePrecision', '0')))
366
+ cvtp = self.safe_string(market, 'contractValueTradePrecision')
367
+ amountPrecision = self.parse_number(self.integer_precision_to_amount(cvtp))
367
368
  pricePrecision = self.safe_number(market, 'tickSize')
368
369
  contract = (swap or future or index)
369
370
  swapOrFutures = (swap or future)
@@ -635,14 +636,12 @@ class krakenfutures(Exchange, ImplicitAPI):
635
636
  request['from'] = self.parse_to_int(since / 1000)
636
637
  if limit is None:
637
638
  limit = 5000
638
- elif limit > 5000:
639
- raise BadRequest(self.id + ' fetchOHLCV() limit cannot exceed 5000')
639
+ limit = min(limit, 5000)
640
640
  toTimestamp = self.sum(request['from'], limit * duration - 1)
641
641
  currentTimestamp = self.seconds()
642
642
  request['to'] = min(toTimestamp, currentTimestamp)
643
643
  elif limit is not None:
644
- if limit > 5000:
645
- raise BadRequest(self.id + ' fetchOHLCV() limit cannot exceed 5000')
644
+ limit = min(limit, 5000)
646
645
  duration = self.parse_timeframe(timeframe)
647
646
  request['to'] = self.seconds()
648
647
  request['from'] = self.parse_to_int(request['to'] - (duration * limit))
ccxt/kucoin.py CHANGED
@@ -3325,9 +3325,9 @@ class kucoin(Exchange, ImplicitAPI):
3325
3325
  def fetch_balance(self, params={}) -> Balances:
3326
3326
  """
3327
3327
  query for balance and get the amount of funds available for trading or funds locked in orders
3328
- :see: https://docs.kucoin.com/#list-accounts
3329
3328
  :see: https://www.kucoin.com/docs/rest/account/basic-info/get-account-list-spot-margin-trade_hf
3330
- :see: https://docs.kucoin.com/#query-isolated-margin-account-info
3329
+ :see: https://www.kucoin.com/docs/rest/funding/funding-overview/get-account-detail-margin
3330
+ :see: https://www.kucoin.com/docs/rest/funding/funding-overview/get-account-detail-isolated-margin
3331
3331
  :param dict [params]: extra parameters specific to the exchange API endpoint
3332
3332
  :param dict [params.marginMode]: 'cross' or 'isolated', margin type for fetching margin balance
3333
3333
  :param dict [params.type]: extra parameters specific to the exchange API endpoint
@@ -3352,7 +3352,7 @@ class kucoin(Exchange, ImplicitAPI):
3352
3352
  response = None
3353
3353
  request = {}
3354
3354
  isolated = (marginMode == 'isolated') or (type == 'isolated')
3355
- cross = (marginMode == 'cross') or (type == 'cross')
3355
+ cross = (marginMode == 'cross') or (type == 'margin')
3356
3356
  if isolated:
3357
3357
  if currency is not None:
3358
3358
  request['balanceCurrency'] = currency['id']
@@ -3417,13 +3417,14 @@ class kucoin(Exchange, ImplicitAPI):
3417
3417
  # }
3418
3418
  # }
3419
3419
  #
3420
- data = self.safe_list(response, 'data', [])
3420
+ data = None
3421
3421
  result = {
3422
3422
  'info': response,
3423
3423
  'timestamp': None,
3424
3424
  'datetime': None,
3425
3425
  }
3426
3426
  if isolated:
3427
+ data = self.safe_dict(response, 'data', {})
3427
3428
  assets = self.safe_value(data, 'assets', data)
3428
3429
  for i in range(0, len(assets)):
3429
3430
  entry = assets[i]
@@ -3438,6 +3439,7 @@ class kucoin(Exchange, ImplicitAPI):
3438
3439
  subResult[quoteCode] = self.parse_balance_helper(quote)
3439
3440
  result[symbol] = self.safe_balance(subResult)
3440
3441
  elif cross:
3442
+ data = self.safe_dict(response, 'data', {})
3441
3443
  accounts = self.safe_list(data, 'accounts', [])
3442
3444
  for i in range(0, len(accounts)):
3443
3445
  balance = accounts[i]
@@ -3445,6 +3447,7 @@ class kucoin(Exchange, ImplicitAPI):
3445
3447
  codeInner = self.safe_currency_code(currencyId)
3446
3448
  result[codeInner] = self.parse_balance_helper(balance)
3447
3449
  else:
3450
+ data = self.safe_list(response, 'data', [])
3448
3451
  for i in range(0, len(data)):
3449
3452
  balance = data[i]
3450
3453
  balanceType = self.safe_string(balance, 'type')
ccxt/kucoinfutures.py CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  from ccxt.kucoin import kucoin
7
7
  from ccxt.abstract.kucoinfutures import ImplicitAPI
8
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
8
+ from ccxt.base.types import Balances, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
9
  from typing import List
10
10
  from ccxt.base.errors import PermissionDenied
11
11
  from ccxt.base.errors import AccountSuspended
@@ -1424,7 +1424,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
1424
1424
  #
1425
1425
  return self.safe_value(response, 'data')
1426
1426
 
1427
- def add_margin(self, symbol: str, amount, params={}):
1427
+ def add_margin(self, symbol: str, amount, params={}) -> MarginModification:
1428
1428
  """
1429
1429
  add margin
1430
1430
  :see: https://www.kucoin.com/docs/rest/futures-trading/positions/add-margin-manually
ccxt/lbank.py CHANGED
@@ -969,6 +969,8 @@ class lbank(Exchange, ImplicitAPI):
969
969
  market = self.market(symbol)
970
970
  if limit is None:
971
971
  limit = 100
972
+ else:
973
+ limit = min(limit, 2000)
972
974
  if since is None:
973
975
  duration = self.parse_timeframe(timeframe)
974
976
  since = self.milliseconds() - duration * 1000 * limit
ccxt/mexc.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.mexc import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Account, Balances, Currency, IndexType, Int, Leverage, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Account, Balances, Currency, IndexType, Int, Leverage, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -3778,7 +3778,7 @@ class mexc(Exchange, ImplicitAPI):
3778
3778
  # }
3779
3779
  return response
3780
3780
 
3781
- def reduce_margin(self, symbol: str, amount, params={}):
3781
+ def reduce_margin(self, symbol: str, amount, params={}) -> MarginModification:
3782
3782
  """
3783
3783
  remove margin from a position
3784
3784
  :param str symbol: unified market symbol
@@ -3788,7 +3788,7 @@ class mexc(Exchange, ImplicitAPI):
3788
3788
  """
3789
3789
  return self.modify_margin_helper(symbol, amount, 'SUB', params)
3790
3790
 
3791
- def add_margin(self, symbol: str, amount, params={}):
3791
+ def add_margin(self, symbol: str, amount, params={}) -> MarginModification:
3792
3792
  """
3793
3793
  add margin
3794
3794
  :param str symbol: unified market symbol
@@ -4228,7 +4228,7 @@ class mexc(Exchange, ImplicitAPI):
4228
4228
  key = self.safe_string(keys, 0)
4229
4229
  result = self.safe_dict(addressStructures, key)
4230
4230
  if result is None:
4231
- raise InvalidAddress(self.id + ' fetchDepositAddress() cannot find a deposit address for ' + code + ', and network' + network + 'consider creating one using the MEXC platform')
4231
+ raise InvalidAddress(self.id + ' fetchDepositAddress() cannot find a deposit address for ' + code + ', and network' + network + 'consider creating one using .createDepositAddress() method or in MEXC website')
4232
4232
  return result
4233
4233
 
4234
4234
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
ccxt/oceanex.py CHANGED
@@ -750,7 +750,7 @@ class oceanex(Exchange, ImplicitAPI):
750
750
  if since is not None:
751
751
  request['timestamp'] = since
752
752
  if limit is not None:
753
- request['limit'] = limit
753
+ request['limit'] = min(limit, 10000)
754
754
  response = self.publicPostK(self.extend(request, params))
755
755
  ohlcvs = self.safe_list(response, 'data', [])
756
756
  return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
ccxt/okx.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.okx import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Account, Balances, Currency, Greeks, Int, Leverage, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Account, Balances, Currency, Greeks, Int, Leverage, MarginModification, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -6006,7 +6006,7 @@ class okx(Exchange, ImplicitAPI):
6006
6006
  data = self.safe_value(response, 'data')
6007
6007
  return self.parse_borrow_rate_history(data, code, since, limit)
6008
6008
 
6009
- def modify_margin_helper(self, symbol: str, amount, type, params={}):
6009
+ def modify_margin_helper(self, symbol: str, amount, type, params={}) -> MarginModification:
6010
6010
  self.load_markets()
6011
6011
  market = self.market(symbol)
6012
6012
  posSide = self.safe_string(params, 'posSide', 'net')
@@ -6032,29 +6032,43 @@ class okx(Exchange, ImplicitAPI):
6032
6032
  # "msg": ""
6033
6033
  # }
6034
6034
  #
6035
- return self.parse_margin_modification(response, market)
6035
+ data = self.safe_list(response, 'data', [])
6036
+ errorCode = self.safe_string(response, 'code')
6037
+ item = self.safe_dict(data, 0, {})
6038
+ return self.extend(self.parse_margin_modification(item, market), {
6039
+ 'status': 'ok' if (errorCode == '0') else 'failed',
6040
+ })
6036
6041
 
6037
- def parse_margin_modification(self, data, market: Market = None):
6038
- innerData = self.safe_value(data, 'data', [])
6039
- entry = self.safe_value(innerData, 0, {})
6040
- errorCode = self.safe_string(data, 'code')
6041
- status = 'ok' if (errorCode == '0') else 'failed'
6042
- amountRaw = self.safe_number(entry, 'amt')
6043
- typeRaw = self.safe_string(entry, 'type')
6042
+ def parse_margin_modification(self, data, market: Market = None) -> MarginModification:
6043
+ #
6044
+ # addMargin/reduceMargin
6045
+ #
6046
+ # {
6047
+ # "amt": "0.01",
6048
+ # "instId": "ETH-USD-SWAP",
6049
+ # "posSide": "net",
6050
+ # "type": "reduce"
6051
+ # }
6052
+ #
6053
+ amountRaw = self.safe_number(data, 'amt')
6054
+ typeRaw = self.safe_string(data, 'type')
6044
6055
  type = 'reduce' if (typeRaw == 'reduce') else 'add'
6045
- marketId = self.safe_string(entry, 'instId')
6056
+ marketId = self.safe_string(data, 'instId')
6046
6057
  responseMarket = self.safe_market(marketId, market)
6047
6058
  code = responseMarket['base'] if responseMarket['inverse'] else responseMarket['quote']
6048
6059
  return {
6049
6060
  'info': data,
6061
+ 'symbol': responseMarket['symbol'],
6050
6062
  'type': type,
6051
6063
  'amount': amountRaw,
6064
+ 'total': None,
6052
6065
  'code': code,
6053
- 'symbol': responseMarket['symbol'],
6054
- 'status': status,
6066
+ 'status': None,
6067
+ 'timestamp': None,
6068
+ 'datetime': None,
6055
6069
  }
6056
6070
 
6057
- def reduce_margin(self, symbol: str, amount, params={}):
6071
+ def reduce_margin(self, symbol: str, amount, params={}) -> MarginModification:
6058
6072
  """
6059
6073
  remove margin from a position
6060
6074
  :see: https://www.okx.com/docs-v5/en/#trading-account-rest-api-increase-decrease-margin
@@ -6065,7 +6079,7 @@ class okx(Exchange, ImplicitAPI):
6065
6079
  """
6066
6080
  return self.modify_margin_helper(symbol, amount, 'reduce', params)
6067
6081
 
6068
- def add_margin(self, symbol: str, amount, params={}):
6082
+ def add_margin(self, symbol: str, amount, params={}) -> MarginModification:
6069
6083
  """
6070
6084
  add margin
6071
6085
  :see: https://www.okx.com/docs-v5/en/#trading-account-rest-api-increase-decrease-margin
ccxt/phemex.py CHANGED
@@ -7,7 +7,7 @@ from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.phemex import ImplicitAPI
8
8
  import hashlib
9
9
  import numbers
10
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
10
+ from ccxt.base.types import Balances, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
13
  from ccxt.base.errors import PermissionDenied
@@ -3744,7 +3744,7 @@ class phemex(Exchange, ImplicitAPI):
3744
3744
  'previousFundingDatetime': None,
3745
3745
  }
3746
3746
 
3747
- def set_margin(self, symbol: str, amount: float, params={}):
3747
+ def set_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
3748
3748
  """
3749
3749
  Either adds or reduces margin in an isolated position in order to set the margin to a specific value
3750
3750
  :see: https://github.com/phemex/phemex-api-docs/blob/master/Public-Contract-API-en.md#assign-position-balance-in-isolated-marign-mode
@@ -3777,7 +3777,7 @@ class phemex(Exchange, ImplicitAPI):
3777
3777
  }
3778
3778
  return self.safe_string(statuses, status, status)
3779
3779
 
3780
- def parse_margin_modification(self, data, market: Market = None):
3780
+ def parse_margin_modification(self, data, market: Market = None) -> MarginModification:
3781
3781
  #
3782
3782
  # {
3783
3783
  # "code": 0,
@@ -3790,12 +3790,14 @@ class phemex(Exchange, ImplicitAPI):
3790
3790
  codeCurrency = 'base' if inverse else 'quote'
3791
3791
  return {
3792
3792
  'info': data,
3793
+ 'symbol': self.safe_symbol(None, market),
3793
3794
  'type': 'set',
3794
3795
  'amount': None,
3795
3796
  'total': None,
3796
3797
  'code': market[codeCurrency],
3797
- 'symbol': self.safe_symbol(None, market),
3798
3798
  'status': self.parse_margin_status(self.safe_string(data, 'code')),
3799
+ 'timestamp': None,
3800
+ 'datetime': None,
3799
3801
  }
3800
3802
 
3801
3803
  def set_margin_mode(self, marginMode: str, symbol: Str = None, params={}):
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.86'
7
+ __version__ = '4.2.88'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/kucoin.py CHANGED
@@ -536,14 +536,18 @@ class kucoin(ccxt.async_support.kucoin):
536
536
  marketId = self.safe_string(data, 'symbol', topicSymbol)
537
537
  symbol = self.safe_symbol(marketId, None, '-')
538
538
  messageHash = 'orderbook:' + symbol
539
- orderbook = self.safe_dict(self.orderbooks, symbol)
539
+ # orderbook = self.safe_dict(self.orderbooks, symbol)
540
540
  if subject == 'level2':
541
- if orderbook is None:
542
- orderbook = self.order_book()
541
+ if not (symbol in self.orderbooks):
542
+ self.orderbooks[symbol] = self.order_book()
543
543
  else:
544
+ orderbook = self.orderbooks[symbol]
544
545
  orderbook.reset()
545
- orderbook['symbol'] = symbol
546
+ self.orderbooks[symbol]['symbol'] = symbol
546
547
  else:
548
+ if not (symbol in self.orderbooks):
549
+ self.orderbooks[symbol] = self.order_book()
550
+ orderbook = self.orderbooks[symbol]
547
551
  nonce = self.safe_integer(orderbook, 'nonce')
548
552
  deltaEnd = self.safe_integer_2(data, 'sequenceEnd', 'timestamp')
549
553
  if nonce is None:
@@ -563,8 +567,8 @@ class kucoin(ccxt.async_support.kucoin):
563
567
  return
564
568
  elif nonce >= deltaEnd:
565
569
  return
566
- self.handle_delta(orderbook, data)
567
- client.resolve(orderbook, messageHash)
570
+ self.handle_delta(self.orderbooks[symbol], data)
571
+ client.resolve(self.orderbooks[symbol], messageHash)
568
572
 
569
573
  def get_cache_index(self, orderbook, cache):
570
574
  firstDelta = self.safe_value(cache, 0)
@@ -12,7 +12,6 @@ sys.path.append(root)
12
12
  # ----------------------------------------------------------------------------
13
13
  # -*- coding: utf-8 -*-
14
14
 
15
- from ccxt.base.precise import Precise # noqa E402
16
15
  from ccxt.test.base import test_shared_methods # noqa E402
17
16
 
18
17
  def test_last_price(exchange, skipped_properties, method, entry, symbol):
@@ -15,9 +15,8 @@ sys.path.append(root)
15
15
  from ccxt.base.decimal_to_precision import TICK_SIZE # noqa E402
16
16
  import numbers # noqa E402
17
17
  from ccxt.base.precise import Precise # noqa E402
18
- from ccxt.base.errors import OperationFailed # noqa E402
19
18
  from ccxt.base.errors import OnMaintenance # noqa E402
20
- from ccxt.base.errors import ArgumentsRequired # noqa E402
19
+ from ccxt.base.errors import OperationFailed # noqa E402
21
20
 
22
21
  def log_template(exchange, method, entry):
23
22
  return ' <<< ' + exchange.id + ' ' + method + ' ::: ' + exchange.json(entry) + ' >>> '
@@ -12,7 +12,7 @@ sys.path.append(root)
12
12
  # ----------------------------------------------------------------------------
13
13
  # -*- coding: utf-8 -*-
14
14
 
15
- from ccxt.test.base import test_shared_methods # noqa E402
15
+
16
16
 
17
17
  def test_status(exchange, skipped_properties, method, entry, now):
18
18
  format = {
ccxt/wazirx.py CHANGED
@@ -324,7 +324,7 @@ class wazirx(Exchange, ImplicitAPI):
324
324
  'interval': self.safe_string(self.timeframes, timeframe, timeframe),
325
325
  }
326
326
  if limit is not None:
327
- request['limit'] = limit
327
+ request['limit'] = min(limit, 2000)
328
328
  until = self.safe_integer(params, 'until')
329
329
  params = self.omit(params, ['until'])
330
330
  if since is not None:
ccxt/zonda.py CHANGED
@@ -1181,6 +1181,8 @@ class zonda(Exchange, ImplicitAPI):
1181
1181
  }
1182
1182
  if limit is None:
1183
1183
  limit = 100
1184
+ else:
1185
+ limit = min(limit, 11000) # supports up to 11k candles diapason
1184
1186
  duration = self.parse_timeframe(timeframe)
1185
1187
  timerange = limit * duration * 1000
1186
1188
  if since is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.2.86
3
+ Version: 4.2.88
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -69,7 +69,6 @@ Current feature list:
69
69
 
70
70
 
71
71
  ## Sponsored Promotion
72
- [![bitget](https://github.com/ccxt/ccxt/assets/43336371/71359af3-c78f-4077-a64c-ac0bfe1fa01c)](https://www.bitget.com/events/competition/86c98f96df155e6bb397e866dcd86afc?channelCode=ccxt&vipCode=tg9j)
73
72
 
74
73
  ## See Also
75
74
 
@@ -102,7 +101,7 @@ Current feature list:
102
101
  | [![okx](https://user-images.githubusercontent.com/1294454/152485636-38b19e4a-bece-4dec-979a-5982859ffc04.jpg)](https://www.okx.com/join/CCXT2023) | okx | [OKX](https://www.okx.com/join/CCXT2023) | [![API Version 5](https://img.shields.io/badge/5-lightgray)](https://www.okx.com/docs-v5/en/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with OKX using CCXT's referral link for a 20% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d20%25&color=orange)](https://www.okx.com/join/CCXT2023) |
103
102
  | [![woo](https://user-images.githubusercontent.com/1294454/150730761-1a00e5e0-d28c-480f-9e65-089ce3e6ef3b.jpg)](https://x.woo.org/register?ref=YWOWC96B) | woo | [WOO X](https://x.woo.org/register?ref=YWOWC96B) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.woo.org/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with WOO X using CCXT's referral link for a 35% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d35%25&color=orange)](https://x.woo.org/register?ref=YWOWC96B) |
104
103
 
105
- ## Supported Cryptocurrency Exchange Markets
104
+ ## Supported Cryptocurrency Exchanges
106
105
 
107
106
  The CCXT library currently supports the following 97 cryptocurrency exchange markets and trading APIs:
108
107
 
@@ -262,13 +261,13 @@ console.log(version, Object.keys(exchanges));
262
261
 
263
262
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
264
263
 
265
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.86/dist/ccxt.browser.js
266
- * unpkg: https://unpkg.com/ccxt@4.2.86/dist/ccxt.browser.js
264
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.88/dist/ccxt.browser.js
265
+ * unpkg: https://unpkg.com/ccxt@4.2.88/dist/ccxt.browser.js
267
266
 
268
267
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
269
268
 
270
269
  ```HTML
271
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.86/dist/ccxt.browser.js"></script>
270
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.88/dist/ccxt.browser.js"></script>
272
271
  ```
273
272
 
274
273
  Creates a global `ccxt` object: