ccxt 4.4.82__py2.py3-none-any.whl → 4.4.86__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.
Files changed (121) hide show
  1. ccxt/__init__.py +3 -9
  2. ccxt/abstract/blofin.py +8 -0
  3. ccxt/abstract/btcbox.py +1 -0
  4. ccxt/abstract/myokx.py +2 -0
  5. ccxt/abstract/okx.py +2 -0
  6. ccxt/apex.py +2 -1
  7. ccxt/ascendex.py +187 -151
  8. ccxt/async_support/__init__.py +3 -9
  9. ccxt/async_support/apex.py +2 -1
  10. ccxt/async_support/ascendex.py +187 -151
  11. ccxt/async_support/base/exchange.py +51 -24
  12. ccxt/async_support/base/ws/cache.py +6 -1
  13. ccxt/async_support/bequant.py +1 -1
  14. ccxt/async_support/bitget.py +5 -6
  15. ccxt/async_support/bitmart.py +1 -1
  16. ccxt/async_support/bitrue.py +14 -32
  17. ccxt/async_support/bitso.py +33 -0
  18. ccxt/async_support/bitstamp.py +33 -0
  19. ccxt/async_support/{huobijp.py → bittrade.py} +11 -11
  20. ccxt/async_support/blofin.py +145 -14
  21. ccxt/async_support/btcbox.py +25 -5
  22. ccxt/async_support/bybit.py +16 -37
  23. ccxt/async_support/cex.py +2 -4
  24. ccxt/async_support/coinbase.py +58 -47
  25. ccxt/async_support/coinbaseexchange.py +141 -32
  26. ccxt/async_support/coincatch.py +14 -67
  27. ccxt/async_support/coinex.py +28 -29
  28. ccxt/async_support/coinlist.py +17 -16
  29. ccxt/async_support/coinmetro.py +20 -11
  30. ccxt/async_support/coinone.py +8 -10
  31. ccxt/async_support/coinsph.py +124 -2
  32. ccxt/async_support/cryptocom.py +109 -2
  33. ccxt/async_support/cryptomus.py +42 -80
  34. ccxt/async_support/delta.py +75 -36
  35. ccxt/async_support/deribit.py +4 -5
  36. ccxt/async_support/derive.py +46 -10
  37. ccxt/async_support/ellipx.py +175 -77
  38. ccxt/async_support/gate.py +1 -1
  39. ccxt/async_support/gemini.py +3 -4
  40. ccxt/async_support/hitbtc.py +56 -65
  41. ccxt/async_support/hollaex.py +106 -49
  42. ccxt/async_support/htx.py +20 -43
  43. ccxt/async_support/hyperliquid.py +6 -6
  44. ccxt/async_support/kraken.py +27 -23
  45. ccxt/async_support/kucoinfutures.py +5 -0
  46. ccxt/async_support/lbank.py +1 -1
  47. ccxt/async_support/mexc.py +2 -2
  48. ccxt/async_support/ndax.py +25 -24
  49. ccxt/async_support/okcoin.py +12 -29
  50. ccxt/async_support/okx.py +9 -0
  51. ccxt/async_support/onetrading.py +10 -7
  52. ccxt/async_support/oxfun.py +40 -110
  53. ccxt/async_support/paradex.py +123 -4
  54. ccxt/base/exchange.py +21 -2
  55. ccxt/base/types.py +3 -0
  56. ccxt/bequant.py +1 -1
  57. ccxt/bitget.py +5 -6
  58. ccxt/bitmart.py +1 -1
  59. ccxt/bitrue.py +14 -32
  60. ccxt/bitso.py +33 -0
  61. ccxt/bitstamp.py +33 -0
  62. ccxt/{huobijp.py → bittrade.py} +11 -11
  63. ccxt/blofin.py +145 -14
  64. ccxt/btcbox.py +24 -5
  65. ccxt/bybit.py +16 -37
  66. ccxt/cex.py +2 -4
  67. ccxt/coinbase.py +58 -47
  68. ccxt/coinbaseexchange.py +141 -32
  69. ccxt/coincatch.py +14 -67
  70. ccxt/coinex.py +28 -29
  71. ccxt/coinlist.py +17 -16
  72. ccxt/coinmetro.py +20 -11
  73. ccxt/coinone.py +8 -10
  74. ccxt/coinsph.py +124 -2
  75. ccxt/cryptocom.py +109 -2
  76. ccxt/cryptomus.py +42 -80
  77. ccxt/delta.py +75 -36
  78. ccxt/deribit.py +4 -5
  79. ccxt/derive.py +46 -10
  80. ccxt/ellipx.py +175 -77
  81. ccxt/gate.py +1 -1
  82. ccxt/gemini.py +3 -4
  83. ccxt/hitbtc.py +56 -65
  84. ccxt/hollaex.py +106 -49
  85. ccxt/htx.py +20 -43
  86. ccxt/hyperliquid.py +6 -6
  87. ccxt/kraken.py +27 -23
  88. ccxt/kucoinfutures.py +5 -0
  89. ccxt/lbank.py +1 -1
  90. ccxt/mexc.py +2 -2
  91. ccxt/ndax.py +25 -24
  92. ccxt/okcoin.py +12 -29
  93. ccxt/okx.py +9 -0
  94. ccxt/onetrading.py +10 -7
  95. ccxt/oxfun.py +40 -110
  96. ccxt/paradex.py +123 -4
  97. ccxt/pro/__init__.py +109 -5
  98. ccxt/pro/binance.py +32 -33
  99. ccxt/pro/bithumb.py +5 -3
  100. ccxt/pro/{huobijp.py → bittrade.py} +3 -3
  101. ccxt/pro/kraken.py +249 -79
  102. ccxt/pro/luno.py +6 -5
  103. ccxt/pro/mexc.py +254 -7
  104. ccxt/pro/poloniex.py +6 -2
  105. {ccxt-4.4.82.dist-info → ccxt-4.4.86.dist-info}/METADATA +8 -11
  106. {ccxt-4.4.82.dist-info → ccxt-4.4.86.dist-info}/RECORD +110 -121
  107. ccxt/abstract/bl3p.py +0 -19
  108. ccxt/abstract/idex.py +0 -26
  109. ccxt/abstract/kuna.py +0 -182
  110. ccxt/async_support/base/ws/fast_client.py +0 -97
  111. ccxt/async_support/bl3p.py +0 -543
  112. ccxt/async_support/idex.py +0 -1889
  113. ccxt/async_support/kuna.py +0 -1935
  114. ccxt/bl3p.py +0 -543
  115. ccxt/idex.py +0 -1889
  116. ccxt/kuna.py +0 -1935
  117. ccxt/pro/idex.py +0 -687
  118. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  119. {ccxt-4.4.82.dist-info → ccxt-4.4.86.dist-info}/LICENSE.txt +0 -0
  120. {ccxt-4.4.82.dist-info → ccxt-4.4.86.dist-info}/WHEEL +0 -0
  121. {ccxt-4.4.82.dist-info → ccxt-4.4.86.dist-info}/top_level.txt +0 -0
