ccxt 4.4.42 → 4.4.44

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 (94) hide show
  1. package/README.md +35 -33
  2. package/dist/ccxt.browser.min.js +15 -15
  3. package/dist/cjs/ccxt.js +6 -1
  4. package/dist/cjs/src/binance.js +55 -43
  5. package/dist/cjs/src/bingx.js +37 -12
  6. package/dist/cjs/src/bitfinex.js +6 -2
  7. package/dist/cjs/src/bitget.js +3 -1
  8. package/dist/cjs/src/bitmart.js +4 -7
  9. package/dist/cjs/src/bitmex.js +3 -5
  10. package/dist/cjs/src/bitstamp.js +59 -0
  11. package/dist/cjs/src/bybit.js +7 -22
  12. package/dist/cjs/src/coinbase.js +13 -9
  13. package/dist/cjs/src/coinbaseinternational.js +13 -9
  14. package/dist/cjs/src/coincatch.js +2 -2
  15. package/dist/cjs/src/coinex.js +5 -5
  16. package/dist/cjs/src/cryptocom.js +3 -1
  17. package/dist/cjs/src/defx.js +2 -2
  18. package/dist/cjs/src/delta.js +1 -1
  19. package/dist/cjs/src/gate.js +7 -2
  20. package/dist/cjs/src/gemini.js +65 -2
  21. package/dist/cjs/src/hashkey.js +9 -9
  22. package/dist/cjs/src/htx.js +105 -2
  23. package/dist/cjs/src/hyperliquid.js +6 -1
  24. package/dist/cjs/src/kraken.js +9 -2
  25. package/dist/cjs/src/krakenfutures.js +5 -0
  26. package/dist/cjs/src/kucoin.js +9 -7
  27. package/dist/cjs/src/kucoinfutures.js +5 -5
  28. package/dist/cjs/src/mexc.js +16 -10
  29. package/dist/cjs/src/myokx.js +35 -0
  30. package/dist/cjs/src/ndax.js +1 -1
  31. package/dist/cjs/src/oceanex.js +1 -1
  32. package/dist/cjs/src/okx.js +4 -5
  33. package/dist/cjs/src/phemex.js +7 -5
  34. package/dist/cjs/src/pro/bitcoincom.js +4 -1
  35. package/dist/cjs/src/pro/bitopro.js +1 -1
  36. package/dist/cjs/src/pro/myokx.js +24 -0
  37. package/dist/cjs/src/vertex.js +69 -4
  38. package/dist/cjs/src/whitebit.js +4 -2
  39. package/dist/cjs/src/woo.js +8 -6
  40. package/dist/cjs/src/woofipro.js +5 -2
  41. package/js/ccxt.d.ts +8 -2
  42. package/js/ccxt.js +6 -2
  43. package/js/src/abstract/binance.d.ts +1 -0
  44. package/js/src/abstract/binancecoinm.d.ts +1 -0
  45. package/js/src/abstract/binanceus.d.ts +1 -0
  46. package/js/src/abstract/binanceusdm.d.ts +1 -0
  47. package/js/src/abstract/bingx.d.ts +4 -0
  48. package/js/src/abstract/bitstamp.d.ts +1 -0
  49. package/js/src/abstract/myokx.d.ts +343 -0
  50. package/js/src/abstract/myokx.js +11 -0
  51. package/js/src/binance.d.ts +33 -32
  52. package/js/src/binance.js +55 -43
  53. package/js/src/bingx.js +37 -12
  54. package/js/src/bitfinex.js +6 -2
  55. package/js/src/bitget.js +3 -1
  56. package/js/src/bitmart.js +4 -7
  57. package/js/src/bitmex.js +3 -5
  58. package/js/src/bitstamp.js +59 -0
  59. package/js/src/bybit.js +7 -22
  60. package/js/src/coinbase.js +13 -9
  61. package/js/src/coinbaseinternational.js +13 -9
  62. package/js/src/coincatch.js +2 -2
  63. package/js/src/coinex.js +5 -5
  64. package/js/src/cryptocom.js +3 -1
  65. package/js/src/defx.js +2 -2
  66. package/js/src/delta.js +1 -1
  67. package/js/src/gate.js +7 -2
  68. package/js/src/gemini.js +65 -2
  69. package/js/src/hashkey.js +9 -9
  70. package/js/src/htx.d.ts +13 -1
  71. package/js/src/htx.js +105 -2
  72. package/js/src/hyperliquid.js +6 -1
  73. package/js/src/kraken.js +9 -2
  74. package/js/src/krakenfutures.js +5 -0
  75. package/js/src/kucoin.js +9 -7
  76. package/js/src/kucoinfutures.js +5 -5
  77. package/js/src/mexc.js +16 -10
  78. package/js/src/myokx.d.ts +4 -0
  79. package/js/src/myokx.js +36 -0
  80. package/js/src/ndax.js +1 -1
  81. package/js/src/oceanex.js +1 -1
  82. package/js/src/okx.js +4 -5
  83. package/js/src/phemex.d.ts +1 -0
  84. package/js/src/phemex.js +7 -5
  85. package/js/src/pro/bitcoincom.js +4 -1
  86. package/js/src/pro/bitopro.js +1 -1
  87. package/js/src/pro/myokx.d.ts +4 -0
  88. package/js/src/pro/myokx.js +25 -0
  89. package/js/src/vertex.d.ts +11 -1
  90. package/js/src/vertex.js +69 -4
  91. package/js/src/whitebit.js +4 -2
  92. package/js/src/woo.js +8 -6
  93. package/js/src/woofipro.js +5 -2
  94. package/package.json +15 -8
