ccxt 4.1.74 → 4.1.76

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 (140) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.js +620 -342
  3. package/dist/ccxt.browser.min.js +3 -3
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/src/ace.js +2 -0
  6. package/dist/cjs/src/alpaca.js +2 -0
  7. package/dist/cjs/src/base/Exchange.js +14 -2
  8. package/dist/cjs/src/base/errors.js +7 -7
  9. package/dist/cjs/src/base/ws/Client.js +13 -14
  10. package/dist/cjs/src/bigone.js +38 -9
  11. package/dist/cjs/src/binance.js +4 -0
  12. package/dist/cjs/src/binanceus.js +2 -0
  13. package/dist/cjs/src/bingx.js +134 -40
  14. package/dist/cjs/src/bit2c.js +2 -0
  15. package/dist/cjs/src/bitbank.js +2 -0
  16. package/dist/cjs/src/bithumb.js +2 -0
  17. package/dist/cjs/src/bitmart.js +33 -11
  18. package/dist/cjs/src/bitopro.js +2 -0
  19. package/dist/cjs/src/bitpanda.js +2 -0
  20. package/dist/cjs/src/bitso.js +2 -0
  21. package/dist/cjs/src/bitstamp.js +2 -0
  22. package/dist/cjs/src/bittrex.js +2 -0
  23. package/dist/cjs/src/bitvavo.js +2 -0
  24. package/dist/cjs/src/bl3p.js +2 -0
  25. package/dist/cjs/src/btcalpha.js +2 -0
  26. package/dist/cjs/src/btcbox.js +2 -0
  27. package/dist/cjs/src/btcmarkets.js +2 -0
  28. package/dist/cjs/src/btcturk.js +2 -0
  29. package/dist/cjs/src/bybit.js +2 -0
  30. package/dist/cjs/src/coinbase.js +2 -0
  31. package/dist/cjs/src/coincheck.js +2 -0
  32. package/dist/cjs/src/coinlist.js +2 -0
  33. package/dist/cjs/src/coinmate.js +2 -0
  34. package/dist/cjs/src/coinone.js +2 -0
  35. package/dist/cjs/src/coinsph.js +2 -0
  36. package/dist/cjs/src/coinspot.js +2 -0
  37. package/dist/cjs/src/cryptocom.js +2 -185
  38. package/dist/cjs/src/gate.js +1 -0
  39. package/dist/cjs/src/gemini.js +23 -19
  40. package/dist/cjs/src/idex.js +2 -0
  41. package/dist/cjs/src/independentreserve.js +2 -0
  42. package/dist/cjs/src/indodax.js +2 -0
  43. package/dist/cjs/src/kraken.js +154 -11
  44. package/dist/cjs/src/kucoin.js +2 -0
  45. package/dist/cjs/src/kuna.js +2 -0
  46. package/dist/cjs/src/latoken.js +2 -0
  47. package/dist/cjs/src/luno.js +2 -0
  48. package/dist/cjs/src/mercado.js +2 -0
  49. package/dist/cjs/src/mexc.js +2 -0
  50. package/dist/cjs/src/ndax.js +2 -0
  51. package/dist/cjs/src/novadax.js +2 -0
  52. package/dist/cjs/src/okx.js +24 -9
  53. package/dist/cjs/src/p2b.js +2 -0
  54. package/dist/cjs/src/poloniex.js +27 -25
  55. package/dist/cjs/src/pro/binance.js +60 -8
  56. package/dist/cjs/src/pro/coinbasepro.js +1 -1
  57. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +8 -11
  58. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +5 -8
  59. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +5 -12
  60. package/dist/cjs/src/wavesexchange.js +2 -0
  61. package/dist/cjs/src/wazirx.js +2 -0
  62. package/dist/cjs/src/woo.js +2 -0
  63. package/dist/cjs/src/yobit.js +2 -0
  64. package/dist/cjs/src/zonda.js +2 -0
  65. package/js/ccxt.d.ts +1 -1
  66. package/js/ccxt.js +1 -1
  67. package/js/src/abstract/binance.d.ts +2 -0
  68. package/js/src/abstract/binancecoinm.d.ts +2 -0
  69. package/js/src/abstract/binanceus.d.ts +2 -0
  70. package/js/src/abstract/binanceusdm.d.ts +2 -0
  71. package/js/src/abstract/okx.d.ts +14 -0
  72. package/js/src/ace.js +2 -0
  73. package/js/src/alpaca.js +2 -0
  74. package/js/src/base/Exchange.d.ts +4 -0
  75. package/js/src/base/Exchange.js +14 -2
  76. package/js/src/base/errors.d.ts +4 -4
  77. package/js/src/base/errors.js +7 -7
  78. package/js/src/base/ws/Client.js +13 -14
  79. package/js/src/bigone.d.ts +1 -0
  80. package/js/src/bigone.js +38 -9
  81. package/js/src/binance.js +4 -0
  82. package/js/src/binanceus.js +2 -0
  83. package/js/src/bingx.d.ts +7 -3
  84. package/js/src/bingx.js +135 -41
  85. package/js/src/bit2c.js +2 -0
  86. package/js/src/bitbank.js +2 -0
  87. package/js/src/bithumb.js +2 -0
  88. package/js/src/bitmart.d.ts +1 -0
  89. package/js/src/bitmart.js +33 -11
  90. package/js/src/bitopro.js +2 -0
  91. package/js/src/bitpanda.js +2 -0
  92. package/js/src/bitso.js +2 -0
  93. package/js/src/bitstamp.js +2 -0
  94. package/js/src/bittrex.js +2 -0
  95. package/js/src/bitvavo.js +2 -0
  96. package/js/src/bl3p.js +2 -0
  97. package/js/src/btcalpha.js +2 -0
  98. package/js/src/btcbox.js +2 -0
  99. package/js/src/btcmarkets.js +2 -0
  100. package/js/src/btcturk.js +2 -0
  101. package/js/src/bybit.js +2 -0
  102. package/js/src/coinbase.js +2 -0
  103. package/js/src/coincheck.js +2 -0
  104. package/js/src/coinlist.js +2 -0
  105. package/js/src/coinmate.js +2 -0
  106. package/js/src/coinone.js +2 -0
  107. package/js/src/coinsph.js +2 -0
  108. package/js/src/coinspot.js +2 -0
  109. package/js/src/cryptocom.d.ts +0 -24
  110. package/js/src/cryptocom.js +2 -185
  111. package/js/src/gate.js +1 -0
  112. package/js/src/gemini.js +23 -19
  113. package/js/src/idex.js +2 -0
  114. package/js/src/independentreserve.js +2 -0
  115. package/js/src/indodax.js +2 -0
  116. package/js/src/kraken.d.ts +2 -0
  117. package/js/src/kraken.js +154 -11
  118. package/js/src/kucoin.js +2 -0
  119. package/js/src/kuna.js +2 -0
  120. package/js/src/latoken.js +2 -0
  121. package/js/src/luno.js +2 -0
  122. package/js/src/mercado.js +2 -0
  123. package/js/src/mexc.js +2 -0
  124. package/js/src/ndax.js +2 -0
  125. package/js/src/novadax.js +2 -0
  126. package/js/src/okx.js +24 -9
  127. package/js/src/p2b.js +2 -0
  128. package/js/src/poloniex.js +27 -25
  129. package/js/src/pro/binance.d.ts +1 -0
  130. package/js/src/pro/binance.js +61 -9
  131. package/js/src/pro/coinbasepro.js +1 -1
  132. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +9 -8
  133. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +5 -7
  134. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +5 -7
  135. package/js/src/wavesexchange.js +2 -0
  136. package/js/src/wazirx.js +2 -0
  137. package/js/src/woo.js +2 -0
  138. package/js/src/yobit.js +2 -0
  139. package/js/src/zonda.js +2 -0
  140. package/package.json +1 -1
