ccxt 4.4.49__py2.py3-none-any.whl → 4.4.51__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 (71) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/binance.py +1 -0
  3. ccxt/abstract/binancecoinm.py +1 -0
  4. ccxt/abstract/binanceus.py +1 -0
  5. ccxt/abstract/binanceusdm.py +1 -0
  6. ccxt/alpaca.py +63 -2
  7. ccxt/async_support/__init__.py +1 -1
  8. ccxt/async_support/alpaca.py +63 -2
  9. ccxt/async_support/base/exchange.py +1 -1
  10. ccxt/async_support/binance.py +39 -20
  11. ccxt/async_support/blofin.py +5 -1
  12. ccxt/async_support/coinex.py +4 -4
  13. ccxt/async_support/coinmetro.py +16 -3
  14. ccxt/async_support/deribit.py +11 -3
  15. ccxt/async_support/gate.py +1 -1
  16. ccxt/async_support/hollaex.py +14 -17
  17. ccxt/async_support/htx.py +5 -3
  18. ccxt/async_support/kucoin.py +49 -69
  19. ccxt/async_support/mexc.py +24 -8
  20. ccxt/async_support/okcoin.py +13 -5
  21. ccxt/async_support/onetrading.py +1 -1
  22. ccxt/async_support/paradex.py +1 -1
  23. ccxt/async_support/paymium.py +42 -0
  24. ccxt/async_support/probit.py +77 -8
  25. ccxt/async_support/timex.py +67 -0
  26. ccxt/async_support/tokocrypto.py +81 -4
  27. ccxt/async_support/tradeogre.py +58 -1
  28. ccxt/async_support/vertex.py +65 -2
  29. ccxt/async_support/wavesexchange.py +73 -0
  30. ccxt/async_support/wazirx.py +59 -3
  31. ccxt/async_support/whitebit.py +79 -4
  32. ccxt/async_support/xt.py +112 -0
  33. ccxt/async_support/yobit.py +56 -0
  34. ccxt/async_support/zaif.py +55 -0
  35. ccxt/async_support/zonda.py +58 -0
  36. ccxt/base/exchange.py +72 -4
  37. ccxt/binance.py +39 -20
  38. ccxt/blofin.py +5 -1
  39. ccxt/coinex.py +4 -4
  40. ccxt/coinmetro.py +16 -3
  41. ccxt/deribit.py +11 -3
  42. ccxt/gate.py +1 -1
  43. ccxt/hollaex.py +14 -17
  44. ccxt/htx.py +5 -3
  45. ccxt/kucoin.py +49 -69
  46. ccxt/mexc.py +24 -8
  47. ccxt/okcoin.py +13 -5
  48. ccxt/onetrading.py +1 -1
  49. ccxt/paradex.py +1 -1
  50. ccxt/paymium.py +42 -0
  51. ccxt/pro/__init__.py +1 -1
  52. ccxt/pro/binance.py +2 -0
  53. ccxt/pro/blofin.py +8 -0
  54. ccxt/pro/coinex.py +4 -1
  55. ccxt/probit.py +77 -8
  56. ccxt/timex.py +67 -0
  57. ccxt/tokocrypto.py +81 -4
  58. ccxt/tradeogre.py +58 -1
  59. ccxt/vertex.py +65 -2
  60. ccxt/wavesexchange.py +73 -0
  61. ccxt/wazirx.py +59 -3
  62. ccxt/whitebit.py +79 -4
  63. ccxt/xt.py +112 -0
  64. ccxt/yobit.py +56 -0
  65. ccxt/zaif.py +55 -0
  66. ccxt/zonda.py +58 -0
  67. {ccxt-4.4.49.dist-info → ccxt-4.4.51.dist-info}/METADATA +18 -18
  68. {ccxt-4.4.49.dist-info → ccxt-4.4.51.dist-info}/RECORD +71 -71
  69. {ccxt-4.4.49.dist-info → ccxt-4.4.51.dist-info}/WHEEL +1 -1
  70. {ccxt-4.4.49.dist-info → ccxt-4.4.51.dist-info}/LICENSE.txt +0 -0
  71. {ccxt-4.4.49.dist-info → ccxt-4.4.51.dist-info}/top_level.txt +0 -0
ccxt/whitebit.py CHANGED
@@ -272,6 +272,8 @@ class whitebit(Exchange, ImplicitAPI):
272
272
  },
273
273
  },