ccxt/pro/mexc.py CHANGED
@@ -39,6 +39,12 @@ class mexc(ccxt.async_support.mexc):
39
39
  'watchBidsAsks': True,
40
40
  'watchTrades': True,
41
41
  'watchTradesForSymbols': False,
42
+ 'unWatchTicker': True,
43
+ 'unWatchTickers': True,
44
+ 'unWatchBidsAsks': True,
45
+ 'unWatchOHLCV': True,
46
+ 'unWatchOrderBook': True,
47
+ 'unWatchTrades': True,
42
48
  },
43
49
  'urls': {
44
50
  'api': {
@@ -471,12 +477,15 @@ class mexc(ccxt.async_support.mexc):
471
477
  }, market)
472
478
 
473
479
  async def watch_spot_public(self, channel, messageHash, params={}):
480
+ unsubscribed = self.safe_bool(params, 'unsubscribed', False)
481
+ params = self.omit(params, ['unsubscribed'])
474
482
  url = self.urls['api']['ws']['spot']
483
+ method = 'UNSUBSCRIPTION' if (unsubscribed) else 'SUBSCRIPTION'
475
484
  request: dict = {
476
- 'method': 'SUBSCRIPTION',
485
+ 'method': method,
477
486
  'params': [channel],
478
487
  }
479
- return await self.watch(url, messageHash, self.extend(request, params), channel)
488
+ return await self.watch(url, messageHash, self.extend(request, params), messageHash)
480
489
 
481
490
  async def watch_spot_private(self, channel, messageHash, params={}):
482
491
  self.check_required_credentials()
@@ -759,11 +768,8 @@ class mexc(ccxt.async_support.mexc):
759
768
  messageHash = 'orderbook:' + symbol
760
769
  subscription = self.safe_value(client.subscriptions, messageHash)
761
770
  limit = self.safe_integer(subscription, 'limit')
762
- if subscription is True:
763
- # we set client.subscriptions[messageHash] to 1
764
- # once we have received the first delta and initialized the orderbook
765
- client.subscriptions[messageHash] = 1
766
- self.orderbooks[symbol] = self.counted_order_book({})
771
+ if not (symbol in self.orderbooks):
772
+ self.orderbooks[symbol] = self.order_book()
767
773
  storedOrderBook = self.orderbooks[symbol]
