ccxt 4.3.4 → 4.3.6
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/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +299 -6
- package/dist/cjs/src/binance.js +24 -17
- package/dist/cjs/src/bingx.js +45 -0
- package/dist/cjs/src/bitmex.js +24 -0
- package/dist/cjs/src/bybit.js +86 -0
- package/dist/cjs/src/coinbase.js +5 -4
- package/dist/cjs/src/coinex.js +30 -32
- package/dist/cjs/src/cryptocom.js +32 -0
- package/dist/cjs/src/htx.js +28 -0
- package/dist/cjs/src/hyperliquid.js +40 -0
- package/dist/cjs/src/kraken.js +30 -0
- package/dist/cjs/src/krakenfutures.js +28 -0
- package/dist/cjs/src/kucoin.js +53 -3
- package/dist/cjs/src/kucoinfutures.js +2 -2
- package/dist/cjs/src/okx.js +113 -0
- package/dist/cjs/src/pro/binance.js +439 -75
- package/dist/cjs/src/pro/bitget.js +1 -1
- package/dist/cjs/src/pro/woo.js +0 -1
- package/dist/cjs/src/whitebit.js +174 -2
- package/dist/cjs/src/woo.js +29 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/binance.d.ts +1 -0
- package/js/src/abstract/binancecoinm.d.ts +1 -0
- package/js/src/abstract/binanceus.d.ts +1 -0
- package/js/src/abstract/binanceusdm.d.ts +1 -0
- package/js/src/abstract/bingx.d.ts +1 -0
- package/js/src/abstract/whitebit.d.ts +21 -0
- package/js/src/abstract/woo.d.ts +1 -0
- package/js/src/base/Exchange.d.ts +52 -3
- package/js/src/base/Exchange.js +299 -6
- package/js/src/binance.d.ts +4 -0
- package/js/src/binance.js +24 -17
- package/js/src/bingx.d.ts +1 -0
- package/js/src/bingx.js +45 -0
- package/js/src/bitmex.d.ts +1 -0
- package/js/src/bitmex.js +24 -0
- package/js/src/bybit.d.ts +2 -1
- package/js/src/bybit.js +86 -0
- package/js/src/coinbase.js +5 -4
- package/js/src/coinex.js +30 -32
- package/js/src/cryptocom.d.ts +2 -1
- package/js/src/cryptocom.js +32 -0
- package/js/src/htx.d.ts +1 -0
- package/js/src/htx.js +28 -0
- package/js/src/hyperliquid.d.ts +1 -0
- package/js/src/hyperliquid.js +40 -0
- package/js/src/kraken.d.ts +1 -0
- package/js/src/kraken.js +30 -0
- package/js/src/krakenfutures.d.ts +1 -0
- package/js/src/krakenfutures.js +28 -0
- package/js/src/kucoin.d.ts +1 -0
- package/js/src/kucoin.js +53 -3
- package/js/src/kucoinfutures.js +2 -2
- package/js/src/okx.d.ts +3 -1
- package/js/src/okx.js +113 -0
- package/js/src/pro/binance.d.ts +9 -1
- package/js/src/pro/binance.js +439 -75
- package/js/src/pro/bitget.d.ts +1 -1
- package/js/src/pro/bitget.js +1 -1
- package/js/src/pro/cex.d.ts +1 -1
- package/js/src/pro/lbank.d.ts +1 -1
- package/js/src/pro/woo.js +0 -1
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
- package/js/src/whitebit.d.ts +3 -0
- package/js/src/whitebit.js +174 -2
- package/js/src/woo.d.ts +2 -1
- package/js/src/woo.js +29 -0
- package/package.json +1 -1
package/dist/cjs/src/bingx.js
CHANGED
|
@@ -32,6 +32,7 @@ class bingx extends bingx$1 {
|
|
|
32
32
|
'option': false,
|
|
33
33
|
'addMargin': true,
|
|
34
34
|
'cancelAllOrders': true,
|
|
35
|
+
'cancelAllOrdersAfter': true,
|
|
35
36
|
'cancelOrder': true,
|
|
36
37
|
'cancelOrders': true,
|
|
37
38
|
'closeAllPositions': true,
|
|
@@ -228,6 +229,7 @@ class bingx extends bingx$1 {
|
|
|
228
229
|
'trade/order': 3,
|
|
229
230
|
'trade/batchOrders': 3,
|
|
230
231
|
'trade/closeAllPositions': 3,
|
|
232
|
+
'trade/cancelAllAfter': 3,
|
|
231
233
|
'trade/marginType': 3,
|
|
232
234
|
'trade/leverage': 3,
|
|
233
235
|
'trade/positionMargin': 3,
|
|
@@ -2749,6 +2751,49 @@ class bingx extends bingx$1 {
|
|
|
2749
2751
|
//
|
|
2750
2752
|
return response;
|
|
2751
2753
|
}
|
|
2754
|
+
async cancelAllOrdersAfter(timeout, params = {}) {
|
|
2755
|
+
/**
|
|
2756
|
+
* @method
|
|
2757
|
+
* @name bingx#cancelAllOrdersAfter
|
|
2758
|
+
* @description dead man's switch, cancel all orders after the given timeout
|
|
2759
|
+
* @see https://bingx-api.github.io/docs/#/en-us/spot/trade-api.html#Cancel%20all%20orders%20in%20countdown
|
|
2760
|
+
* @see https://bingx-api.github.io/docs/#/en-us/swapV2/trade-api.html#Cancel%20all%20orders%20in%20countdown
|
|
2761
|
+
* @param {number} timeout time in milliseconds, 0 represents cancel the timer
|
|
2762
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2763
|
+
* @param {string} [params.type] spot or swap market
|
|
2764
|
+
* @returns {object} the api result
|
|
2765
|
+
*/
|
|
2766
|
+
await this.loadMarkets();
|
|
2767
|
+
const isActive = (timeout > 0);
|
|
2768
|
+
const request = {
|
|
2769
|
+
'type': (isActive) ? 'ACTIVATE' : 'CLOSE',
|
|
2770
|
+
'timeOut': (isActive) ? (this.parseToInt(timeout / 1000)) : 0,
|
|
2771
|
+
};
|
|
2772
|
+
let response = undefined;
|
|
2773
|
+
let type = undefined;
|
|
2774
|
+
[type, params] = this.handleMarketTypeAndParams('cancelAllOrdersAfter', undefined, params);
|
|
2775
|
+
if (type === 'spot') {
|
|
2776
|
+
response = await this.spotV1PrivatePostTradeCancelAllAfter(this.extend(request, params));
|
|
2777
|
+
}
|
|
2778
|
+
else if (type === 'swap') {
|
|
2779
|
+
response = await this.swapV2PrivatePostTradeCancelAllAfter(this.extend(request, params));
|
|
2780
|
+
}
|
|
2781
|
+
else {
|
|
2782
|
+
throw new errors.NotSupported(this.id + ' cancelAllOrdersAfter() is not supported for ' + type + ' markets');
|
|
2783
|
+
}
|
|
2784
|
+
//
|
|
2785
|
+
// {
|
|
2786
|
+
// code: '0',
|
|
2787
|
+
// msg: '',
|
|
2788
|
+
// data: {
|
|
2789
|
+
// triggerTime: '1712645434',
|
|
2790
|
+
// status: 'ACTIVATED',
|
|
2791
|
+
// note: 'All your perpetual pending orders will be closed automatically at 2024-04-09 06:50:34 UTC(+0),before that you can cancel the timer, or extend triggerTime time by this request'
|
|
2792
|
+
// }
|
|
2793
|
+
// }
|
|
2794
|
+
//
|
|
2795
|
+
return response;
|
|
2796
|
+
}
|
|
2752
2797
|
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
2753
2798
|
/**
|
|
2754
2799
|
* @method
|
package/dist/cjs/src/bitmex.js
CHANGED
|
@@ -36,6 +36,7 @@ class bitmex extends bitmex$1 {
|
|
|
36
36
|
'option': false,
|
|
37
37
|
'addMargin': undefined,
|
|
38
38
|
'cancelAllOrders': true,
|
|
39
|
+
'cancelAllOrdersAfter': true,
|
|
39
40
|
'cancelOrder': true,
|
|
40
41
|
'cancelOrders': true,
|
|
41
42
|
'closeAllPositions': false,
|
|
@@ -2116,6 +2117,29 @@ class bitmex extends bitmex$1 {
|
|
|
2116
2117
|
//
|
|
2117
2118
|
return this.parseOrders(response, market);
|
|
2118
2119
|
}
|
|
2120
|
+
async cancelAllOrdersAfter(timeout, params = {}) {
|
|
2121
|
+
/**
|
|
2122
|
+
* @method
|
|
2123
|
+
* @name bitmex#cancelAllOrdersAfter
|
|
2124
|
+
* @description dead man's switch, cancel all orders after the given timeout
|
|
2125
|
+
* @see https://www.bitmex.com/api/explorer/#!/Order/Order_cancelAllAfter
|
|
2126
|
+
* @param {number} timeout time in milliseconds, 0 represents cancel the timer
|
|
2127
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2128
|
+
* @returns {object} the api result
|
|
2129
|
+
*/
|
|
2130
|
+
await this.loadMarkets();
|
|
2131
|
+
const request = {
|
|
2132
|
+
'timeout': (timeout > 0) ? this.parseToInt(timeout / 1000) : 0,
|
|
2133
|
+
};
|
|
2134
|
+
const response = await this.privatePostOrderCancelAllAfter(this.extend(request, params));
|
|
2135
|
+
//
|
|
2136
|
+
// {
|
|
2137
|
+
// now: '2024-04-09T09:01:56.560Z',
|
|
2138
|
+
// cancelTime: '2024-04-09T09:01:56.660Z'
|
|
2139
|
+
// }
|
|
2140
|
+
//
|
|
2141
|
+
return response;
|
|
2142
|
+
}
|
|
2119
2143
|
async fetchLeverages(symbols = undefined, params = {}) {
|
|
2120
2144
|
/**
|
|
2121
2145
|
* @method
|
package/dist/cjs/src/bybit.js
CHANGED
|
@@ -35,6 +35,8 @@ class bybit extends bybit$1 {
|
|
|
35
35
|
'borrowCrossMargin': true,
|
|
36
36
|
'cancelAllOrders': true,
|
|
37
37
|
'cancelOrder': true,
|
|
38
|
+
'cancelOrders': true,
|
|
39
|
+
'cancelOrdersForSymbols': true,
|
|
38
40
|
'closeAllPositions': false,
|
|
39
41
|
'closePosition': false,
|
|
40
42
|
'createMarketBuyOrderWithCost': true,
|
|
@@ -4382,6 +4384,90 @@ class bybit extends bybit$1 {
|
|
|
4382
4384
|
const row = this.safeList(result, 'list', []);
|
|
4383
4385
|
return this.parseOrders(row, market);
|
|
4384
4386
|
}
|
|
4387
|
+
async cancelOrdersForSymbols(orders, params = {}) {
|
|
4388
|
+
/**
|
|
4389
|
+
* @method
|
|
4390
|
+
* @name bybit#cancelOrdersForSymbols
|
|
4391
|
+
* @description cancel multiple orders for multiple symbols
|
|
4392
|
+
* @see https://bybit-exchange.github.io/docs/v5/order/batch-cancel
|
|
4393
|
+
* @param {string[]} ids order ids
|
|
4394
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
4395
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
4396
|
+
* @param {string[]} [params.clientOrderIds] client order ids
|
|
4397
|
+
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
4398
|
+
*/
|
|
4399
|
+
await this.loadMarkets();
|
|
4400
|
+
const ordersRequests = [];
|
|
4401
|
+
let category = undefined;
|
|
4402
|
+
for (let i = 0; i < orders.length; i++) {
|
|
4403
|
+
const order = orders[i];
|
|
4404
|
+
const symbol = this.safeString(order, 'symbol');
|
|
4405
|
+
const market = this.market(symbol);
|
|
4406
|
+
let currentCategory = undefined;
|
|
4407
|
+
[currentCategory, params] = this.getBybitType('cancelOrders', market, params);
|
|
4408
|
+
if (currentCategory === 'inverse') {
|
|
4409
|
+
throw new errors.NotSupported(this.id + ' cancelOrdersForSymbols does not allow inverse orders');
|
|
4410
|
+
}
|
|
4411
|
+
if ((category !== undefined) && (category !== currentCategory)) {
|
|
4412
|
+
throw new errors.ExchangeError(this.id + ' cancelOrdersForSymbols requires all orders to be of the same category (linear, spot or option))');
|
|
4413
|
+
}
|
|
4414
|
+
category = currentCategory;
|
|
4415
|
+
const id = this.safeString(order, 'id');
|
|
4416
|
+
const clientOrderId = this.safeString(order, 'clientOrderId');
|
|
4417
|
+
let idKey = 'orderId';
|
|
4418
|
+
if (clientOrderId !== undefined) {
|
|
4419
|
+
idKey = 'orderLinkId';
|
|
4420
|
+
}
|
|
4421
|
+
const orderItem = {
|
|
4422
|
+
'symbol': market['id'],
|
|
4423
|
+
};
|
|
4424
|
+
orderItem[idKey] = (idKey === 'orderId') ? id : clientOrderId;
|
|
4425
|
+
ordersRequests.push(orderItem);
|
|
4426
|
+
}
|
|
4427
|
+
const request = {
|
|
4428
|
+
'category': category,
|
|
4429
|
+
'request': ordersRequests,
|
|
4430
|
+
};
|
|
4431
|
+
const response = await this.privatePostV5OrderCancelBatch(this.extend(request, params));
|
|
4432
|
+
//
|
|
4433
|
+
// {
|
|
4434
|
+
// "retCode": "0",
|
|
4435
|
+
// "retMsg": "OK",
|
|
4436
|
+
// "result": {
|
|
4437
|
+
// "list": [
|
|
4438
|
+
// {
|
|
4439
|
+
// "category": "spot",
|
|
4440
|
+
// "symbol": "BTCUSDT",
|
|
4441
|
+
// "orderId": "1636282505818800896",
|
|
4442
|
+
// "orderLinkId": "1636282505818800897"
|
|
4443
|
+
// },
|
|
4444
|
+
// {
|
|
4445
|
+
// "category": "spot",
|
|
4446
|
+
// "symbol": "BTCUSDT",
|
|
4447
|
+
// "orderId": "1636282505818800898",
|
|
4448
|
+
// "orderLinkId": "1636282505818800899"
|
|
4449
|
+
// }
|
|
4450
|
+
// ]
|
|
4451
|
+
// },
|
|
4452
|
+
// "retExtInfo": {
|
|
4453
|
+
// "list": [
|
|
4454
|
+
// {
|
|
4455
|
+
// "code": "0",
|
|
4456
|
+
// "msg": "OK"
|
|
4457
|
+
// },
|
|
4458
|
+
// {
|
|
4459
|
+
// "code": "0",
|
|
4460
|
+
// "msg": "OK"
|
|
4461
|
+
// }
|
|
4462
|
+
// ]
|
|
4463
|
+
// },
|
|
4464
|
+
// "time": "1709796158501"
|
|
4465
|
+
// }
|
|
4466
|
+
//
|
|
4467
|
+
const result = this.safeDict(response, 'result', {});
|
|
4468
|
+
const row = this.safeList(result, 'list', []);
|
|
4469
|
+
return this.parseOrders(row, undefined);
|
|
4470
|
+
}
|
|
4385
4471
|
async cancelAllUsdcOrders(symbol = undefined, params = {}) {
|
|
4386
4472
|
if (symbol === undefined) {
|
|
4387
4473
|
throw new errors.ArgumentsRequired(this.id + ' cancelAllUsdcOrders() requires a symbol argument');
|
package/dist/cjs/src/coinbase.js
CHANGED
|
@@ -3428,12 +3428,13 @@ class coinbase extends coinbase$1 {
|
|
|
3428
3428
|
sinceString = Precise["default"].stringSub(now, requestedDuration.toString());
|
|
3429
3429
|
}
|
|
3430
3430
|
request['start'] = sinceString;
|
|
3431
|
-
|
|
3432
|
-
|
|
3431
|
+
if (until !== undefined) {
|
|
3432
|
+
request['end'] = this.numberToString(this.parseToInt(until / 1000));
|
|
3433
|
+
}
|
|
3434
|
+
else {
|
|
3433
3435
|
// 300 candles max
|
|
3434
|
-
|
|
3436
|
+
request['end'] = Precise["default"].stringAdd(sinceString, requestedDuration.toString());
|
|
3435
3437
|
}
|
|
3436
|
-
request['end'] = endString;
|
|
3437
3438
|
const response = await this.v3PrivateGetBrokerageProductsProductIdCandles(this.extend(request, params));
|
|
3438
3439
|
//
|
|
3439
3440
|
// {
|
package/dist/cjs/src/coinex.js
CHANGED
|
@@ -1129,14 +1129,13 @@ class coinex extends coinex$1 {
|
|
|
1129
1129
|
//
|
|
1130
1130
|
// Spot and Swap fetchTrades (public)
|
|
1131
1131
|
//
|
|
1132
|
-
//
|
|
1133
|
-
//
|
|
1134
|
-
//
|
|
1135
|
-
//
|
|
1136
|
-
//
|
|
1137
|
-
//
|
|
1138
|
-
//
|
|
1139
|
-
// },
|
|
1132
|
+
// {
|
|
1133
|
+
// "amount": "0.00049432",
|
|
1134
|
+
// "created_at": 1713849825667,
|
|
1135
|
+
// "deal_id": 4137517302,
|
|
1136
|
+
// "price": "66251",
|
|
1137
|
+
// "side": "buy"
|
|
1138
|
+
// }
|
|
1140
1139
|
//
|
|
1141
1140
|
// Spot and Margin fetchMyTrades (private)
|
|
1142
1141
|
//
|
|
@@ -1190,9 +1189,9 @@ class coinex extends coinex$1 {
|
|
|
1190
1189
|
//
|
|
1191
1190
|
let timestamp = this.safeTimestamp2(trade, 'create_time', 'time');
|
|
1192
1191
|
if (timestamp === undefined) {
|
|
1193
|
-
timestamp = this.safeInteger(trade, '
|
|
1192
|
+
timestamp = this.safeInteger(trade, 'created_at');
|
|
1194
1193
|
}
|
|
1195
|
-
const tradeId = this.
|
|
1194
|
+
const tradeId = this.safeString2(trade, 'id', 'deal_id');
|
|
1196
1195
|
const orderId = this.safeString(trade, 'order_id');
|
|
1197
1196
|
const priceString = this.safeString(trade, 'price');
|
|
1198
1197
|
const amountString = this.safeString(trade, 'amount');
|
|
@@ -1229,11 +1228,11 @@ class coinex extends coinex$1 {
|
|
|
1229
1228
|
side = 'buy';
|
|
1230
1229
|
}
|
|
1231
1230
|
if (side === undefined) {
|
|
1232
|
-
side = this.
|
|
1231
|
+
side = this.safeString2(trade, 'type', 'side');
|
|
1233
1232
|
}
|
|
1234
1233
|
}
|
|
1235
1234
|
else {
|
|
1236
|
-
side = this.
|
|
1235
|
+
side = this.safeString2(trade, 'type', 'side');
|
|
1237
1236
|
}
|
|
1238
1237
|
return this.safeTrade({
|
|
1239
1238
|
'info': trade,
|
|
@@ -1255,9 +1254,9 @@ class coinex extends coinex$1 {
|
|
|
1255
1254
|
/**
|
|
1256
1255
|
* @method
|
|
1257
1256
|
* @name coinex#fetchTrades
|
|
1258
|
-
* @description get the list of most recent trades for a particular symbol
|
|
1259
|
-
* @see https://
|
|
1260
|
-
* @see https://
|
|
1257
|
+
* @description get the list of the most recent trades for a particular symbol
|
|
1258
|
+
* @see https://docs.coinex.com/api/v2/spot/market/http/list-market-deals
|
|
1259
|
+
* @see https://docs.coinex.com/api/v2/futures/market/http/list-market-deals
|
|
1261
1260
|
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
1262
1261
|
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
1263
1262
|
* @param {int} [limit] the maximum amount of trades to fetch
|
|
@@ -1275,28 +1274,27 @@ class coinex extends coinex$1 {
|
|
|
1275
1274
|
}
|
|
1276
1275
|
let response = undefined;
|
|
1277
1276
|
if (market['swap']) {
|
|
1278
|
-
response = await this.
|
|
1277
|
+
response = await this.v2PublicGetFuturesDeals(this.extend(request, params));
|
|
1279
1278
|
}
|
|
1280
1279
|
else {
|
|
1281
|
-
response = await this.
|
|
1280
|
+
response = await this.v2PublicGetSpotDeals(this.extend(request, params));
|
|
1282
1281
|
}
|
|
1283
1282
|
//
|
|
1284
1283
|
// Spot and Swap
|
|
1285
1284
|
//
|
|
1286
|
-
//
|
|
1287
|
-
//
|
|
1288
|
-
//
|
|
1289
|
-
//
|
|
1290
|
-
//
|
|
1291
|
-
//
|
|
1292
|
-
//
|
|
1293
|
-
//
|
|
1294
|
-
//
|
|
1295
|
-
//
|
|
1296
|
-
//
|
|
1297
|
-
//
|
|
1298
|
-
//
|
|
1299
|
-
// }
|
|
1285
|
+
// {
|
|
1286
|
+
// "code": 0,
|
|
1287
|
+
// "data": [
|
|
1288
|
+
// {
|
|
1289
|
+
// "amount": "0.00049432",
|
|
1290
|
+
// "created_at": 1713849825667,
|
|
1291
|
+
// "deal_id": 4137517302,
|
|
1292
|
+
// "price": "66251",
|
|
1293
|
+
// "side": "buy"
|
|
1294
|
+
// },
|
|
1295
|
+
// ],
|
|
1296
|
+
// "message": "OK"
|
|
1297
|
+
// }
|
|
1300
1298
|
//
|
|
1301
1299
|
return this.parseTrades(response['data'], market, since, limit);
|
|
1302
1300
|
}
|
|
@@ -4484,7 +4482,7 @@ class coinex extends coinex$1 {
|
|
|
4484
4482
|
}
|
|
4485
4483
|
async fetchFundingRates(symbols = undefined, params = {}) {
|
|
4486
4484
|
/**
|
|
4487
|
-
*
|
|
4485
|
+
* @method
|
|
4488
4486
|
* @name coinex#fetchFundingRates
|
|
4489
4487
|
* @description fetch the current funding rates
|
|
4490
4488
|
* @see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http009_market_ticker_all
|
|
@@ -32,6 +32,7 @@ class cryptocom extends cryptocom$1 {
|
|
|
32
32
|
'cancelAllOrders': true,
|
|
33
33
|
'cancelOrder': true,
|
|
34
34
|
'cancelOrders': true,
|
|
35
|
+
'cancelOrdersForSymbols': true,
|
|
35
36
|
'closeAllPositions': false,
|
|
36
37
|
'closePosition': true,
|
|
37
38
|
'createMarketBuyOrderWithCost': false,
|
|
@@ -1464,6 +1465,37 @@ class cryptocom extends cryptocom$1 {
|
|
|
1464
1465
|
const result = this.safeList(response, 'result', []);
|
|
1465
1466
|
return this.parseOrders(result, market, undefined, undefined, params);
|
|
1466
1467
|
}
|
|
1468
|
+
async cancelOrdersForSymbols(orders, params = {}) {
|
|
1469
|
+
/**
|
|
1470
|
+
* @method
|
|
1471
|
+
* @name cryptocom#cancelOrdersForSymbols
|
|
1472
|
+
* @description cancel multiple orders for multiple symbols
|
|
1473
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-order-list-list
|
|
1474
|
+
* @param {CancellationRequest[]} orders each order should contain the parameters required by cancelOrder namely id and symbol
|
|
1475
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1476
|
+
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1477
|
+
*/
|
|
1478
|
+
await this.loadMarkets();
|
|
1479
|
+
const orderRequests = [];
|
|
1480
|
+
for (let i = 0; i < orders.length; i++) {
|
|
1481
|
+
const order = orders[i];
|
|
1482
|
+
const id = this.safeString(order, 'id');
|
|
1483
|
+
const symbol = this.safeString(order, 'symbol');
|
|
1484
|
+
const market = this.market(symbol);
|
|
1485
|
+
const orderItem = {
|
|
1486
|
+
'instrument_name': market['id'],
|
|
1487
|
+
'order_id': id.toString(),
|
|
1488
|
+
};
|
|
1489
|
+
orderRequests.push(orderItem);
|
|
1490
|
+
}
|
|
1491
|
+
const request = {
|
|
1492
|
+
'contingency_type': 'LIST',
|
|
1493
|
+
'order_list': orderRequests,
|
|
1494
|
+
};
|
|
1495
|
+
const response = await this.v1PrivatePostPrivateCancelOrderList(this.extend(request, params));
|
|
1496
|
+
const result = this.safeList(response, 'result', []);
|
|
1497
|
+
return this.parseOrders(result, undefined, undefined, undefined, params);
|
|
1498
|
+
}
|
|
1467
1499
|
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1468
1500
|
/**
|
|
1469
1501
|
* @method
|
package/dist/cjs/src/htx.js
CHANGED
|
@@ -35,6 +35,7 @@ class htx extends htx$1 {
|
|
|
35
35
|
'borrowCrossMargin': true,
|
|
36
36
|
'borrowIsolatedMargin': true,
|
|
37
37
|
'cancelAllOrders': true,
|
|
38
|
+
'cancelAllOrdersAfter': true,
|
|
38
39
|
'cancelOrder': true,
|
|
39
40
|
'cancelOrders': true,
|
|
40
41
|
'createDepositAddress': undefined,
|
|
@@ -6163,6 +6164,33 @@ class htx extends htx$1 {
|
|
|
6163
6164
|
//
|
|
6164
6165
|
return response;
|
|
6165
6166
|
}
|
|
6167
|
+
async cancelAllOrdersAfter(timeout, params = {}) {
|
|
6168
|
+
/**
|
|
6169
|
+
* @method
|
|
6170
|
+
* @name huobi#cancelAllOrdersAfter
|
|
6171
|
+
* @description dead man's switch, cancel all orders after the given timeout
|
|
6172
|
+
* @see https://huobiapi.github.io/docs/spot/v1/en/#dead-man-s-switch
|
|
6173
|
+
* @param {number} timeout time in milliseconds, 0 represents cancel the timer
|
|
6174
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
6175
|
+
* @returns {object} the api result
|
|
6176
|
+
*/
|
|
6177
|
+
await this.loadMarkets();
|
|
6178
|
+
const request = {
|
|
6179
|
+
'timeout': (timeout > 0) ? this.parseToInt(timeout / 1000) : 0,
|
|
6180
|
+
};
|
|
6181
|
+
const response = await this.v2PrivatePostAlgoOrdersCancelAllAfter(this.extend(request, params));
|
|
6182
|
+
//
|
|
6183
|
+
// {
|
|
6184
|
+
// "code": 200,
|
|
6185
|
+
// "message": "success",
|
|
6186
|
+
// "data": {
|
|
6187
|
+
// "currentTime": 1630491627230,
|
|
6188
|
+
// "triggerTime": 1630491637230
|
|
6189
|
+
// }
|
|
6190
|
+
// }
|
|
6191
|
+
//
|
|
6192
|
+
return response;
|
|
6193
|
+
}
|
|
6166
6194
|
parseDepositAddress(depositAddress, currency = undefined) {
|
|
6167
6195
|
//
|
|
6168
6196
|
// {
|
|
@@ -35,6 +35,7 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
35
35
|
'borrowCrossMargin': false,
|
|
36
36
|
'borrowIsolatedMargin': false,
|
|
37
37
|
'cancelAllOrders': false,
|
|
38
|
+
'cancelAllOrdersAfter': true,
|
|
38
39
|
'cancelOrder': true,
|
|
39
40
|
'cancelOrders': true,
|
|
40
41
|
'cancelOrdersForSymbols': true,
|
|
@@ -1361,6 +1362,45 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
1361
1362
|
//
|
|
1362
1363
|
return response;
|
|
1363
1364
|
}
|
|
1365
|
+
async cancelAllOrdersAfter(timeout, params = {}) {
|
|
1366
|
+
/**
|
|
1367
|
+
* @method
|
|
1368
|
+
* @name hyperliquid#cancelAllOrdersAfter
|
|
1369
|
+
* @description dead man's switch, cancel all orders after the given timeout
|
|
1370
|
+
* @param {number} timeout time in milliseconds, 0 represents cancel the timer
|
|
1371
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1372
|
+
* @param {string} [params.vaultAddress] the vault address
|
|
1373
|
+
* @returns {object} the api result
|
|
1374
|
+
*/
|
|
1375
|
+
this.checkRequiredCredentials();
|
|
1376
|
+
await this.loadMarkets();
|
|
1377
|
+
params = this.omit(params, ['clientOrderId', 'client_id']);
|
|
1378
|
+
const nonce = this.milliseconds();
|
|
1379
|
+
const request = {
|
|
1380
|
+
'nonce': nonce,
|
|
1381
|
+
// 'vaultAddress': vaultAddress,
|
|
1382
|
+
};
|
|
1383
|
+
const cancelAction = {
|
|
1384
|
+
'type': 'scheduleCancel',
|
|
1385
|
+
'time': nonce + timeout,
|
|
1386
|
+
};
|
|
1387
|
+
const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
|
|
1388
|
+
const signature = this.signL1Action(cancelAction, nonce, vaultAddress);
|
|
1389
|
+
request['action'] = cancelAction;
|
|
1390
|
+
request['signature'] = signature;
|
|
1391
|
+
if (vaultAddress !== undefined) {
|
|
1392
|
+
params = this.omit(params, 'vaultAddress');
|
|
1393
|
+
request['vaultAddress'] = vaultAddress;
|
|
1394
|
+
}
|
|
1395
|
+
const response = await this.privatePostExchange(this.extend(request, params));
|
|
1396
|
+
//
|
|
1397
|
+
// {
|
|
1398
|
+
// "status":"err",
|
|
1399
|
+
// "response":"Cannot set scheduled cancel time until enough volume traded. Required: $1000000. Traded: $373.47205."
|
|
1400
|
+
// }
|
|
1401
|
+
//
|
|
1402
|
+
return response;
|
|
1403
|
+
}
|
|
1364
1404
|
async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
|
|
1365
1405
|
/**
|
|
1366
1406
|
* @method
|
package/dist/cjs/src/kraken.js
CHANGED
|
@@ -36,6 +36,7 @@ class kraken extends kraken$1 {
|
|
|
36
36
|
'option': false,
|
|
37
37
|
'addMargin': false,
|
|
38
38
|
'cancelAllOrders': true,
|
|
39
|
+
'cancelAllOrdersAfter': true,
|
|
39
40
|
'cancelOrder': true,
|
|
40
41
|
'cancelOrders': true,
|
|
41
42
|
'createDepositAddress': true,
|
|
@@ -2136,6 +2137,35 @@ class kraken extends kraken$1 {
|
|
|
2136
2137
|
await this.loadMarkets();
|
|
2137
2138
|
return await this.privatePostCancelAll(params);
|
|
2138
2139
|
}
|
|
2140
|
+
async cancelAllOrdersAfter(timeout, params = {}) {
|
|
2141
|
+
/**
|
|
2142
|
+
* @method
|
|
2143
|
+
* @name kraken#cancelAllOrdersAfter
|
|
2144
|
+
* @description dead man's switch, cancel all orders after the given timeout
|
|
2145
|
+
* @see https://docs.kraken.com/rest/#tag/Spot-Trading/operation/cancelAllOrdersAfter
|
|
2146
|
+
* @param {number} timeout time in milliseconds, 0 represents cancel the timer
|
|
2147
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2148
|
+
* @returns {object} the api result
|
|
2149
|
+
*/
|
|
2150
|
+
if (timeout > 86400000) {
|
|
2151
|
+
throw new errors.BadRequest(this.id + 'cancelAllOrdersAfter timeout should be less than 86400000 milliseconds');
|
|
2152
|
+
}
|
|
2153
|
+
await this.loadMarkets();
|
|
2154
|
+
const request = {
|
|
2155
|
+
'timeout': (timeout > 0) ? (this.parseToInt(timeout / 1000)) : 0,
|
|
2156
|
+
};
|
|
2157
|
+
const response = await this.privatePostCancelAllOrdersAfter(this.extend(request, params));
|
|
2158
|
+
//
|
|
2159
|
+
// {
|
|
2160
|
+
// "error": [ ],
|
|
2161
|
+
// "result": {
|
|
2162
|
+
// "currentTime": "2023-03-24T17:41:56Z",
|
|
2163
|
+
// "triggerTime": "2023-03-24T17:42:56Z"
|
|
2164
|
+
// }
|
|
2165
|
+
// }
|
|
2166
|
+
//
|
|
2167
|
+
return response;
|
|
2168
|
+
}
|
|
2139
2169
|
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2140
2170
|
/**
|
|
2141
2171
|
* @method
|
|
@@ -31,6 +31,7 @@ class krakenfutures extends krakenfutures$1 {
|
|
|
31
31
|
'future': true,
|
|
32
32
|
'option': false,
|
|
33
33
|
'cancelAllOrders': true,
|
|
34
|
+
'cancelAllOrdersAfter': true,
|
|
34
35
|
'cancelOrder': true,
|
|
35
36
|
'cancelOrders': true,
|
|
36
37
|
'createMarketOrder': false,
|
|
@@ -1269,6 +1270,33 @@ class krakenfutures extends krakenfutures$1 {
|
|
|
1269
1270
|
const response = await this.privatePostCancelallorders(this.extend(request, params));
|
|
1270
1271
|
return response;
|
|
1271
1272
|
}
|
|
1273
|
+
async cancelAllOrdersAfter(timeout, params = {}) {
|
|
1274
|
+
/**
|
|
1275
|
+
* @method
|
|
1276
|
+
* @name krakenfutures#cancelAllOrdersAfter
|
|
1277
|
+
* @description dead man's switch, cancel all orders after the given timeout
|
|
1278
|
+
* @see https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-dead-man-39-s-switch
|
|
1279
|
+
* @param {number} timeout time in milliseconds, 0 represents cancel the timer
|
|
1280
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1281
|
+
* @returns {object} the api result
|
|
1282
|
+
*/
|
|
1283
|
+
await this.loadMarkets();
|
|
1284
|
+
const request = {
|
|
1285
|
+
'timeout': (timeout > 0) ? (this.parseToInt(timeout / 1000)) : 0,
|
|
1286
|
+
};
|
|
1287
|
+
const response = await this.privatePostCancelallordersafter(this.extend(request, params));
|
|
1288
|
+
//
|
|
1289
|
+
// {
|
|
1290
|
+
// "result": "success",
|
|
1291
|
+
// "serverTime": "2018-06-19T16:51:23.839Z",
|
|
1292
|
+
// "status": {
|
|
1293
|
+
// "currentTime": "2018-06-19T16:51:23.839Z",
|
|
1294
|
+
// "triggerTime": "0"
|
|
1295
|
+
// }
|
|
1296
|
+
// }
|
|
1297
|
+
//
|
|
1298
|
+
return response;
|
|
1299
|
+
}
|
|
1272
1300
|
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1273
1301
|
/**
|
|
1274
1302
|
* @method
|
package/dist/cjs/src/kucoin.js
CHANGED
|
@@ -1149,8 +1149,10 @@ class kucoin extends kucoin$1 {
|
|
|
1149
1149
|
// "chains":[
|
|
1150
1150
|
// {
|
|
1151
1151
|
// "chainName":"ERC20",
|
|
1152
|
-
// "
|
|
1152
|
+
// "chainId": "eth"
|
|
1153
1153
|
// "withdrawalMinSize":"2999",
|
|
1154
|
+
// "depositMinSize":null,
|
|
1155
|
+
// "withdrawFeeRate":"0",
|
|
1154
1156
|
// "withdrawalMinFee":"2999",
|
|
1155
1157
|
// "isWithdrawEnabled":false,
|
|
1156
1158
|
// "isDepositEnabled":false,
|
|
@@ -1258,7 +1260,7 @@ class kucoin extends kucoin$1 {
|
|
|
1258
1260
|
'max': undefined,
|
|
1259
1261
|
},
|
|
1260
1262
|
'deposit': {
|
|
1261
|
-
'min': this.safeNumber(
|
|
1263
|
+
'min': this.safeNumber(chain, 'depositMinSize'),
|
|
1262
1264
|
'max': undefined,
|
|
1263
1265
|
},
|
|
1264
1266
|
},
|
|
@@ -3201,7 +3203,6 @@ class kucoin extends kucoin$1 {
|
|
|
3201
3203
|
const request = {
|
|
3202
3204
|
'currency': currency['id'],
|
|
3203
3205
|
'address': address,
|
|
3204
|
-
'amount': amount,
|
|
3205
3206
|
// 'memo': tag,
|
|
3206
3207
|
// 'isInner': false, // internal transfer or external withdrawal
|
|
3207
3208
|
// 'remark': 'optional',
|
|
@@ -3215,6 +3216,8 @@ class kucoin extends kucoin$1 {
|
|
|
3215
3216
|
if (networkCode !== undefined) {
|
|
3216
3217
|
request['chain'] = this.networkCodeToId(networkCode).toLowerCase();
|
|
3217
3218
|
}
|
|
3219
|
+
await this.loadCurrencyPrecision(currency, networkCode);
|
|
3220
|
+
request['amount'] = this.currencyToPrecision(code, amount, networkCode);
|
|
3218
3221
|
let includeFee = undefined;
|
|
3219
3222
|
[includeFee, params] = this.handleOptionAndParams(params, 'withdraw', 'includeFee', false);
|
|
3220
3223
|
if (includeFee) {
|
|
@@ -3234,6 +3237,53 @@ class kucoin extends kucoin$1 {
|
|
|
3234
3237
|
const data = this.safeDict(response, 'data', {});
|
|
3235
3238
|
return this.parseTransaction(data, currency);
|
|
3236
3239
|
}
|
|
3240
|
+
async loadCurrencyPrecision(currency, networkCode = undefined) {
|
|
3241
|
+
// as kucoin might not have network specific precisions defined in fetchCurrencies (because of webapi failure)
|
|
3242
|
+
// we should check and refetch precision once-per-instance for that specific currency & network
|
|
3243
|
+
// so avoids thorwing exceptions and burden to users
|
|
3244
|
+
// Note: this needs to be executed only if networkCode was provided
|
|
3245
|
+
if (networkCode !== undefined) {
|
|
3246
|
+
const networks = currency['networks'];
|
|
3247
|
+
const network = this.safeDict(networks, networkCode);
|
|
3248
|
+
if (this.safeNumber(network, 'precision') !== undefined) {
|
|
3249
|
+
// if precision exists, no need to refetch
|
|
3250
|
+
return;
|
|
3251
|
+
}
|
|
3252
|
+
// otherwise try to fetch and store in instance
|
|
3253
|
+
const request = {
|
|
3254
|
+
'currency': currency['id'],
|
|
3255
|
+
'chain': this.networkCodeToId(networkCode).toLowerCase(),
|
|
3256
|
+
};
|
|
3257
|
+
const response = await this.privateGetWithdrawalsQuotas(request);
|
|
3258
|
+
//
|
|
3259
|
+
// {
|
|
3260
|
+
// "code": "200000",
|
|
3261
|
+
// "data": {
|
|
3262
|
+
// "currency": "USDT",
|
|
3263
|
+
// "limitBTCAmount": "14.24094850",
|
|
3264
|
+
// "usedBTCAmount": "0.00000000",
|
|
3265
|
+
// "quotaCurrency": "USDT",
|
|
3266
|
+
// "limitQuotaCurrencyAmount": "999999.00000000",
|
|
3267
|
+
// "usedQuotaCurrencyAmount": "0",
|
|
3268
|
+
// "remainAmount": "999999.0000",
|
|
3269
|
+
// "availableAmount": "10.77545071",
|
|
3270
|
+
// "withdrawMinFee": "1",
|
|
3271
|
+
// "innerWithdrawMinFee": "0",
|
|
3272
|
+
// "withdrawMinSize": "10",
|
|
3273
|
+
// "isWithdrawEnabled": true,
|
|
3274
|
+
// "precision": 4,
|
|
3275
|
+
// "chain": "EOS",
|
|
3276
|
+
// "reason": null,
|
|
3277
|
+
// "lockedAmount": "0"
|
|
3278
|
+
// }
|
|
3279
|
+
// }
|
|
3280
|
+
//
|
|
3281
|
+
const data = this.safeDict(response, 'data', {});
|
|
3282
|
+
const precision = this.parseNumber(this.parsePrecision(this.safeString(data, 'precision')));
|
|
3283
|
+
const code = currency['code'];
|
|
3284
|
+
this.currencies[code]['networks'][networkCode]['precision'] = precision;
|
|
3285
|
+
}
|
|
3286
|
+
}
|
|
3237
3287
|
parseTransactionStatus(status) {
|
|
3238
3288
|
const statuses = {
|
|
3239
3289
|
'SUCCESS': 'ok',
|