274
274
  'options': {
275
+ 'timeDifference': 0, # the difference between system clock and exchange clock
276
+ 'adjustForTimeDifference': False, # controls the adjustment logic upon instantiation
275
277
  'fiatCurrencies': ['EUR', 'USD', 'RUB', 'UAH'],
276
278
  'fetchBalance': {
277
279
  'account': 'spot',
@@ -289,6 +291,75 @@ class whitebit(Exchange, ImplicitAPI):
289
291
  'defaultType': 'spot',
290
292
  'brokerId': 'ccxt',
291
293
  },
294
+ 'features': {
295
+ 'default': {
296
+ 'sandbox': False,
297
+ 'createOrder': {
298
+ 'marginMode': True,
299
+ 'triggerPrice': True,
300
+ 'triggerDirection': False,
301
+ 'triggerPriceType': None,
302
+ 'stopLossPrice': False, # todo
303
+ 'takeProfitPrice': False, # todo
304
+ 'attachedStopLossTakeProfit': None,
305
+ 'timeInForce': {
306
+ 'IOC': True, # todo
307
+ 'FOK': False,
308
+ 'PO': True, # todo
309
+ 'GTD': False,
310
+ },
311
+ 'hedged': False,
312
+ 'trailing': False,
313
+ 'leverage': False,
314
+ 'marketBuyByCost': True,
315
+ 'marketBuyRequiresPrice': False,
316
+ 'selfTradePrevention': False,
317
+ 'iceberg': False,
318
+ },
319
+ 'createOrders': None,
320
+ 'fetchMyTrades': {
321
+ 'marginMode': False,
322
+ 'limit': 100,
323
+ 'daysBack': None,
324
+ 'untilDays': None,
325
+ },
326
+ 'fetchOrder': None,
327
+ 'fetchOpenOrders': {
328
+ 'marginMode': False,
329
+ 'limit': 100,
330
+ 'trigger': False,
331
+ 'trailing': False,
332
+ },
333
+ 'fetchOrders': None, # todo
334
+ 'fetchClosedOrders': {
335
+ 'marginMode': False,
336
+ 'limit': 100,
337
+ 'daysBack': None,
338
+ 'daysBackCanceled': None,
339
+ 'untilDays': None,
340
+ 'trigger': False,
341
+ 'trailing': False,
342
+ },
343
+ 'fetchOHLCV': {
344
+ 'limit': 1440,
345
+ },
346
+ },
347
+ 'spot': {
348
+ 'extends': 'default',
349
+ },
350
+ 'swap': {
351
+ 'linear': {
352
+ 'extends': 'default',
353
+ },
354
+ 'inverse': {
355
+ 'extends': 'default',
356
+ },
357
+ },
358
+ 'future': {
359
+ 'linear': None,
360
+ 'inverse': None,
361
+ },
362
+ },
292
363
  'precisionMode': TICK_SIZE,
293
364
  'exceptions': {
294
365
  'exact': {
@@ -328,6 +399,8 @@ class whitebit(Exchange, ImplicitAPI):
328
399
  :param dict [params]: extra parameters specific to the exchange API endpoint
329
400
  :returns dict[]: an array of objects representing market data
330
401
  """
402
+ if self.options['adjustForTimeDifference']:
403
+ self.load_time_difference()
331
404
  markets = self.v4PublicGetMarkets()
332
405
  #
333
406
  # [
@@ -1227,7 +1300,7 @@ class whitebit(Exchange, ImplicitAPI):
1227
1300
  response = self.v4PublicGetTime(params)
1228
1301
  #
1229
1302
  # {
1230
- # "time":1635467280514
1303
+ # "time":1737380046
1231
1304
  # }
1232
1305
  #
1233
1306
  return self.safe_integer(response, 'time')
@@ -2514,7 +2587,7 @@ class whitebit(Exchange, ImplicitAPI):
2514
2587
  return self.in_array(currency, fiatCurrencies)
2515
2588
 
2516
2589
  def nonce(self):
2517
- return self.milliseconds()
2590
+ return self.milliseconds() - self.options['timeDifference']
2518
2591
 
2519
2592
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
2520
2593
  query = self.omit(params, self.extract_params(path))
@@ -2527,10 +2600,12 @@ class whitebit(Exchange, ImplicitAPI):
2527
2600
  url += '?' + self.urlencode(query)
2528
2601
  if accessibility == 'private':
2529
2602
  self.check_required_credentials()
2530
- nonce = str(self.nonce())
2603
+ nonce = self.nonce()
2604
+ timestamp = self.parse_to_int(nonce / 1000)
2605
+ timestampString = str(timestamp)
2531
2606
  secret = self.encode(self.secret)
2532
2607
  request = '/' + 'api' + '/' + version + pathWithParams
2533
- body = self.json(self.extend({'request': request, 'nonce': nonce}, params))
2608
+ body = self.json(self.extend({'request': request, 'nonce': timestampString}, params))
2534
2609
  payload = self.string_to_base64(body)
2535
2610
  signature = self.hmac(self.encode(payload), secret, hashlib.sha512)
2536
2611
  headers = {
ccxt/xt.py CHANGED
@@ -687,6 +687,118 @@ class xt(Exchange, ImplicitAPI):
687
687
  'createMarketBuyOrderRequiresPrice': True,
688
688
  'recvWindow': '5000', # in milliseconds, spot only
689
689
  },
690
+ 'features': {
691
+ 'default': {
692
+ 'sandbox': False,
693
+ 'createOrder': {
694
+ 'marginMode': False,
695
+ 'triggerPrice': False,
696
+ 'triggerDirection': False,
697
+ 'triggerPriceType': None,
698
+ 'stopLossPrice': False,
699
+ 'takeProfitPrice': False,
700
+ 'attachedStopLossTakeProfit': None,
701
+ 'timeInForce': {
702
+ 'IOC': True,
703
+ 'FOK': True,
704
+ 'PO': True,
705
+ 'GTD': False,
706
+ },
707
+ 'hedged': False,
708
+ 'trailing': False,
709
+ 'leverage': False,
710
+ 'marketBuyByCost': True,
711
+ 'marketBuyRequiresPrice': False,
712
+ 'selfTradePrevention': False,
713
+ 'iceberg': False,
714
+ },
715
+ 'createOrders': None,
716
+ 'fetchMyTrades': {
717
+ 'marginMode': True,
718
+ 'limit': 100,
719
+ 'daysBack': 100000, # todo
720
+ 'untilDays': 100000, # todo
721
+ 'marketType': True,
722
+ 'subType': True,
723
+ },
724
+ 'fetchOrder': {
725
+ 'marginMode': False,
726
+ 'trigger': True, # todo TPSL kind
727
+ 'trailing': False,
728
+ 'marketType': True,
729
+ 'subType': True,
730
+ },
731
+ 'fetchOpenOrders': {
732
+ 'marginMode': True,
733
+ 'limit': 100,
734
+ 'trigger': True, # todo TPSL
735
+ 'trailing': False,
736
+ 'marketType': True,
737
+ 'subType': True,
738
+ },
739
+ 'fetchOrders': {
740
+ 'marginMode': True,
741
+ 'limit': 100,
742
+ 'daysBack': 100000, # todo
743
+ 'untilDays': 100000, # todo
744
+ 'trigger': True, # todo TPSL
745
+ 'trailing': False,
746
+ 'marketType': True,
747
+ 'subType': True,
748
+ },
749
+ 'fetchClosedOrders': {
750
+ 'marginMode': True,
751
+ 'limit': 100,
752
+ 'daysBack': 100000, # todo
753
+ 'daysBackCanceled': 1, # todo
754
+ 'untilDays': 100000, # todo
755
+ 'trigger': True, # todo TPSL
756
+ 'trailing': False,
757
+ 'marketType': True,
758
+ 'subType': True,
759
+ },
760
+ 'fetchOHLCV': {
761
+ 'limit': 1000, # todo for derivatives
762
+ },
763
+ },
764
+ 'spot': {
765
+ 'extends': 'default',
766
+ },
767
+ 'forDerivatives': {
768
+ 'extends': 'default',
769
+ 'createOrder': {
770
+ 'triggerPrice': True,
771
+ # todo
772
+ 'triggerPriceType': {
773
+ 'last': True,
774
+ 'mark': True,
775
+ 'index': True,
776
+ },
777
+ 'stopLossPrice': True,
778
+ 'takeProfitPrice': True,
779
+ },
780
+ 'fetchMyTrades': {
781
+ 'daysBack': None,
782
+ 'untilDays': None,
783
+ },
784
+ },
785
+ 'swap': {
786
+ 'linear': {
787
+ 'extends': 'forDerivatives',
788
+ },
789
+ 'inverse': {
790
+ 'extends': 'forDerivatives',
791
+ },
792
+ },
793
+ 'future': {
794
+ 'linear': {
795
+ 'extends': 'forDerivatives',
796
+ },
797
+ 'inverse': {
798
+ 'extends': 'forDerivatives',
799
+ },
800
+ },
801
+ },
690
802
  })
691
803
 
692
804
  def nonce(self):
ccxt/yobit.py CHANGED
@@ -319,6 +319,62 @@ class yobit(Exchange, ImplicitAPI):
319
319
  'Rate Limited': RateLimitExceeded,
320
320
  },
321
321
  },
322
+ 'features': {
323
+ 'spot': {
324
+ 'sandbox': False,
325
+ 'createOrder': {
326
+ 'marginMode': False,
327
+ 'triggerPrice': False,
328
+ 'triggerDirection': False,
329
+ 'triggerPriceType': None,
330
+ 'stopLossPrice': False,
331
+ 'takeProfitPrice': False,
332
+ 'attachedStopLossTakeProfit': None,
333
+ 'timeInForce': {
334
+ 'IOC': False,
335
+ 'FOK': False,
336
+ 'PO': False,
337
+ 'GTD': False,
338
+ },
339
+ 'hedged': False,
340
+ 'trailing': False,
341
+ 'leverage': False,
342
+ 'marketBuyByCost': False,
343
+ 'marketBuyRequiresPrice': False,
344
+ 'selfTradePrevention': False,
345
+ 'iceberg': False,
346
+ },
347
+ 'createOrders': None,
348
+ 'fetchMyTrades': {
349
+ 'marginMode': False,
350
+ 'limit': 1000,
351
+ 'daysBack': 100000, # todo
352
+ 'untilDays': 100000, # todo
353
+ },
354
+ 'fetchOrder': {
355
+ 'marginMode': False,
356
+ 'trigger': False,
357
+ 'trailing': False,
358
+ },
359
+ 'fetchOpenOrders': {
360
+ 'marginMode': False,
361
+ 'limit': None,
362
+ 'trigger': False,
363
+ 'trailing': False,
364
+ },
365
+ 'fetchOrders': None,
366
+ 'fetchClosedOrders': None,
367
+ 'fetchOHLCV': None,
368
+ },
369
+ 'swap': {
370
+ 'linear': None,
371
+ 'inverse': None,
372
+ },
373
+ 'future': {
374
+ 'linear': None,
375
+ 'inverse': None,
376
+ },
377
+ },
322
378
  'orders': {}, # orders cache / emulation
323
379
  })
324
380
 
ccxt/zaif.py CHANGED
@@ -133,6 +133,61 @@ class zaif(Exchange, ImplicitAPI):
133
133
  },
134
134
  'options': {
135
135
  },
136
+ 'features': {
137
+ 'spot': {
138
+ 'sandbox': False,
139
+ 'createOrder': {
140
+ 'marginMode': True, # todo
141
+ 'triggerPrice': True, # todo implement
142
+ 'triggerDirection': False,
143
+ 'triggerPriceType': None,
144
+ 'stopLossPrice': False, # todo
145
+ 'takeProfitPrice': False, # todo
146
+ 'attachedStopLossTakeProfit': None,
147
+ 'timeInForce': {
148
+ 'IOC': False,
149
+ 'FOK': False,
150
+ 'PO': False,
151
+ 'GTD': False,
152
+ },
153
+ 'hedged': False,
154
+ 'trailing': False,
155
+ 'leverage': True, # todo implement
156
+ 'marketBuyByCost': False,
157
+ 'marketBuyRequiresPrice': False,
158
+ 'selfTradePrevention': False,
159
+ 'iceberg': False,
160
+ },
161
+ 'createOrders': None,
162
+ 'fetchMyTrades': None, # todo
163
+ 'fetchOrder': None,
164
+ 'fetchOpenOrders': {
165
+ 'marginMode': True, # todo
166
+ 'limit': None,
167
+ 'trigger': False,
168
+ 'trailing': False,
169
+ },
170
+ 'fetchOrders': None, # todo
171
+ 'fetchClosedOrders': {
172
+ 'marginMode': True, # todo
173
+ 'limit': 1000,
174
+ 'daysBack': 100000, # todo
175
+ 'daysBackCanceled': 1, # todo
176
+ 'untilDays': 100000, # todo
177
+ 'trigger': False,
178
+ 'trailing': False,
179
+ },
180
+ 'fetchOHLCV': None,
181
+ },
182
+ 'swap': {
183
+ 'linear': None,
184
+ 'inverse': None,
185
+ },
186
+ 'future': {
187
+ 'linear': None,
188
+ 'inverse': None,
189
+ },
190
+ },
136
191
  'precisionMode': TICK_SIZE,
137
192
  'exceptions': {
138
193
  'exact': {
ccxt/zonda.py CHANGED
@@ -303,6 +303,60 @@ class zonda(Exchange, ImplicitAPI):
303
303
  'fillResponseFromRequest': True,
304
304
  },
305
305
  },
306
+ 'features': {
307
+ 'spot': {
308
+ 'sandbox': False,
309
+ 'createOrder': {
310
+ 'marginMode': False,
311
+ 'triggerPrice': True, # todo remove
312
+ 'triggerDirection': False,
313
+ 'triggerPriceType': None,
314
+ 'stopLossPrice': False, # todo
315
+ 'takeProfitPrice': False, # todo
316
+ 'attachedStopLossTakeProfit': None,
317
+ 'timeInForce': {
318
+ 'IOC': True,
319
+ 'FOK': True,
320
+ 'PO': True,
321
+ 'GTD': False,
322
+ },
323
+ 'hedged': False,
324
+ 'trailing': False,
325
+ 'leverage': False,
326
+ 'marketBuyByCost': True,
327
+ 'marketBuyRequiresPrice': False,
328
+ 'selfTradePrevention': False,
329
+ 'iceberg': False,
330
+ },
331
+ 'createOrders': None,
332
+ 'fetchMyTrades': {
333
+ 'marginMode': False,
334
+ 'limit': None,
335
+ 'daysBack': 100000, # todo
336
+ 'untilDays': 100000, # todo
337
+ },
338
+ 'fetchOrder': None,
339
+ 'fetchOpenOrders': {
340
+ 'marginMode': False,
341
+ 'limit': 100,
342
+ 'trigger': False,
343
+ 'trailing': False,
344
+ },
345
+ 'fetchOrders': None,
346
+ 'fetchClosedOrders': None, # todo
347
+ 'fetchOHLCV': {
348
+ 'limit': None,
349
+ },
350
+ },
351
+ 'swap': {
352
+ 'linear': None,
353
+ 'inverse': None,
354
+ },
355
+ 'future': {
356
+ 'linear': None,
357
+ 'inverse': None,
358
+ },
359
+ },
306
360
  'precisionMode': TICK_SIZE,
307
361
  'exceptions': {
308
362
  '400': ExchangeError, # At least one parameter wasn't set
@@ -455,6 +509,7 @@ class zonda(Exchange, ImplicitAPI):
455
509
  """
456
510
  self.load_markets()
457
511
  request: dict = {}
512
+ # todo pair
458
513
  response = self.v1_01PrivateGetTradingOffer(self.extend(request, params))
459
514
  items = self.safe_list(response, 'items', [])
460
515
  return self.parse_orders(items, None, since, limit, {'status': 'open'})
@@ -1364,6 +1419,9 @@ class zonda(Exchange, ImplicitAPI):
1364
1419
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1365
1420
  """
1366
1421
  create a trade order
1422
+
1423
+ https://docs.zondacrypto.exchange/reference/new-order
1424
+
1367
1425
  :param str symbol: unified symbol of the market to create an order in
1368
1426
  :param str type: 'market' or 'limit'
1369
1427
  :param str side: 'buy' or 'sell'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.4.49
3
+ Version: 4.4.51
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
@@ -12,7 +12,6 @@ Project-URL: Discord, https://discord.gg/ccxt
12
12
  Project-URL: Twitter, https://twitter.com/ccxt_official
13
13
  Project-URL: Funding, https://opencollective.com/ccxt
14
14
  Keywords: algorithmic,algotrading,altcoin,altcoins,api,arbitrage,real-time,realtime,backtest,backtesting,bitcoin,bot,btc,cny,coin,coins,crypto,cryptocurrency,crypto currency,crypto market,currency,currencies,darkcoin,dash,digital currency,doge,dogecoin,e-commerce,etc,eth,ether,ethereum,exchange,exchanges,eur,framework,invest,investing,investor,library,light,litecoin,ltc,market,market data,markets,merchandise,merchant,minimal,ohlcv,order,orderbook,order book,price,price data,pricefeed,private,public,ripple,strategy,ticker,tickers,toolkit,trade,trader,trading,usd,volume,websocket,websockets,web socket,web sockets,ws,xbt,xrp,zec,zerocoin
15
- Platform: UNKNOWN
16
15
  Classifier: Development Status :: 4 - Beta
17
16
  Classifier: Intended Audience :: Developers
18
17
  Classifier: Intended Audience :: Financial and Insurance Industry
@@ -34,19 +33,19 @@ Classifier: Operating System :: OS Independent
34
33
  Classifier: Environment :: Console
35
34
  Description-Content-Type: text/markdown
36
35
  License-File: LICENSE.txt
37
- Requires-Dist: setuptools (>=60.9.0)
38
- Requires-Dist: certifi (>=2018.1.18)
39
- Requires-Dist: requests (>=2.18.4)
40
- Requires-Dist: cryptography (>=2.6.1)
41
- Requires-Dist: typing-extensions (>=4.4.0)
42
- Requires-Dist: aiohttp (<=3.10.11) ; python_version>="3.5.2"
43
- Requires-Dist: aiodns (>=1.1.1) ; python_version>="3.5.2"
44
- Requires-Dist: yarl (>=1.7.2) ; python_version>="3.5.2"
36
+ Requires-Dist: setuptools>=60.9.0
37
+ Requires-Dist: certifi>=2018.1.18
38
+ Requires-Dist: requests>=2.18.4
39
+ Requires-Dist: cryptography>=2.6.1
40
+ Requires-Dist: typing-extensions>=4.4.0
41
+ Requires-Dist: aiohttp<=3.10.11; python_version >= "3.5.2"
42
+ Requires-Dist: aiodns>=1.1.1; python_version >= "3.5.2"
43
+ Requires-Dist: yarl>=1.7.2; python_version >= "3.5.2"
45
44
  Provides-Extra: qa
46
- Requires-Dist: ruff (==0.0.292) ; extra == 'qa'
47
- Requires-Dist: tox (>=4.8.0) ; extra == 'qa'
45
+ Requires-Dist: ruff==0.0.292; extra == "qa"
46
+ Requires-Dist: tox>=4.8.0; extra == "qa"
48
47
  Provides-Extra: type
49
- Requires-Dist: mypy (==1.6.1) ; extra == 'type'
48
+ Requires-Dist: mypy==1.6.1; extra == "type"
50
49
 
51
50
  # CCXT – CryptoCurrency eXchange Trading Library
52
51
 
@@ -71,6 +70,9 @@ Current feature list:
71
70
 
72
71
  ## Sponsored Promotion
73
72
 
73
+ [![Gate-3rd-Trading-Carnival](https://github.com/user-attachments/assets/6cbb4055-97a8-4985-8c55-0056b4a8612c)](https://www.gate.io/activities/ccxt-trading-competition)
74
+
75
+
74
76
  ## See Also
75
77
 
76
78
  - <sub>[![TabTrader](https://user-images.githubusercontent.com/1294454/66755907-9c3e8880-eea1-11e9-846e-0bff349ceb87.png)](https://tab-trader.com/?utm_source=ccxt)</sub> **[TabTrader](https://tab-trader.com/?utm_source=ccxt)** – trading on all exchanges in one app. Available on **[Android](https://play.google.com/store/apps/details?id=com.tabtrader.android&referrer=utm_source%3Dccxt)** and **[iOS](https://itunes.apple.com/app/apple-store/id1095716562?mt=8)**!
@@ -276,13 +278,13 @@ console.log(version, Object.keys(exchanges));
276
278
 
277
279
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
278
280
 
279
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.49/dist/ccxt.browser.min.js
280
- * unpkg: https://unpkg.com/ccxt@4.4.49/dist/ccxt.browser.min.js
281
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.51/dist/ccxt.browser.min.js
282
+ * unpkg: https://unpkg.com/ccxt@4.4.51/dist/ccxt.browser.min.js
281
283
 
282
284
  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.
283
285
 
284
286
  ```HTML
285
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.49/dist/ccxt.browser.min.js"></script>
287
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.51/dist/ccxt.browser.min.js"></script>
286
288
  ```
287
289
 
288
290
  Creates a global `ccxt` object:
@@ -642,5 +644,3 @@ Thank you!
642
644
  ## Contact Us
643
645
 
644
646
  For business inquiries: info@ccxt.trade
645
-
646
-