768
774
  nonce = self.safe_integer(storedOrderBook, 'nonce')
769
775
  if nonce is None:
@@ -1351,6 +1357,247 @@ class mexc(ccxt.async_support.mexc):
1351
1357
  self.balance[type] = self.safe_balance(self.balance[type])
1352
1358
  client.resolve(self.balance[type], messageHash)
1353
1359
 
1360
+ async def un_watch_ticker(self, symbol: str, params={}) -> Any:
1361
+ """
1362
+ unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
1363
+ :param str symbol: unified symbol of the market to fetch the ticker for
1364
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1365
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
1366
+ """
1367
+ await self.load_markets()
1368
+ market = self.market(symbol)
1369
+ messageHash = 'unsubscribe:ticker:' + market['symbol']
1370
+ url = None
1371
+ channel = None
1372
+ if market['spot']:
1373
+ miniTicker = False
1374
+ miniTicker, params = self.handle_option_and_params(params, 'watchTicker', 'miniTicker')
1375
+ if miniTicker:
1376
+ channel = 'spot@public.miniTicker.v3.api@' + market['id'] + '@UTC+8'
1377
+ else:
1378
+ channel = 'spot@public.bookTicker.v3.api@' + market['id']
1379
+ url = self.urls['api']['ws']['spot']
1380
+ params['unsubscribed'] = True
1381
+ self.watch_spot_public(channel, messageHash, params)
1382
+ else:
1383
+ channel = 'unsub.ticker'
1384
+ requestParams: dict = {
1385
+ 'symbol': market['id'],
1386
+ }
1387
+ url = self.urls['api']['ws']['swap']
1388
+ self.watch_swap_public(channel, messageHash, requestParams, params)
1389
+ client = self.client(url)
1390
+ self.handle_unsubscriptions(client, [messageHash])
1391
+ return None
1392
+
1393
+ async def un_watch_tickers(self, symbols: Strings = None, params={}) -> Any:
1394
+ """
1395
+ unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
1396
+ :param str[] symbols: unified symbol of the market to fetch the ticker for
1397
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1398
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
1399
+ """
1400
+ await self.load_markets()
1401
+ symbols = self.market_symbols(symbols, None)
1402
+ messageHashes = []
1403
+ firstSymbol = self.safe_string(symbols, 0)
1404
+ market = None
1405
+ if firstSymbol is not None:
1406
+ market = self.market(firstSymbol)
1407
+ type = None
1408
+ type, params = self.handle_market_type_and_params('watchTickers', market, params)
1409
+ isSpot = (type == 'spot')
1410
+ url = self.urls['api']['ws']['spot'] if (isSpot) else self.urls['api']['ws']['swap']
1411
+ request: dict = {}
1412
+ if isSpot:
1413
+ miniTicker = False
1414
+ miniTicker, params = self.handle_option_and_params(params, 'watchTickers', 'miniTicker')
1415
+ topics = []
1416
+ if not miniTicker:
1417
+ if symbols is None:
1418
+ raise ArgumentsRequired(self.id + ' watchTickers required symbols argument for the bookTicker channel')
1419
+ marketIds = self.market_ids(symbols)
1420
+ for i in range(0, len(marketIds)):
1421
+ marketId = marketIds[i]
1422
+ messageHashes.append('unsubscribe:ticker:' + symbols[i])
1423
+ channel = 'spot@public.bookTicker.v3.api@' + marketId
1424
+ topics.append(channel)
1425
+ else:
1426
+ topics.append('spot@public.miniTickers.v3.api@UTC+8')
1427
+ if symbols is None:
1428
+ messageHashes.append('unsubscribe:spot:ticker')
1429
+ else:
1430
+ for i in range(0, len(symbols)):
1431
+ messageHashes.append('unsubscribe:ticker:' + symbols[i])
1432
+ request['method'] = 'UNSUBSCRIPTION'
1433
+ request['params'] = topics
1434
+ else:
1435
+ request['method'] = 'unsub.tickers'
1436
+ request['params'] = {}
1437
+ messageHashes.append('unsubscribe:ticker')
1438
+ client = self.client(url)
1439
+ self.watch_multiple(url, messageHashes, self.extend(request, params), messageHashes)
1440
+ self.handle_unsubscriptions(client, messageHashes)
1441
+ return None
1442
+
1443
+ async def un_watch_bids_asks(self, symbols: Strings = None, params={}) -> Any:
1444
+ """
1445
+ unWatches best bid & ask for symbols
1446
+ :param str[] symbols: unified symbol of the market to fetch the ticker for
1447
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1448
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
1449
+ """
1450
+ await self.load_markets()
1451
+ symbols = self.market_symbols(symbols, None, True, False, True)
1452
+ marketType = None
1453
+ if symbols is None:
1454
+ raise ArgumentsRequired(self.id + ' watchBidsAsks required symbols argument')
1455
+ markets = self.markets_for_symbols(symbols)
1456
+ marketType, params = self.handle_market_type_and_params('watchBidsAsks', markets[0], params)
1457
+ isSpot = marketType == 'spot'
1458
+ if not isSpot:
1459
+ raise NotSupported(self.id + ' watchBidsAsks only support spot market')
1460
+ messageHashes = []
1461
+ topics = []
1462
+ for i in range(0, len(symbols)):
1463
+ if isSpot:
1464
+ market = self.market(symbols[i])
1465
+ topics.append('spot@public.bookTicker.v3.api@' + market['id'])
1466
+ messageHashes.append('unsubscribe:bidask:' + symbols[i])
1467
+ url = self.urls['api']['ws']['spot']
1468
+ request: dict = {
1469
+ 'method': 'UNSUBSCRIPTION',
1470
+ 'params': topics,
1471
+ }
1472
+ client = self.client(url)
1473
+ self.watch_multiple(url, messageHashes, self.extend(request, params), messageHashes)
1474
+ self.handle_unsubscriptions(client, messageHashes)
1475
+ return None
1476
+
1477
+ async def un_watch_ohlcv(self, symbol: str, timeframe='1m', params={}) -> Any:
1478
+ """
1479
+ unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1480
+ :param str symbol: unified symbol of the market to fetch OHLCV data for
1481
+ :param str timeframe: the length of time each candle represents
1482
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1483
+ :param dict [params.timezone]: if provided, kline intervals are interpreted in that timezone instead of UTC, example '+08:00'
1484
+ :returns int[][]: A list of candles ordered, open, high, low, close, volume
1485
+ """
1486
+ await self.load_markets()
1487
+ market = self.market(symbol)
1488
+ symbol = market['symbol']
1489
+ timeframes = self.safe_value(self.options, 'timeframes', {})
1490
+ timeframeId = self.safe_string(timeframes, timeframe)
1491
+ messageHash = 'unsubscribe:candles:' + symbol + ':' + timeframe
1492
+ url = None
1493
+ if market['spot']:
1494
+ url = self.urls['api']['ws']['spot']
1495
+ channel = 'spot@public.kline.v3.api@' + market['id'] + '@' + timeframeId
1496
+ params['unsubscribed'] = True
1497
+ self.watch_spot_public(channel, messageHash, params)
1498
+ else:
1499
+ url = self.urls['api']['ws']['swap']
1500
+ channel = 'unsub.kline'
1501
+ requestParams: dict = {
1502
+ 'symbol': market['id'],
1503
+ 'interval': timeframeId,
1504
+ }
1505
+ self.watch_swap_public(channel, messageHash, requestParams, params)
1506
+ client = self.client(url)
1507
+ self.handle_unsubscriptions(client, [messageHash])
1508
+ return None
1509
+
1510
+ async def un_watch_order_book(self, symbol: str, params={}) -> Any:
1511
+ """
1512
+ unWatches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
1513
+ :param str symbol: unified array of symbols
1514
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1515
+ :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
1516
+ """
1517
+ await self.load_markets()
1518
+ market = self.market(symbol)
1519
+ symbol = market['symbol']
1520
+ messageHash = 'unsubscribe:orderbook:' + symbol
1521
+ url = None
1522
+ if market['spot']:
1523
+ url = self.urls['api']['ws']['spot']
1524
+ channel = 'spot@public.increase.depth.v3.api@' + market['id']
1525
+ params['unsubscribed'] = True
1526
+ self.watch_spot_public(channel, messageHash, params)
1527
+ else:
1528
+ url = self.urls['api']['ws']['swap']
1529
+ channel = 'unsub.depth'
1530
+ requestParams: dict = {
1531
+ 'symbol': market['id'],
1532
+ }
1533
+ self.watch_swap_public(channel, messageHash, requestParams, params)
1534
+ client = self.client(url)
1535
+ self.handle_unsubscriptions(client, [messageHash])
1536
+ return None
1537
+
1538
+ async def un_watch_trades(self, symbol: str, params={}) -> Any:
1539
+ """
1540
+ unsubscribes from the trades channel
1541
+ :param str symbol: unified symbol of the market to fetch trades for
1542
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1543
+ :param str [params.name]: the name of the method to call, 'trade' or 'aggTrade', default is 'trade'
1544
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
1545
+ """
1546
+ await self.load_markets()
1547
+ market = self.market(symbol)
1548
+ symbol = market['symbol']
1549
+ messageHash = 'unsubscribe:trades:' + symbol
1550
+ url = None
1551
+ if market['spot']:
1552
+ url = self.urls['api']['ws']['spot']
1553
+ channel = 'spot@public.deals.v3.api@' + market['id']
1554
+ params['unsubscribed'] = True
1555
+ self.watch_spot_public(channel, messageHash, params)
1556
+ else:
1557
+ url = self.urls['api']['ws']['swap']
1558
+ channel = 'unsub.deal'
1559
+ requestParams: dict = {
1560
+ 'symbol': market['id'],
1561
+ }
1562
+ self.watch_swap_public(channel, messageHash, requestParams, params)
1563
+ client = self.client(url)
1564
+ self.handle_unsubscriptions(client, [messageHash])
1565
+ return None
1566
+
1567
+ def handle_unsubscriptions(self, client: Client, messageHashes: List[str]):
1568
+ for i in range(0, len(messageHashes)):
1569
+ messageHash = messageHashes[i]
1570
+ subMessageHash = messageHash.replace('unsubscribe:', '')
1571
+ self.clean_unsubscription(client, subMessageHash, messageHash)
1572
+ if messageHash.find('ticker') >= 0:
1573
+ symbol = messageHash.replace('unsubscribe:ticker:', '')
1574
+ if symbol.find('unsubscribe') >= 0:
1575
+ # unWatchTickers
1576
+ symbols = list(self.tickers.keys())
1577
+ for j in range(0, len(symbols)):
1578
+ del self.tickers[symbols[j]]
1579
+ elif symbol in self.tickers:
1580
+ del self.tickers[symbol]
1581
+ elif messageHash.find('bidask') >= 0:
1582
+ symbol = messageHash.replace('unsubscribe:bidask:', '')
1583
+ if symbol in self.bidsasks:
1584
+ del self.bidsasks[symbol]
1585
+ elif messageHash.find('candles') >= 0:
1586
+ splitHashes = messageHash.split(':')
1587
+ symbol = self.safe_string(splitHashes, 2)
1588
+ if len(splitHashes) > 4:
1589
+ symbol += ':' + self.safe_string(splitHashes, 3)
1590
+ if symbol in self.ohlcvs:
1591
+ del self.ohlcvs[symbol]
1592
+ elif messageHash.find('orderbook') >= 0:
1593
+ symbol = messageHash.replace('unsubscribe:orderbook:', '')
1594
+ if symbol in self.orderbooks:
1595
+ del self.orderbooks[symbol]
1596
+ elif messageHash.find('trades') >= 0:
1597
+ symbol = messageHash.replace('unsubscribe:trades:', '')
1598
+ if symbol in self.trades:
1599
+ del self.trades[symbol]
1600
+
1354
1601
  async def authenticate(self, subscriptionHash, params={}):
