ccxt 4.0.104 → 4.0.106

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,92 @@
1
+ ## 4.0.105 (2023-09-24)
2
+
3
+ * feat(bitmart): cancelAllOrders, add swap support [49d66e88ff](https://github.com/ccxt/ccxt/commits/49d66e88ff59d67e049bb865510ede6f04524cc5)
4
+ * Revert "Bybit: createOrder, remove stop order trigger direction" [4473c6dba2](https://github.com/ccxt/ccxt/commits/4473c6dba2b8575ec5d2bfb02b25a09315109030)
5
+ * cr fix [d9bdc10aff](https://github.com/ccxt/ccxt/commits/d9bdc10affa161c5bb625aa0583c15dbe7969003)
6
+ * 4.0.105 [421594122c](https://github.com/ccxt/ccxt/commits/421594122c5124fccf6181385096f58ab25db5dc)
7
+
8
+
9
+ ## 4.0.104 (2023-09-23)
10
+
11
+ * bitbank: add @see [fb67a63ea8](https://github.com/ccxt/ccxt/commits/fb67a63ea8ce42a5d5669f075665778b815bc9a6)
12
+ * bitfinex2: add @see [21681a82d9](https://github.com/ccxt/ccxt/commits/21681a82d969386c87631ca98b06aeab0eda321d)
13
+ * bitfinex2: remove method usage [ddad84c6e8](https://github.com/ccxt/ccxt/commits/ddad84c6e898b6a5cb0f383d68b0c0f3aae0a9ba)
14
+ * binance: add apis [a084e93423](https://github.com/ccxt/ccxt/commits/a084e934238af22c9c16d189d4ef4deafe7f76f0)
15
+ * 4.0.104 [fc9d86915e](https://github.com/ccxt/ccxt/commits/fc9d86915ede9e40223e0fff9f142ec81cb9b804)
16
+
17
+
18
+ ## 4.0.103 (2023-09-22)
19
+
20
+ * fix(bybit): error mapping [53c0356a25](https://github.com/ccxt/ccxt/commits/53c0356a25290f0197d875e0339d4626a7db76f8)
21
+ * update errors [85e6a2f513](https://github.com/ccxt/ccxt/commits/85e6a2f513e09b793592d94081866241d0ae54ef)
22
+ * add NoChange error [8ff3986544](https://github.com/ccxt/ccxt/commits/8ff39865446d437f12d40aaf67d3be2c887bcca5)
23
+ * add error to errorExports [d7d0c5175f](https://github.com/ccxt/ccxt/commits/d7d0c5175fab05503d7ffe28e4cb0445b1ce819c)
24
+ * missing import [e0a7564d38](https://github.com/ccxt/ccxt/commits/e0a7564d38394061ce99315d68e55b9223152bf0)
25
+ * feat(bitmart): fetchOrderBook, add swap support [74f1b8de27](https://github.com/ccxt/ccxt/commits/74f1b8de27ff24d70bfa10ade7c16d0d84c665c5)
26
+ * bingx: add fetchDepositAddress [f37b4eee93](https://github.com/ccxt/ccxt/commits/f37b4eee934d099b42964edd7ead1c4ba5514ae5)
27
+ * bingx: add @see [db5ea43f44](https://github.com/ccxt/ccxt/commits/db5ea43f44869ae51c26c327dc66652cf4ead4c4)
28
+ * wavesexchange: update toPrecision [52fafc735f](https://github.com/ccxt/ccxt/commits/52fafc735f43592830099e501dc7265bb68b5af7)
29
+ * update error hierarchy [87838749d7](https://github.com/ccxt/ccxt/commits/87838749d7965ab7969227b57ff4800aecbcfee3)
30
+ * fix(Exchange.py): handle empty/none response properly [12efe19c06](https://github.com/ccxt/ccxt/commits/12efe19c06aa9695a944952c63768ae97a2f736b)
31
+ * fix(bitget): handle empty OHLCV [550f347db5](https://github.com/ccxt/ccxt/commits/550f347db505a00bd0efdb58b28c396243bc3b78)
32
+ * feat(bitmart): transfer, add swap support [20b24883fa](https://github.com/ccxt/ccxt/commits/20b24883fa51a995a1538b8c3a53d15b1d1548f0)
33
+ * feat(bitmart): fetchTransfers [a61a9033cd](https://github.com/ccxt/ccxt/commits/a61a9033cdeeeb75233a017e2931c2de6de98f71)
34
+ * fix(gate): update rate limits [63f75fdfda](https://github.com/ccxt/ccxt/commits/63f75fdfdaf32c5055ec57b9bfe314d0bf62c93f)
35
+ * fix(gate): python linting [fc53bd03ab](https://github.com/ccxt/ccxt/commits/fc53bd03abd7b72a099ccdc5d03c861c03c658d3)
36
+ * 4.0.103 [ce7ee6b69f](https://github.com/ccxt/ccxt/commits/ce7ee6b69fb1d5bc86bc802a95add226a59a9d3d)
37
+
38
+
39
+ ## 4.0.102 (2023-09-20)
40
+
41
+ * dummy trigger retest [5e0ef5ef54](https://github.com/ccxt/ccxt/commits/5e0ef5ef54792b16292c8e89674cd708758f4e21)
42
+ * bybit: patch setMarginMode [5e06409366](https://github.com/ccxt/ccxt/commits/5e064093665b141efe9950da36d305ff9ede9a8d)
43
+ * revert [72668e7c67](https://github.com/ccxt/ccxt/commits/72668e7c673c56deef31b102f885829d9c210827)
44
+ * add symbol check [744bea41d3](https://github.com/ccxt/ccxt/commits/744bea41d3db2d604c44624006a6f2e6f61283e4)
45
+ * fix!(bkex): delist bkex [478c3d62b6](https://github.com/ccxt/ccxt/commits/478c3d62b6bbb2acc4faffda433858181e8e8aaf)
46
+ * remove bkex from ccxt.ts [bebc827555](https://github.com/ccxt/ccxt/commits/bebc827555b9f89951fa9fab56a22d2b1f02570f)
47
+ * bl3p.has: createStopOrder == false [fb3bd34694](https://github.com/ccxt/ccxt/commits/fb3bd346941db471632fc61337edc33a8023d449)
48
+ * gemini: add AuthenticationError [0292a7e582](https://github.com/ccxt/ccxt/commits/0292a7e58266c43bc73abe1b4013b1a477b3d991)
49
+ * feat(bitmart): fetchFundingRate [6e54fcba77](https://github.com/ccxt/ccxt/commits/6e54fcba77d6f626e112d6eca6bbde958add64af)
50
+ * binance: add apis [106099b9b6](https://github.com/ccxt/ccxt/commits/106099b9b6c33c8888bb0164abbec19f3f7c768a)
51
+ * bingx: add apis [c64d976c58](https://github.com/ccxt/ccxt/commits/c64d976c58ba57016097c6b49bcb362d0aa03dae)
52
+ * fix(bybit): watchOrders swap parsing [9f936e88c5](https://github.com/ccxt/ccxt/commits/9f936e88c5da1f1ae55299a0d5099737aee321be)
53
+ * 4.0.102 [7e7db36086](https://github.com/ccxt/ccxt/commits/7e7db36086110343c4913d41bac257253535915f)
54
+
55
+
56
+ ## 4.0.101 (2023-09-19)
57
+
58
+ * Update binance.ts [12bf729ca8](https://github.com/ccxt/ccxt/commits/12bf729ca8d61bfea7f8e93520ec4d0561b37480)
59
+ * fix(kucoin): fetchPosion and realizedPnl [0739cdbdbc](https://github.com/ccxt/ccxt/commits/0739cdbdbc7578f06d05396eb7276edeabe6c0f2)
60
+ * bybit: remove method usage [e0cf93f0eb](https://github.com/ccxt/ccxt/commits/e0cf93f0eb4e3d1bd621fab4eb48005408734941)
61
+ * bybit: update setMarginMode [acaaffeee9](https://github.com/ccxt/ccxt/commits/acaaffeee918564429fce1773ea47959693f851f)
62
+ * bybit: update setMarginMode [5cdb0a114a](https://github.com/ccxt/ccxt/commits/5cdb0a114afecfcc1d2c9464a60f0b95c0f53fab)
63
+ * fix docs [57c094c7d8](https://github.com/ccxt/ccxt/commits/57c094c7d808bbc5ef335bfec193ca72b221d1fd)
64
+ * feat(kucoin): add watchTickers [fee4ed80a6](https://github.com/ccxt/ccxt/commits/fee4ed80a69cb1e84ba71ef543e89c4e3f1714a8)
65
+ * binance [5e40903afa](https://github.com/ccxt/ccxt/commits/5e40903afaec24931bc2e9cc2f5d22788b01efe9)
66
+ * bitbank [1218c051fc](https://github.com/ccxt/ccxt/commits/1218c051fcd7f5a582661697ae662a0f9f66115d)
67
+ * biflyer [49abaf6f35](https://github.com/ccxt/ccxt/commits/49abaf6f35d472c30a8765872ef17581385a5ddd)
68
+ * bitget [2ef437a9db](https://github.com/ccxt/ccxt/commits/2ef437a9db86017e4d5846986507846ff154cdb7)
69
+ * bitfinex [b93bb629b0](https://github.com/ccxt/ccxt/commits/b93bb629b03f7bee122e2a2d16ed59509b1ab4ef)
70
+ * bitstamp1 [fbb127be4b](https://github.com/ccxt/ccxt/commits/fbb127be4b786973cd40f15b834e5ded3ecbe3de)
71
+ * bitforex [e96e3b39fb](https://github.com/ccxt/ccxt/commits/e96e3b39fbd22f850b21b627639217919d9933a8)
72
+ * coinbasepro [80267d457a](https://github.com/ccxt/ccxt/commits/80267d457a3c50f3194df730f2e89c99d5b0b8bf)
73
+ * bl3p [f0faf57e50](https://github.com/ccxt/ccxt/commits/f0faf57e505c95a35c42eee813c14c5e4dd62229)
74
+ * Update bitflyer.ts [250f4bde0f](https://github.com/ccxt/ccxt/commits/250f4bde0fec7c5646e40835bdd8ede891882680)
75
+ * Update bitflyer.ts [0c9b5629fa](https://github.com/ccxt/ccxt/commits/0c9b5629fa7446cf6071fa02a1391d9851879aeb)
76
+ * fix(bybit): createOrder, stop orders remove triggerDirection [d2f99c806b](https://github.com/ccxt/ccxt/commits/d2f99c806ba7a010a6843aa1a6303e8e47c4b822)
77
+ * add triggerDirection param to createOrder docstring [480cac0077](https://github.com/ccxt/ccxt/commits/480cac00773dcd26aeb6bbf4bf7ca583815c1da8)
78
+ * fix(bybit): error mapping [d23a8cf711](https://github.com/ccxt/ccxt/commits/d23a8cf711df51509cc0e27b8d00770c18dd7a98)
79
+ * 4.0.101 [c11b6302ef](https://github.com/ccxt/ccxt/commits/c11b6302ef15575146575f7695311ecf609d88bf)
80
+
81
+
82
+ ## 4.0.100 (2023-09-18)
83
+
84
+ * mkts [befa94c001](https://github.com/ccxt/ccxt/commits/befa94c001786a9b913cce0e73ff9561c65cb1e5)
85
+ * safeOrder check for parsedTrades [07b9cf8561](https://github.com/ccxt/ccxt/commits/07b9cf8561ca978012aeeab817dfed267b0de507)
86
+ * fix build [1be39a3b46](https://github.com/ccxt/ccxt/commits/1be39a3b4681d0e321167c78908479e44f62041d)
87
+ * 4.0.100 [2b4aaca2ce](https://github.com/ccxt/ccxt/commits/2b4aaca2ce70901dca9d80362be5148b35fb6131)
88
+
89
+
1
90
  ## 4.0.99 (2023-09-17)
2
91
 
3
92
  * fix error handling [31ee79f75d](https://github.com/ccxt/ccxt/commits/31ee79f75d3803b4a12afcd33da377bed88a8d03)
package/README.md CHANGED
@@ -214,13 +214,13 @@ console.log(version, Object.keys(exchanges));
214
214
 
215
215
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
216
216
 
217
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.104/dist/ccxt.browser.js
218
- * unpkg: https://unpkg.com/ccxt@4.0.104/dist/ccxt.browser.js
217
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.106/dist/ccxt.browser.js
218
+ * unpkg: https://unpkg.com/ccxt@4.0.106/dist/ccxt.browser.js
219
219
 
220
220
  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.
221
221
 
222
222
  ```HTML
223
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.104/dist/ccxt.browser.js"></script>
223
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.106/dist/ccxt.browser.js"></script>
224
224
  ```
225
225
 
226
226
  Creates a global `ccxt` object:
@@ -8839,8 +8839,18 @@ class Exchange {
8839
8839
  }
8840
8840
  return result;
8841
8841
  }
8842
- marketSymbols(symbols, type = undefined) {
8842
+ marketSymbols(symbols, type = undefined, allowEmpty = true) {
8843
8843
  if (symbols === undefined) {
8844
+ if (!allowEmpty) {
8845
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_1__.ArgumentsRequired(this.id + ' empty list of symbols is not supported');
8846
+ }
8847
+ return symbols;
8848
+ }
8849
+ const symbolsLength = symbols.length;
8850
+ if (symbolsLength === 0) {
8851
+ if (!allowEmpty) {
8852
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_1__.ArgumentsRequired(this.id + ' empty list of symbols is not supported');
8853
+ }
8844
8854
  return symbols;
8845
8855
  }
8846
8856
  const result = [];
@@ -45874,8 +45884,10 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
45874
45884
  * @name bitmart#cancelAllOrders
45875
45885
  * @description cancel all open orders in a market
45876
45886
  * @see https://developer-pro.bitmart.com/en/spot/#cancel-all-orders
45887
+ * @see https://developer-pro.bitmart.com/en/futures/#cancel-all-orders-signed
45877
45888
  * @param {string} symbol unified market symbol of the market to cancel orders in
45878
45889
  * @param {object} [params] extra parameters specific to the bitmart api endpoint
45890
+ * @param {string} [params.side] *spot only* 'buy' or 'sell'
45879
45891
  * @returns {object[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
45880
45892
  */
45881
45893
  await this.loadMarkets();
@@ -45885,17 +45897,18 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
45885
45897
  market = this.market(symbol);
45886
45898
  request['symbol'] = market['id'];
45887
45899
  }
45900
+ let response = undefined;
45888
45901
  let type = undefined;
45889
45902
  [type, params] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);
45890
- if (type !== 'spot') {
45891
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.NotSupported(this.id + ' cancelAllOrders() does not support ' + type + ' orders, only spot orders are accepted');
45903
+ if (type === 'spot') {
45904
+ response = await this.privatePostSpotV1CancelOrders(this.extend(request, params));
45892
45905
  }
45893
- const side = this.safeString(params, 'side');
45894
- if (side !== undefined) {
45895
- request['side'] = side;
45896
- params = this.omit(params, 'side');
45906
+ else if (type === 'swap') {
45907
+ this.checkRequiredSymbol('cancelAllOrders', symbol);
45908
+ response = await this.privatePostContractPrivateCancelOrders(this.extend(request, params));
45897
45909
  }
45898
- const response = await this.privatePostSpotV1CancelOrders(this.extend(request, params));
45910
+ //
45911
+ // spot
45899
45912
  //
45900
45913
  // {
45901
45914
  // "code": 1000,
@@ -45904,6 +45917,14 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
45904
45917
  // "data": {}
45905
45918
  // }
45906
45919
  //
45920
+ // swap
45921
+ //
45922
+ // {
45923
+ // "code": 1000,
45924
+ // "message": "Ok",
45925
+ // "trace": "7f9c94e10f9d4513bc08a7bfc2a5559a.70.16954131323145323"
45926
+ // }
45927
+ //
45907
45928
  return response;
45908
45929
  }
45909
45930
  async fetchOrdersByStatus(status, symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -73769,7 +73790,6 @@ class bybit extends _abstract_bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
73769
73790
  * @param {boolean} [params.isLeverage] *unified spot only* false then spot trading true then margin trading
73770
73791
  * @param {string} [params.tpslMode] *contract only* 'full' or 'partial'
73771
73792
  * @param {string} [params.mmp] *option only* market maker protection
73772
- * @param {int} [params.triggerDirection] *contract only* conditional orders, 1: triggered when market price rises to triggerPrice, 2: triggered when market price falls to triggerPrice
73773
73793
  * @returns {object} an [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
73774
73794
  */
73775
73795
  await this.loadMarkets();
@@ -73877,6 +73897,7 @@ class bybit extends _abstract_bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
73877
73897
  const isBuy = side === 'buy';
73878
73898
  const ascending = stopLossTriggerPrice ? !isBuy : isBuy;
73879
73899
  if (triggerPrice !== undefined) {
73900
+ request['triggerDirection'] = ascending ? 2 : 1;
73880
73901
  request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);
73881
73902
  }
73882
73903
  else if (isStopLossTriggerOrder || isTakeProfitTriggerOrder) {
@@ -143217,7 +143238,8 @@ class krakenfutures extends _abstract_krakenfutures_js__WEBPACK_IMPORTED_MODULE_
143217
143238
  let statusId = undefined;
143218
143239
  let price = undefined;
143219
143240
  let trades = [];
143220
- if (orderEvents.length) {
143241
+ const orderEventsLength = orderEvents.length;
143242
+ if (orderEventsLength) {
143221
143243
  const executions = [];
143222
143244
  for (let i = 0; i < orderEvents.length; i++) {
143223
143245
  const item = orderEvents[i];
@@ -143325,7 +143347,7 @@ class krakenfutures extends _abstract_krakenfutures_js__WEBPACK_IMPORTED_MODULE_
143325
143347
  return this.safeOrder({
143326
143348
  'info': order,
143327
143349
  'id': id,
143328
- 'clientOrderId': this.safeString2(details, 'clientOrderId', 'clientId'),
143350
+ 'clientOrderId': this.safeStringN(details, ['clientOrderId', 'clientId', 'cliOrdId']),
143329
143351
  'timestamp': timestamp,
143330
143352
  'datetime': this.iso8601(timestamp),
143331
143353
  'lastTradeTimestamp': undefined,
@@ -145240,6 +145262,11 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
145240
145262
  const rawPrecision = this.safeString(entry, 'precision');
145241
145263
  const precision = this.parseNumber(this.parsePrecision(rawPrecision));
145242
145264
  const chainsLength = chains.length;
145265
+ if (!chainsLength) {
145266
+ // https://t.me/KuCoin_API/173118
145267
+ isWithdrawEnabled = false;
145268
+ isDepositEnabled = false;
145269
+ }
145243
145270
  for (let j = 0; j < chainsLength; j++) {
145244
145271
  const chain = chains[j];
145245
145272
  const chainId = this.safeString(chain, 'chain');
@@ -205274,7 +205301,7 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
205274
205301
  'watchOrderBookForSymbols': true,
205275
205302
  'watchOrders': true,
205276
205303
  'watchTicker': true,
205277
- 'watchTickers': false,
205304
+ 'watchTickers': true,
205278
205305
  'watchTrades': true,
205279
205306
  'watchTradesForSymbols': true,
205280
205307
  'watchPosition': undefined,
@@ -205436,6 +205463,36 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
205436
205463
  const topics = [topic];
205437
205464
  return await this.watchTopics(url, messageHash, topics, params);
205438
205465
  }
205466
+ async watchTickers(symbols = undefined, params = {}) {
205467
+ /**
205468
+ * @method
205469
+ * @name bybit#watchTickers
205470
+ * @description n watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
205471
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/ticker
205472
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/etp-ticker
205473
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
205474
+ * @param {object} [params] extra parameters specific to the bybit api endpoint
205475
+ * @returns {object} a [ticker structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure}
205476
+ */
205477
+ await this.loadMarkets();
205478
+ symbols = this.marketSymbols(symbols, undefined, false);
205479
+ const messageHash = 'tickers::' + symbols.join(',');
205480
+ const url = this.getUrlByMarketType(symbols[0], false, params);
205481
+ params = this.cleanParams(params);
205482
+ const options = this.safeValue(this.options, 'watchTickers', {});
205483
+ const topic = this.safeString(options, 'name', 'tickers');
205484
+ const marketIds = this.marketIds(symbols);
205485
+ const topics = [];
205486
+ for (let i = 0; i < marketIds.length; i++) {
205487
+ const marketId = marketIds[i];
205488
+ topics.push(topic + '.' + marketId);
205489
+ }
205490
+ const ticker = await this.watchTopics(url, messageHash, topics, params);
205491
+ if (this.newUpdates) {
205492
+ return ticker;
205493
+ }
205494
+ return this.filterByArray(this.tickers, 'symbol', symbols);
205495
+ }
205439
205496
  handleTicker(client, message) {
205440
205497
  //
205441
205498
  // linear
@@ -205566,6 +205623,17 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
205566
205623
  this.tickers[symbol] = parsed;
205567
205624
  const messageHash = 'ticker:' + symbol;
205568
205625
  client.resolve(this.tickers[symbol], messageHash);
205626
+ // watchTickers part
205627
+ const messageHashes = this.findMessageHashes(client, 'tickers::');
205628
+ for (let i = 0; i < messageHashes.length; i++) {
205629
+ const messageHash = messageHashes[i];
205630
+ const parts = messageHash.split('::');
205631
+ const symbolsString = parts[1];
205632
+ const symbols = symbolsString.split(',');
205633
+ if (this.inArray(parsed['symbol'], symbols)) {
205634
+ client.resolve(parsed, messageHash);
205635
+ }
205636
+ }
205569
205637
  }
205570
205638
  async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
205571
205639
  /**
@@ -272475,7 +272543,7 @@ SOFTWARE.
272475
272543
 
272476
272544
  //-----------------------------------------------------------------------------
272477
272545
  // this is updated by vss.js when building
272478
- const version = '4.0.104';
272546
+ const version = '4.0.106';
272479
272547
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange.ccxtVersion */ .e.ccxtVersion = version;
272480
272548
  //-----------------------------------------------------------------------------
272481
272549