package/js/src/bingx.js CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  // ---------------------------------------------------------------------------
8
8
  import Exchange from './abstract/bingx.js';
9
- import { AuthenticationError, ExchangeNotAvailable, PermissionDenied, ExchangeError, InsufficientFunds, BadRequest, OrderNotFound, DDoSProtection, BadSymbol, InvalidOrder, ArgumentsRequired } from './base/errors.js';
9
+ import { AuthenticationError, ExchangeNotAvailable, PermissionDenied, ExchangeError, InsufficientFunds, BadRequest, OrderNotFound, DDoSProtection, BadSymbol, ArgumentsRequired } from './base/errors.js';
10
10
  import { Precise } from './base/Precise.js';
11
11
  import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
12
12
  import { DECIMAL_PLACES } from './base/functions/number.js';
@@ -32,6 +32,9 @@ export default class bingx extends Exchange {
32
32
  'cancelAllOrders': true,
33
33
  'cancelOrder': true,
34
34
  'cancelOrders': true,
35
+ 'createMarketBuyOrderWithCost': true,
36
+ 'createMarketOrderWithCost': true,
37
+ 'createMarketSellOrderWithCost': true,
35
38
  'createOrder': true,
36
39
  'createOrders': true,
37
40
  'fetchBalance': true,
@@ -80,10 +83,18 @@ export default class bingx extends Exchange {
80
83
  'www': 'https://bingx.com/',
81
84
  'doc': 'https://bingx-api.github.io/docs/',
82
85
  'referral': 'https://bingx.com/invite/OHETOM',
83
- 'fees': {
84
- 'trading': {
85
- 'tierBased': true,
86
- },
86
+ },
87
+ 'fees': {
88
+ 'tierBased': true,
89
+ 'spot': {
90
+ 'feeSide': 'get',
91
+ 'maker': this.parseNumber('0.001'),
92
+ 'taker': this.parseNumber('0.001'),
93
+ },
94
+ 'swap': {
95
+ 'feeSide': 'quote',
96
+ 'maker': this.parseNumber('0.0002'),
97
+ 'taker': this.parseNumber('0.0005'),
87
98
  },
88
99
  },
89
100
  'requiredCredentials': {
@@ -302,9 +313,6 @@ export default class bingx extends Exchange {
302
313
  '1w': '1w',
303
314
  '1M': '1M',
304
315
  },
305
- 'fees': {
306
- 'trading': {},
307
- },
308
316
  'precisionMode': DECIMAL_PLACES,
309
317
  'exceptions': {
310
318
  'exact': {
@@ -556,11 +564,12 @@ export default class bingx extends Exchange {
556
564
  if (settle !== undefined) {
557
565
  symbol += ':' + settle;
558
566
  }
567
+ const fees = this.safeValue(this.fees, type, {});
559
568
  const contractSize = this.safeNumber(market, 'size');
560
569
  const isActive = this.safeString(market, 'status') === '1';
561
570
  const isInverse = (spot) ? undefined : false;
562
571
  const isLinear = (spot) ? undefined : swap;
563
- return {
572
+ return this.safeMarketStructure({
564
573
  'id': id,
565
574
  'symbol': symbol,
566
575
  'base': base,
@@ -579,8 +588,9 @@ export default class bingx extends Exchange {
579
588
  'contract': swap,
580
589
  'linear': isLinear,
581
590
  'inverse': isInverse,
582
- 'taker': undefined,
583
- 'maker': undefined,
591
+ 'taker': this.safeNumber(fees, 'taker'),
592
+ 'maker': this.safeNumber(fees, 'maker'),
593
+ 'feeSide': this.safeString(fees, 'feeSide'),
584
594
  'contractSize': contractSize,
585
595
  'expiry': undefined,
586
596
  'expiryDatetime': undefined,
@@ -610,7 +620,7 @@ export default class bingx extends Exchange {
610
620
  },
611
621
  'created': undefined,
612
622
  'info': market,
613
- };
623
+ });
614
624
  }
615
625
  async fetchMarkets(params = {}) {
616
626
  /**
@@ -1576,23 +1586,28 @@ export default class bingx extends Exchange {
1576
1586
  // "avgPrice": "2.2",
1577
1587
  // "leverage": 10,
1578
1588
  // }
1589
+ //
1579
1590
  // standard position
1591
+ //
1580
1592
  // {
1581
- // "currentPrice":"82.91",
1582
- // "symbol":"LTC/USDT",
1583
- // "initialMargin":"5.00000000000000000000",
1584
- // "unrealizedProfit":"-0.26464500",
1585
- // "leverage":"20.000000000",
1586
- // "isolated":true,
1587
- // "entryPrice":"83.13",
1588
- // "positionSide":"LONG",
1589
- // "positionAmt":"1.20365912",
1593
+ // "currentPrice": "82.91",
1594
+ // "symbol": "LTC/USDT",
1595
+ // "initialMargin": "5.00000000000000000000",
1596
+ // "unrealizedProfit": "-0.26464500",
1597
+ // "leverage": "20.000000000",
1598
+ // "isolated": true,
1599
+ // "entryPrice": "83.13",
1600
+ // "positionSide": "LONG",
1601
+ // "positionAmt": "1.20365912",
1590
1602
  // }
1591
1603
  //
1592
- let marketId = this.safeString(position, 'symbol');
1604
+ let marketId = this.safeString(position, 'symbol', '');
1593
1605
  marketId = marketId.replace('/', '-'); // standard return different format
1594
1606
  const isolated = this.safeValue(position, 'isolated');
1595
- const marginMode = isolated ? 'isolated' : 'cross';
1607
+ let marginMode = undefined;
1608
+ if (isolated !== undefined) {
1609
+ marginMode = isolated ? 'isolated' : 'cross';
1610
+ }
1596
1611
  return this.safePosition({
1597
1612
  'info': position,
1598
1613
  'id': this.safeString(position, 'positionId'),
@@ -1624,6 +1639,46 @@ export default class bingx extends Exchange {
1624
1639
  'takeProfitPrice': undefined,
1625
1640
  });
1626
1641
  }
1642
+ async createMarketOrderWithCost(symbol, side, cost, params = {}) {
1643
+ /**
1644
+ * @method
1645
+ * @name bingx#createMarketOrderWithCost
1646
+ * @description create a market order by providing the symbol, side and cost
1647
+ * @param {string} symbol unified symbol of the market to create an order in
1648
+ * @param {string} side 'buy' or 'sell'
1649
+ * @param {float} cost how much you want to trade in units of the quote currency
1650
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1651
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1652
+ */
1653
+ params['quoteOrderQty'] = cost;
1654
+ return await this.createOrder(symbol, 'market', side, cost, undefined, params);
1655
+ }
1656
+ async createMarketBuyOrderWithCost(symbol, cost, params = {}) {
1657
+ /**
1658
+ * @method
1659
+ * @name bingx#createMarketBuyOrderWithCost
1660
+ * @description create a market buy order by providing the symbol and cost
1661
+ * @param {string} symbol unified symbol of the market to create an order in
1662
+ * @param {float} cost how much you want to trade in units of the quote currency
1663
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1664
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1665
+ */
1666
+ params['quoteOrderQty'] = cost;
1667
+ return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
1668
+ }
1669
+ async createMarketSellOrderWithCost(symbol, cost, params = {}) {
1670
+ /**
1671
+ * @method
1672
+ * @name bingx#createMarketSellOrderWithCost
1673
+ * @description create a market sell order by providing the symbol and cost
1674
+ * @param {string} symbol unified symbol of the market to create an order in
1675
+ * @param {float} cost how much you want to trade in units of the quote currency
1676
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1677
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1678
+ */
1679
+ params['quoteOrderQty'] = cost;
1680
+ return await this.createOrder(symbol, 'market', 'sell', cost, undefined, params);
1681
+ }
1627
1682
  createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1628
1683
  /**
1629
1684
  * @method
@@ -1659,26 +1714,21 @@ export default class bingx extends Exchange {
1659
1714
  if (postOnly || (timeInForce === 'POC')) {
1660
1715
  request['timeInForce'] = 'POC';
1661
1716
  }
1662
- const createMarketBuyOrderRequiresPrice = this.safeValue(this.options, 'createMarketBuyOrderRequiresPrice', true);
1663
- if (isMarketOrder && (side === 'buy')) {
1664
- if (createMarketBuyOrderRequiresPrice) {
1665
- if (price === undefined) {
1666
- throw new InvalidOrder(this.id + ' createOrder() requires price argument for market buy orders on spot markets to calculate the total amount to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option to false and pass in the cost to spend into the amount parameter');
1667
- }
1668
- else {
1669
- const amountString = this.numberToString(amount);
1670
- const priceString = this.numberToString(price);
1671
- const cost = this.parseNumber(Precise.stringMul(amountString, priceString));
1672
- request['quoteOrderQty'] = this.parseToNumeric(this.priceToPrecision(symbol, cost));
1673
- }
1717
+ const cost = this.safeNumber2(params, 'cost', 'quoteOrderQty');
1718
+ params = this.omit(params, 'cost');
1719
+ if (cost !== undefined) {
1720
+ request['quoteOrderQty'] = this.parseToNumeric(this.costToPrecision(symbol, cost));
1721
+ }
1722
+ else {
1723
+ if (market['spot'] && isMarketOrder && (price !== undefined)) {
1724
+ // keep the legacy behavior, to avoid breaking the old spot-market-buying code
1725
+ const calculatedCost = Precise.stringMul(this.numberToString(amount), this.numberToString(price));
1726
+ request['quoteOrderQty'] = this.parseToNumeric(calculatedCost);
1674
1727
  }
1675
1728
  else {
1676
- request['quoteOrderQty'] = this.parseToNumeric(this.priceToPrecision(symbol, amount));
1729
+ request['quantity'] = this.parseToNumeric(this.amountToPrecision(symbol, amount));
1677
1730
  }
1678
1731
  }
1679
- else {
1680
- request['quantity'] = this.parseToNumeric(this.amountToPrecision(symbol, amount));
1681
- }
1682
1732
  if (!isMarketOrder) {
1683
1733
  request['price'] = this.parseToNumeric(this.priceToPrecision(symbol, price));
1684
1734
  }
@@ -1753,8 +1803,7 @@ export default class bingx extends Exchange {
1753
1803
  * @method
1754
1804
  * @name bingx#createOrder
1755
1805
  * @description create a trade order
1756
- * @see https://bingx-api.github.io/docs/#/spot/trade-api.html#Create%20an%20Order
1757
- * @see https://bingx-api.github.io/docs/#/swapV2/trade-api.html#Trade%20order
1806
+ * @see https://bingx-api.github.io/docs/#/en-us/swapV2/trade-api.html#Trade%20order
1758
1807
  * @param {string} symbol unified symbol of the market to create an order in
1759
1808
  * @param {string} type 'market' or 'limit'
1760
1809
  * @param {string} side 'buy' or 'sell'
@@ -1767,6 +1816,7 @@ export default class bingx extends Exchange {
1767
1816
  * @param {float} [params.triggerPrice] *swap only* triggerPrice at which the attached take profit / stop loss order will be triggered
1768
1817
  * @param {float} [params.stopLossPrice] *swap only* stop loss trigger price
1769
1818
  * @param {float} [params.takeProfitPrice] *swap only* take profit trigger price
1819
+ * @param {float} [params.cost] the quote quantity that can be used as an alternative for the amount
1770
1820
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1771
1821
  */
1772
1822
  await this.loadMarkets();
@@ -3373,6 +3423,50 @@ export default class bingx extends Exchange {
3373
3423
  'datetime': this.iso8601(timestamp),
3374
3424
  });
3375
3425
  }
3426
+ async closeAllPositions(params = {}) {
3427
+ /**
3428
+ * @method
3429
+ * @name bitget#closePositions
3430
+ * @description closes open positions for a market
3431
+ * @see https://bitgetlimited.github.io/apidoc/en/mix/#close-all-position
3432
+ * @param {object} [params] extra parameters specific to the okx api endpoint
3433
+ * @param {string} [params.recvWindow] request valid time window value
3434
+ * @returns {[object]} [A list of position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
3435
+ */
3436
+ await this.loadMarkets();
3437
+ const defaultRecvWindow = this.safeInteger(this.options, 'recvWindow');
3438
+ const recvWindow = this.safeInteger(this.parseParams, 'recvWindow', defaultRecvWindow);
3439
+ let marketType = undefined;
3440
+ [marketType, params] = this.handleMarketTypeAndParams('closeAllPositions', undefined, params);
3441
+ if (marketType === 'margin') {
3442
+ throw new BadRequest(this.id + ' closePositions () cannot be used for ' + marketType + ' markets');
3443
+ }
3444
+ const request = {
3445
+ 'recvWindow': recvWindow,
3446
+ };
3447
+ const response = await this.swapV2PrivatePostTradeCloseAllPositions(this.extend(request, params));
3448
+ //
3449
+ // {
3450
+ // "code": 0,
3451
+ // "msg": "",
3452
+ // "data": {
3453
+ // "success": [
3454
+ // 1727686766700486656,
3455
+ // 1727686767048613888
3456
+ // ],
3457
+ // "failed": null
3458
+ // }
3459
+ // }
3460
+ //
3461
+ const data = this.safeValue(response, 'data', {});
3462
+ const success = this.safeValue(data, 'success', []);
3463
+ const positions = [];
3464
+ for (let i = 0; i < success.length; i++) {
3465
+ const position = this.parsePosition({ 'positionId': success[i] });
3466
+ positions.push(position);
3467
+ }
3468
+ return positions;
3469
+ }
3376
3470
  sign(path, section = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
3377
3471
  const type = section[0];
3378
3472
  const version = section[1];
package/js/src/bit2c.js CHANGED
@@ -32,6 +32,8 @@ export default class bit2c extends Exchange {
32
32
  'option': false,
33
33
  'addMargin': false,
34
34
  'cancelOrder': true,
35
+ 'closeAllPositions': false,
36
+ 'closePosition': false,
35
37
  'createOrder': true,
36
38
  'createReduceOnlyOrder': false,
37
39
  'fetchBalance': true,
package/js/src/bitbank.js CHANGED
@@ -30,6 +30,8 @@ export default class bitbank extends Exchange {
30
30
  'option': false,
31
31
  'addMargin': false,
32
32
  'cancelOrder': true,
33
+ 'closeAllPositions': false,
34
+ 'closePosition': false,
33
35
  'createOrder': true,
34
36
  'createReduceOnlyOrder': false,
35
37
  'fetchBalance': true,
package/js/src/bithumb.js CHANGED
@@ -31,6 +31,8 @@ export default class bithumb extends Exchange {
31
31
  'option': false,
32
32
  'addMargin': false,
33
33
  'cancelOrder': true,
34
+ 'closeAllPositions': false,
35
+ 'closePosition': false,
34
36
  'createMarketOrder': true,
35
37
  'createOrder': true,
36
38
  'createReduceOnlyOrder': false,
@@ -75,6 +75,7 @@ export default class bitmart extends Exchange {
75
75
  parseOrder(order: any, market?: Market): Order;
76
76
  parseOrderSide(side: any): string;
77
77
  parseOrderStatusByType(type: any, status: any): string;
78
+ createMarketBuyOrderWithCost(symbol: string, cost: any, params?: {}): Promise<Order>;
78
79
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): Promise<Order>;
79
80
  createSwapOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): any;
80
81
  createSpotOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): any;
package/js/src/bitmart.js CHANGED
@@ -39,6 +39,9 @@ export default class bitmart extends Exchange {
39
39
  'cancelAllOrders': true,
40
40
  'cancelOrder': true,
41
41
  'cancelOrders': false,
42
+ 'createMarketBuyOrderWithCost': true,
43
+ 'createMarketOrderWithCost': false,
44
+ 'createMarketSellOrderWithCost': false,
42
45
  'createOrder': true,
43
46
  'createPostOnlyOrder': true,
44
47
  'createStopLimitOrder': false,
@@ -2164,12 +2167,31 @@ export default class bitmart extends Exchange {
2164
2167
  const statuses = this.safeValue(statusesByType, type, {});
2165
2168
  return this.safeString(statuses, status, status);
2166
2169
  }
2170
+ async createMarketBuyOrderWithCost(symbol, cost, params = {}) {
2171
+ /**
2172
+ * @method
2173
+ * @name bitmart#createMarketBuyOrderWithCost
2174
+ * @description create a market buy order by providing the symbol and cost
2175
+ * @see https://developer-pro.bitmart.com/en/spot/#new-order-v2-signed
2176
+ * @param {string} symbol unified symbol of the market to create an order in
2177
+ * @param {float} cost how much you want to trade in units of the quote currency
2178
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2179
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2180
+ */
2181
+ await this.loadMarkets();
2182
+ const market = this.market(symbol);
2183
+ if (!market['spot']) {
2184
+ throw new NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
2185
+ }
2186
+ params['createMarketBuyOrderRequiresPrice'] = false;
2187
+ return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
2188
+ }
2167
2189
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
2168
2190
  /**
2169
2191
  * @method
2170
2192
  * @name bitmart#createOrder
2171
2193
  * @description create a trade order
2172
- * @see https://developer-pro.bitmart.com/en/spot/#place-spot-order
2194
+ * @see https://developer-pro.bitmart.com/en/spot/#new-order-v2-signed
2173
2195
  * @see https://developer-pro.bitmart.com/en/spot/#place-margin-order
2174
2196
  * @see https://developer-pro.bitmart.com/en/futures/#submit-order-signed
2175
2197
  * @param {string} symbol unified symbol of the market to create an order in
@@ -2346,18 +2368,18 @@ export default class bitmart extends Exchange {
2346
2368
  else if (isMarketOrder) {
2347
2369
  // for market buy it requires the amount of quote currency to spend
2348
2370
  if (side === 'buy') {
2349
- let notional = this.safeNumber(params, 'notional');
2350
- const createMarketBuyOrderRequiresPrice = this.safeValue(this.options, 'createMarketBuyOrderRequiresPrice', true);
2371
+ let notional = this.safeNumber2(params, 'cost', 'notional');
2372
+ params = this.omit(params, 'cost');
2373
+ let createMarketBuyOrderRequiresPrice = true;
2374
+ [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
2351
2375
  if (createMarketBuyOrderRequiresPrice) {
2352
- if (price !== undefined) {
2353
- if (notional === undefined) {
2354
- const amountString = this.numberToString(amount);
2355
- const priceString = this.numberToString(price);
2356
- notional = this.parseNumber(Precise.stringMul(amountString, priceString));
2357
- }
2376
+ if ((price === undefined) && (notional === undefined)) {
2377
+ throw new InvalidOrder(this.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument or in the "notional" extra parameter (the exchange-specific behaviour)');
2358
2378
  }
2359
- else if (notional === undefined) {
2360
- throw new InvalidOrder(this.id + " createOrder () requires the price argument with market buy orders to calculate total order cost (amount to spend), where cost = amount * price. Supply a price argument to createOrder() call if you want the cost to be calculated for you from price and amount, or, alternatively, add .options['createMarketBuyOrderRequiresPrice'] = false and supply the total cost value in the 'amount' argument or in the 'notional' extra parameter (the exchange-specific behaviour)");
2379
+ else {
2380
+ const amountString = this.numberToString(amount);
2381
+ const priceString = this.numberToString(price);
2382
+ notional = this.parseNumber(Precise.stringMul(amountString, priceString));
2361
2383
  }
2362
2384
  }
2363
2385
  else {
package/js/src/bitopro.js CHANGED
@@ -34,6 +34,8 @@ export default class bitopro extends Exchange {
34
34
  'cancelAllOrders': true,
35
35
  'cancelOrder': true,
36
36
  'cancelOrders': true,
37
+ 'closeAllPositions': false,
38
+ 'closePosition': false,
37
39
  'createOrder': true,
38
40
  'editOrder': false,
39
41
  'fetchBalance': true,
@@ -35,6 +35,8 @@ export default class bitpanda extends Exchange {
35
35
  'cancelAllOrders': true,
36
36
  'cancelOrder': true,
37
37
  'cancelOrders': true,
38
+ 'closeAllPositions': false,
39
+ 'closePosition': false,
38
40
  'createDepositAddress': true,
39
41
  'createOrder': true,
40
42
  'createReduceOnlyOrder': false,
package/js/src/bitso.js CHANGED
@@ -34,6 +34,8 @@ export default class bitso extends Exchange {
34
34
  'cancelAllOrders': true,
35
35
  'cancelOrder': true,
36
36
  'cancelOrders': true,
37
+ 'closeAllPositions': false,
38
+ 'closePosition': false,
37
39
  'createDepositAddress': false,
38
40
  'createOrder': true,
39
41
  'createReduceOnlyOrder': false,
@@ -36,6 +36,8 @@ export default class bitstamp extends Exchange {
36
36
  'addMargin': false,
37
37
  'cancelAllOrders': true,
38
38
  'cancelOrder': true,
39
+ 'closeAllPositions': false,
40
+ 'closePosition': false,
39
41
  'createOrder': true,
40
42
  'createReduceOnlyOrder': false,
41
43
  'createStopLimitOrder': false,
package/js/src/bittrex.js CHANGED
@@ -35,6 +35,8 @@ export default class bittrex extends Exchange {
35
35
  'addMargin': false,
36
36
  'cancelAllOrders': true,
37
37
  'cancelOrder': true,
38
+ 'closeAllPositions': false,
39
+ 'closePosition': false,
38
40
  'createDepositAddress': true,
39
41
  'createMarketOrder': true,
40
42
  'createOrder': true,
package/js/src/bitvavo.js CHANGED
@@ -35,6 +35,8 @@ export default class bitvavo extends Exchange {
35
35
  'addMargin': false,
36
36
  'cancelAllOrders': true,
37
37
  'cancelOrder': true,
38
+ 'closeAllPositions': false,
39
+ 'closePosition': false,
38
40
  'createOrder': true,
39
41
  'createReduceOnlyOrder': false,
40
42
  'createStopLimitOrder': true,
package/js/src/bl3p.js CHANGED
@@ -33,6 +33,8 @@ export default class bl3p extends Exchange {
33
33
  'option': false,
34
34
  'addMargin': false,
35
35
  'cancelOrder': true,
36
+ 'closeAllPositions': false,
37
+ 'closePosition': false,
36
38
  'createOrder': true,
37
39
  'createReduceOnlyOrder': false,
38
40
  'createStopLimitOrder': false,
@@ -31,6 +31,8 @@ export default class btcalpha extends Exchange {
31
31
  'option': false,
32
32
  'addMargin': false,
33
33
  'cancelOrder': true,
34
+ 'closeAllPositions': false,
35
+ 'closePosition': false,
34
36
  'createOrder': true,
35
37
  'createReduceOnlyOrder': false,
36
38
  'createStopLimitOrder': false,
package/js/src/btcbox.js CHANGED
@@ -33,6 +33,8 @@ export default class btcbox extends Exchange {
33
33
  'option': false,
34
34
  'addMargin': false,
35
35
  'cancelOrder': true,
36
+ 'closeAllPositions': false,
37
+ 'closePosition': false,
36
38
  'createOrder': true,
37
39
  'createReduceOnlyOrder': false,
38
40
  'fetchBalance': true,
@@ -33,6 +33,8 @@ export default class btcmarkets extends Exchange {
33
33
  'addMargin': false,
34
34
  'cancelOrder': true,
35
35
  'cancelOrders': true,
36
+ 'closeAllPositions': false,
37
+ 'closePosition': false,
36
38
  'createOrder': true,
37
39
  'createReduceOnlyOrder': false,
38
40
  'fetchBalance': true,
package/js/src/btcturk.js CHANGED
@@ -32,6 +32,8 @@ export default class btcturk extends Exchange {
32
32
  'option': false,
33
33
  'addMargin': false,
34
34
  'cancelOrder': true,
35
+ 'closeAllPositions': false,
36
+ 'closePosition': false,
35
37
  'createOrder': true,
36
38
  'createReduceOnlyOrder': false,
37
39
  'fetchBalance': true,
package/js/src/bybit.js CHANGED
@@ -38,6 +38,8 @@ export default class bybit extends Exchange {
38
38
  'borrowCrossMargin': true,
39
39
  'cancelAllOrders': true,
40
40
  'cancelOrder': true,
41
+ 'closeAllPositions': false,
42
+ 'closePosition': false,
41
43
  'createMarketBuyOrderWithCost': true,
42
44
  'createMarketSellOrderWithCost': false,
43
45
  'createOrder': true,
@@ -38,6 +38,8 @@ export default class coinbase extends Exchange {
38
38
  'addMargin': false,
39
39
  'cancelOrder': true,
40
40
  'cancelOrders': true,
41
+ 'closeAllPositions': false,
42
+ 'closePosition': false,
41
43
  'createDepositAddress': true,
42
44
  'createLimitBuyOrder': true,
43
45
  'createLimitSellOrder': true,
@@ -30,6 +30,8 @@ export default class coincheck extends Exchange {
30
30
  'option': false,
31
31
  'addMargin': false,
32
32
  'cancelOrder': true,
33
+ 'closeAllPositions': false,
34
+ 'closePosition': false,
33
35
  'createOrder': true,
34
36
  'createReduceOnlyOrder': false,
35
37
  'fetchBalance': true,
@@ -35,6 +35,8 @@ export default class coinlist extends Exchange {
35
35
  'cancelAllOrders': true,
36
36
  'cancelOrder': true,
37
37
  'cancelOrders': true,
38
+ 'closeAllPositions': false,
39
+ 'closePosition': false,
38
40
  'createDepositAddress': false,
39
41
  'createOrder': true,
40
42
  'createPostOnlyOrder': true,
@@ -31,6 +31,8 @@ export default class coinmate extends Exchange {
31
31
  'option': false,
32
32
  'addMargin': false,
33
33
  'cancelOrder': true,
34
+ 'closeAllPositions': false,
35
+ 'closePosition': false,
34
36
  'createOrder': true,
35
37
  'createReduceOnlyOrder': false,
36
38
  'fetchBalance': true,
package/js/src/coinone.js CHANGED
@@ -34,6 +34,8 @@ export default class coinone extends Exchange {
34
34
  'option': false,
35
35
  'addMargin': false,
36
36
  'cancelOrder': true,
37
+ 'closeAllPositions': false,
38
+ 'closePosition': false,
37
39
  'createMarketOrder': false,
38
40
  'createOrder': true,
39
41
  'createReduceOnlyOrder': false,
package/js/src/coinsph.js CHANGED
@@ -35,6 +35,8 @@ export default class coinsph extends Exchange {
35
35
  'cancelAllOrders': true,
36
36
  'cancelOrder': true,
37
37
  'cancelOrders': false,
38
+ 'closeAllPositions': false,
39
+ 'closePosition': false,
38
40
  'createDepositAddress': false,
39
41
  'createOrder': true,
40
42
  'createPostOnlyOrder': false,
@@ -32,6 +32,8 @@ export default class coinspot extends Exchange {
32
32
  'option': false,
33
33
  'addMargin': false,
34
34
  'cancelOrder': true,
35
+ 'closeAllPositions': false,
36
+ 'closePosition': false,
35
37
  'createMarketOrder': false,
36
38
  'createOrder': true,
37
39
  'createReduceOnlyOrder': false,
@@ -32,30 +32,6 @@ export default class cryptocom extends Exchange {
32
32
  safeNetwork(networkId: any): string;
33
33
  fetchDeposits(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<Transaction[]>;
34
34
  fetchWithdrawals(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<Transaction[]>;
35
- transfer(code: string, amount: any, fromAccount: any, toAccount: any, params?: {}): Promise<{
36
- info: any;
37
- id: string;
38
- timestamp: any;
39
- datetime: string;
40
- currency: any;
41
- amount: any;
42
- fromAccount: any;
43
- toAccount: any;
44
- status: any;
45
- }>;
46
- fetchTransfers(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<any>;
47
- parseTransferStatus(status: any): string;
48
- parseTransfer(transfer: any, currency?: Currency): {
49
- info: any;
50
- id: string;
51
- timestamp: any;
52
- datetime: string;
53
- currency: any;
54
- amount: any;
55
- fromAccount: any;
56
- toAccount: any;
57
- status: any;
58
- };
59
35
  parseTicker(ticker: any, market?: Market): Ticker;
60
36
  parseTrade(trade: any, market?: Market): Trade;
61
37
  parseOHLCV(ohlcv: any, market?: Market): OHLCV;