1355
1602
  # we only need one listenKey since ccxt shares connections
1356
1603
  listenKey = self.safe_string(self.options, 'listenKey')
ccxt/pro/poloniex.py CHANGED
@@ -244,7 +244,9 @@ class poloniex(ccxt.async_support.poloniex):
244
244
  request['quantity'] = self.amount_to_precision(market['symbol'], amount)
245
245
  if price is not None:
246
246
  request['price'] = self.price_to_precision(symbol, price)
247
- return await self.trade_request('createOrder', self.extend(request, params))
247
+ orders = await self.trade_request('createOrder', self.extend(request, params))
248
+ order = self.safe_dict(orders, 0)
249
+ return order
248
250
 
249
251
  async def cancel_order_ws(self, id: str, symbol: Str = None, params={}):
250
252
  """
@@ -262,7 +264,9 @@ class poloniex(ccxt.async_support.poloniex):
262
264
  if clientOrderId is not None:
263
265
  clientOrderIds = self.safe_value(params, 'clientOrderId', [])
264
266
  params['clientOrderIds'] = self.array_concat(clientOrderIds, [clientOrderId])
265
- return await self.cancel_orders_ws([id], symbol, params)
267
+ orders = await self.cancel_orders_ws([id], symbol, params)
268
+ order = self.safe_dict(orders, 0)
269
+ return order
266
270
 
267
271
  async def cancel_orders_ws(self, ids: List[str], symbol: Str = None, params={}):
268
272
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.4.82
3
+ Version: 4.4.86
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
@@ -38,7 +38,7 @@ Requires-Dist: certifi>=2018.1.18
38
38
  Requires-Dist: requests>=2.18.4
39
39
  Requires-Dist: cryptography>=2.6.1
40
40
  Requires-Dist: typing-extensions>=4.4.0
41
- Requires-Dist: aiohttp<=3.10.11; python_version >= "3.5.2"
41
+ Requires-Dist: aiohttp>=3.10.11; python_version >= "3.5.2"
42
42
  Requires-Dist: aiodns>=1.1.1; python_version >= "3.5.2"
43
43
  Requires-Dist: yarl>=1.7.2; python_version >= "3.5.2"
44
44
  Provides-Extra: qa
@@ -49,7 +49,7 @@ Requires-Dist: mypy==1.6.1; extra == "type"
49
49
 
50
50
  # CCXT – CryptoCurrency eXchange Trading Library
51
51
 
52
- [![NPM Downloads](https://img.shields.io/npm/dy/ccxt.svg)](https://www.npmjs.com/package/ccxt) [![npm](https://img.shields.io/npm/v/ccxt.svg)](https://npmjs.com/package/ccxt) [![PyPI](https://img.shields.io/pypi/v/ccxt.svg)](https://pypi.python.org/pypi/ccxt) [![NuGet version](https://img.shields.io/nuget/v/ccxt)](https://www.nuget.org/packages/ccxt) [![GoDoc](https://pkg.go.dev/badge/github.com/ccxt/ccxt/go/v4?utm_source=godoc)](https://godoc.org/github.com/ccxt/ccxt/go/v4) [![Discord](https://img.shields.io/discord/690203284119617602?logo=discord&logoColor=white)](https://discord.gg/ccxt) [![Supported Exchanges](https://img.shields.io/badge/exchanges-107-blue.svg)](https://github.com/ccxt/ccxt/wiki/Exchange-Markets) [![Follow CCXT at x.com](https://img.shields.io/twitter/follow/ccxt_official.svg?style=social&label=CCXT)](https://x.com/ccxt_official)
52
+ [![NPM Downloads](https://img.shields.io/npm/dy/ccxt.svg)](https://www.npmjs.com/package/ccxt) [![npm](https://img.shields.io/npm/v/ccxt.svg)](https://npmjs.com/package/ccxt) [![PyPI](https://img.shields.io/pypi/v/ccxt.svg)](https://pypi.python.org/pypi/ccxt) [![NuGet version](https://img.shields.io/nuget/v/ccxt)](https://www.nuget.org/packages/ccxt) [![GoDoc](https://pkg.go.dev/badge/github.com/ccxt/ccxt/go/v4?utm_source=godoc)](https://godoc.org/github.com/ccxt/ccxt/go/v4) [![Discord](https://img.shields.io/discord/690203284119617602?logo=discord&logoColor=white)](https://discord.gg/ccxt) [![Supported Exchanges](https://img.shields.io/badge/exchanges-104-blue.svg)](https://github.com/ccxt/ccxt/wiki/Exchange-Markets) [![Follow CCXT at x.com](https://img.shields.io/twitter/follow/ccxt_official.svg?style=social&label=CCXT)](https://x.com/ccxt_official)
53
53
 
54
54
  A `JavaScript` / `Python` / `PHP` / `C#` / `Go` library for cryptocurrency trading and e-commerce with support for many bitcoin/ether/altcoin exchange markets and merchant APIs.
55
55
 
@@ -102,7 +102,7 @@ Current feature list:
102
102
  | [![woofipro](https://github.com/user-attachments/assets/9ba21b8a-a9c7-4770-b7f1-ce3bcbde68c1)](https://dex.woo.org/en/trade?ref=CCXT) | woofipro | [WOOFI PRO](https://dex.woo.org/en/trade?ref=CCXT) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://orderly.network/docs/build-on-evm/building-on-evm) | ![DEX - Distributed EXchange](https://img.shields.io/badge/DEX-blue.svg "DEX - Distributed EXchange") | [![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 WOOFI PRO using CCXT's referral link for a 5% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d5%25&color=orange)](https://dex.woo.org/en/trade?ref=CCXT) |
103
103
 
104
104
  ## Supported Cryptocurrency Exchanges
105
- <!--- init list -->The CCXT library currently supports the following 104 cryptocurrency exchange markets and trading APIs:
105
+ <!--- init list -->The CCXT library currently supports the following 101 cryptocurrency exchange markets and trading APIs:
106
106
 
107
107
  |logo |id |name |ver |type |certified |pro |
108
108
  |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|----------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------:|--------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------|
@@ -130,8 +130,8 @@ Current feature list:
130
130
  | [![bitso](https://github.com/user-attachments/assets/178c8e56-9054-4107-b192-5e5053d4f975)](https://bitso.com/?ref=itej) | bitso | [Bitso](https://bitso.com/?ref=itej) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://bitso.com/api_info) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
131
131
  | [![bitstamp](https://github.com/user-attachments/assets/d5480572-1fee-43cb-b900-d38c522d0024)](https://www.bitstamp.net) | bitstamp | [Bitstamp](https://www.bitstamp.net) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://www.bitstamp.net/api) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
132
132
  | [![bitteam](https://github.com/user-attachments/assets/b41b5e0d-98e5-4bd3-8a6e-aeb230a4a135)](https://bit.team/auth/sign-up?ref=bitboy2023) | bitteam | [BIT.TEAM](https://bit.team/auth/sign-up?ref=bitboy2023) | [![API Version 2.0.6](https://img.shields.io/badge/2.0.6-lightgray)](https://bit.team/trade/api/documentation) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
133
+ | [![bittrade](https://user-images.githubusercontent.com/1294454/85734211-85755480-b705-11ea-8b35-0b7f1db33a2f.jpg)](https://www.bittrade.co.jp/register/?invite_code=znnq3) | bittrade | [BitTrade](https://www.bittrade.co.jp/register/?invite_code=znnq3) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://api-doc.bittrade.co.jp) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
133
134
  | [![bitvavo](https://github.com/user-attachments/assets/d213155c-8c71-4701-9bd5-45351febc2a8)](https://bitvavo.com/?a=24F34952F7) | bitvavo | [Bitvavo](https://bitvavo.com/?a=24F34952F7) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://docs.bitvavo.com/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
134
- | [![bl3p](https://github.com/user-attachments/assets/75aeb14e-cd48-43c8-8492-dff002dea0be)](https://bl3p.eu) | bl3p | [BL3P](https://bl3p.eu) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://github.com/BitonicNL/bl3p-api/tree/master/docs) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
135
135
  | [![blockchaincom](https://github.com/user-attachments/assets/975e3054-3399-4363-bcee-ec3c6d63d4e8)](https://blockchain.com) | blockchaincom | [Blockchain.com](https://blockchain.com) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://api.blockchain.com/v3) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
136
136
  | [![blofin](https://github.com/user-attachments/assets/518cdf80-f05d-4821-a3e3-d48ceb41d73b)](https://blofin.com/register?referral_code=f79EsS) | blofin | [BloFin](https://blofin.com/register?referral_code=f79EsS) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://blofin.com/docs) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
137
137
  | [![btcalpha](https://github.com/user-attachments/assets/dce49f3a-61e5-4ba0-a2fe-41d192fd0e5d)](https://btc-alpha.com/?r=123788) | btcalpha | [BTC-Alpha](https://btc-alpha.com/?r=123788) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://btc-alpha.github.io/api-docs) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
@@ -168,16 +168,13 @@ Current feature list:
168
168
  | [![hitbtc](https://user-images.githubusercontent.com/1294454/27766555-8eaec20e-5edc-11e7-9c5b-6dc69fc42f5e.jpg)](https://hitbtc.com/?ref_id=5a5d39a65d466) | hitbtc | [HitBTC](https://hitbtc.com/?ref_id=5a5d39a65d466) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://api.hitbtc.com) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
169
169
  | [![hollaex](https://user-images.githubusercontent.com/1294454/75841031-ca375180-5ddd-11ea-8417-b975674c23cb.jpg)](https://pro.hollaex.com/signup?affiliation_code=QSWA6G) | hollaex | [HollaEx](https://pro.hollaex.com/signup?affiliation_code=QSWA6G) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://apidocs.hollaex.com) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
170
170
  | [![htx](https://user-images.githubusercontent.com/1294454/76137448-22748a80-604e-11ea-8069-6e389271911d.jpg)](https://www.htx.com.vc/invite/en-us/1h?invite_code=6rmm2223) | htx | [HTX](https://www.htx.com.vc/invite/en-us/1h?invite_code=6rmm2223) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://huobiapi.github.io/docs/spot/v1/en/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![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) |
171
- | [![huobijp](https://user-images.githubusercontent.com/1294454/85734211-85755480-b705-11ea-8b35-0b7f1db33a2f.jpg)](https://www.huobi.co.jp/register/?invite_code=znnq3) | huobijp | [Huobi Japan](https://www.huobi.co.jp/register/?invite_code=znnq3) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://api-doc.huobi.co.jp) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
172
171
  | [![hyperliquid](https://github.com/ccxt/ccxt/assets/43336371/b371bc6c-4a8c-489f-87f4-20a913dd8d4b)](https://app.hyperliquid.xyz/) | hyperliquid | [Hyperliquid](https://app.hyperliquid.xyz/) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api) | ![DEX - Distributed EXchange](https://img.shields.io/badge/DEX-blue.svg "DEX - Distributed EXchange") | [![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) |
173
- | [![idex](https://user-images.githubusercontent.com/51840849/94481303-2f222100-01e0-11eb-97dd-bc14c5943a86.jpg)](https://idex.io) | idex | [IDEX](https://idex.io) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://api-docs-v3.idex.io/) | ![DEX - Distributed EXchange](https://img.shields.io/badge/DEX-blue.svg "DEX - Distributed EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
174
172
  | [![independentreserve](https://user-images.githubusercontent.com/51840849/87182090-1e9e9080-c2ec-11ea-8e49-563db9a38f37.jpg)](https://www.independentreserve.com) | independentreserve | [Independent Reserve](https://www.independentreserve.com) | [![API Version *](https://img.shields.io/badge/*-lightgray)](https://www.independentreserve.com/API) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
175
173
  | [![indodax](https://user-images.githubusercontent.com/51840849/87070508-9358c880-c221-11ea-8dc5-5391afbbb422.jpg)](https://indodax.com/ref/testbitcoincoid/1) | indodax | [INDODAX](https://indodax.com/ref/testbitcoincoid/1) | [![API Version 2.0](https://img.shields.io/badge/2.0-lightgray)](https://github.com/btcid/indodax-official-api-docs) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
176
174
  | [![kraken](https://user-images.githubusercontent.com/51840849/76173629-fc67fb00-61b1-11ea-84fe-f2de582f58a3.jpg)](https://www.kraken.com) | kraken | [Kraken](https://www.kraken.com) | [![API Version 0](https://img.shields.io/badge/0-lightgray)](https://docs.kraken.com/rest/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
177
175
  | [![krakenfutures](https://user-images.githubusercontent.com/24300605/81436764-b22fd580-9172-11ea-9703-742783e6376d.jpg)](https://futures.kraken.com/) | krakenfutures | [Kraken Futures](https://futures.kraken.com/) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://docs.futures.kraken.com/#introduction) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
178
176
  | [![kucoin](https://user-images.githubusercontent.com/51840849/87295558-132aaf80-c50e-11ea-9801-a2fb0c57c799.jpg)](https://www.kucoin.com/ucenter/signup?rcode=E5wkqe) | kucoin | [KuCoin](https://www.kucoin.com/ucenter/signup?rcode=E5wkqe) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://docs.kucoin.com) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![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) |
179
177
  | [![kucoinfutures](https://user-images.githubusercontent.com/1294454/147508995-9e35030a-d046-43a1-a006-6fabd981b554.jpg)](https://futures.kucoin.com/?rcode=E5wkqe) | kucoinfutures | [KuCoin Futures](https://futures.kucoin.com/?rcode=E5wkqe) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.kucoin.com/futures) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![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) |
180
- | [![kuna](https://user-images.githubusercontent.com/51840849/87153927-f0578b80-c2c0-11ea-84b6-74612568e9e1.jpg)](https://kuna.io?r=kunaid-gvfihe8az7o4) | kuna | [Kuna](https://kuna.io?r=kunaid-gvfihe8az7o4) | [![API Version 4](https://img.shields.io/badge/4-lightgray)](https://kuna.io/documents/api) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
181
178
  | [![latoken](https://user-images.githubusercontent.com/1294454/61511972-24c39f00-aa01-11e9-9f7c-471f1d6e5214.jpg)](https://latoken.com/invite?r=mvgp2djk) | latoken | [Latoken](https://latoken.com/invite?r=mvgp2djk) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://api.latoken.com) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
182
179
  | [![lbank](https://user-images.githubusercontent.com/1294454/38063602-9605e28a-3302-11e8-81be-64b1e53c4cfb.jpg)](https://www.lbank.com/login/?icode=7QCY) | lbank | [LBank](https://www.lbank.com/login/?icode=7QCY) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://www.lbank.com/en-US/docs/index.html) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
183
180
  | [![luno](https://user-images.githubusercontent.com/1294454/27766607-8c1a69d8-5ede-11e7-930c-540b5eb9be24.jpg)](https://www.luno.com/invite/44893A) | luno | [luno](https://www.luno.com/invite/44893A) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://www.luno.com/en/api) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
@@ -271,13 +268,13 @@ console.log(version, Object.keys(exchanges));
271
268
 
272
269
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
273
270
 
274
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.82/dist/ccxt.browser.min.js
275
- * unpkg: https://unpkg.com/ccxt@4.4.82/dist/ccxt.browser.min.js
271
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.86/dist/ccxt.browser.min.js
272
+ * unpkg: https://unpkg.com/ccxt@4.4.86/dist/ccxt.browser.min.js
276
273
 
277
274
  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.
278
275
 
279
276
  ```HTML
280
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.82/dist/ccxt.browser.min.js"></script>
277
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.86/dist/ccxt.browser.min.js"></script>
281
278
  ```
282
279
 
283
280
  Creates a global `ccxt` object: