ccxt 4.4.69 → 4.4.71
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 +5 -8
- package/dist/ccxt.browser.min.js +7 -7
- package/dist/cjs/ccxt.js +1 -6
- package/dist/cjs/src/abstract/poloniexfutures.js +1 -1
- package/dist/cjs/src/base/Exchange.js +22 -1
- package/dist/cjs/src/binance.js +107 -102
- package/dist/cjs/src/bingx.js +64 -42
- package/dist/cjs/src/bitget.js +50 -340
- package/dist/cjs/src/bitmart.js +15 -1
- package/dist/cjs/src/bitopro.js +1 -0
- package/dist/cjs/src/bitrue.js +1 -0
- package/dist/cjs/src/bybit.js +7 -0
- package/dist/cjs/src/cex.js +1 -0
- package/dist/cjs/src/coinbase.js +24 -4
- package/dist/cjs/src/coinbaseexchange.js +1 -0
- package/dist/cjs/src/deribit.js +1 -0
- package/dist/cjs/src/hashkey.js +4 -2
- package/dist/cjs/src/hyperliquid.js +18 -7
- package/dist/cjs/src/kraken.js +83 -6
- package/dist/cjs/src/kucoin.js +4 -2
- package/dist/cjs/src/mexc.js +8 -4
- package/dist/cjs/src/okx.js +62 -46
- package/dist/cjs/src/poloniex.js +1311 -81
- package/dist/cjs/src/poloniexfutures.js +1 -1
- package/dist/cjs/src/pro/binance.js +94 -94
- package/dist/cjs/src/pro/bingx.js +63 -52
- package/dist/cjs/src/pro/bitget.js +40 -7
- package/dist/cjs/src/pro/bybit.js +86 -38
- package/dist/cjs/src/pro/poloniexfutures.js +1 -1
- package/dist/cjs/src/tradeogre.js +22 -4
- package/dist/cjs/src/whitebit.js +4 -2
- package/js/ccxt.d.ts +3 -9
- package/js/ccxt.js +2 -6
- package/js/src/abstract/bingx.d.ts +1 -0
- package/js/src/abstract/bitmart.d.ts +1 -0
- package/js/src/abstract/bybit.d.ts +4 -0
- package/js/src/abstract/myokx.d.ts +3 -0
- package/js/src/abstract/okx.d.ts +3 -0
- package/js/src/abstract/poloniex.d.ts +36 -0
- package/js/src/abstract/poloniexfutures.js +6 -0
- package/js/src/abstract/tradeogre.d.ts +1 -1
- package/js/src/base/Exchange.d.ts +11 -2
- package/js/src/base/Exchange.js +22 -1
- package/js/src/base/types.d.ts +33 -2
- package/js/src/binance.d.ts +98 -97
- package/js/src/binance.js +107 -102
- package/js/src/bingx.js +64 -42
- package/js/src/bitget.d.ts +0 -1
- package/js/src/bitget.js +50 -340
- package/js/src/bitmart.d.ts +1 -0
- package/js/src/bitmart.js +15 -1
- package/js/src/bitopro.js +1 -0
- package/js/src/bitrue.js +1 -0
- package/js/src/bybit.js +7 -0
- package/js/src/cex.js +1 -0
- package/js/src/coinbase.js +24 -4
- package/js/src/coinbaseexchange.js +1 -0
- package/js/src/deribit.js +1 -0
- package/js/src/hashkey.js +4 -2
- package/js/src/hyperliquid.js +18 -7
- package/js/src/kraken.d.ts +1 -0
- package/js/src/kraken.js +83 -6
- package/js/src/kucoin.js +4 -2
- package/js/src/mexc.js +8 -4
- package/js/src/okx.d.ts +1 -0
- package/js/src/okx.js +62 -46
- package/js/src/poloniex.d.ts +109 -1
- package/js/src/poloniex.js +1311 -81
- package/js/src/poloniexfutures.js +6 -0
- package/js/src/pro/binance.d.ts +94 -94
- package/js/src/pro/binance.js +94 -94
- package/js/src/pro/bingx.js +63 -52
- package/js/src/pro/bitget.js +40 -7
- package/js/src/pro/bybit.d.ts +1 -0
- package/js/src/pro/bybit.js +86 -38
- package/js/src/pro/poloniexfutures.js +6 -0
- package/js/src/tradeogre.d.ts +1 -0
- package/js/src/tradeogre.js +22 -4
- package/js/src/whitebit.js +4 -2
- package/package.json +1 -1
package/dist/cjs/src/bitmart.js
CHANGED
|
@@ -42,6 +42,7 @@ class bitmart extends bitmart$1 {
|
|
|
42
42
|
'createOrder': true,
|
|
43
43
|
'createOrders': true,
|
|
44
44
|
'createPostOnlyOrder': true,
|
|
45
|
+
'createReduceOnlyOrder': true,
|
|
45
46
|
'createStopLimitOrder': false,
|
|
46
47
|
'createStopMarketOrder': false,
|
|
47
48
|
'createStopOrder': false,
|
|
@@ -259,6 +260,7 @@ class bitmart extends bitmart$1 {
|
|
|
259
260
|
'contract/private/submit-tp-sl-order': 2.5,
|
|
260
261
|
'contract/private/modify-plan-order': 2.5,
|
|
261
262
|
'contract/private/modify-preset-plan-order': 2.5,
|
|
263
|
+
'contract/private/modify-limit-order': 2.5,
|
|
262
264
|
'contract/private/modify-tp-sl-order': 2.5,
|
|
263
265
|
'contract/private/submit-trail-order': 2.5,
|
|
264
266
|
'contract/private/cancel-trail-order': 1.5, // weight is not provided by the exchange, is set as ordinary order
|
|
@@ -5119,6 +5121,7 @@ class bitmart extends bitmart$1 {
|
|
|
5119
5121
|
* @see https://developer-pro.bitmart.com/en/futuresv2/#modify-plan-order-signed
|
|
5120
5122
|
* @see https://developer-pro.bitmart.com/en/futuresv2/#modify-tp-sl-order-signed
|
|
5121
5123
|
* @see https://developer-pro.bitmart.com/en/futuresv2/#modify-preset-plan-order-signed
|
|
5124
|
+
* @see https://developer-pro.bitmart.com/en/futuresv2/#modify-limit-order-signed
|
|
5122
5125
|
* @param {string} id order id
|
|
5123
5126
|
* @param {string} symbol unified symbol of the market to edit an order in
|
|
5124
5127
|
* @param {string} type 'market' or 'limit'
|
|
@@ -5154,6 +5157,7 @@ class bitmart extends bitmart$1 {
|
|
|
5154
5157
|
const isTakeProfit = takeProfitPrice !== undefined;
|
|
5155
5158
|
const isPresetStopLoss = presetStopLoss !== undefined;
|
|
5156
5159
|
const isPresetTakeProfit = presetTakeProfit !== undefined;
|
|
5160
|
+
const isLimitOrder = (type === 'limit');
|
|
5157
5161
|
const request = {
|
|
5158
5162
|
'symbol': market['id'],
|
|
5159
5163
|
};
|
|
@@ -5229,8 +5233,18 @@ class bitmart extends bitmart$1 {
|
|
|
5229
5233
|
// }
|
|
5230
5234
|
//
|
|
5231
5235
|
}
|
|
5236
|
+
else if (isLimitOrder) {
|
|
5237
|
+
request['order_id'] = this.parseToInt(id); // reparse id as int this endpoint is the only one requiring it
|
|
5238
|
+
if (amount !== undefined) {
|
|
5239
|
+
request['size'] = this.amountToPrecision(symbol, amount);
|
|
5240
|
+
}
|
|
5241
|
+
if (price !== undefined) {
|
|
5242
|
+
request['price'] = this.priceToPrecision(symbol, price);
|
|
5243
|
+
}
|
|
5244
|
+
response = await this.privatePostContractPrivateModifyLimitOrder(this.extend(request, params));
|
|
5245
|
+
}
|
|
5232
5246
|
else {
|
|
5233
|
-
throw new errors.NotSupported(this.id + ' editOrder() only supports trigger, stop loss and take profit orders');
|
|
5247
|
+
throw new errors.NotSupported(this.id + ' editOrder() only supports limit, trigger, stop loss and take profit orders');
|
|
5234
5248
|
}
|
|
5235
5249
|
const data = this.safeDict(response, 'data', {});
|
|
5236
5250
|
return this.parseOrder(data, market);
|
package/dist/cjs/src/bitopro.js
CHANGED
package/dist/cjs/src/bitrue.js
CHANGED
|
@@ -36,6 +36,7 @@ class bitrue extends bitrue$1 {
|
|
|
36
36
|
'createMarketOrderWithCost': false,
|
|
37
37
|
'createMarketSellOrderWithCost': false,
|
|
38
38
|
'createOrder': true,
|
|
39
|
+
'createReduceOnlyOrder': true,
|
|
39
40
|
'createStopLimitOrder': true,
|
|
40
41
|
'createStopMarketOrder': true,
|
|
41
42
|
'createStopOrder': true,
|
package/dist/cjs/src/bybit.js
CHANGED
|
@@ -249,6 +249,8 @@ class bybit extends bybit$1 {
|
|
|
249
249
|
// institutional lending
|
|
250
250
|
'v5/ins-loan/product-infos': 5,
|
|
251
251
|
'v5/ins-loan/ensure-tokens-convert': 5,
|
|
252
|
+
// earn
|
|
253
|
+
'v5/earn/product': 5,
|
|
252
254
|
},
|
|
253
255
|
},
|
|
254
256
|
'private': {
|
|
@@ -407,6 +409,9 @@ class bybit extends bybit$1 {
|
|
|
407
409
|
'v5/broker/earnings-info': 5,
|
|
408
410
|
'v5/broker/account-info': 5,
|
|
409
411
|
'v5/broker/asset/query-sub-member-deposit-record': 10,
|
|
412
|
+
// earn
|
|
413
|
+
'v5/earn/order': 5,
|
|
414
|
+
'v5/earn/position': 5,
|
|
410
415
|
},
|
|
411
416
|
'post': {
|
|
412
417
|
// spot
|
|
@@ -542,6 +547,8 @@ class bybit extends bybit$1 {
|
|
|
542
547
|
'v5/broker/award/info': 5,
|
|
543
548
|
'v5/broker/award/distribute-award': 5,
|
|
544
549
|
'v5/broker/award/distribution-record': 5,
|
|
550
|
+
// earn
|
|
551
|
+
'v5/earn/place-order': 5,
|
|
545
552
|
},
|
|
546
553
|
},
|
|
547
554
|
},
|
package/dist/cjs/src/cex.js
CHANGED
package/dist/cjs/src/coinbase.js
CHANGED
|
@@ -325,6 +325,7 @@ class coinbase extends coinbase$1 {
|
|
|
325
325
|
'INSUFFICIENT_FUND': errors.BadRequest,
|
|
326
326
|
'PERMISSION_DENIED': errors.PermissionDenied,
|
|
327
327
|
'INVALID_ARGUMENT': errors.BadRequest,
|
|
328
|
+
'PREVIEW_STOP_PRICE_ABOVE_LAST_TRADE_PRICE': errors.InvalidOrder,
|
|
328
329
|
},
|
|
329
330
|
'broad': {
|
|
330
331
|
'request timestamp expired': errors.InvalidNonce,
|
|
@@ -5083,20 +5084,39 @@ class coinbase extends coinbase$1 {
|
|
|
5083
5084
|
// ]
|
|
5084
5085
|
// }
|
|
5085
5086
|
// or
|
|
5086
|
-
//
|
|
5087
|
+
// {
|
|
5088
|
+
// "success": false,
|
|
5089
|
+
// "error_response": {
|
|
5087
5090
|
// "error": "UNKNOWN_FAILURE_REASON",
|
|
5088
5091
|
// "message": "",
|
|
5089
5092
|
// "error_details": "",
|
|
5090
|
-
// "preview_failure_reason": "
|
|
5091
|
-
//
|
|
5093
|
+
// "preview_failure_reason": "PREVIEW_STOP_PRICE_ABOVE_LAST_TRADE_PRICE"
|
|
5094
|
+
// },
|
|
5095
|
+
// "order_configuration": {
|
|
5096
|
+
// "stop_limit_stop_limit_gtc": {
|
|
5097
|
+
// "base_size": "0.0001",
|
|
5098
|
+
// "limit_price": "2000",
|
|
5099
|
+
// "stop_price": "2005",
|
|
5100
|
+
// "stop_direction": "STOP_DIRECTION_STOP_DOWN",
|
|
5101
|
+
// "reduce_only": false
|
|
5102
|
+
// }
|
|
5103
|
+
// }
|
|
5104
|
+
// }
|
|
5092
5105
|
//
|
|
5093
5106
|
let errorCode = this.safeString(response, 'error');
|
|
5094
5107
|
if (errorCode !== undefined) {
|
|
5095
|
-
const errorMessage = this.safeString2(response, 'error_description', '
|
|
5108
|
+
const errorMessage = this.safeString2(response, 'error_description', 'error');
|
|
5096
5109
|
this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
|
|
5097
5110
|
this.throwBroadlyMatchedException(this.exceptions['broad'], errorMessage, feedback);
|
|
5098
5111
|
throw new errors.ExchangeError(feedback);
|
|
5099
5112
|
}
|
|
5113
|
+
const errorResponse = this.safeDict(response, 'error_response');
|
|
5114
|
+
if (errorResponse !== undefined) {
|
|
5115
|
+
const errorMessageInner = this.safeString2(errorResponse, 'preview_failure_reason', 'preview_failure_reason');
|
|
5116
|
+
this.throwExactlyMatchedException(this.exceptions['exact'], errorMessageInner, feedback);
|
|
5117
|
+
this.throwBroadlyMatchedException(this.exceptions['broad'], errorMessageInner, feedback);
|
|
5118
|
+
throw new errors.ExchangeError(feedback);
|
|
5119
|
+
}
|
|
5100
5120
|
const errors$1 = this.safeList(response, 'errors');
|
|
5101
5121
|
if (errors$1 !== undefined) {
|
|
5102
5122
|
if (Array.isArray(errors$1)) {
|
|
@@ -32,6 +32,7 @@ class coinbaseexchange extends coinbaseexchange$1 {
|
|
|
32
32
|
'cancelOrder': true,
|
|
33
33
|
'createDepositAddress': true,
|
|
34
34
|
'createOrder': true,
|
|
35
|
+
'createReduceOnlyOrder': false,
|
|
35
36
|
'createStopLimitOrder': true,
|
|
36
37
|
'createStopMarketOrder': true,
|
|
37
38
|
'createStopOrder': true,
|
package/dist/cjs/src/deribit.js
CHANGED
package/dist/cjs/src/hashkey.js
CHANGED
|
@@ -2444,8 +2444,10 @@ class hashkey extends hashkey$1 {
|
|
|
2444
2444
|
if (!market['spot']) {
|
|
2445
2445
|
throw new errors.NotSupported(this.id + ' createMarketBuyOrderWithCost() is supported for spot markets only');
|
|
2446
2446
|
}
|
|
2447
|
-
|
|
2448
|
-
|
|
2447
|
+
const req = {
|
|
2448
|
+
'cost': cost,
|
|
2449
|
+
};
|
|
2450
|
+
return await this.createOrder(symbol, 'market', 'buy', cost, undefined, this.extend(req, params));
|
|
2449
2451
|
}
|
|
2450
2452
|
/**
|
|
2451
2453
|
* @method
|
|
@@ -1810,12 +1810,13 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
1810
1810
|
const isTrigger = (stopLossPrice || takeProfitPrice);
|
|
1811
1811
|
const reduceOnly = this.safeBool(orderParams, 'reduceOnly', false);
|
|
1812
1812
|
orderParams = this.omit(orderParams, ['slippage', 'timeInForce', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice', 'clientOrderId', 'client_id', 'postOnly', 'reduceOnly']);
|
|
1813
|
-
let px =
|
|
1813
|
+
let px = this.numberToString(price);
|
|
1814
1814
|
if (isMarket) {
|
|
1815
|
-
px = (isBuy) ? Precise["default"].stringMul(
|
|
1815
|
+
px = (isBuy) ? Precise["default"].stringMul(px, Precise["default"].stringAdd('1', slippage)) : Precise["default"].stringMul(px, Precise["default"].stringSub('1', slippage));
|
|
1816
|
+
px = this.priceToPrecision(symbol, px);
|
|
1816
1817
|
}
|
|
1817
1818
|
else {
|
|
1818
|
-
px = this.priceToPrecision(symbol,
|
|
1819
|
+
px = this.priceToPrecision(symbol, px);
|
|
1819
1820
|
}
|
|
1820
1821
|
const sz = this.amountToPrecision(symbol, amount);
|
|
1821
1822
|
const orderType = {};
|
|
@@ -2327,6 +2328,11 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
2327
2328
|
}
|
|
2328
2329
|
const totalAmount = this.safeString2(entry, 'origSz', 'totalSz');
|
|
2329
2330
|
const remaining = this.safeString(entry, 'sz');
|
|
2331
|
+
const tif = this.safeStringUpper(entry, 'tif');
|
|
2332
|
+
let postOnly = undefined;
|
|
2333
|
+
if (tif !== undefined) {
|
|
2334
|
+
postOnly = (tif === 'ALO');
|
|
2335
|
+
}
|
|
2330
2336
|
return this.safeOrder({
|
|
2331
2337
|
'info': order,
|
|
2332
2338
|
'id': this.safeString(entry, 'oid'),
|
|
@@ -2337,8 +2343,8 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
2337
2343
|
'lastUpdateTimestamp': this.safeInteger(order, 'statusTimestamp'),
|
|
2338
2344
|
'symbol': symbol,
|
|
2339
2345
|
'type': this.parseOrderType(this.safeStringLower(entry, 'orderType')),
|
|
2340
|
-
'timeInForce':
|
|
2341
|
-
'postOnly':
|
|
2346
|
+
'timeInForce': tif,
|
|
2347
|
+
'postOnly': postOnly,
|
|
2342
2348
|
'reduceOnly': this.safeBool(entry, 'reduceOnly'),
|
|
2343
2349
|
'side': side,
|
|
2344
2350
|
'price': this.safeString(entry, 'limitPx'),
|
|
@@ -2460,6 +2466,11 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
2460
2466
|
side = (side === 'A') ? 'sell' : 'buy';
|
|
2461
2467
|
}
|
|
2462
2468
|
const fee = this.safeString(trade, 'fee');
|
|
2469
|
+
let takerOrMaker = undefined;
|
|
2470
|
+
const crossed = this.safeBool(trade, 'crossed');
|
|
2471
|
+
if (crossed !== undefined) {
|
|
2472
|
+
takerOrMaker = crossed ? 'taker' : 'maker';
|
|
2473
|
+
}
|
|
2463
2474
|
return this.safeTrade({
|
|
2464
2475
|
'info': trade,
|
|
2465
2476
|
'timestamp': timestamp,
|
|
@@ -2469,7 +2480,7 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
2469
2480
|
'order': this.safeString(trade, 'oid'),
|
|
2470
2481
|
'type': undefined,
|
|
2471
2482
|
'side': side,
|
|
2472
|
-
'takerOrMaker':
|
|
2483
|
+
'takerOrMaker': takerOrMaker,
|
|
2473
2484
|
'price': price,
|
|
2474
2485
|
'amount': amount,
|
|
2475
2486
|
'cost': undefined,
|
|
@@ -3043,7 +3054,7 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
3043
3054
|
'tagTo': undefined,
|
|
3044
3055
|
'tagFrom': undefined,
|
|
3045
3056
|
'type': undefined,
|
|
3046
|
-
'amount': this.
|
|
3057
|
+
'amount': this.safeNumber(delta, 'usdc'),
|
|
3047
3058
|
'currency': undefined,
|
|
3048
3059
|
'status': this.safeString(transaction, 'status'),
|
|
3049
3060
|
'updated': undefined,
|
package/dist/cjs/src/kraken.js
CHANGED
|
@@ -225,13 +225,13 @@ class kraken extends kraken$1 {
|
|
|
225
225
|
},
|
|
226
226
|
},
|
|
227
227
|
'commonCurrencies': {
|
|
228
|
+
// about X & Z prefixes and .S & .M suffixes, see comment under fetchCurrencies
|
|
228
229
|
'LUNA': 'LUNC',
|
|
229
230
|
'LUNA2': 'LUNA',
|
|
230
231
|
'REPV2': 'REP',
|
|
231
232
|
'REP': 'REPV1',
|
|
232
233
|
'UST': 'USTC',
|
|
233
234
|
'XBT': 'BTC',
|
|
234
|
-
'XBT.M': 'BTC.M',
|
|
235
235
|
'XDG': 'DOGE',
|
|
236
236
|
},
|
|
237
237
|
'options': {
|
|
@@ -771,9 +771,48 @@ class kraken extends kraken$1 {
|
|
|
771
771
|
// {
|
|
772
772
|
// "error": [],
|
|
773
773
|
// "result": {
|
|
774
|
-
// "
|
|
774
|
+
// "ATOM": {
|
|
775
775
|
// "aclass": "currency",
|
|
776
|
-
// "altname": "
|
|
776
|
+
// "altname": "ATOM",
|
|
777
|
+
// "collateral_value": "0.7",
|
|
778
|
+
// "decimals": 8,
|
|
779
|
+
// "display_decimals": 6,
|
|
780
|
+
// "margin_rate": 0.02,
|
|
781
|
+
// "status": "enabled",
|
|
782
|
+
// },
|
|
783
|
+
// "ATOM.S": {
|
|
784
|
+
// "aclass": "currency",
|
|
785
|
+
// "altname": "ATOM.S",
|
|
786
|
+
// "decimals": 8,
|
|
787
|
+
// "display_decimals": 6,
|
|
788
|
+
// "status": "enabled",
|
|
789
|
+
// },
|
|
790
|
+
// "XXBT": {
|
|
791
|
+
// "aclass": "currency",
|
|
792
|
+
// "altname": "XBT",
|
|
793
|
+
// "decimals": 10,
|
|
794
|
+
// "display_decimals": 5,
|
|
795
|
+
// "margin_rate": 0.01,
|
|
796
|
+
// "status": "enabled",
|
|
797
|
+
// },
|
|
798
|
+
// "XETH": {
|
|
799
|
+
// "aclass": "currency",
|
|
800
|
+
// "altname": "ETH",
|
|
801
|
+
// "decimals": 10,
|
|
802
|
+
// "display_decimals": 5
|
|
803
|
+
// "margin_rate": 0.02,
|
|
804
|
+
// "status": "enabled",
|
|
805
|
+
// },
|
|
806
|
+
// "XBT.M": {
|
|
807
|
+
// "aclass": "currency",
|
|
808
|
+
// "altname": "XBT.M",
|
|
809
|
+
// "decimals": 10,
|
|
810
|
+
// "display_decimals": 5
|
|
811
|
+
// "status": "enabled",
|
|
812
|
+
// },
|
|
813
|
+
// "ETH.M": {
|
|
814
|
+
// "aclass": "currency",
|
|
815
|
+
// "altname": "ETH.M",
|
|
777
816
|
// "decimals": 10,
|
|
778
817
|
// "display_decimals": 5
|
|
779
818
|
// "status": "enabled",
|
|
@@ -792,7 +831,30 @@ class kraken extends kraken$1 {
|
|
|
792
831
|
// see: https://support.kraken.com/hc/en-us/articles/201893608-What-are-the-withdrawal-fees-
|
|
793
832
|
// to add support for multiple withdrawal/deposit methods and
|
|
794
833
|
// differentiated fees for each particular method
|
|
795
|
-
|
|
834
|
+
//
|
|
835
|
+
// Notes about abbreviations:
|
|
836
|
+
// Z and X prefixes: https://support.kraken.com/hc/en-us/articles/360001206766-Bitcoin-currency-code-XBT-vs-BTC
|
|
837
|
+
// S and M suffixes: https://support.kraken.com/hc/en-us/articles/360039879471-What-is-Asset-S-and-Asset-M-
|
|
838
|
+
//
|
|
839
|
+
let code = this.safeCurrencyCode(id);
|
|
840
|
+
// the below can not be reliable done in `safeCurrencyCode`, so we have to do it here
|
|
841
|
+
if (id.indexOf('.') < 0) {
|
|
842
|
+
const altName = this.safeString(currency, 'altname');
|
|
843
|
+
// handle cases like below:
|
|
844
|
+
//
|
|
845
|
+
// id | altname
|
|
846
|
+
// ---------------
|
|
847
|
+
// XXBT | XBT
|
|
848
|
+
// ZUSD | USD
|
|
849
|
+
if (id !== altName && (id.startsWith('X') || id.startsWith('Z'))) {
|
|
850
|
+
code = this.safeCurrencyCode(altName);
|
|
851
|
+
// also, add map in commonCurrencies:
|
|
852
|
+
this.commonCurrencies[id] = code;
|
|
853
|
+
}
|
|
854
|
+
else {
|
|
855
|
+
code = this.safeCurrencyCode(id);
|
|
856
|
+
}
|
|
857
|
+
}
|
|
796
858
|
const precision = this.parseNumber(this.parsePrecision(this.safeString(currency, 'decimals')));
|
|
797
859
|
// assumes all currencies are active except those listed above
|
|
798
860
|
const active = this.safeString(currency, 'status') === 'enabled';
|
|
@@ -821,6 +883,19 @@ class kraken extends kraken$1 {
|
|
|
821
883
|
}
|
|
822
884
|
return result;
|
|
823
885
|
}
|
|
886
|
+
safeCurrencyCode(currencyId, currency = undefined) {
|
|
887
|
+
if (currencyId === undefined) {
|
|
888
|
+
return currencyId;
|
|
889
|
+
}
|
|
890
|
+
if (currencyId.indexOf('.') > 0) {
|
|
891
|
+
// if ID contains .M, .S or .F, then it can't contain X or Z prefix. in such case, ID equals to ALTNAME
|
|
892
|
+
const parts = currencyId.split('.');
|
|
893
|
+
const firstPart = this.safeString(parts, 0);
|
|
894
|
+
const secondPart = this.safeString(parts, 1);
|
|
895
|
+
return super.safeCurrencyCode(firstPart, currency) + '.' + secondPart;
|
|
896
|
+
}
|
|
897
|
+
return super.safeCurrencyCode(currencyId, currency);
|
|
898
|
+
}
|
|
824
899
|
/**
|
|
825
900
|
* @method
|
|
826
901
|
* @name kraken#fetchTradingFee
|
|
@@ -1517,8 +1592,10 @@ class kraken extends kraken$1 {
|
|
|
1517
1592
|
async createMarketOrderWithCost(symbol, side, cost, params = {}) {
|
|
1518
1593
|
await this.loadMarkets();
|
|
1519
1594
|
// only buy orders are supported by the endpoint
|
|
1520
|
-
|
|
1521
|
-
|
|
1595
|
+
const req = {
|
|
1596
|
+
'cost': cost,
|
|
1597
|
+
};
|
|
1598
|
+
return await this.createOrder(symbol, 'market', side, cost, undefined, this.extend(req, params));
|
|
1522
1599
|
}
|
|
1523
1600
|
/**
|
|
1524
1601
|
* @method
|
package/dist/cjs/src/kucoin.js
CHANGED
|
@@ -2299,8 +2299,10 @@ class kucoin extends kucoin$1 {
|
|
|
2299
2299
|
*/
|
|
2300
2300
|
async createMarketOrderWithCost(symbol, side, cost, params = {}) {
|
|
2301
2301
|
await this.loadMarkets();
|
|
2302
|
-
|
|
2303
|
-
|
|
2302
|
+
const req = {
|
|
2303
|
+
'cost': cost,
|
|
2304
|
+
};
|
|
2305
|
+
return await this.createOrder(symbol, 'market', side, cost, undefined, this.extend(req, params));
|
|
2304
2306
|
}
|
|
2305
2307
|
/**
|
|
2306
2308
|
* @method
|
package/dist/cjs/src/mexc.js
CHANGED
|
@@ -2257,8 +2257,10 @@ class mexc extends mexc$1 {
|
|
|
2257
2257
|
if (!market['spot']) {
|
|
2258
2258
|
throw new errors.NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
|
|
2259
2259
|
}
|
|
2260
|
-
|
|
2261
|
-
|
|
2260
|
+
const req = {
|
|
2261
|
+
'cost': cost,
|
|
2262
|
+
};
|
|
2263
|
+
return await this.createOrder(symbol, 'market', 'buy', 0, undefined, this.extend(req, params));
|
|
2262
2264
|
}
|
|
2263
2265
|
/**
|
|
2264
2266
|
* @method
|
|
@@ -2276,8 +2278,10 @@ class mexc extends mexc$1 {
|
|
|
2276
2278
|
if (!market['spot']) {
|
|
2277
2279
|
throw new errors.NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
|
|
2278
2280
|
}
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
+
const req = {
|
|
2282
|
+
'cost': cost,
|
|
2283
|
+
};
|
|
2284
|
+
return await this.createOrder(symbol, 'market', 'sell', 0, undefined, this.extend(req, params));
|
|
2281
2285
|
}
|
|
2282
2286
|
/**
|
|
2283
2287
|
* @method
|
package/dist/cjs/src/okx.js
CHANGED
|
@@ -307,7 +307,9 @@ class okx extends okx$1 {
|
|
|
307
307
|
'trade/easy-convert-currency-list': 20,
|
|
308
308
|
'trade/easy-convert-history': 20,
|
|
309
309
|
'trade/one-click-repay-currency-list': 20,
|
|
310
|
+
'trade/one-click-repay-currency-list-v2': 20,
|
|
310
311
|
'trade/one-click-repay-history': 20,
|
|
312
|
+
'trade/one-click-repay-history-v2': 20,
|
|
311
313
|
'trade/account-rate-limit': 1,
|
|
312
314
|
// asset
|
|
313
315
|
'asset/currencies': 5 / 3,
|
|
@@ -464,6 +466,7 @@ class okx extends okx$1 {
|
|
|
464
466
|
'trade/cancel-advance-algos': 1,
|
|
465
467
|
'trade/easy-convert': 20,
|
|
466
468
|
'trade/one-click-repay': 20,
|
|
469
|
+
'trade/one-click-repay-v2': 20,
|
|
467
470
|
'trade/mass-cancel': 4,
|
|
468
471
|
'trade/cancel-all-after': 10,
|
|
469
472
|
// asset
|
|
@@ -984,71 +987,64 @@ class okx extends okx$1 {
|
|
|
984
987
|
'networks': {
|
|
985
988
|
'BTC': 'Bitcoin',
|
|
986
989
|
'BTCLN': 'Lightning',
|
|
990
|
+
'BTCLIGHTNING': 'Lightning',
|
|
987
991
|
'BEP20': 'BSC',
|
|
992
|
+
'BRC20': 'BRC20',
|
|
988
993
|
'ERC20': 'ERC20',
|
|
989
994
|
'TRC20': 'TRC20',
|
|
990
995
|
'CRC20': 'Crypto',
|
|
991
|
-
// sorted
|
|
992
996
|
'ACA': 'Acala',
|
|
993
997
|
'ALGO': 'Algorand',
|
|
994
|
-
'BHP': 'BHP',
|
|
995
998
|
'APT': 'Aptos',
|
|
999
|
+
'SCROLL': 'Scroll',
|
|
996
1000
|
'ARBONE': 'Arbitrum One',
|
|
997
1001
|
'AVAXC': 'Avalanche C-Chain',
|
|
998
1002
|
'AVAXX': 'Avalanche X-Chain',
|
|
999
|
-
'
|
|
1003
|
+
'BASE': 'Base',
|
|
1004
|
+
'SUI': 'SUI',
|
|
1005
|
+
'ZKSYNCERA': 'zkSync Era',
|
|
1006
|
+
'LINEA': 'Linea',
|
|
1000
1007
|
'AR': 'Arweave',
|
|
1001
1008
|
'ASTR': 'Astar',
|
|
1002
1009
|
'BCH': 'BitcoinCash',
|
|
1003
1010
|
'BSV': 'Bitcoin SV',
|
|
1004
|
-
'BTM': 'Bytom',
|
|
1005
1011
|
'ADA': 'Cardano',
|
|
1006
1012
|
'CSPR': 'Casper',
|
|
1007
1013
|
'CELO': 'CELO',
|
|
1008
1014
|
'XCH': 'Chia',
|
|
1009
|
-
'CHZ': 'Chiliz',
|
|
1015
|
+
// 'CHZ': 'Chiliz', TBD: Chiliz 2.0 Chain vs Chiliz Chain
|
|
1010
1016
|
'ATOM': 'Cosmos',
|
|
1011
|
-
'TRUE': 'TrueChain',
|
|
1012
|
-
'DCR': 'Decred',
|
|
1013
1017
|
'DGB': 'Digibyte',
|
|
1014
1018
|
'DOGE': 'Dogecoin',
|
|
1015
|
-
'XEC': 'XEC',
|
|
1016
1019
|
'EGLD': 'Elrond',
|
|
1020
|
+
'CFX': 'Conflux',
|
|
1017
1021
|
'EOS': 'EOS',
|
|
1022
|
+
'CORE': 'CORE',
|
|
1018
1023
|
'ETC': 'Ethereum Classic',
|
|
1019
1024
|
'ETHW': 'EthereumPow',
|
|
1020
|
-
'FTM': 'Fantom',
|
|
1025
|
+
// 'FTM': 'Fantom', 'Sonic' TBD
|
|
1021
1026
|
'FIL': 'Filecoin',
|
|
1022
|
-
'FLOW': 'FLOW',
|
|
1023
|
-
'FSN': 'Fusion',
|
|
1024
1027
|
'ONE': 'Harmony',
|
|
1025
1028
|
'HBAR': 'Hedera',
|
|
1026
|
-
'HNT': 'Helium',
|
|
1027
|
-
'ZEN': 'Horizen',
|
|
1028
1029
|
'ICX': 'ICON',
|
|
1029
1030
|
'ICP': 'Dfinity',
|
|
1030
1031
|
'IOST': 'IOST',
|
|
1031
1032
|
'IOTA': 'MIOTA',
|
|
1032
|
-
'KDA': 'Kadena',
|
|
1033
|
-
'KAR': 'KAR',
|
|
1034
1033
|
'KLAY': 'Klaytn',
|
|
1035
1034
|
'KSM': 'Kusama',
|
|
1036
1035
|
'LSK': 'Lisk',
|
|
1037
1036
|
'LTC': 'Litecoin',
|
|
1038
1037
|
'METIS': 'Metis',
|
|
1039
1038
|
'MINA': 'Mina',
|
|
1040
|
-
'XMR': 'Monero',
|
|
1041
1039
|
'GLRM': 'Moonbeam',
|
|
1042
1040
|
'MOVR': 'Moonriver',
|
|
1043
1041
|
'NANO': 'Nano',
|
|
1044
1042
|
'NEAR': 'NEAR',
|
|
1045
|
-
'NAS': 'Nebulas',
|
|
1046
|
-
'NEM': 'New Economy Movement',
|
|
1047
1043
|
'NULS': 'NULS',
|
|
1048
1044
|
'OASYS': 'OASYS',
|
|
1049
|
-
'OKC': 'OKC',
|
|
1050
1045
|
'ONT': 'Ontology',
|
|
1051
1046
|
'OPTIMISM': 'Optimism',
|
|
1047
|
+
// 'OP': 'Optimism', or Optimism (V2), TBD
|
|
1052
1048
|
'LAT': 'PlatON',
|
|
1053
1049
|
'DOT': 'Polkadot',
|
|
1054
1050
|
'MATIC': 'Polygon',
|
|
@@ -1061,35 +1057,54 @@ class okx extends okx$1 {
|
|
|
1061
1057
|
'XTZ': 'Tezos',
|
|
1062
1058
|
'TON': 'TON',
|
|
1063
1059
|
'THETA': 'Theta',
|
|
1064
|
-
'VSYS': 'VSYSTEMS',
|
|
1065
|
-
'WAVES': 'WAVES',
|
|
1066
1060
|
'WAX': 'Wax',
|
|
1067
|
-
'ZEC': 'Zcash',
|
|
1068
1061
|
'ZIL': 'Zilliqa',
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
//
|
|
1072
|
-
//
|
|
1073
|
-
//
|
|
1074
|
-
//
|
|
1075
|
-
//
|
|
1076
|
-
//
|
|
1077
|
-
//
|
|
1078
|
-
//
|
|
1079
|
-
//
|
|
1080
|
-
//
|
|
1081
|
-
//
|
|
1082
|
-
//
|
|
1083
|
-
//
|
|
1084
|
-
//
|
|
1085
|
-
//
|
|
1086
|
-
//
|
|
1087
|
-
//
|
|
1088
|
-
//
|
|
1089
|
-
//
|
|
1090
|
-
//
|
|
1091
|
-
//
|
|
1092
|
-
//
|
|
1062
|
+
// non-supported known network: CRP. KAVA, TAIKO, BOB, GNO, BLAST, RSK, SEI, MANTLE, HYPE, RUNE, OSMO, XIN, WEMIX, HT, FSN, NEO, TLOS, CANTO, SCRT, AURORA, XMR
|
|
1063
|
+
// others:
|
|
1064
|
+
// "OKTC",
|
|
1065
|
+
// "X Layer",
|
|
1066
|
+
// "Polygon (Bridged)",
|
|
1067
|
+
// "BTCK-OKTC",
|
|
1068
|
+
// "ETHK-OKTC",
|
|
1069
|
+
// "Starknet",
|
|
1070
|
+
// "LTCK-OKTC",
|
|
1071
|
+
// "XRPK-OKTC",
|
|
1072
|
+
// "BCHK-OKTC",
|
|
1073
|
+
// "ETCK-OKTC",
|
|
1074
|
+
// "Endurance Smart Chain",
|
|
1075
|
+
// "Berachain",
|
|
1076
|
+
// "CELO-TOKEN",
|
|
1077
|
+
// "CFX_EVM",
|
|
1078
|
+
// "Cortex",
|
|
1079
|
+
// "DAIK-OKTC",
|
|
1080
|
+
// "Dora Vota Mainnet",
|
|
1081
|
+
// "DOTK-OKTC",
|
|
1082
|
+
// "DYDX",
|
|
1083
|
+
// "AELF",
|
|
1084
|
+
// "Enjin Relay Chain",
|
|
1085
|
+
// "FEVM",
|
|
1086
|
+
// "FILK-OKTC",
|
|
1087
|
+
// "Flare",
|
|
1088
|
+
// "Gravity Alpha Mainnet",
|
|
1089
|
+
// "INJ",
|
|
1090
|
+
// "Story",
|
|
1091
|
+
// "LINKK-OKTC",
|
|
1092
|
+
// "Terra",
|
|
1093
|
+
// "Terra Classic",
|
|
1094
|
+
// "Terra Classic (USTC)",
|
|
1095
|
+
// "MERLIN Network",
|
|
1096
|
+
// "Layer 3",
|
|
1097
|
+
// "PI",
|
|
1098
|
+
// "Ronin",
|
|
1099
|
+
// "Quantum",
|
|
1100
|
+
// "SHIBK-OKTC",
|
|
1101
|
+
// "SUSHIK-OKTC",
|
|
1102
|
+
// "Celestia",
|
|
1103
|
+
// "TRXK-OKTC",
|
|
1104
|
+
// "UNIK-OKTC",
|
|
1105
|
+
// "Venom",
|
|
1106
|
+
// "WBTCK-OKTC",
|
|
1107
|
+
// "ZetaChain",
|
|
1093
1108
|
},
|
|
1094
1109
|
'fetchOpenInterestHistory': {
|
|
1095
1110
|
'timeframes': {
|
|
@@ -3159,6 +3174,7 @@ class okx extends okx$1 {
|
|
|
3159
3174
|
* @param {string} [params.trailingPercent] the percent to trail away from the current market price
|
|
3160
3175
|
* @param {string} [params.tpOrdKind] 'condition' or 'limit', the default is 'condition'
|
|
3161
3176
|
* @param {bool} [params.hedged] *swap and future only* true for hedged mode, false for one way mode
|
|
3177
|
+
* @param {string} [params.marginMode] 'cross' or 'isolated', the default is 'cross'
|
|
3162
3178
|
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
3163
3179
|
*/
|
|
3164
3180
|
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|