ccxt 4.4.47 → 4.4.48

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 (77) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +16 -16
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/ace.js +1 -1
  5. package/dist/cjs/src/binance.js +18 -14
  6. package/dist/cjs/src/bitget.js +4 -2
  7. package/dist/cjs/src/bitmart.js +7 -2
  8. package/dist/cjs/src/bitmex.js +8 -5
  9. package/dist/cjs/src/bybit.js +7 -2
  10. package/dist/cjs/src/coinbase.js +11 -1
  11. package/dist/cjs/src/coincatch.js +86 -2
  12. package/dist/cjs/src/coincheck.js +52 -0
  13. package/dist/cjs/src/coinlist.js +77 -0
  14. package/dist/cjs/src/coinmate.js +63 -0
  15. package/dist/cjs/src/coinmetro.js +68 -0
  16. package/dist/cjs/src/coinone.js +56 -0
  17. package/dist/cjs/src/coinsph.js +67 -1
  18. package/dist/cjs/src/coinspot.js +47 -0
  19. package/dist/cjs/src/currencycom.js +72 -0
  20. package/dist/cjs/src/defx.js +93 -6
  21. package/dist/cjs/src/delta.js +83 -1
  22. package/dist/cjs/src/gate.js +10 -1
  23. package/dist/cjs/src/htx.js +10 -2
  24. package/dist/cjs/src/hyperliquid.js +6 -1
  25. package/dist/cjs/src/independentreserve.js +60 -0
  26. package/dist/cjs/src/kraken.js +1 -1
  27. package/dist/cjs/src/krakenfutures.js +4 -4
  28. package/dist/cjs/src/okx.js +9 -1
  29. package/dist/cjs/src/paradex.js +5 -2
  30. package/dist/cjs/src/phemex.js +103 -0
  31. package/dist/cjs/src/poloniex.js +61 -0
  32. package/dist/cjs/src/poloniexfutures.js +74 -0
  33. package/dist/cjs/src/upbit.js +61 -0
  34. package/dist/cjs/src/woo.js +6 -1
  35. package/js/ccxt.d.ts +1 -1
  36. package/js/ccxt.js +1 -1
  37. package/js/src/abstract/independentreserve.d.ts +6 -0
  38. package/js/src/ace.js +1 -1
  39. package/js/src/binance.d.ts +7 -0
  40. package/js/src/binance.js +18 -14
  41. package/js/src/bitget.js +4 -2
  42. package/js/src/bitmart.js +7 -2
  43. package/js/src/bitmex.js +8 -5
  44. package/js/src/bybit.d.ts +1 -1
  45. package/js/src/bybit.js +7 -2
  46. package/js/src/coinbase.d.ts +1 -0
  47. package/js/src/coinbase.js +11 -1
  48. package/js/src/coincatch.d.ts +1 -2
  49. package/js/src/coincatch.js +86 -2
  50. package/js/src/coincheck.js +52 -0
  51. package/js/src/coinlist.js +77 -0
  52. package/js/src/coinmate.js +63 -0
  53. package/js/src/coinmetro.js +68 -0
  54. package/js/src/coinone.js +56 -0
  55. package/js/src/coinsph.d.ts +1 -1
  56. package/js/src/coinsph.js +67 -1
  57. package/js/src/coinspot.js +47 -0
  58. package/js/src/currencycom.js +72 -0
  59. package/js/src/defx.js +93 -6
  60. package/js/src/delta.js +83 -1
  61. package/js/src/gate.d.ts +1 -0
  62. package/js/src/gate.js +10 -1
  63. package/js/src/htx.d.ts +1 -0
  64. package/js/src/htx.js +10 -2
  65. package/js/src/hyperliquid.js +6 -1
  66. package/js/src/independentreserve.js +60 -0
  67. package/js/src/kraken.js +1 -1
  68. package/js/src/krakenfutures.js +4 -4
  69. package/js/src/okx.d.ts +1 -0
  70. package/js/src/okx.js +9 -1
  71. package/js/src/paradex.js +5 -2
  72. package/js/src/phemex.js +103 -0
  73. package/js/src/poloniex.js +61 -0
  74. package/js/src/poloniexfutures.js +74 -0
  75. package/js/src/upbit.js +61 -0
  76. package/js/src/woo.js +6 -1
  77. package/package.json +1 -1
