ccxt 4.4.44__py2.py3-none-any.whl → 4.4.45__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 (69) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/blofin.py +22 -0
  3. ccxt/async_support/__init__.py +1 -1
  4. ccxt/async_support/base/exchange.py +1 -1
  5. ccxt/async_support/binance.py +178 -62
  6. ccxt/async_support/bingx.py +15 -9
  7. ccxt/async_support/bitfinex.py +1 -1
  8. ccxt/async_support/bitget.py +3 -3
  9. ccxt/async_support/bitmart.py +3 -3
  10. ccxt/async_support/bitmex.py +1 -1
  11. ccxt/async_support/blofin.py +22 -0
  12. ccxt/async_support/bybit.py +4 -4
  13. ccxt/async_support/coinbase.py +1 -1
  14. ccxt/async_support/coinex.py +1 -1
  15. ccxt/async_support/cryptocom.py +1 -1
  16. ccxt/async_support/exmo.py +16 -8
  17. ccxt/async_support/gate.py +1 -1
  18. ccxt/async_support/hashkey.py +6 -1
  19. ccxt/async_support/htx.py +2 -2
  20. ccxt/async_support/hyperliquid.py +1 -1
  21. ccxt/async_support/kraken.py +1 -1
  22. ccxt/async_support/krakenfutures.py +1 -1
  23. ccxt/async_support/kucoin.py +1 -1
  24. ccxt/async_support/kucoinfutures.py +2 -3
  25. ccxt/async_support/lykke.py +1 -1
  26. ccxt/async_support/mexc.py +2 -2
  27. ccxt/async_support/myokx.py +8 -0
  28. ccxt/async_support/okx.py +4 -4
  29. ccxt/async_support/onetrading.py +2 -1
  30. ccxt/async_support/whitebit.py +31 -8
  31. ccxt/async_support/woo.py +1 -1
  32. ccxt/async_support/woofipro.py +2 -2
  33. ccxt/base/exchange.py +1 -1
  34. ccxt/binance.py +178 -62
  35. ccxt/bingx.py +15 -9
  36. ccxt/bitfinex.py +1 -1
  37. ccxt/bitget.py +3 -3
  38. ccxt/bitmart.py +3 -3
  39. ccxt/bitmex.py +1 -1
  40. ccxt/blofin.py +22 -0
  41. ccxt/bybit.py +4 -4
  42. ccxt/coinbase.py +1 -1
  43. ccxt/coinex.py +1 -1
  44. ccxt/cryptocom.py +1 -1
  45. ccxt/exmo.py +16 -8
  46. ccxt/gate.py +1 -1
  47. ccxt/hashkey.py +6 -1
  48. ccxt/htx.py +2 -2
  49. ccxt/hyperliquid.py +1 -1
  50. ccxt/kraken.py +1 -1
  51. ccxt/krakenfutures.py +1 -1
  52. ccxt/kucoin.py +1 -1
  53. ccxt/kucoinfutures.py +2 -3
  54. ccxt/lykke.py +1 -1
  55. ccxt/mexc.py +2 -2
  56. ccxt/myokx.py +8 -0
  57. ccxt/okx.py +4 -4
  58. ccxt/onetrading.py +2 -1
  59. ccxt/pro/__init__.py +1 -1
  60. ccxt/pro/binance.py +2 -1
  61. ccxt/pro/myokx.py +5 -0
  62. ccxt/whitebit.py +31 -8
  63. ccxt/woo.py +1 -1
  64. ccxt/woofipro.py +2 -2
  65. {ccxt-4.4.44.dist-info → ccxt-4.4.45.dist-info}/METADATA +4 -4
  66. {ccxt-4.4.44.dist-info → ccxt-4.4.45.dist-info}/RECORD +69 -69
  67. {ccxt-4.4.44.dist-info → ccxt-4.4.45.dist-info}/LICENSE.txt +0 -0
  68. {ccxt-4.4.44.dist-info → ccxt-4.4.45.dist-info}/WHEEL +0 -0
  69. {ccxt-4.4.44.dist-info → ccxt-4.4.45.dist-info}/top_level.txt +0 -0