package/js/src/bybit.js CHANGED
@@ -1110,12 +1110,12 @@ export default class bybit extends Exchange {
1110
1110
  'GTD': false,
1111
1111
  },
1112
1112
  'hedged': true,
1113
- // exchange-supported features
1114
1113
  'selfTradePrevention': true,
1115
1114
  'trailing': true,
1116
- 'twap': false,
1117
1115
  'iceberg': false,
1118
- 'oco': false,
1116
+ 'leverage': false,
1117
+ 'marketBuyRequiresPrice': false,
1118
+ 'marketBuyByCost': true,
1119
1119
  },
1120
1120
  'createOrders': {
1121
1121
  'max': 10,
@@ -1154,29 +1154,13 @@ export default class bybit extends Exchange {
1154
1154
  'spot': {
1155
1155
  'extends': 'default',
1156
1156
  'createOrder': {
1157
- 'marginMode': false,
1158
- 'triggerPrice': true,
1159
1157
  'triggerPriceType': undefined,
1160
1158
  'triggerDirection': false,
1161
- 'stopLossPrice': true,
1162
- 'takeProfitPrice': true,
1163
1159
  'attachedStopLossTakeProfit': {
1164
1160
  'triggerPriceType': undefined,
1165
1161
  'limitPrice': true,
1166
1162
  },
1167
- 'timeInForce': {
1168
- 'IOC': true,
1169
- 'FOK': true,
1170
- 'PO': true,
1171
- 'GTD': false,
1172
- },
1173
- 'hedged': true,
1174
- // exchange-supported features
1175
- 'selfTradePrevention': true,
1176
- 'trailing': true,
1177
- 'twap': false,
1178
- 'iceberg': false,
1179
- 'oco': false,
1163
+ 'marketBuyRequiresPrice': true,
1180
1164
  },
1181
1165
  },
1182
1166
  'swap': {
@@ -2101,6 +2085,7 @@ export default class bybit extends Exchange {
2101
2085
  'quoteId': quoteId,
2102
2086
  'settleId': settleId,
2103
2087
  'type': 'option',
2088
+ 'subType': 'linear',
2104
2089
  'spot': false,
2105
2090
  'margin': false,
2106
2091
  'swap': false,
@@ -2108,8 +2093,8 @@ export default class bybit extends Exchange {
2108
2093
  'option': true,
2109
2094
  'active': isActive,
2110
2095
  'contract': true,
2111
- 'linear': undefined,
2112
- 'inverse': undefined,
2096
+ 'linear': true,
2097
+ 'inverse': false,
2113
2098
  'taker': this.safeNumber(market, 'takerFee', this.parseNumber('0.0006')),
2114
2099
  'maker': this.safeNumber(market, 'makerFee', this.parseNumber('0.0001')),
2115
2100
  'contractSize': this.parseNumber('1'),
@@ -378,7 +378,7 @@ export default class coinbase extends Exchange {
378
378
  'user_native_currency': 'USD', // needed to get fees for v3
379
379
  },
380
380
  'features': {
381
- 'spot': {
381
+ 'default': {
382
382
  'sandbox': false,
383
383
  'createOrder': {
384
384
  'marginMode': true,
@@ -396,6 +396,11 @@ export default class coinbase extends Exchange {
396
396
  },
397
397
  'hedged': false,
398
398
  'trailing': false,
399
+ 'leverage': true,
400
+ 'marketBuyByCost': true,
401
+ 'marketBuyRequiresPrice': true,
402
+ 'selfTradePrevention': false,
403
+ 'iceberg': false,
399
404
  },
400
405
  'createOrders': undefined,
401
406
  'fetchMyTrades': {
@@ -436,21 +441,20 @@ export default class coinbase extends Exchange {
436
441
  'limit': 350,
437
442
  },
438
443
  },
444
+ 'spot': {
445
+ 'extends': 'default',
446
+ },
439
447
  'swap': {
440
448
  'linear': {
441
- 'extends': 'spot',
442
- },
443
- 'inverse': {
444
- 'extends': 'spot',
449
+ 'extends': 'default',
445
450
  },
451
+ 'inverse': undefined,
446
452
  },
447
453
  'future': {
448
454
  'linear': {
449
- 'extends': 'spot',
450
- },
451
- 'inverse': {
452
- 'extends': 'spot',
455
+ 'extends': 'default',
453
456
  },
457
+ 'inverse': undefined,
454
458
  },
455
459
  },
456
460
  });
@@ -259,7 +259,7 @@ export default class coinbaseinternational extends Exchange {
259
259
  },
260
260
  },
261
261
  'features': {
262
- 'spot': {
262
+ 'default': {
263
263
  'sandbox': true,
264
264
  'createOrder': {
265
265
  'marginMode': false,
@@ -278,6 +278,11 @@ export default class coinbaseinternational extends Exchange {
278
278
  },
279
279
  'hedged': false,
280
280
  'trailing': false,
281
+ 'leverage': false,
282
+ 'marketBuyByCost': false,
283
+ 'marketBuyRequiresPrice': true,
284
+ 'selfTradePrevention': true,
285
+ 'iceberg': false,
281
286
  },
282
287
  'createOrders': undefined,
283
288
  'fetchMyTrades': {
@@ -303,21 +308,20 @@ export default class coinbaseinternational extends Exchange {
303
308
  'limit': 300,
304
309
  },
305
310
  },
311
+ 'spot': {
312
+ 'extends': 'default',
313
+ },
306
314
  'swap': {
307
315
  'linear': {
308
- 'extends': 'spot',
316
+ 'extends': 'default',
309
317
  },
310
318
  'inverse': {
311
- 'extends': 'spot',
319
+ 'extends': 'default',
312
320
  },
313
321
  },
314
322
  'future': {
315
- 'linear': {
316
- 'extends': 'spot',
317
- },
318
- 'inverse': {
319
- 'extends': 'spot',
320
- },
323
+ 'linear': undefined,
324
+ 'inverse': undefined,
321
325
  },
322
326
  },
323
327
  });
@@ -843,8 +843,8 @@ export default class coincatch extends Exchange {
843
843
  settleId = this.safeString(supportMarginCoins, 0);
844
844
  settle = this.safeCurrencyCode(settleId);
845
845
  suffix = ':' + settle;
846
- isLinear = baseId === settleId; // todo check
847
- isInverse = quoteId === settleId; // todo check
846
+ isLinear = quoteId === settleId; // todo check
847
+ isInverse = baseId === settleId; // todo check
848
848
  if (isLinear) {
849
849
  subType = 'linear';
850
850
  }
package/js/src/coinex.js CHANGED
@@ -522,11 +522,11 @@ export default class coinex extends Exchange {
522
522
  },
523
523
  'hedged': false,
524
524
  'trailing': false,
525
- // exchange-supported features
526
- // 'marketBuyRequiresPrice': true,
527
- // 'marketBuyByCost': true,
528
- // 'selfTradePrevention': true,
529
- // 'iceberg': true,
525
+ 'leverage': false,
526
+ 'marketBuyByCost': true,
527
+ 'marketBuyRequiresPrice': true,
528
+ 'selfTradePrevention': true,
529
+ 'iceberg': true, // todo implement
530
530
  },
531
531
  'createOrders': {
532
532
  'max': 5,
@@ -374,10 +374,12 @@ export default class cryptocom extends Exchange {
374
374
  'GTD': false,
375
375
  },
376
376
  'hedged': false,
377
- // exchange-supported features
378
377
  'selfTradePrevention': true,
379
378
  'trailing': false,
380
379
  'iceberg': false,
380
+ 'leverage': false,
381
+ 'marketBuyByCost': true,
382
+ 'marketBuyRequiresPrice': true,
381
383
  },
382
384
  'createOrders': {
383
385
  'max': 10,
package/js/src/defx.js CHANGED
@@ -937,10 +937,10 @@ export default class defx extends Exchange {
937
937
  const id = this.safeString(trade, 'id');
938
938
  const oid = this.safeString(trade, 'orderId');
939
939
  const takerOrMaker = this.safeStringLower(trade, 'role');
940
- const buyerMaker = this.safeString(trade, 'buyerMaker');
940
+ const buyerMaker = this.safeBool(trade, 'buyerMaker');
941
941
  let side = this.safeStringLower(trade, 'side');
942
942
  if (buyerMaker !== undefined) {
943
- if (buyerMaker === 'true') {
943
+ if (buyerMaker) {
944
944
  side = 'sell';
945
945
  }
946
946
  else {
package/js/src/delta.js CHANGED
@@ -742,7 +742,7 @@ export default class delta extends Exchange {
742
742
  // other markets (swap, futures, move, spread, irs) seem to use the step of '1' contract
743
743
  amountPrecision = this.parseNumber('1');
744
744
  }
745
- const linear = (settle === base);
745
+ const linear = (settle === quote);
746
746
  let optionType = undefined;
747
747
  let symbol = base + '/' + quote;
748
748
  if (swap || future || option) {
package/js/src/gate.js CHANGED
@@ -708,7 +708,7 @@ export default class gate extends Exchange {
708
708
  },
709
709
  },
710
710
  'features': {
711
- 'spot': {
711
+ 'default': {
712
712
  'sandbox': true,
713
713
  'createOrder': {
714
714
  'marginMode': true,
@@ -727,9 +727,11 @@ export default class gate extends Exchange {
727
727
  },
728
728
  'hedged': false,
729
729
  'trailing': false,
730
- // exchange-specific features
731
730
  'iceberg': true,
732
731
  'selfTradePrevention': true,
732
+ 'leverage': false,
733
+ 'marketBuyByCost': true,
734
+ 'marketBuyRequiresPrice': true,
733
735
  },
734
736
  'createOrders': {
735
737
  'max': 40, // NOTE! max 10 per symbol
@@ -765,6 +767,9 @@ export default class gate extends Exchange {
765
767
  'limit': 1000,
766
768
  },
767
769
  },
770
+ 'spot': {
771
+ 'extends': 'default',
772
+ },
768
773
  'forDerivatives': {
769
774
  'extends': 'spot',
770
775
  'createOrder': {
package/js/src/gemini.js CHANGED
@@ -299,6 +299,69 @@ export default class gemini extends Exchange {
299
299
  },
300
300
  },
301
301
  },
302
+ 'features': {
303
+ 'default': {
304
+ 'sandbox': true,
305
+ 'createOrder': {
306
+ 'marginMode': false,
307
+ 'triggerPrice': true,
308
+ 'triggerPriceType': undefined,
309
+ 'triggerDirection': false,
310
+ 'stopLossPrice': false,
311
+ 'takeProfitPrice': false,
312
+ 'attachedStopLossTakeProfit': undefined,
313
+ 'timeInForce': {
314
+ 'IOC': true,
315
+ 'FOK': true,
316
+ 'PO': true,
317
+ 'GTD': false,
318
+ },
319
+ 'hedged': false,
320
+ 'trailing': false,
321
+ 'leverage': false,
322
+ 'marketBuyByCost': true,
323
+ 'marketBuyRequiresPrice': false,
324
+ 'selfTradePrevention': false,
325
+ 'iceberg': false,
326
+ },
327
+ 'createOrders': undefined,
328
+ 'fetchMyTrades': {
329
+ 'marginMode': false,
330
+ 'limit': 500,
331
+ 'daysBack': undefined,
332
+ 'untilDays': undefined,
333
+ },
334
+ 'fetchOrder': {
335
+ 'marginMode': false,
336
+ 'trigger': false,
337
+ 'trailing': false,
338
+ },
339
+ 'fetchOpenOrders': {
340
+ 'marginMode': false,
341
+ 'limit': undefined,
342
+ 'trigger': false,
343
+ 'trailing': false,
344
+ },
345
+ 'fetchOrders': undefined,
346
+ 'fetchClosedOrders': undefined,
347
+ 'fetchOHLCV': {
348
+ 'limit': undefined,
349
+ },
350
+ },
351
+ 'spot': {
352
+ 'extends': 'default',
353
+ },
354
+ 'swap': {
355
+ 'linear': {
356
+ 'extends': 'default',
357
+ },
358
+ 'inverse': undefined,
359
+ },
360
+ 'future': {
361
+ 'linear': undefined,
362
+ 'inverse': undefined,
363
+ },
364
+ },
302
365
  });
303
366
  }
304
367
  /**
@@ -1480,8 +1543,8 @@ export default class gemini extends Exchange {
1480
1543
  };
1481
1544
  type = this.safeString(params, 'type', type);
1482
1545
  params = this.omit(params, 'type');
1483
- const triggerPrice = this.safeStringN(params, ['stop_price', 'stopPrice']);
1484
- params = this.omit(params, ['stop_price', 'stopPrice', 'type']);
1546
+ const triggerPrice = this.safeStringN(params, ['triggerPrice', 'stop_price', 'stopPrice']);
1547
+ params = this.omit(params, ['triggerPrice', 'stop_price', 'stopPrice', 'type']);
1485
1548
  if (type === 'stopLimit') {
1486
1549
  throw new ArgumentsRequired(this.id + ' createOrder() requires a triggerPrice parameter or a stop_price parameter for ' + type + ' orders');
1487
1550
  }
package/js/src/hashkey.js CHANGED
@@ -358,13 +358,11 @@ export default class hashkey extends Exchange {
358
358
  },
359
359
  'hedged': false,
360
360
  'trailing': false,
361
- // exchange-supported features
362
- // 'marketBuyRequiresPrice': false,
363
- // 'marketBuyByCost': false,
364
- // 'selfTradePrevention': true,
365
- // 'twap': false,
366
- // 'iceberg': false,
367
- // 'oco': false,
361
+ 'leverage': false,
362
+ 'marketBuyByCost': true,
363
+ 'marketBuyRequiresPrice': true,
364
+ 'selfTradePrevention': true,
365
+ 'iceberg': false,
368
366
  },
369
367
  'createOrders': {
370
368
  'max': 20,
@@ -2440,8 +2438,10 @@ export default class hashkey extends Exchange {
2440
2438
  if (!market['spot']) {
2441
2439
  throw new NotSupported(this.id + ' createMarketBuyOrderWithCost() is supported for spot markets only');
2442
2440
  }
2443
- params['cost'] = cost;
2444
- return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
2441
+ const req = {
2442
+ 'cost': cost,
2443
+ };
2444
+ return await this.createOrder(symbol, 'market', 'buy', cost, undefined, this.extend(req, params));
2445
2445
  }
2446
2446
  /**
2447
2447
  * @method
package/js/src/htx.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/htx.js';
2
- import type { TransferEntry, Int, OrderSide, OrderType, Order, OHLCV, Trade, FundingRateHistory, Balances, Str, Dict, Transaction, Ticker, OrderBook, Tickers, OrderRequest, Strings, Market, Currency, Num, Account, TradingFeeInterface, Currencies, IsolatedBorrowRates, IsolatedBorrowRate, LeverageTiers, LeverageTier, int, LedgerEntry, FundingRate, FundingRates, DepositAddress, BorrowInterest } from './base/types.js';
2
+ import type { TransferEntry, Int, OrderSide, OrderType, Order, OHLCV, Trade, FundingRateHistory, Balances, Str, Dict, Transaction, Ticker, OrderBook, Tickers, OrderRequest, Strings, Market, Currency, Num, Account, TradingFeeInterface, Currencies, IsolatedBorrowRates, IsolatedBorrowRate, LeverageTiers, LeverageTier, int, LedgerEntry, FundingRate, FundingRates, DepositAddress, BorrowInterest, OpenInterests } from './base/types.js';
3
3
  /**
4
4
  * @class huobi
5
5
  * @augments Exchange
@@ -789,6 +789,18 @@ export default class htx extends Exchange {
789
789
  * @returns {object} an array of [open interest structures]{@link https://docs.ccxt.com/#/?id=open-interest-structure}
790
790
  */
791
791
  fetchOpenInterestHistory(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").OpenInterest[]>;
792
+ /**
793
+ * @method
794
+ * @name htx#fetchOpenInterests
795
+ * @description Retrieves the open interest for a list of symbols
796
+ * @see https://huobiapi.github.io/docs/dm/v1/en/#get-contract-open-interest-information
797
+ * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#get-swap-open-interest-information
798
+ * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-get-swap-open-interest-information
799
+ * @param {string[]} [symbols] a list of unified CCXT market symbols
800
+ * @param {object} [params] exchange specific parameters
801
+ * @returns {object[]} a list of [open interest structures]{@link https://docs.ccxt.com/#/?id=open-interest-structure}
802
+ */
803
+ fetchOpenInterests(symbols?: Strings, params?: {}): Promise<OpenInterests>;
792
804
  /**
793
805
  * @method
794
806
  * @name htx#fetchOpenInterest
package/js/src/htx.js CHANGED
@@ -99,6 +99,7 @@ export default class htx extends Exchange {
99
99
  'fetchOHLCV': true,
100
100
  'fetchOpenInterest': true,
101
101
  'fetchOpenInterestHistory': true,
102
+ 'fetchOpenInterests': true,
102
103
  'fetchOpenOrder': undefined,
103
104
  'fetchOpenOrders': true,
104
105
  'fetchOrder': true,
@@ -1254,9 +1255,11 @@ export default class htx extends Exchange {
1254
1255
  },
1255
1256
  'hedged': false,
1256
1257
  'trailing': false,
1257
- // exchange-specific features
1258
1258
  'iceberg': false,
1259
1259
  'selfTradePrevention': true,
1260
+ 'leverage': true,
1261
+ 'marketBuyByCost': true,
1262
+ 'marketBuyRequiresPrice': true,
1260
1263
  },
1261
1264
  'createOrders': {
1262
1265
  'max': 10,
@@ -8643,6 +8646,105 @@ export default class htx extends Exchange {
8643
8646
  const tick = this.safeList(data, 'tick');
8644
8647
  return this.parseOpenInterestsHistory(tick, market, since, limit);
8645
8648
  }
8649
+ /**
8650
+ * @method
8651
+ * @name htx#fetchOpenInterests
8652
+ * @description Retrieves the open interest for a list of symbols
8653
+ * @see https://huobiapi.github.io/docs/dm/v1/en/#get-contract-open-interest-information
8654
+ * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#get-swap-open-interest-information
8655
+ * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-get-swap-open-interest-information
8656
+ * @param {string[]} [symbols] a list of unified CCXT market symbols
8657
+ * @param {object} [params] exchange specific parameters
8658
+ * @returns {object[]} a list of [open interest structures]{@link https://docs.ccxt.com/#/?id=open-interest-structure}
8659
+ */
8660
+ async fetchOpenInterests(symbols = undefined, params = {}) {
8661
+ await this.loadMarkets();
8662
+ symbols = this.marketSymbols(symbols);
8663
+ let market = undefined;
8664
+ if (symbols !== undefined) {
8665
+ const symbolsLength = symbols.length;
8666
+ if (symbolsLength > 0) {
8667
+ const first = this.safeString(symbols, 0);
8668
+ market = this.market(first);
8669
+ }
8670
+ }
8671
+ const request = {};
8672
+ let subType = undefined;
8673
+ [subType, params] = this.handleSubTypeAndParams('fetchPositions', market, params, 'linear');
8674
+ let marketType = undefined;
8675
+ [marketType, params] = this.handleMarketTypeAndParams('fetchPositions', market, params);
8676
+ let response = undefined;
8677
+ if (marketType === 'future') {
8678
+ response = await this.contractPublicGetApiV1ContractOpenInterest(this.extend(request, params));
8679
+ //
8680
+ // {
8681
+ // "status": "ok",
8682
+ // "data": [
8683
+ // {
8684
+ // "volume": 118850.000000000000000000,
8685
+ // "amount": 635.502025211544374189,
8686
+ // "symbol": "BTC",
8687
+ // "contract_type": "this_week",
8688
+ // "contract_code": "BTC220930",
8689
+ // "trade_amount": 1470.9400749347598691119206024033947897351,
8690
+ // "trade_volume": 286286,
8691
+ // "trade_turnover": 28628600.000000000000000000
8692
+ // }
8693
+ // ],
8694
+ // "ts": 1664337928805
8695
+ // }
8696
+ //
8697
+ }
8698
+ else if (subType === 'inverse') {
8699
+ response = await this.contractPublicGetSwapApiV1SwapOpenInterest(this.extend(request, params));
8700
+ //
8701
+ // {
8702
+ // "status": "ok",
8703
+ // "data": [
8704
+ // {
8705
+ // "volume": 518018.000000000000000000,
8706
+ // "amount": 2769.675777407074725180,
8707
+ // "symbol": "BTC",
8708
+ // "contract_code": "BTC-USD",
8709
+ // "trade_amount": 9544.4032080046491323463688602729806842458,
8710
+ // "trade_volume": 1848448,
8711
+ // "trade_turnover": 184844800.000000000000000000
8712
+ // }
8713
+ // ],
8714
+ // "ts": 1664337226028
8715
+ // }
8716
+ //
8717
+ }
8718
+ else {
8719
+ request['contract_type'] = 'swap';
8720
+ response = await this.contractPublicGetLinearSwapApiV1SwapOpenInterest(this.extend(request, params));
8721
+ //
8722
+ // {
8723
+ // "status": "ok",
8724
+ // "data": [
8725
+ // {
8726
+ // "volume": 7192610.000000000000000000,
8727
+ // "amount": 7192.610000000000000000,
8728
+ // "symbol": "BTC",
8729
+ // "value": 134654290.332000000000000000,
8730
+ // "contract_code": "BTC-USDT",
8731
+ // "trade_amount": 70692.804,
8732
+ // "trade_volume": 70692804,
8733
+ // "trade_turnover": 1379302592.9518,
8734
+ // "business_type": "swap",
8735
+ // "pair": "BTC-USDT",
8736
+ // "contract_type": "swap",
8737
+ // "trade_partition": "USDT"
8738
+ // }
8739
+ // ],
8740
+ // "ts": 1664336503144
8741
+ // }
8742
+ //
8743
+ }
8744
+ const data = this.safeList(response, 'data', []);
8745
+ const result = this.parseOpenInterests(data);
8746
+ return this.filterByArray(result, 'symbol', symbols);
8747
+ }
8646
8748
  /**
8647
8749
  * @method
8648
8750
  * @name htx#fetchOpenInterest
@@ -8806,8 +8908,9 @@ export default class htx extends Exchange {
8806
8908
  const timestamp = this.safeInteger(interest, 'ts');
8807
8909
  const amount = this.safeNumber(interest, 'volume');
8808
8910
  const value = this.safeNumber(interest, 'value');
8911
+ const marketId = this.safeString(interest, 'contract_code');
8809
8912
  return this.safeOpenInterest({
8810
- 'symbol': this.safeString(market, 'symbol'),
8913
+ 'symbol': this.safeSymbol(marketId, market),
8811
8914
  'baseVolume': amount,
8812
8915
  'quoteVolume': value,
8813
8916
  'openInterestAmount': amount,
@@ -25,7 +25,7 @@ export default class hyperliquid extends Exchange {
25
25
  'countries': [],
26
26
  'version': 'v1',
27
27
  'rateLimit': 50,
28
- 'certified': false,
28
+ 'certified': true,
29
29
  'pro': true,
30
30
  'dex': true,
31
31
  'has': {
@@ -238,6 +238,11 @@ export default class hyperliquid extends Exchange {
238
238
  },
239
239
  'hedged': false,
240
240
  'trailing': false,
241
+ 'leverage': false,
242
+ 'marketBuyByCost': false,
243
+ 'marketBuyRequiresPrice': false,
244
+ 'selfTradePrevention': false,
245
+ 'iceberg': false,
241
246
  },
242
247
  'createOrders': {
243
248
  'max': 1000,
package/js/src/kraken.js CHANGED
@@ -449,6 +449,11 @@ export default class kraken extends Exchange {
449
449
  },
450
450
  'hedged': false,
451
451
  'trailing': true,
452
+ 'leverage': false,
453
+ 'marketBuyByCost': true,
454
+ 'marketBuyRequiresPrice': false,
455
+ 'selfTradePrevention': true,
456
+ 'iceberg': true, // todo implement
452
457
  },
453
458
  'createOrders': undefined,
454
459
  'fetchMyTrades': {
@@ -1511,8 +1516,10 @@ export default class kraken extends Exchange {
1511
1516
  async createMarketOrderWithCost(symbol, side, cost, params = {}) {
1512
1517
  await this.loadMarkets();
1513
1518
  // only buy orders are supported by the endpoint
1514
- params['cost'] = cost;
1515
- return await this.createOrder(symbol, 'market', side, cost, undefined, params);
1519
+ const req = {
1520
+ 'cost': cost,
1521
+ };
1522
+ return await this.createOrder(symbol, 'market', side, 1, undefined, this.extend(req, params));
1516
1523
  }
1517
1524
  /**
1518
1525
  * @method
@@ -287,6 +287,11 @@ export default class krakenfutures extends Exchange {
287
287
  },
288
288
  'hedged': false,
289
289
  'trailing': false,
290
+ 'leverage': false,
291
+ 'marketBuyByCost': false,
292
+ 'marketBuyRequiresPrice': false,
293
+ 'selfTradePrevention': false,
294
+ 'iceberg': false,
290
295
  },
291
296
  'createOrders': {
292
297
  'max': 100,
package/js/src/kucoin.js CHANGED
@@ -1009,11 +1009,11 @@ export default class kucoin extends Exchange {
1009
1009
  },
1010
1010
  'hedged': false,
1011
1011
  'trailing': false,
1012
- // exchange-supported features
1013
- // 'iceberg': true,
1014
- // 'selfTradePrevention': true,
1015
- // 'twap': false,
1016
- // 'oco': false,
1012
+ 'leverage': false,
1013
+ 'marketBuyByCost': true,
1014
+ 'marketBuyRequiresPrice': false,
1015
+ 'selfTradePrevention': true,
1016
+ 'iceberg': true, // todo implement
1017
1017
  },
1018
1018
  'createOrders': {
1019
1019
  'max': 5,
@@ -2318,8 +2318,10 @@ export default class kucoin extends Exchange {
2318
2318
  */
2319
2319
  async createMarketOrderWithCost(symbol, side, cost, params = {}) {
2320
2320
  await this.loadMarkets();
2321
- params['cost'] = cost;
2322
- return await this.createOrder(symbol, 'market', side, cost, undefined, params);
2321
+ const req = {
2322
+ 'cost': cost,
2323
+ };
2324
+ return await this.createOrder(symbol, 'market', side, 0, undefined, this.extend(req, params));
2323
2325
  }
2324
2326
  /**
2325
2327
  * @method