package/dist/cjs/ccxt.js CHANGED
@@ -202,7 +202,7 @@ var xt$1 = require('./src/pro/xt.js');
202
202
 
203
203
  //-----------------------------------------------------------------------------
204
204
  // this is updated by vss.js when building
205
- const version = '4.4.47';
205
+ const version = '4.4.48';
206
206
  Exchange["default"].ccxtVersion = version;
207
207
  const exchanges = {
208
208
  'ace': ace,
@@ -475,7 +475,7 @@ class ace extends ace$1 {
475
475
  // }
476
476
  //
477
477
  const orderBook = this.safeDict(response, 'attachment');
478
- return this.parseOrderBook(orderBook, market['symbol'], undefined, 'bids', 'asks');
478
+ return this.parseOrderBook(orderBook, market['symbol'], undefined, 'bids', 'asks', 1, 0);
479
479
  }
480
480
  parseOHLCV(ohlcv, market = undefined) {
481
481
  //
@@ -9870,20 +9870,24 @@ class binance extends binance$1 {
9870
9870
  // "fundingTime": "1621267200000",
9871
9871
  // }
9872
9872
  //
9873
- const rates = [];
9874
- for (let i = 0; i < response.length; i++) {
9875
- const entry = response[i];
9876
- const timestamp = this.safeInteger(entry, 'fundingTime');
9877
- rates.push({
9878
- 'info': entry,
9879
- 'symbol': this.safeSymbol(this.safeString(entry, 'symbol'), undefined, undefined, 'swap'),
9880
- 'fundingRate': this.safeNumber(entry, 'fundingRate'),
9881
- 'timestamp': timestamp,
9882
- 'datetime': this.iso8601(timestamp),
9883
- });
9884
- }
9885
- const sorted = this.sortBy(rates, 'timestamp');
9886
- return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
9873
+ return this.parseFundingRateHistories(response, market, since, limit);
9874
+ }
9875
+ parseFundingRateHistory(contract, market = undefined) {
9876
+ //
9877
+ // {
9878
+ // "symbol": "BTCUSDT",
9879
+ // "fundingRate": "0.00063521",
9880
+ // "fundingTime": "1621267200000",
9881
+ // }
9882
+ //
9883
+ const timestamp = this.safeInteger(contract, 'fundingTime');
9884
+ return {
9885
+ 'info': contract,
9886
+ 'symbol': this.safeSymbol(this.safeString(contract, 'symbol'), undefined, undefined, 'swap'),
9887
+ 'fundingRate': this.safeNumber(contract, 'fundingRate'),
9888
+ 'timestamp': timestamp,
9889
+ 'datetime': this.iso8601(timestamp),
9890
+ };
9887
9891
  }
9888
9892
  /**
9889
9893
  * @method
@@ -4332,8 +4332,10 @@ class bitget extends bitget$1 {
4332
4332
  if (!market['spot']) {
4333
4333
  throw new errors.NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
4334
4334
  }
4335
- params['createMarketBuyOrderRequiresPrice'] = false;
4336
- return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
4335
+ const req = {
4336
+ 'createMarketBuyOrderRequiresPrice': false,
4337
+ };
4338
+ return await this.createOrder(symbol, 'market', 'buy', cost, undefined, this.extend(req, params));
4337
4339
  }
4338
4340
  /**
4339
4341
  * @method
@@ -526,6 +526,8 @@ class bitmart extends bitmart$1 {
526
526
  'defaultNetworks': {
527
527
  'USDT': 'ERC20',
528
528
  },
529
+ 'timeDifference': 0,
530
+ 'adjustForTimeDifference': false,
529
531
  'networks': {
530
532
  'ERC20': 'ERC20',
531
533
  'SOL': 'SOL',
@@ -1140,6 +1142,9 @@ class bitmart extends bitmart$1 {
1140
1142
  * @returns {object[]} an array of objects representing market data
1141
1143
  */
1142
1144
  async fetchMarkets(params = {}) {
1145
+ if (this.options['adjustForTimeDifference']) {
1146
+ await this.loadTimeDifference();
1147
+ }
1143
1148
  const spot = await this.fetchSpotMarkets(params);
1144
1149
  const contract = await this.fetchContractMarkets(params);
1145
1150
  return this.arrayConcat(spot, contract);
@@ -5300,7 +5305,7 @@ class bitmart extends bitmart$1 {
5300
5305
  return this.filterBySinceLimit(sorted, since, limit);
5301
5306
  }
5302
5307
  nonce() {
5303
- return this.milliseconds();
5308
+ return this.milliseconds() - this.options['timeDifference'];
5304
5309
  }
5305
5310
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
5306
5311
  const parts = path.split('/');
@@ -5320,7 +5325,7 @@ class bitmart extends bitmart$1 {
5320
5325
  }
5321
5326
  if (api === 'private') {
5322
5327
  this.checkRequiredCredentials();
5323
- const timestamp = this.milliseconds().toString();
5328
+ const timestamp = this.nonce().toString();
5324
5329
  const brokerId = this.safeString(this.options, 'brokerId', 'CCXTxBitmart000');
5325
5330
  headers = {
5326
5331
  'X-BM-KEY': this.apiKey,
@@ -299,9 +299,11 @@ class bitmex extends bitmex$1 {
299
299
  'trailing': true,
300
300
  'marketBuyRequiresPrice': false,
301
301
  'marketBuyByCost': false,
302
- 'leverage': false,
303
- 'selfTradePrevention': false,
304
- 'iceberg': true, // todo
302
+ // exchange-supported features
303
+ // 'selfTradePrevention': true,
304
+ // 'twap': false,
305
+ // 'iceberg': false,
306
+ // 'oco': false,
305
307
  },
306
308
  'createOrders': undefined,
307
309
  'fetchMyTrades': {
@@ -332,7 +334,7 @@ class bitmex extends bitmex$1 {
332
334
  'fetchClosedOrders': {
333
335
  'marginMode': false,
334
336
  'limit': 500,
335
- 'daysBack': undefined,
337
+ 'daysBackClosed': undefined,
336
338
  'daysBackCanceled': undefined,
337
339
  'untilDays': 1000000,
338
340
  'trigger': false,
@@ -2608,7 +2610,8 @@ class bitmex extends bitmex$1 {
2608
2610
  }
2609
2611
  }
2610
2612
  symbols = this.marketSymbols(symbols);
2611
- return this.parseFundingRates(filteredResponse, symbols);
2613
+ const result = this.parseFundingRates(filteredResponse);
2614
+ return this.filterByArray(result, 'symbol', symbols);
2612
2615
  }
2613
2616
  parseFundingRate(contract, market = undefined) {
2614
2617
  // see response sample under "fetchMarkets" because same endpoint is being used here
@@ -3333,7 +3333,12 @@ class bybit extends bybit$1 {
3333
3333
  account['free'] = free;
3334
3334
  }
3335
3335
  else {
3336
- account['used'] = this.safeString(coinEntry, 'locked');
3336
+ const locked = this.safeString(coinEntry, 'locked', '0');
3337
+ const totalPositionIm = this.safeString(coinEntry, 'totalPositionIM', '0');
3338
+ const totalOrderIm = this.safeString(coinEntry, 'totalOrderIM', '0');
3339
+ let totalUsed = Precise["default"].stringAdd(locked, totalPositionIm);
3340
+ totalUsed = Precise["default"].stringAdd(totalUsed, totalOrderIm);
3341
+ account['used'] = totalUsed;
3337
3342
  }
3338
3343
  // account['used'] = this.safeString (coinEntry, 'locked');
3339
3344
  const currencyId = this.safeString(coinEntry, 'coin');
@@ -3858,7 +3863,7 @@ class bybit extends bybit$1 {
3858
3863
  * @param {bool} [params.reduceOnly] true or false whether the order is reduce-only
3859
3864
  * @param {string} [params.positionIdx] *contracts only* 0 for one-way mode, 1 buy side of hedged mode, 2 sell side of hedged mode
3860
3865
  * @param {bool} [params.hedged] *contracts only* true for hedged mode, false for one way mode, default is false
3861
- * @param {boolean} [params.isLeverage] *unified spot only* false then spot trading true then margin trading
3866
+ * @param {int} [params.isLeverage] *unified spot only* false then spot trading true then margin trading
3862
3867
  * @param {string} [params.tpslMode] *contract only* 'full' or 'partial'
3863
3868
  * @param {string} [params.mmp] *option only* market maker protection
3864
3869
  * @param {string} [params.triggerDirection] *contract only* the direction for trigger orders, 'above' or 'below'
@@ -367,6 +367,8 @@ class coinbase extends coinbase$1 {
367
367
  'createMarketBuyOrderRequiresPrice': true,
368
368
  'advanced': true,
369
369
  'fetchMarkets': 'fetchMarketsV3',
370
+ 'timeDifference': 0,
371
+ 'adjustForTimeDifference': false,
370
372
  'fetchTicker': 'fetchTickerV3',
371
373
  'fetchTickers': 'fetchTickersV3',
372
374
  'fetchAccounts': 'fetchAccountsV3',
@@ -1275,6 +1277,9 @@ class coinbase extends coinbase$1 {
1275
1277
  * @returns {object[]} an array of objects representing market data
1276
1278
  */
1277
1279
  async fetchMarkets(params = {}) {
1280
+ if (this.options['adjustForTimeDifference']) {
1281
+ await this.loadTimeDifference();
1282
+ }
1278
1283
  const method = this.safeString(this.options, 'fetchMarkets', 'fetchMarketsV3');
1279
1284
  if (method === 'fetchMarketsV3') {
1280
1285
  return await this.fetchMarketsV3(params);
@@ -4881,6 +4886,9 @@ class coinbase extends coinbase$1 {
4881
4886
  const token = rsa.jwt(request, this.encode(this.secret), sha256.sha256, false, { 'kid': this.apiKey, 'nonce': nonce, 'alg': 'ES256' });
4882
4887
  return token;
4883
4888
  }
4889
+ nonce() {
4890
+ return this.milliseconds() - this.options['timeDifference'];
4891
+ }
4884
4892
  sign(path, api = [], method = 'GET', params = {}, headers = undefined, body = undefined) {
4885
4893
  const version = api[0];
4886
4894
  const signed = api[1] === 'private';
@@ -4953,7 +4961,9 @@ class coinbase extends coinbase$1 {
4953
4961
  authorizationString = 'Bearer ' + token;
4954
4962
  }
4955
4963
  else {
4956
- const timestampString = this.seconds().toString();
4964
+ const nonce = this.nonce();
4965
+ const timestamp = this.parseToInt(nonce / 1000);
4966
+ const timestampString = timestamp.toString();
4957
4967
  const auth = timestampString + method + savedPath + payload;
4958
4968
  const signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256.sha256);
4959
4969
  headers = {
@@ -410,6 +410,91 @@ class coincatch extends coincatch$1 {
410
410
  'CronosChain': 'CRO', // todo check
411
411
  },
412
412
  },
413
+ 'features': {
414
+ 'default': {
415
+ 'sandbox': false,
416
+ 'createOrder': {
417
+ 'marginMode': false,
418
+ 'triggerPrice': true,
419
+ 'triggerPriceType': {
420
+ 'last': true,
421
+ 'mark': true,
422
+ 'index': false,
423
+ },
424
+ 'triggerDirection': false,
425
+ 'stopLossPrice': false,
426
+ 'takeProfitPrice': false,
427
+ 'attachedStopLossTakeProfit': undefined,
428
+ 'timeInForce': {
429
+ 'IOC': true,
430
+ 'FOK': true,
431
+ 'PO': true,
432
+ 'GTD': false,
433
+ },
434
+ 'hedged': false,
435
+ 'trailing': false,
436
+ 'leverage': false,
437
+ 'marketBuyByCost': true,
438
+ 'marketBuyRequiresPrice': false,
439
+ 'selfTradePrevention': false,
440
+ 'iceberg': false,
441
+ },
442
+ 'createOrders': {
443
+ 'max': 50,
444
+ },
445
+ 'fetchMyTrades': {
446
+ 'marginMode': false,
447
+ 'limit': 500,
448
+ 'daysBack': 100000,
449
+ 'untilDays': 100000, // todo implement
450
+ },
451
+ 'fetchOrder': {
452
+ 'marginMode': false,
453
+ 'trigger': false,
454
+ 'trailing': false,
455
+ },
456
+ 'fetchOpenOrders': {
457
+ 'marginMode': false,
458
+ 'limit': 100,
459
+ 'trigger': true,
460
+ 'trailing': false,
461
+ 'marketType': true,
462
+ },
463
+ 'fetchOrders': undefined,
464
+ 'fetchClosedOrders': undefined,
465
+ 'fetchOHLCV': {
466
+ 'limit': 1000,
467
+ },
468
+ },
469
+ 'spot': {
470
+ 'extends': 'default',
471
+ },
472
+ 'forDerivatives': {
473
+ 'extends': 'default',
474
+ 'createOrder': {
475
+ // todo check
476
+ 'attachedStopLossTakeProfit': {
477
+ 'triggerPriceType': undefined,
478
+ 'price': false,
479
+ },
480
+ },
481
+ 'fetchMyTrades': {
482
+ 'limit': 100,
483
+ },
484
+ },
485
+ 'swap': {
486
+ 'linear': {
487
+ 'extends': 'forDerivatives',
488
+ },
489
+ 'inverse': {
490
+ 'extends': 'forDerivatives',
491
+ },
492
+ },
493
+ 'future': {
494
+ 'linear': undefined,
495
+ 'inverse': undefined,
496
+ },
497
+ },
413
498
  'commonCurrencies': {},
414
499
  'exceptions': {
415
500
  'exact': {
@@ -2650,8 +2735,7 @@ class coincatch extends coincatch$1 {
2650
2735
  * @method
2651
2736
  * @name coincatch#createOrders
2652
2737
  * @description create a list of trade orders (all orders should be of the same symbol)
2653
- * @see https://hashkeyglobal-apidoc.readme.io/reference/create-multiple-orders
2654
- * @see https://hashkeyglobal-apidoc.readme.io/reference/batch-create-new-futures-order
2738
+ * @see https://coincatch.github.io/github.io/en/spot/#batch-order
2655
2739
  * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params (max 50 entries)
2656
2740
  * @param {object} [params] extra parameters specific to the api endpoint
2657
2741
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -152,6 +152,58 @@ class coincheck extends coincheck$1 {
152
152
  // 'LTC/BTC': { 'id': 'ltc_btc', 'symbol': 'LTC/BTC', 'base': 'LTC', 'quote': 'BTC', 'baseId': 'ltc', 'quoteId': 'btc' },
153
153
  // 'DASH/BTC': { 'id': 'dash_btc', 'symbol': 'DASH/BTC', 'base': 'DASH', 'quote': 'BTC', 'baseId': 'dash', 'quoteId': 'btc' },
154
154
  },
155
+ 'features': {
156
+ 'spot': {
157
+ 'sandbox': false,
158
+ 'createOrder': {
159
+ 'marginMode': false,
160
+ 'triggerPrice': false,
161
+ 'triggerPriceType': undefined,
162
+ 'triggerDirection': false,
163
+ 'stopLossPrice': false,
164
+ 'takeProfitPrice': false,
165
+ 'attachedStopLossTakeProfit': undefined,
166
+ 'timeInForce': {
167
+ 'IOC': false,
168
+ 'FOK': false,
169
+ 'PO': true,
170
+ 'GTD': false,
171
+ },
172
+ 'hedged': false,
173
+ 'trailing': false,
174
+ 'leverage': false,
175
+ 'marketBuyByCost': false,
176
+ 'marketBuyRequiresPrice': false,
177
+ 'selfTradePrevention': false,
178
+ 'iceberg': false,
179
+ },
180
+ 'createOrders': undefined,
181
+ 'fetchMyTrades': {
182
+ 'marginMode': false,
183
+ 'limit': undefined,
184
+ 'daysBack': undefined,
185
+ 'untilDays': undefined,
186
+ },
187
+ 'fetchOrder': undefined,
188
+ 'fetchOpenOrders': {
189
+ 'marginMode': false,
190
+ 'limit': undefined,
191
+ 'trigger': false,
192
+ 'trailing': false,
193
+ },
194
+ 'fetchOrders': undefined,
195
+ 'fetchClosedOrders': undefined,
196
+ 'fetchOHLCV': undefined,
197
+ },
198
+ 'swap': {
199
+ 'linear': undefined,
200
+ 'inverse': undefined,
201
+ },
202
+ 'future': {
203
+ 'linear': undefined,
204
+ 'inverse': undefined,
205
+ },
206
+ },
155
207
  'fees': {
156
208
  'trading': {
157
209
  'tierBased': false,
@@ -205,6 +205,83 @@ class coinlist extends coinlist$1 {
205
205
  },
206
206
  },
207
207
  },
208
+ 'features': {
209
+ 'default': {
210
+ 'sandbox': false,
211
+ 'createOrder': {
212
+ 'marginMode': false,
213
+ 'triggerPrice': true,
214
+ 'triggerPriceType': {
215
+ 'last': true,
216
+ 'mark': true,
217
+ 'index': true,
218
+ },
219
+ 'triggerDirection': false,
220
+ 'stopLossPrice': false,
221
+ 'takeProfitPrice': false,
222
+ 'attachedStopLossTakeProfit': undefined,
223
+ 'timeInForce': {
224
+ 'IOC': false,
225
+ 'FOK': false,
226
+ 'PO': true,
227
+ 'GTD': false,
228
+ },
229
+ 'hedged': false,
230
+ 'trailing': true,
231
+ 'leverage': false,
232
+ 'marketBuyByCost': false,
233
+ 'marketBuyRequiresPrice': false,
234
+ 'selfTradePrevention': true,
235
+ 'iceberg': false,
236
+ },
237
+ 'createOrders': undefined,
238
+ 'fetchMyTrades': {
239
+ 'marginMode': false,
240
+ 'limit': 500,
241
+ 'daysBack': 100000,
242
+ 'untilDays': 100000,
243
+ },
244
+ 'fetchOrder': {
245
+ 'marginMode': false,
246
+ 'trigger': false,
247
+ 'trailing': false,
248
+ },
249
+ 'fetchOpenOrders': {
250
+ 'marginMode': false,
251
+ 'limit': 500,
252
+ 'trigger': false,
253
+ 'trailing': false,
254
+ },
255
+ 'fetchOrders': {
256
+ 'marginMode': false,
257
+ 'limit': 500,
258
+ 'daysBack': 100000,
259
+ 'untilDays': 100000,
260
+ 'trigger': false,
261
+ 'trailing': false,
262
+ },
263
+ 'fetchClosedOrders': {
264
+ 'marginMode': false,
265
+ 'limit': 500,
266
+ 'daysBack': 100000,
267
+ 'daysBackCanceled': undefined,
268
+ 'untilDays': 100000,
269
+ 'trigger': false,
270
+ 'trailing': false,
271
+ },
272
+ 'fetchOHLCV': {
273
+ 'limit': 300,
274
+ },
275
+ },
276
+ 'swap': {
277
+ 'linear': undefined,
278
+ 'inverse': undefined,
279
+ },
280
+ 'future': {
281
+ 'linear': undefined,
282
+ 'inverse': undefined,
283
+ },
284
+ },
208
285
  'fees': {
209
286
  'trading': {
210
287
  'feeSide': 'get',
@@ -209,6 +209,69 @@ class coinmate extends coinmate$1 {
209
209
  },
210
210
  },
211
211
  },
212
+ 'features': {
213
+ 'spot': {
214
+ 'sandbox': false,
215
+ 'createOrder': {
216
+ 'marginMode': false,
217
+ 'triggerPrice': true,
218
+ 'triggerPriceType': undefined,
219
+ 'triggerDirection': false,
220
+ 'stopLossPrice': false,
221
+ 'takeProfitPrice': false,
222
+ 'attachedStopLossTakeProfit': undefined,
223
+ 'timeInForce': {
224
+ 'IOC': true,
225
+ 'FOK': false,
226
+ 'PO': true,
227
+ 'GTD': false,
228
+ },
229
+ 'hedged': false,
230
+ 'trailing': true,
231
+ 'leverage': false,
232
+ 'marketBuyByCost': false,
233
+ 'marketBuyRequiresPrice': false,
234
+ 'selfTradePrevention': false,
235
+ 'iceberg': true, // todo
236
+ },
237
+ 'createOrders': undefined,
238
+ 'fetchMyTrades': {
239
+ 'marginMode': false,
240
+ 'limit': 1000,
241
+ 'daysBack': 100000,
242
+ 'untilDays': 100000, // todo implement
243
+ },
244
+ 'fetchOrder': {
245
+ 'marginMode': false,
246
+ 'trigger': false,
247
+ 'trailing': false,
248
+ },
249
+ 'fetchOpenOrders': {
250
+ 'marginMode': false,
251
+ 'limit': undefined,
252
+ 'trigger': false,
253
+ 'trailing': false,
254
+ },
255
+ 'fetchOrders': {
256
+ 'marginMode': false,
257
+ 'limit': 100,
258
+ 'daysBack': undefined,
259
+ 'untilDays': undefined,
260
+ 'trigger': false,
261
+ 'trailing': false,
262
+ },
263
+ 'fetchClosedOrders': undefined,
264
+ 'fetchOHLCV': undefined,
265
+ },
266
+ 'swap': {
267
+ 'linear': undefined,
268
+ 'inverse': undefined,
269
+ },
270
+ 'future': {
271
+ 'linear': undefined,
272
+ 'inverse': undefined,
273
+ },
274
+ },
212
275
  'exceptions': {
213
276
  'exact': {
214
277
  'No order with given ID': errors.OrderNotFound,
@@ -211,6 +211,74 @@ class coinmetro extends coinmetro$1 {
211
211
  'currenciesByIdForParseMarket': undefined,
212
212
  'currencyIdsListForParseMarket': undefined,
213
213
  },
214
+ 'features': {
215
+ 'spot': {
216
+ 'sandbox': true,
217
+ 'createOrder': {
218
+ 'marginMode': true,
219
+ 'triggerPrice': true,
220
+ 'triggerPriceType': undefined,
221
+ 'triggerDirection': false,
222
+ 'stopLossPrice': false,
223
+ 'takeProfitPrice': false,
224
+ 'attachedStopLossTakeProfit': {
225
+ 'triggerPriceType': undefined,
226
+ 'price': false,
227
+ },
228
+ 'timeInForce': {
229
+ 'IOC': true,
230
+ 'FOK': true,
231
+ 'PO': false,
232
+ 'GTD': true,
233
+ },
234
+ 'hedged': false,
235
+ 'trailing': false,
236
+ 'leverage': false,
237
+ 'marketBuyByCost': true,
238
+ 'marketBuyRequiresPrice': false,
239
+ 'selfTradePrevention': false,
240
+ 'iceberg': true,
241
+ },
242
+ 'createOrders': undefined,
243
+ 'fetchMyTrades': {
244
+ 'marginMode': false,
245
+ 'limit': undefined,
246
+ 'daysBack': 100000,
247
+ 'untilDays': undefined,
248
+ },
249
+ 'fetchOrder': {
250
+ 'marginMode': false,
251
+ 'trigger': false,
252
+ 'trailing': false,
253
+ },
254
+ 'fetchOpenOrders': {
255
+ 'marginMode': false,
256
+ 'limit': undefined,
257
+ 'trigger': false,
258
+ 'trailing': false,
259
+ },
260
+ 'fetchOrders': {
261
+ 'marginMode': false,
262
+ 'limit': undefined,
263
+ 'daysBack': 100000,
264
+ 'untilDays': undefined,
265
+ 'trigger': false,
266
+ 'trailing': false,
267
+ },
268
+ 'fetchClosedOrders': undefined,
269
+ 'fetchOHLCV': {
270
+ 'limit': 1000,
271
+ },
272
+ },
273
+ 'swap': {
274
+ 'linear': undefined,
275
+ 'inverse': undefined,
276
+ },
277
+ 'future': {
278
+ 'linear': undefined,
279
+ 'inverse': undefined,
280
+ },
281
+ },
214
282
  'exceptions': {
215
283
  // https://trade-docs.coinmetro.co/?javascript--nodejs#message-codes
216
284
  'exact': {