ccxt/exmo.py CHANGED
@@ -846,32 +846,40 @@ class exmo(Exchange, ImplicitAPI):
846
846
  :param int [since]: timestamp in ms of the earliest candle to fetch
847
847
  :param int [limit]: the maximum amount of candles to fetch
848
848
  :param dict [params]: extra parameters specific to the exchange API endpoint
849
+ :param int [params.until]: timestamp in ms of the latest candle to fetch
849
850
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
850
851
  """
851
852
  self.load_markets()
852
853
  market = self.market(symbol)
854
+ until = self.safe_integer_product(params, 'until', 0.001)
855
+ untilIsDefined = (until is not None)
853
856
  request: dict = {
854
857
  'symbol': market['id'],
855
858
  'resolution': self.safe_string(self.timeframes, timeframe, timeframe),
856
859
  }
857
860
  maxLimit = 3000
858
861
  duration = self.parse_timeframe(timeframe)
859
- now = self.milliseconds()
862
+ now = self.parse_to_int(self.milliseconds() / 1000)
860
863
  if since is None:
864
+ to = min(until, now) if untilIsDefined else now
861
865
  if limit is None:
862
866
  limit = 1000 # cap default at generous amount
863
867
  else:
864
868
  limit = min(limit, maxLimit)
865
- request['from'] = self.parse_to_int(now / 1000) - limit * duration - 1
866
- request['to'] = self.parse_to_int(now / 1000)
869
+ request['from'] = to - (limit * duration) - 1
870
+ request['to'] = to
867
871
  else:
868
872
  request['from'] = self.parse_to_int(since / 1000) - 1
869
- if limit is None:
870
- limit = maxLimit
873
+ if untilIsDefined:
874
+ request['to'] = min(until, now)
871
875
  else:
872
- limit = min(limit, maxLimit)
873
- to = self.sum(since, limit * duration * 1000)
874
- request['to'] = self.parse_to_int(to / 1000)
876
+ if limit is None:
877
+ limit = maxLimit
878
+ else:
879
+ limit = min(limit, maxLimit)
880
+ to = self.sum(since, limit * duration)
881
+ request['to'] = min(to, now)
882
+ params = self.omit(params, 'until')
875
883
  response = self.publicGetCandlesHistory(self.extend(request, params))
876
884
  #
877
885
  # {
ccxt/gate.py CHANGED
@@ -775,7 +775,7 @@ class gate(Exchange, ImplicitAPI):
775
775
  'trailing': False,
776
776
  'limit': 100,
777
777
  'untilDays': 30,
778
- 'daysBackClosed': None,
778
+ 'daysBack': None,
779
779
  'daysBackCanceled': None,
780
780
  },
781
781
  'fetchOHLCV': {
ccxt/hashkey.py CHANGED
@@ -1454,9 +1454,14 @@ class hashkey(Exchange, ImplicitAPI):
1454
1454
  if isBuyer is not None:
1455
1455
  side = 'buy' if isBuyer else 'sell'
1456
1456
  takerOrMaker = None
1457
- isMaker = self.safe_bool_n(trade, ['isMaker', 'isMarker', 'ibm'])
1457
+ isMaker = self.safe_bool_n(trade, ['isMaker', 'isMarker'])
1458
1458
  if isMaker is not None:
1459
1459
  takerOrMaker = 'maker' if isMaker else 'taker'
1460
+ isBuyerMaker = self.safe_bool(trade, 'ibm')
1461
+ # if public trade
1462
+ if isBuyerMaker is not None:
1463
+ takerOrMaker = 'taker'
1464
+ side = 'sell' if isBuyerMaker else 'buy'
1460
1465
  feeCost = self.safe_string(trade, 'commission')
1461
1466
  feeCurrncyId = self.safe_string(trade, 'commissionAsset')
1462
1467
  feeInfo = self.safe_dict(trade, 'fee')
ccxt/htx.py CHANGED
@@ -1310,7 +1310,7 @@ class htx(Exchange, ImplicitAPI):
1310
1310
  'trailing': False,
1311
1311
  'untilDays': 2,
1312
1312
  'limit': 500,
1313
- 'daysBackClosed': 180,
1313
+ 'daysBack': 180,
1314
1314
  'daysBackCanceled': 1 / 12,
1315
1315
  },
1316
1316
  'fetchOHLCV': {
@@ -1351,7 +1351,7 @@ class htx(Exchange, ImplicitAPI):
1351
1351
  'trailing': False,
1352
1352
  'untilDays': 2,
1353
1353
  'limit': 50,
1354
- 'daysBackClosed': 90,
1354
+ 'daysBack': 90,
1355
1355
  'daysBackCanceled': 1 / 12,
1356
1356
  },
1357
1357
  'fetchOHLCV': {
ccxt/hyperliquid.py CHANGED
@@ -283,7 +283,7 @@ class hyperliquid(Exchange, ImplicitAPI):
283
283
  'fetchClosedOrders': {
284
284
  'marginMode': False,
285
285
  'limit': 2000,
286
- 'daysBackClosed': None,
286
+ 'daysBack': None,
287
287
  'daysBackCanceled': None,
288
288
  'untilDays': None,
289
289
  'trigger': False,
ccxt/kraken.py CHANGED
@@ -492,7 +492,7 @@ class kraken(Exchange, ImplicitAPI):
492
492
  'fetchClosedOrders': {
493
493
  'marginMode': False,
494
494
  'limit': None,
495
- 'daysBackClosed': None,
495
+ 'daysBack': None,
496
496
  'daysBackCanceled': None,
497
497
  'untilDays': 100000,
498
498
  'trigger': False,
ccxt/krakenfutures.py CHANGED
@@ -325,7 +325,7 @@ class krakenfutures(Exchange, ImplicitAPI):
325
325
  'fetchClosedOrders': {
326
326
  'marginMode': False,
327
327
  'limit': None,
328
- 'daysBackClosed': None,
328
+ 'daysBack': None,
329
329
  'daysBackCanceled': None,
330
330
  'untilDays': None,
331
331
  'trigger': False,
ccxt/kucoin.py CHANGED
@@ -1055,7 +1055,7 @@ class kucoin(Exchange, ImplicitAPI):
1055
1055
  'fetchClosedOrders': {
1056
1056
  'marginMode': True,
1057
1057
  'limit': 500,
1058
- 'daysBackClosed': None,
1058
+ 'daysBack': None,
1059
1059
  'daysBackCanceled': None,
1060
1060
  'untilDays': 7,
1061
1061
  'trigger': True,
ccxt/kucoinfutures.py CHANGED
@@ -386,9 +386,8 @@ class kucoinfutures(kucoin, ImplicitAPI):
386
386
  'stopLossPrice': True,
387
387
  'takeProfitPrice': True,
388
388
  'attachedStopLossTakeProfit': {
389
- 'triggerPrice': None,
390
389
  'triggerPriceType': None,
391
- 'limitPrice': True,
390
+ 'price': True,
392
391
  },
393
392
  'timeInForce': {
394
393
  'IOC': True,
@@ -428,7 +427,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
428
427
  'fetchClosedOrders': {
429
428
  'marginMode': False,
430
429
  'limit': 1000,
431
- 'daysBackClosed': None,
430
+ 'daysBack': None,
432
431
  'daysBackCanceled': None,
433
432
  'untilDays': None,
434
433
  'trigger': True,
ccxt/lykke.py CHANGED
@@ -209,7 +209,7 @@ class lykke(Exchange, ImplicitAPI):
209
209
  # {
210
210
  # "payload":[
211
211
  # {
212
- # "assetId":"115a60c2-0da1-40f9-a7f2-41da723b9074",
212
+ # "assetId":"115a60c2-0da1-40f9-a7f2-41da723b9075",
213
213
  # "name":"Monaco Token",
214
214
  # "symbol":"MCO",
215
215
  # "accuracy":6,
ccxt/mexc.py CHANGED
@@ -748,7 +748,7 @@ class mexc(Exchange, ImplicitAPI):
748
748
  'fetchClosedOrders': {
749
749
  'marginMode': True,
750
750
  'limit': 1000,
751
- 'daysBackClosed': 7,
751
+ 'daysBack': 7,
752
752
  'daysBackCanceled': 7,
753
753
  'untilDays': 7,
754
754
  'trigger': False,
@@ -804,7 +804,7 @@ class mexc(Exchange, ImplicitAPI):
804
804
  'fetchClosedOrders': {
805
805
  'marginMode': False,
806
806
  'limit': 100,
807
- 'daysBackClosed': 90,
807
+ 'daysBack': 90,
808
808
  'daysBackCanceled': None,
809
809
  'untilDays': 90,
810
810
  'trigger': True,
ccxt/myokx.py CHANGED
@@ -32,4 +32,12 @@ class myokx(okx, ImplicitAPI):
32
32
  'rest': 'https://{hostname}',
33
33
  },
34
34
  },
35
+ 'has': {
36
+ 'CORS': None,
37
+ 'spot': True,
38
+ 'margin': None,
39
+ 'swap': False,
40
+ 'future': False,
41
+ 'option': False,
42
+ },
35
43
  })
ccxt/okx.py CHANGED
@@ -1225,7 +1225,7 @@ class okx(Exchange, ImplicitAPI):
1225
1225
  'mark': True,
1226
1226
  'index': True,
1227
1227
  },
1228
- 'limitPrice': True,
1228
+ 'price': True,
1229
1229
  },
1230
1230
  'timeInForce': {
1231
1231
  'IOC': True,
@@ -1265,7 +1265,7 @@ class okx(Exchange, ImplicitAPI):
1265
1265
  'fetchClosedOrders': {
1266
1266
  'marginMode': False,
1267
1267
  'limit': 100,
1268
- 'daysBackClosed': 90, # 3 months
1268
+ 'daysBack': 90, # 3 months
1269
1269
  'daysBackCanceled': 1 / 12, # 2 hour
1270
1270
  'untilDays': None,
1271
1271
  'trigger': True,
@@ -1635,7 +1635,7 @@ class okx(Exchange, ImplicitAPI):
1635
1635
  'contractSize': self.safe_number(market, 'ctVal') if contract else None,
1636
1636
  'expiry': expiry,
1637
1637
  'expiryDatetime': self.iso8601(expiry),
1638
- 'strike': strikePrice,
1638
+ 'strike': self.parse_number(strikePrice),
1639
1639
  'optionType': optionType,
1640
1640
  'created': self.safe_integer(market, 'listTime'),
1641
1641
  'precision': {
@@ -1834,7 +1834,7 @@ class okx(Exchange, ImplicitAPI):
1834
1834
  }
1835
1835
  firstChain = self.safe_dict(chains, 0, {})
1836
1836
  result[code] = {
1837
- 'info': None,
1837
+ 'info': chains,
1838
1838
  'code': code,
1839
1839
  'id': currencyId,
1840
1840
  'name': self.safe_string(firstChain, 'name'),
ccxt/onetrading.py CHANGED
@@ -865,7 +865,8 @@ class onetrading(Exchange, ImplicitAPI):
865
865
  # {"instrument_code":"BTC_EUR","granularity":{"unit":"HOURS","period":1},"high":"9135.7","low":"9002.59","open":"9055.45","close":"9133.98","total_amount":"26.21919","volume":"238278.8724959","time":"2020-05-09T00:59:59.999Z","last_sequence":461521},
866
866
  # ]
867
867
  #
868
- return self.parse_ohlcvs(response, market, timeframe, since, limit)
868
+ ohlcv = self.safe_list(response, 'candlesticks')
869
+ return self.parse_ohlcvs(ohlcv, market, timeframe, since, limit)
869
870
 
870
871
  def parse_trade(self, trade: dict, market: Market = None) -> Trade:
871
872
  #
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.44'
7
+ __version__ = '4.4.45'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/binance.py CHANGED
@@ -3975,7 +3975,8 @@ class binance(ccxt.async_support.binance):
3975
3975
  if not rejected:
3976
3976
  client.reject(message, id)
3977
3977
  # reset connection if 5xx error
3978
- if self.safe_string(code, 0) == '5':
3978
+ codeString = self.safe_string(error, 'code')
3979
+ if (codeString is not None) and (codeString[0] == '5'):
3979
3980
  client.reset(message)
3980
3981
 
3981
3982
  def handle_message(self, client: Client, message):
ccxt/pro/myokx.py CHANGED
@@ -20,4 +20,9 @@ class myokx(okx):
20
20
  'ws': 'wss://wseeapap.okx.com:8443/ws/v5',
21
21
  },
22
22
  },
23
+ 'has': {
24
+ 'swap': False,
25
+ 'future': False,
26
+ 'option': False,
27
+ },
23
28
  })
ccxt/whitebit.py CHANGED
@@ -820,9 +820,22 @@ class whitebit(Exchange, ImplicitAPI):
820
820
  # "last": "55913.88",
821
821
  # "period": 86400
822
822
  # }
823
- market = self.safe_market(None, market)
823
+ # v2
824
+ # {
825
+ # lastUpdateTimestamp: '2025-01-02T09:16:36.000Z',
826
+ # tradingPairs: 'ARB_USDC',
827
+ # lastPrice: '0.7727',
828
+ # lowestAsk: '0.7735',
829
+ # highestBid: '0.7732',
830
+ # baseVolume24h: '1555793.74',
831
+ # quoteVolume24h: '1157602.622406',
832
+ # tradesEnabled: True
833
+ # }
834
+ #
835
+ marketId = self.safe_string(ticker, 'tradingPairs')
836
+ market = self.safe_market(marketId, market)
824
837
  # last price is provided as "last" or "last_price"
825
- last = self.safe_string_2(ticker, 'last', 'last_price')
838
+ last = self.safe_string_n(ticker, ['last', 'last_price', 'lastPrice'])
826
839
  # if "close" is provided, use it, otherwise use <last>
827
840
  close = self.safe_string(ticker, 'close', last)
828
841
  return self.safe_ticker({
@@ -831,9 +844,9 @@ class whitebit(Exchange, ImplicitAPI):
831
844
  'datetime': None,
832
845
  'high': self.safe_string(ticker, 'high'),
833
846
  'low': self.safe_string(ticker, 'low'),
834
- 'bid': self.safe_string(ticker, 'bid'),
847
+ 'bid': self.safe_string_2(ticker, 'bid', 'highestBid'),
835
848
  'bidVolume': None,
836
- 'ask': self.safe_string(ticker, 'ask'),
849
+ 'ask': self.safe_string_2(ticker, 'ask', 'lowestAsk'),
837
850
  'askVolume': None,
838
851
  'vwap': None,
839
852
  'open': self.safe_string(ticker, 'open'),
@@ -843,8 +856,8 @@ class whitebit(Exchange, ImplicitAPI):
843
856
  'change': None,
844
857
  'percentage': self.safe_string(ticker, 'change'),
845
858
  'average': None,
846
- 'baseVolume': self.safe_string_2(ticker, 'base_volume', 'volume'),
847
- 'quoteVolume': self.safe_string_2(ticker, 'quote_volume', 'deal'),
859
+ 'baseVolume': self.safe_string_n(ticker, ['base_volume', 'volume', 'baseVolume24h']),
860
+ 'quoteVolume': self.safe_string_n(ticker, ['quote_volume', 'deal', 'quoteVolume24h']),
848
861
  'info': ticker,
849
862
  }, market)
850
863
 
@@ -854,13 +867,20 @@ class whitebit(Exchange, ImplicitAPI):
854
867
 
855
868
  https://docs.whitebit.com/public/http-v4/#market-activity
856
869
 
857
- :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
870
+ :param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
858
871
  :param dict [params]: extra parameters specific to the exchange API endpoint
872
+ :param str [params.method]: either v2PublicGetTicker or v4PublicGetTicker default is v4PublicGetTicker
859
873
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
860
874
  """
861
875
  self.load_markets()
862
876
  symbols = self.market_symbols(symbols)
863
- response = self.v4PublicGetTicker(params)
877
+ method = 'v4PublicGetTicker'
878
+ method, params = self.handle_option_and_params(params, 'fetchTickers', 'method', method)
879
+ response = None
880
+ if method == 'v4PublicGetTicker':
881
+ response = self.v4PublicGetTicker(params)
882
+ else:
883
+ response = self.v2PublicGetTicker(params)
864
884
  #
865
885
  # "BCH_RUB": {
866
886
  # "base_id":1831,
@@ -872,6 +892,9 @@ class whitebit(Exchange, ImplicitAPI):
872
892
  # "change":"2.12"
873
893
  # },
874
894
  #
895
+ resultList = self.safe_list(response, 'result')
896
+ if resultList is not None:
897
+ return self.parse_tickers(resultList, symbols)
875
898
  marketIds = list(response.keys())
876
899
  result: dict = {}
877
900
  for i in range(0, len(marketIds)):
ccxt/woo.py CHANGED
@@ -379,7 +379,7 @@ class woo(Exchange, ImplicitAPI):
379
379
  'fetchClosedOrders': {
380
380
  'marginMode': False,
381
381
  'limit': 500,
382
- 'daysBackClosed': None,
382
+ 'daysBack': None,
383
383
  'daysBackCanceled': None,
384
384
  'untilDays': 100000,
385
385
  'trigger': True,
ccxt/woofipro.py CHANGED
@@ -357,7 +357,7 @@ class woofipro(Exchange, ImplicitAPI):
357
357
  'fetchClosedOrders': {
358
358
  'marginMode': False,
359
359
  'limit': 500,
360
- 'daysBackClosed': None,
360
+ 'daysBack': None,
361
361
  'daysBackCanceled': None,
362
362
  'untilDays': 100000,
363
363
  'trigger': True,
@@ -378,7 +378,7 @@ class woofipro(Exchange, ImplicitAPI):
378
378
  'attachedStopLossTakeProfit': {
379
379
  # todo: implementation needs unification
380
380
  'triggerPriceType': None,
381
- 'limitPrice': False,
381
+ 'price': False,
382
382
  },
383
383
  },
384
384
  },
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.4.44
3
+ Version: 4.4.45
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
@@ -277,13 +277,13 @@ console.log(version, Object.keys(exchanges));
277
277
 
278
278
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
279
279
 
280
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.44/dist/ccxt.browser.min.js
281
- * unpkg: https://unpkg.com/ccxt@4.4.44/dist/ccxt.browser.min.js
280
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.45/dist/ccxt.browser.min.js
281
+ * unpkg: https://unpkg.com/ccxt@4.4.45/dist/ccxt.browser.min.js
282
282
 
283
283
  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.
284
284
 
285
285
  ```HTML
286
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.44/dist/ccxt.browser.min.js"></script>
286
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.45/dist/ccxt.browser.min.js"></script>
287
287
  ```
288
288
 
289
289
  Creates a global `ccxt` object: