ccxt 4.2.12 → 4.2.14

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 (81) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.js +1338 -366
  3. package/dist/ccxt.browser.min.js +7 -7
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/js/ccxt.js +1 -1
  6. package/dist/cjs/js/src/base/Exchange.js +148 -1
  7. package/dist/cjs/js/src/bigone.js +125 -54
  8. package/dist/cjs/js/src/binance.js +142 -27
  9. package/dist/cjs/js/src/binanceus.js +8 -0
  10. package/dist/cjs/js/src/bingx.js +110 -36
  11. package/dist/cjs/js/src/bitget.js +17 -6
  12. package/dist/cjs/js/src/bitmart.js +3 -3
  13. package/dist/cjs/js/src/bybit.js +5 -1
  14. package/dist/cjs/js/src/coinbase.js +176 -26
  15. package/dist/cjs/js/src/coinex.js +3 -0
  16. package/dist/cjs/js/src/coinlist.js +1 -1
  17. package/dist/cjs/js/src/coinone.js +1 -1
  18. package/dist/cjs/js/src/delta.js +7 -1
  19. package/dist/cjs/js/src/deribit.js +1 -1
  20. package/dist/cjs/js/src/gate.js +79 -56
  21. package/dist/cjs/js/src/gemini.js +1 -1
  22. package/dist/cjs/js/src/htx.js +151 -1
  23. package/dist/cjs/js/src/independentreserve.js +7 -5
  24. package/dist/cjs/js/src/kraken.js +22 -14
  25. package/dist/cjs/js/src/kucoin.js +5 -0
  26. package/dist/cjs/js/src/kucoinfutures.js +131 -77
  27. package/dist/cjs/js/src/lbank.js +59 -33
  28. package/dist/cjs/js/src/oceanex.js +1 -1
  29. package/dist/cjs/js/src/okx.js +11 -9
  30. package/dist/cjs/js/src/phemex.js +9 -2
  31. package/dist/cjs/js/src/pro/kraken.js +1 -1
  32. package/dist/cjs/js/src/pro/okx.js +52 -2
  33. package/dist/cjs/js/src/probit.js +4 -2
  34. package/dist/cjs/js/src/wavesexchange.js +1 -1
  35. package/dist/cjs/js/src/woo.js +56 -2
  36. package/js/ccxt.d.ts +1 -1
  37. package/js/ccxt.js +1 -1
  38. package/js/src/abstract/bigone.d.ts +1 -0
  39. package/js/src/abstract/bingx.d.ts +2 -0
  40. package/js/src/abstract/kucoin.d.ts +4 -0
  41. package/js/src/abstract/kucoinfutures.d.ts +4 -0
  42. package/js/src/abstract/okx.d.ts +1 -0
  43. package/js/src/base/Exchange.d.ts +8 -0
  44. package/js/src/base/Exchange.js +148 -1
  45. package/js/src/bigone.d.ts +2 -0
  46. package/js/src/bigone.js +125 -54
  47. package/js/src/binance.d.ts +9 -0
  48. package/js/src/binance.js +142 -27
  49. package/js/src/binanceus.js +8 -0
  50. package/js/src/bingx.js +110 -36
  51. package/js/src/bitget.js +17 -6
  52. package/js/src/bitmart.js +3 -3
  53. package/js/src/bybit.js +5 -1
  54. package/js/src/coinbase.d.ts +26 -3
  55. package/js/src/coinbase.js +176 -26
  56. package/js/src/coinex.js +3 -0
  57. package/js/src/coinlist.js +1 -1
  58. package/js/src/coinone.js +1 -1
  59. package/js/src/delta.js +7 -1
  60. package/js/src/deribit.js +1 -1
  61. package/js/src/gate.js +79 -56
  62. package/js/src/gemini.js +1 -1
  63. package/js/src/htx.d.ts +10 -0
  64. package/js/src/htx.js +151 -1
  65. package/js/src/independentreserve.js +7 -5
  66. package/js/src/kraken.js +22 -14
  67. package/js/src/kucoin.js +5 -0
  68. package/js/src/kucoinfutures.d.ts +4 -2
  69. package/js/src/kucoinfutures.js +131 -77
  70. package/js/src/lbank.js +59 -33
  71. package/js/src/oceanex.js +1 -1
  72. package/js/src/okx.js +11 -9
  73. package/js/src/phemex.js +9 -2
  74. package/js/src/pro/kraken.js +1 -1
  75. package/js/src/pro/okx.d.ts +1 -0
  76. package/js/src/pro/okx.js +52 -2
  77. package/js/src/probit.js +4 -2
  78. package/js/src/wavesexchange.js +1 -1
  79. package/js/src/woo.d.ts +2 -0
  80. package/js/src/woo.js +56 -2
  81. package/package.json +1 -1
@@ -929,13 +929,17 @@ class lbank extends lbank$1 {
929
929
  else {
930
930
  request['size'] = 600; // max
931
931
  }
932
- let method = this.safeString(params, 'method');
932
+ const options = this.safeValue(this.options, 'fetchTrades', {});
933
+ const defaultMethod = this.safeString(options, 'method', 'spotPublicGetTrades');
934
+ const method = this.safeString(params, 'method', defaultMethod);
933
935
  params = this.omit(params, 'method');
934
- if (method === undefined) {
935
- const options = this.safeValue(this.options, 'fetchTrades', {});
936
- method = this.safeString(options, 'method', 'spotPublicGetTrades');
936
+ let response = undefined;
937
+ if (method === 'spotPublicGetSupplementTrades') {
938
+ response = await this.spotPublicGetSupplementTrades(this.extend(request, params));
939
+ }
940
+ else {
941
+ response = await this.spotPublicGetTrades(this.extend(request, params));
937
942
  }
938
- const response = await this[method](this.extend(request, params));
939
943
  //
940
944
  // {
941
945
  // "result":"true",
@@ -1172,12 +1176,19 @@ class lbank extends lbank$1 {
1172
1176
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1173
1177
  */
1174
1178
  await this.loadMarkets();
1175
- let method = this.safeString(params, 'method');
1176
- if (method === undefined) {
1177
- const options = this.safeValue(this.options, 'fetchBalance', {});
1178
- method = this.safeString(options, 'method', 'spotPrivatePostSupplementUserInfo');
1179
+ const options = this.safeValue(this.options, 'fetchBalance', {});
1180
+ const defaultMethod = this.safeString(options, 'method', 'spotPrivatePostSupplementUserInfo');
1181
+ const method = this.safeString(params, 'method', defaultMethod);
1182
+ let response = undefined;
1183
+ if (method === 'spotPrivatePostSupplementUserInfoAccount') {
1184
+ response = await this.spotPrivatePostSupplementUserInfoAccount();
1185
+ }
1186
+ else if (method === 'spotPrivatePostUserInfo') {
1187
+ response = await this.spotPrivatePostUserInfo();
1188
+ }
1189
+ else {
1190
+ response = await this.spotPrivatePostSupplementUserInfo();
1179
1191
  }
1180
- const response = await this[method]();
1181
1192
  //
1182
1193
  // {
1183
1194
  // "result": "true",
@@ -1362,14 +1373,17 @@ class lbank extends lbank$1 {
1362
1373
  if (clientOrderId !== undefined) {
1363
1374
  request['custom_id'] = clientOrderId;
1364
1375
  }
1365
- let method = undefined;
1366
- method = this.safeString(params, 'method');
1376
+ const options = this.safeValue(this.options, 'createOrder', {});
1377
+ const defaultMethod = this.safeString(options, 'method', 'spotPrivatePostSupplementCreateOrder');
1378
+ const method = this.safeString(params, 'method', defaultMethod);
1367
1379
  params = this.omit(params, 'method');
1368
- if (method === undefined) {
1369
- const options = this.safeValue(this.options, 'createOrder', {});
1370
- method = this.safeString(options, 'method', 'spotPrivatePostSupplementCreateOrder');
1380
+ let response = undefined;
1381
+ if (method === 'spotPrivatePostCreateOrder') {
1382
+ response = await this.spotPrivatePostCreateOrder(this.extend(request, params));
1383
+ }
1384
+ else {
1385
+ response = await this.spotPrivatePostSupplementCreateOrder(this.extend(request, params));
1371
1386
  }
1372
- const response = await this[method](this.extend(request, params));
1373
1387
  //
1374
1388
  // {
1375
1389
  // "result":true,
@@ -1904,13 +1918,18 @@ class lbank extends lbank$1 {
1904
1918
  * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
1905
1919
  */
1906
1920
  await this.loadMarkets();
1907
- let method = this.safeString(params, 'method');
1921
+ const options = this.safeValue(this.options, 'fetchDepositAddress', {});
1922
+ const defaultMethod = this.safeString(options, 'method', 'fetchDepositAddressDefault');
1923
+ const method = this.safeString(params, 'method', defaultMethod);
1908
1924
  params = this.omit(params, 'method');
1909
- if (method === undefined) {
1910
- const options = this.safeValue(this.options, 'fetchDepositAddress', {});
1911
- method = this.safeString(options, 'method', 'fetchDepositAddressDefault');
1925
+ let response = undefined;
1926
+ if (method === 'fetchDepositAddressSupplement') {
1927
+ response = await this.fetchDepositAddressSupplement(code, params);
1912
1928
  }
1913
- return await this[method](code, params);
1929
+ else {
1930
+ response = await this.fetchDepositAddressDefault(code, params);
1931
+ }
1932
+ return response;
1914
1933
  }
1915
1934
  async fetchDepositAddressDefault(code, params = {}) {
1916
1935
  await this.loadMarkets();
@@ -2282,13 +2301,16 @@ class lbank extends lbank$1 {
2282
2301
  const isAuthorized = this.checkRequiredCredentials(false);
2283
2302
  let result = undefined;
2284
2303
  if (isAuthorized === true) {
2285
- let method = this.safeString(params, 'method');
2304
+ const options = this.safeValue(this.options, 'fetchTransactionFees', {});
2305
+ const defaultMethod = this.safeString(options, 'method', 'fetchPrivateTransactionFees');
2306
+ const method = this.safeString(params, 'method', defaultMethod);
2286
2307
  params = this.omit(params, 'method');
2287
- if (method === undefined) {
2288
- const options = this.safeValue(this.options, 'fetchTransactionFees', {});
2289
- method = this.safeString(options, 'method', 'fetchPrivateTransactionFees');
2308
+ if (method === 'fetchPublicTransactionFees') {
2309
+ result = await this.fetchPublicTransactionFees(params);
2310
+ }
2311
+ else {
2312
+ result = await this.fetchPrivateTransactionFees(params);
2290
2313
  }
2291
- result = await this[method](params);
2292
2314
  }
2293
2315
  else {
2294
2316
  result = await this.fetchPublicTransactionFees(params);
@@ -2426,19 +2448,23 @@ class lbank extends lbank$1 {
2426
2448
  */
2427
2449
  await this.loadMarkets();
2428
2450
  const isAuthorized = this.checkRequiredCredentials(false);
2429
- let method = undefined;
2451
+ const response = undefined;
2430
2452
  if (isAuthorized === true) {
2431
- method = this.safeString(params, 'method');
2453
+ const options = this.safeValue(this.options, 'fetchDepositWithdrawFees', {});
2454
+ const defaultMethod = this.safeString(options, 'method', 'fetchPrivateDepositWithdrawFees');
2455
+ const method = this.safeString(params, 'method', defaultMethod);
2432
2456
  params = this.omit(params, 'method');
2433
- if (method === undefined) {
2434
- const options = this.safeValue(this.options, 'fetchDepositWithdrawFees', {});
2435
- method = this.safeString(options, 'method', 'fetchPrivateDepositWithdrawFees');
2457
+ if (method === 'fetchPublicDepositWithdrawFees') {
2458
+ await this.fetchPublicDepositWithdrawFees(codes, params);
2459
+ }
2460
+ else {
2461
+ await this.fetchPrivateDepositWithdrawFees(codes, params);
2436
2462
  }
2437
2463
  }
2438
2464
  else {
2439
- method = 'fetchPublicDepositWithdrawFees';
2465
+ await this.fetchPublicDepositWithdrawFees(codes, params);
2440
2466
  }
2441
- return await this[method](codes, params);
2467
+ return response;
2442
2468
  }
2443
2469
  async fetchPrivateDepositWithdrawFees(codes = undefined, params = {}) {
2444
2470
  // complete response
@@ -472,7 +472,7 @@ class oceanex extends oceanex$1 {
472
472
  'market': market['id'],
473
473
  };
474
474
  if (limit !== undefined) {
475
- request['limit'] = limit;
475
+ request['limit'] = Math.min(limit, 1000);
476
476
  }
477
477
  const response = await this.publicGetTrades(this.extend(request, params));
478
478
  //
@@ -38,14 +38,18 @@ class okx extends okx$1 {
38
38
  'createDepositAddress': false,
39
39
  'createMarketBuyOrderWithCost': true,
40
40
  'createMarketSellOrderWithCost': true,
41
- 'createTrailingPercentOrder': true,
42
41
  'createOrder': true,
43
42
  'createOrders': true,
43
+ 'createOrderWithTakeProfitAndStopLoss': true,
44
44
  'createPostOnlyOrder': true,
45
45
  'createReduceOnlyOrder': true,
46
+ 'createStopLossOrder': true,
46
47
  'createStopLimitOrder': true,
47
48
  'createStopMarketOrder': true,
48
49
  'createStopOrder': true,
50
+ 'createTakeProfitOrder': true,
51
+ 'createTrailingPercentOrder': true,
52
+ 'createTriggerOrder': true,
49
53
  'editOrder': true,
50
54
  'fetchAccounts': true,
51
55
  'fetchBalance': true,
@@ -259,6 +263,7 @@ class okx extends okx$1 {
259
263
  'sprd/order': 1 / 3,
260
264
  'sprd/orders-pending': 1 / 3,
261
265
  'sprd/orders-history': 1 / 2,
266
+ 'sprd/orders-history-archive': 1 / 2,
262
267
  'sprd/trades': 1 / 3,
263
268
  // trade
264
269
  'trade/order': 1 / 3,
@@ -2132,17 +2137,14 @@ class okx extends okx$1 {
2132
2137
  let defaultType = 'Candles';
2133
2138
  if (since !== undefined) {
2134
2139
  const now = this.milliseconds();
2135
- const difference = now - since;
2136
2140
  const durationInMilliseconds = duration * 1000;
2137
- // if the since timestamp is more than limit candles back in the past
2138
- // additional one bar for max offset to round the current day to UTC
2139
- const calc = (1440 - limit - 1) * durationInMilliseconds;
2140
- if (difference > calc) {
2141
+ // switch to history candles if since is past the cutoff for current candles
2142
+ const historyBorder = now - ((1440 - 1) * durationInMilliseconds);
2143
+ if (since < historyBorder) {
2141
2144
  defaultType = 'HistoryCandles';
2142
2145
  }
2143
- const startTime = Math.max(since - 1, 0);
2144
- request['before'] = startTime;
2145
- request['after'] = this.sum(startTime, durationInMilliseconds * limit);
2146
+ request['before'] = since;
2147
+ request['after'] = this.sum(since, durationInMilliseconds * limit);
2146
2148
  }
2147
2149
  const until = this.safeInteger(params, 'until');
2148
2150
  if (until !== undefined) {
@@ -452,7 +452,7 @@ class phemex extends phemex$1 {
452
452
  },
453
453
  },
454
454
  'options': {
455
- 'brokerId': 'CCXT',
455
+ 'brokerId': 'CCXT123456',
456
456
  'x-phemex-request-expiry': 60,
457
457
  'createOrderByQuoteRequiresPrice': true,
458
458
  'networks': {
@@ -2477,7 +2477,7 @@ class phemex extends phemex$1 {
2477
2477
  const takeProfit = this.safeValue(params, 'takeProfit');
2478
2478
  const takeProfitDefined = (takeProfit !== undefined);
2479
2479
  if (clientOrderId === undefined) {
2480
- const brokerId = this.safeString(this.options, 'brokerId');
2480
+ const brokerId = this.safeString(this.options, 'brokerId', 'CCXT123456');
2481
2481
  if (brokerId !== undefined) {
2482
2482
  request['clOrdID'] = brokerId + this.uuid16();
2483
2483
  }
@@ -4273,6 +4273,13 @@ class phemex extends phemex$1 {
4273
4273
  };
4274
4274
  let payload = '';
4275
4275
  if (method === 'POST') {
4276
+ const isOrderPlacement = (path === 'g-orders') || (path === 'spot/orders') || (path === 'orders');
4277
+ if (isOrderPlacement) {
4278
+ if (this.safeString(params, 'clOrdID') === undefined) {
4279
+ const id = this.safeString(this.options, 'brokerId', 'CCXT123456');
4280
+ params['clOrdID'] = id + this.uuid16();
4281
+ }
4282
+ }
4276
4283
  payload = this.json(params);
4277
4284
  body = payload;
4278
4285
  headers['Content-Type'] = 'application/json';
@@ -542,7 +542,7 @@ class kraken extends kraken$1 {
542
542
  ],
543
543
  'subscription': {
544
544
  'name': name,
545
- 'interval': this.safeString(this.timeframes, timeframe, timeframe),
545
+ 'interval': this.safeValue(this.timeframes, timeframe, timeframe),
546
546
  },
547
547
  };
548
548
  const request = this.deepExtend(subscribe, params);
@@ -20,6 +20,7 @@ class okx extends okx$1 {
20
20
  'watchOrderBookForSymbols': true,
21
21
  'watchBalance': true,
22
22
  'watchOHLCV': true,
23
+ 'watchOHLCVForSymbols': true,
23
24
  'watchOrders': true,
24
25
  'watchMyTrades': true,
25
26
  'watchPositions': true,
@@ -356,6 +357,50 @@ class okx extends okx$1 {
356
357
  }
357
358
  return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
358
359
  }
360
+ async watchOHLCVForSymbols(symbolsAndTimeframes, since = undefined, limit = undefined, params = {}) {
361
+ /**
362
+ * @method
363
+ * @name okx#watchOHLCVForSymbols
364
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
365
+ * @param {string[][]} symbolsAndTimeframes array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
366
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
367
+ * @param {int} [limit] the maximum amount of candles to fetch
368
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
369
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
370
+ */
371
+ const symbolsLength = symbolsAndTimeframes.length;
372
+ if (symbolsLength === 0 || !Array.isArray(symbolsAndTimeframes[0])) {
373
+ throw new errors.ArgumentsRequired(this.id + " watchOHLCVForSymbols() requires a an array of symbols and timeframes, like [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]");
374
+ }
375
+ await this.loadMarkets();
376
+ const topics = [];
377
+ const messageHashes = [];
378
+ for (let i = 0; i < symbolsAndTimeframes.length; i++) {
379
+ const symbolAndTimeframe = symbolsAndTimeframes[i];
380
+ const sym = symbolAndTimeframe[0];
381
+ const tf = symbolAndTimeframe[1];
382
+ const marketId = this.marketId(sym);
383
+ const interval = this.safeString(this.timeframes, tf, tf);
384
+ const channel = 'candle' + interval;
385
+ const topic = {
386
+ 'channel': channel,
387
+ 'instId': marketId,
388
+ };
389
+ topics.push(topic);
390
+ messageHashes.push('multi:' + channel + ':' + sym);
391
+ }
392
+ const request = {
393
+ 'op': 'subscribe',
394
+ 'args': topics,
395
+ };
396
+ const url = this.getUrl('candle', 'public');
397
+ const [symbol, timeframe, candles] = await this.watchMultiple(url, messageHashes, request, messageHashes);
398
+ if (this.newUpdates) {
399
+ limit = candles.getLimit(symbol, limit);
400
+ }
401
+ const filtered = this.filterBySinceLimit(candles, since, limit, 0, true);
402
+ return this.createOHLCVObject(symbol, timeframe, filtered);
403
+ }
359
404
  handleOHLCV(client, message) {
360
405
  //
361
406
  // {
@@ -378,7 +423,7 @@ class okx extends okx$1 {
378
423
  const data = this.safeValue(message, 'data', []);
379
424
  const marketId = this.safeString(arg, 'instId');
380
425
  const market = this.safeMarket(marketId);
381
- const symbol = market['id'];
426
+ const symbol = market['symbol'];
382
427
  const interval = channel.replace('candle', '');
383
428
  // use a reverse lookup in a static map instead
384
429
  const timeframe = this.findTimeframe(interval);
@@ -392,8 +437,13 @@ class okx extends okx$1 {
392
437
  this.ohlcvs[symbol][timeframe] = stored;
393
438
  }
394
439
  stored.append(parsed);
395
- const messageHash = channel + ':' + marketId;
440
+ const messageHash = channel + ':' + market['id'];
396
441
  client.resolve(stored, messageHash);
442
+ // for multiOHLCV we need special object, as opposed to other "multi"
443
+ // methods, because OHLCV response item does not contain symbol
444
+ // or timeframe, thus otherwise it would be unrecognizable
445
+ const messageHashForMulti = 'multi:' + channel + ':' + symbol;
446
+ client.resolve([symbol, timeframe, stored], messageHashForMulti);
397
447
  }
398
448
  }
399
449
  async watchOrderBook(symbol, limit = undefined, params = {}) {
@@ -776,7 +776,6 @@ class probit extends probit$1 {
776
776
  const market = this.market(symbol);
777
777
  const request = {
778
778
  'market_id': market['id'],
779
- 'limit': 100,
780
779
  'start_time': '1970-01-01T00:00:00.000Z',
781
780
  'end_time': this.iso8601(this.milliseconds()),
782
781
  };
@@ -784,7 +783,10 @@ class probit extends probit$1 {
784
783
  request['start_time'] = this.iso8601(since);
785
784
  }
786
785
  if (limit !== undefined) {
787
- request['limit'] = Math.min(limit, 10000);
786
+ request['limit'] = Math.min(limit, 1000);
787
+ }
788
+ else {
789
+ request['limit'] = 1000; // required to set any value
788
790
  }
789
791
  const response = await this.publicGetTrade(this.extend(request, params));
790
792
  //
@@ -2092,7 +2092,7 @@ class wavesexchange extends wavesexchange$1 {
2092
2092
  'priceAsset': market['quoteId'],
2093
2093
  };
2094
2094
  if (limit !== undefined) {
2095
- request['limit'] = limit;
2095
+ request['limit'] = Math.min(limit, 100);
2096
2096
  }
2097
2097
  if (since !== undefined) {
2098
2098
  request['timeStart'] = since;
@@ -41,13 +41,17 @@ class woo extends woo$1 {
41
41
  'createMarketOrder': false,
42
42
  'createMarketOrderWithCost': false,
43
43
  'createMarketSellOrderWithCost': false,
44
- 'createTrailingAmountOrder': true,
45
- 'createTrailingPercentOrder': true,
46
44
  'createOrder': true,
47
45
  'createReduceOnlyOrder': true,
48
46
  'createStopLimitOrder': false,
49
47
  'createStopMarketOrder': false,
50
48
  'createStopOrder': false,
49
+ 'createTrailingAmountOrder': true,
50
+ 'createTrailingPercentOrder': true,
51
+ 'createTriggerOrder': true,
52
+ 'createTakeProfitOrder': true,
53
+ 'createStopLossOrder': true,
54
+ 'createOrderWithTakeProfitAndStopLoss': true,
51
55
  'fetchAccounts': true,
52
56
  'fetchBalance': true,
53
57
  'fetchCanceledOrders': false,
@@ -763,6 +767,56 @@ class woo extends woo$1 {
763
767
  params['createMarketBuyOrderRequiresPrice'] = false;
764
768
  return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
765
769
  }
770
+ async createTrailingAmountOrder(symbol, type, side, amount, price = undefined, trailingAmount = undefined, trailingTriggerPrice = undefined, params = {}) {
771
+ /**
772
+ * @method
773
+ * @name woo#createTrailingAmountOrder
774
+ * @description create a trailing order by providing the symbol, type, side, amount, price and trailingAmount
775
+ * @param {string} symbol unified symbol of the market to create an order in
776
+ * @param {string} type 'market' or 'limit'
777
+ * @param {string} side 'buy' or 'sell'
778
+ * @param {float} amount how much you want to trade in units of the base currency, or number of contracts
779
+ * @param {float} [price] the price for the order to be filled at, in units of the quote currency, ignored in market orders
780
+ * @param {float} trailingAmount the quote amount to trail away from the current market price
781
+ * @param {float} trailingTriggerPrice the price to activate a trailing order, default uses the price argument
782
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
783
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
784
+ */
785
+ if (trailingAmount === undefined) {
786
+ throw new errors.ArgumentsRequired(this.id + ' createTrailingAmountOrder() requires a trailingAmount argument');
787
+ }
788
+ if (trailingTriggerPrice === undefined) {
789
+ throw new errors.ArgumentsRequired(this.id + ' createTrailingAmountOrder() requires a trailingTriggerPrice argument');
790
+ }
791
+ params['trailingAmount'] = trailingAmount;
792
+ params['trailingTriggerPrice'] = trailingTriggerPrice;
793
+ return await this.createOrder(symbol, type, side, amount, price, params);
794
+ }
795
+ async createTrailingPercentOrder(symbol, type, side, amount, price = undefined, trailingPercent = undefined, trailingTriggerPrice = undefined, params = {}) {
796
+ /**
797
+ * @method
798
+ * @name woo#createTrailingPercentOrder
799
+ * @description create a trailing order by providing the symbol, type, side, amount, price and trailingPercent
800
+ * @param {string} symbol unified symbol of the market to create an order in
801
+ * @param {string} type 'market' or 'limit'
802
+ * @param {string} side 'buy' or 'sell'
803
+ * @param {float} amount how much you want to trade in units of the base currency, or number of contracts
804
+ * @param {float} [price] the price for the order to be filled at, in units of the quote currency, ignored in market orders
805
+ * @param {float} trailingPercent the percent to trail away from the current market price
806
+ * @param {float} trailingTriggerPrice the price to activate a trailing order, default uses the price argument
807
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
808
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
809
+ */
810
+ if (trailingPercent === undefined) {
811
+ throw new errors.ArgumentsRequired(this.id + ' createTrailingPercentOrder() requires a trailingPercent argument');
812
+ }
813
+ if (trailingTriggerPrice === undefined) {
814
+ throw new errors.ArgumentsRequired(this.id + ' createTrailingPercentOrder() requires a trailingTriggerPrice argument');
815
+ }
816
+ params['trailingPercent'] = trailingPercent;
817
+ params['trailingTriggerPrice'] = trailingTriggerPrice;
818
+ return await this.createOrder(symbol, type, side, amount, price, params);
819
+ }
766
820
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
767
821
  /**
768
822
  * @method
package/js/ccxt.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
4
4
  import * as errors from './src/base/errors.js';
5
5
  import type { Market, Trade, Fee, Ticker, OrderBook, Order, Transaction, Tickers, Currency, Balance, DepositAddress, WithdrawalResponse, DepositAddressResponse, OHLCV, Balances, PartialBalances, Dictionary, MinMax, Position, FundingRateHistory, Liquidation, FundingHistory, MarginMode, Greeks } from './src/base/types.js';
6
6
  import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange } from './src/base/errors.js';
7
- declare const version = "4.2.11";
7
+ declare const version = "4.2.13";
8
8
  import ace from './src/ace.js';
9
9
  import alpaca from './src/alpaca.js';
10
10
  import ascendex from './src/ascendex.js';
package/js/ccxt.js CHANGED
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
38
38
  import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange } from './src/base/errors.js';
39
39
  //-----------------------------------------------------------------------------
40
40
  // this is updated by vss.js when building
41
- const version = '4.2.12';
41
+ const version = '4.2.14';
42
42
  Exchange.ccxtVersion = version;
43
43
  //-----------------------------------------------------------------------------
44
44
  import ace from './src/ace.js';
@@ -22,6 +22,7 @@ interface Exchange {
22
22
  privatePostOrdersCancel(params?: {}): Promise<implicitReturnType>;
23
23
  privatePostWithdrawals(params?: {}): Promise<implicitReturnType>;
24
24
  privatePostTransfer(params?: {}): Promise<implicitReturnType>;
25
+ contractPublicGetSymbols(params?: {}): Promise<implicitReturnType>;
25
26
  contractPublicGetInstruments(params?: {}): Promise<implicitReturnType>;
26
27
  contractPublicGetDepthSymbolSnapshot(params?: {}): Promise<implicitReturnType>;
27
28
  contractPublicGetInstrumentsDifference(params?: {}): Promise<implicitReturnType>;
@@ -9,6 +9,7 @@ interface Exchange {
9
9
  spotV1PrivateGetTradeQuery(params?: {}): Promise<implicitReturnType>;
10
10
  spotV1PrivateGetTradeOpenOrders(params?: {}): Promise<implicitReturnType>;
11
11
  spotV1PrivateGetTradeHistoryOrders(params?: {}): Promise<implicitReturnType>;
12
+ spotV1PrivateGetTradeMyTrades(params?: {}): Promise<implicitReturnType>;
12
13
  spotV1PrivateGetUserCommissionRate(params?: {}): Promise<implicitReturnType>;
13
14
  spotV1PrivateGetAccountBalance(params?: {}): Promise<implicitReturnType>;
14
15
  spotV1PrivatePostTradeOrder(params?: {}): Promise<implicitReturnType>;
@@ -38,6 +39,7 @@ interface Exchange {
38
39
  swapV2PrivateGetUserPositions(params?: {}): Promise<implicitReturnType>;
39
40
  swapV2PrivateGetUserIncome(params?: {}): Promise<implicitReturnType>;
40
41
  swapV2PrivateGetTradeOpenOrders(params?: {}): Promise<implicitReturnType>;
42
+ swapV2PrivateGetTradeOpenOrder(params?: {}): Promise<implicitReturnType>;
41
43
  swapV2PrivateGetTradeOrder(params?: {}): Promise<implicitReturnType>;
42
44
  swapV2PrivateGetTradeMarginType(params?: {}): Promise<implicitReturnType>;
43
45
  swapV2PrivateGetTradeLeverage(params?: {}): Promise<implicitReturnType>;
@@ -149,6 +149,7 @@ interface Exchange {
149
149
  futuresPublicGetPremiumQuery(params?: {}): Promise<implicitReturnType>;
150
150
  futuresPublicGetTradeStatistics(params?: {}): Promise<implicitReturnType>;
151
151
  futuresPublicGetFundingRateSymbolCurrent(params?: {}): Promise<implicitReturnType>;
152
+ futuresPublicGetContractFundingRates(params?: {}): Promise<implicitReturnType>;
152
153
  futuresPublicGetTimestamp(params?: {}): Promise<implicitReturnType>;
153
154
  futuresPublicGetStatus(params?: {}): Promise<implicitReturnType>;
154
155
  futuresPublicGetLevel2MessageQuery(params?: {}): Promise<implicitReturnType>;
@@ -167,13 +168,16 @@ interface Exchange {
167
168
  futuresPrivateGetOpenOrderStatistics(params?: {}): Promise<implicitReturnType>;
168
169
  futuresPrivateGetPosition(params?: {}): Promise<implicitReturnType>;
169
170
  futuresPrivateGetPositions(params?: {}): Promise<implicitReturnType>;
171
+ futuresPrivateGetMarginMaxWithdrawMargin(params?: {}): Promise<implicitReturnType>;
170
172
  futuresPrivateGetContractsRiskLimitSymbol(params?: {}): Promise<implicitReturnType>;
171
173
  futuresPrivateGetFundingHistory(params?: {}): Promise<implicitReturnType>;
172
174
  futuresPrivatePostTransferOut(params?: {}): Promise<implicitReturnType>;
173
175
  futuresPrivatePostTransferIn(params?: {}): Promise<implicitReturnType>;
174
176
  futuresPrivatePostOrders(params?: {}): Promise<implicitReturnType>;
175
177
  futuresPrivatePostOrdersTest(params?: {}): Promise<implicitReturnType>;
178
+ futuresPrivatePostOrdersMulti(params?: {}): Promise<implicitReturnType>;
176
179
  futuresPrivatePostPositionMarginAutoDepositStatus(params?: {}): Promise<implicitReturnType>;
180
+ futuresPrivatePostMarginWithdrawMargin(params?: {}): Promise<implicitReturnType>;
177
181
  futuresPrivatePostPositionMarginDepositMargin(params?: {}): Promise<implicitReturnType>;
178
182
  futuresPrivatePostPositionRiskLimitLevelChange(params?: {}): Promise<implicitReturnType>;
179
183
  futuresPrivatePostBulletPrivate(params?: {}): Promise<implicitReturnType>;
@@ -149,6 +149,7 @@ interface kucoin {
149
149
  futuresPublicGetPremiumQuery(params?: {}): Promise<implicitReturnType>;
150
150
  futuresPublicGetTradeStatistics(params?: {}): Promise<implicitReturnType>;
151
151
  futuresPublicGetFundingRateSymbolCurrent(params?: {}): Promise<implicitReturnType>;
152
+ futuresPublicGetContractFundingRates(params?: {}): Promise<implicitReturnType>;
152
153
  futuresPublicGetTimestamp(params?: {}): Promise<implicitReturnType>;
153
154
  futuresPublicGetStatus(params?: {}): Promise<implicitReturnType>;
154
155
  futuresPublicGetLevel2MessageQuery(params?: {}): Promise<implicitReturnType>;
@@ -171,6 +172,7 @@ interface kucoin {
171
172
  futuresPrivateGetOpenOrderStatistics(params?: {}): Promise<implicitReturnType>;
172
173
  futuresPrivateGetPosition(params?: {}): Promise<implicitReturnType>;
173
174
  futuresPrivateGetPositions(params?: {}): Promise<implicitReturnType>;
175
+ futuresPrivateGetMarginMaxWithdrawMargin(params?: {}): Promise<implicitReturnType>;
174
176
  futuresPrivateGetContractsRiskLimitSymbol(params?: {}): Promise<implicitReturnType>;
175
177
  futuresPrivateGetFundingHistory(params?: {}): Promise<implicitReturnType>;
176
178
  futuresPrivateGetDepositAddress(params?: {}): Promise<implicitReturnType>;
@@ -183,7 +185,9 @@ interface kucoin {
183
185
  futuresPrivatePostTransferIn(params?: {}): Promise<implicitReturnType>;
184
186
  futuresPrivatePostOrders(params?: {}): Promise<implicitReturnType>;
185
187
  futuresPrivatePostOrdersTest(params?: {}): Promise<implicitReturnType>;
188
+ futuresPrivatePostOrdersMulti(params?: {}): Promise<implicitReturnType>;
186
189
  futuresPrivatePostPositionMarginAutoDepositStatus(params?: {}): Promise<implicitReturnType>;
190
+ futuresPrivatePostMarginWithdrawMargin(params?: {}): Promise<implicitReturnType>;
187
191
  futuresPrivatePostPositionMarginDepositMargin(params?: {}): Promise<implicitReturnType>;
188
192
  futuresPrivatePostPositionRiskLimitLevelChange(params?: {}): Promise<implicitReturnType>;
189
193
  futuresPrivatePostBulletPrivate(params?: {}): Promise<implicitReturnType>;
@@ -81,6 +81,7 @@ interface Exchange {
81
81
  privateGetSprdOrder(params?: {}): Promise<implicitReturnType>;
82
82
  privateGetSprdOrdersPending(params?: {}): Promise<implicitReturnType>;
83
83
  privateGetSprdOrdersHistory(params?: {}): Promise<implicitReturnType>;
84
+ privateGetSprdOrdersHistoryArchive(params?: {}): Promise<implicitReturnType>;
84
85
  privateGetSprdTrades(params?: {}): Promise<implicitReturnType>;
85
86
  privateGetTradeOrder(params?: {}): Promise<implicitReturnType>;
86
87
  privateGetTradeOrdersPending(params?: {}): Promise<implicitReturnType>;
@@ -303,13 +303,17 @@ export default class Exchange {
303
303
  createMarketOrderWithCost: any;
304
304
  createMarketSellOrderWithCost: any;
305
305
  createOrders: any;
306
+ createOrderWithTakeProfitAndStopLoss: any;
306
307
  createPostOnlyOrder: any;
307
308
  createReduceOnlyOrder: any;
309
+ createStopLossOrder: any;
308
310
  createStopOrder: any;
309
311
  createStopLimitOrder: any;
310
312
  createStopMarketOrder: any;
313
+ createTakeProfitOrder: any;
311
314
  createTrailingAmountOrder: any;
312
315
  createTrailingPercentOrder: any;
316
+ createTriggerOrder: any;
313
317
  createOrderWs: any;
314
318
  editOrderWs: any;
315
319
  fetchOpenOrdersWs: any;
@@ -778,6 +782,10 @@ export default class Exchange {
778
782
  createMarketOrderWithCost(symbol: string, side: OrderSide, cost: any, params?: {}): Promise<Order>;
779
783
  createMarketBuyOrderWithCost(symbol: string, cost: any, params?: {}): Promise<Order>;
780
784
  createMarketSellOrderWithCost(symbol: string, cost: any, params?: {}): Promise<Order>;
785
+ createTriggerOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, triggerPrice?: any, params?: {}): Promise<Order>;
786
+ createStopLossOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, stopLossPrice?: any, params?: {}): Promise<Order>;
787
+ createTakeProfitOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, takeProfitPrice?: any, params?: {}): Promise<Order>;
788
+ createOrderWithTakeProfitAndStopLoss(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, takeProfit?: any, stopLoss?: any, params?: {}): Promise<Order>;
781
789
  createOrders(orders: OrderRequest[], params?: {}): Promise<Order[]>;
782
790
  createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: number, params?: {}): Promise<Order>;
783
791
  cancelOrder(id: string, symbol?: string, params?: {}): Promise<any>;