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