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.
- package/README.md +3 -3
- package/dist/ccxt.browser.js +620 -342
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ace.js +2 -0
- package/dist/cjs/src/alpaca.js +2 -0
- package/dist/cjs/src/base/Exchange.js +14 -2
- package/dist/cjs/src/base/errors.js +7 -7
- package/dist/cjs/src/base/ws/Client.js +13 -14
- package/dist/cjs/src/bigone.js +38 -9
- package/dist/cjs/src/binance.js +4 -0
- package/dist/cjs/src/binanceus.js +2 -0
- package/dist/cjs/src/bingx.js +134 -40
- package/dist/cjs/src/bit2c.js +2 -0
- package/dist/cjs/src/bitbank.js +2 -0
- package/dist/cjs/src/bithumb.js +2 -0
- package/dist/cjs/src/bitmart.js +33 -11
- package/dist/cjs/src/bitopro.js +2 -0
- package/dist/cjs/src/bitpanda.js +2 -0
- package/dist/cjs/src/bitso.js +2 -0
- package/dist/cjs/src/bitstamp.js +2 -0
- package/dist/cjs/src/bittrex.js +2 -0
- package/dist/cjs/src/bitvavo.js +2 -0
- package/dist/cjs/src/bl3p.js +2 -0
- package/dist/cjs/src/btcalpha.js +2 -0
- package/dist/cjs/src/btcbox.js +2 -0
- package/dist/cjs/src/btcmarkets.js +2 -0
- package/dist/cjs/src/btcturk.js +2 -0
- package/dist/cjs/src/bybit.js +2 -0
- package/dist/cjs/src/coinbase.js +2 -0
- package/dist/cjs/src/coincheck.js +2 -0
- package/dist/cjs/src/coinlist.js +2 -0
- package/dist/cjs/src/coinmate.js +2 -0
- package/dist/cjs/src/coinone.js +2 -0
- package/dist/cjs/src/coinsph.js +2 -0
- package/dist/cjs/src/coinspot.js +2 -0
- package/dist/cjs/src/cryptocom.js +2 -185
- package/dist/cjs/src/gate.js +1 -0
- package/dist/cjs/src/gemini.js +23 -19
- package/dist/cjs/src/idex.js +2 -0
- package/dist/cjs/src/independentreserve.js +2 -0
- package/dist/cjs/src/indodax.js +2 -0
- package/dist/cjs/src/kraken.js +154 -11
- package/dist/cjs/src/kucoin.js +2 -0
- package/dist/cjs/src/kuna.js +2 -0
- package/dist/cjs/src/latoken.js +2 -0
- package/dist/cjs/src/luno.js +2 -0
- package/dist/cjs/src/mercado.js +2 -0
- package/dist/cjs/src/mexc.js +2 -0
- package/dist/cjs/src/ndax.js +2 -0
- package/dist/cjs/src/novadax.js +2 -0
- package/dist/cjs/src/okx.js +24 -9
- package/dist/cjs/src/p2b.js +2 -0
- package/dist/cjs/src/poloniex.js +27 -25
- package/dist/cjs/src/pro/binance.js +60 -8
- package/dist/cjs/src/pro/coinbasepro.js +1 -1
- package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +8 -11
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +5 -8
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +5 -12
- package/dist/cjs/src/wavesexchange.js +2 -0
- package/dist/cjs/src/wazirx.js +2 -0
- package/dist/cjs/src/woo.js +2 -0
- package/dist/cjs/src/yobit.js +2 -0
- package/dist/cjs/src/zonda.js +2 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/binance.d.ts +2 -0
- package/js/src/abstract/binancecoinm.d.ts +2 -0
- package/js/src/abstract/binanceus.d.ts +2 -0
- package/js/src/abstract/binanceusdm.d.ts +2 -0
- package/js/src/abstract/okx.d.ts +14 -0
- package/js/src/ace.js +2 -0
- package/js/src/alpaca.js +2 -0
- package/js/src/base/Exchange.d.ts +4 -0
- package/js/src/base/Exchange.js +14 -2
- package/js/src/base/errors.d.ts +4 -4
- package/js/src/base/errors.js +7 -7
- package/js/src/base/ws/Client.js +13 -14
- package/js/src/bigone.d.ts +1 -0
- package/js/src/bigone.js +38 -9
- package/js/src/binance.js +4 -0
- package/js/src/binanceus.js +2 -0
- package/js/src/bingx.d.ts +7 -3
- package/js/src/bingx.js +135 -41
- package/js/src/bit2c.js +2 -0
- package/js/src/bitbank.js +2 -0
- package/js/src/bithumb.js +2 -0
- package/js/src/bitmart.d.ts +1 -0
- package/js/src/bitmart.js +33 -11
- package/js/src/bitopro.js +2 -0
- package/js/src/bitpanda.js +2 -0
- package/js/src/bitso.js +2 -0
- package/js/src/bitstamp.js +2 -0
- package/js/src/bittrex.js +2 -0
- package/js/src/bitvavo.js +2 -0
- package/js/src/bl3p.js +2 -0
- package/js/src/btcalpha.js +2 -0
- package/js/src/btcbox.js +2 -0
- package/js/src/btcmarkets.js +2 -0
- package/js/src/btcturk.js +2 -0
- package/js/src/bybit.js +2 -0
- package/js/src/coinbase.js +2 -0
- package/js/src/coincheck.js +2 -0
- package/js/src/coinlist.js +2 -0
- package/js/src/coinmate.js +2 -0
- package/js/src/coinone.js +2 -0
- package/js/src/coinsph.js +2 -0
- package/js/src/coinspot.js +2 -0
- package/js/src/cryptocom.d.ts +0 -24
- package/js/src/cryptocom.js +2 -185
- package/js/src/gate.js +1 -0
- package/js/src/gemini.js +23 -19
- package/js/src/idex.js +2 -0
- package/js/src/independentreserve.js +2 -0
- package/js/src/indodax.js +2 -0
- package/js/src/kraken.d.ts +2 -0
- package/js/src/kraken.js +154 -11
- package/js/src/kucoin.js +2 -0
- package/js/src/kuna.js +2 -0
- package/js/src/latoken.js +2 -0
- package/js/src/luno.js +2 -0
- package/js/src/mercado.js +2 -0
- package/js/src/mexc.js +2 -0
- package/js/src/ndax.js +2 -0
- package/js/src/novadax.js +2 -0
- package/js/src/okx.js +24 -9
- package/js/src/p2b.js +2 -0
- package/js/src/poloniex.js +27 -25
- package/js/src/pro/binance.d.ts +1 -0
- package/js/src/pro/binance.js +61 -9
- package/js/src/pro/coinbasepro.js +1 -1
- package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +9 -8
- package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +5 -7
- package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +5 -7
- package/js/src/wavesexchange.js +2 -0
- package/js/src/wazirx.js +2 -0
- package/js/src/woo.js +2 -0
- package/js/src/yobit.js +2 -0
- package/js/src/zonda.js +2 -0
- 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,
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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':
|
|
583
|
-
'maker':
|
|
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
|
-
|
|
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
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
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['
|
|
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/#/
|
|
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
package/js/src/bitbank.js
CHANGED
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,
|
package/js/src/bitmart.d.ts
CHANGED
|
@@ -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/#
|
|
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.
|
|
2350
|
-
|
|
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
|
|
2353
|
-
|
|
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
|
|
2360
|
-
|
|
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
package/js/src/bitpanda.js
CHANGED
|
@@ -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,
|
package/js/src/bitstamp.js
CHANGED
|
@@ -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,
|
package/js/src/btcalpha.js
CHANGED
|
@@ -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
package/js/src/btcmarkets.js
CHANGED
|
@@ -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
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,
|
package/js/src/coinbase.js
CHANGED
|
@@ -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,
|
package/js/src/coincheck.js
CHANGED
package/js/src/coinlist.js
CHANGED
|
@@ -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,
|
package/js/src/coinmate.js
CHANGED
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,
|
package/js/src/coinspot.js
CHANGED
|
@@ -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,
|
package/js/src/cryptocom.d.ts
CHANGED
|
@@ -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;
|