ccxt 4.0.106 → 4.0.107

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/js/src/binance.js CHANGED
@@ -37,7 +37,7 @@ export default class binance extends Exchange {
37
37
  'borrowMargin': true,
38
38
  'cancelAllOrders': true,
39
39
  'cancelOrder': true,
40
- 'cancelOrders': undefined,
40
+ 'cancelOrders': true,
41
41
  'createDepositAddress': false,
42
42
  'createOrder': true,
43
43
  'createPostOnlyOrder': true,
@@ -4999,6 +4999,75 @@ export default class binance extends Exchange {
4999
4999
  return response;
5000
5000
  }
5001
5001
  }
5002
+ async cancelOrders(ids, symbol = undefined, params = {}) {
5003
+ /**
5004
+ * @method
5005
+ * @name binance#cancelOrders
5006
+ * @description cancel multiple orders
5007
+ * @see https://binance-docs.github.io/apidocs/futures/en/#cancel-multiple-orders-trade
5008
+ * @param {[string]} ids order ids
5009
+ * @param {string} [symbol] unified market symbol
5010
+ * @param {object} [params] extra parameters specific to the bingx api endpoint
5011
+ *
5012
+ * EXCHANGE SPECIFIC PARAMETERS
5013
+ * @param {[string]} [params.origClientOrderIdList] max length 10 e.g. ["my_id_1","my_id_2"], encode the double quotes. No space after comma
5014
+ * @param {[int]} [params.recvWindow]
5015
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5016
+ */
5017
+ this.checkRequiredSymbol('cancelOrders', symbol);
5018
+ await this.loadMarkets();
5019
+ const market = this.market(symbol);
5020
+ if (!market['contract']) {
5021
+ throw new BadRequest(this.id + ' cancelOrders is only supported for swap markets.');
5022
+ }
5023
+ const request = {
5024
+ 'symbol': market['id'],
5025
+ 'orderidlist': ids,
5026
+ };
5027
+ let response = undefined;
5028
+ if (market['linear']) {
5029
+ response = await this.fapiPrivateDeleteBatchOrders(this.extend(request, params));
5030
+ }
5031
+ else if (market['inverse']) {
5032
+ response = await this.dapiPrivateDeleteBatchOrders(this.extend(request, params));
5033
+ }
5034
+ //
5035
+ // [
5036
+ // {
5037
+ // "clientOrderId": "myOrder1",
5038
+ // "cumQty": "0",
5039
+ // "cumQuote": "0",
5040
+ // "executedQty": "0",
5041
+ // "orderId": 283194212,
5042
+ // "origQty": "11",
5043
+ // "origType": "TRAILING_STOP_MARKET",
5044
+ // "price": "0",
5045
+ // "reduceOnly": false,
5046
+ // "side": "BUY",
5047
+ // "positionSide": "SHORT",
5048
+ // "status": "CANCELED",
5049
+ // "stopPrice": "9300", // please ignore when order type is TRAILING_STOP_MARKET
5050
+ // "closePosition": false, // if Close-All
5051
+ // "symbol": "BTCUSDT",
5052
+ // "timeInForce": "GTC",
5053
+ // "type": "TRAILING_STOP_MARKET",
5054
+ // "activatePrice": "9020", // activation price, only return with TRAILING_STOP_MARKET order
5055
+ // "priceRate": "0.3", // callback rate, only return with TRAILING_STOP_MARKET order
5056
+ // "updateTime": 1571110484038,
5057
+ // "workingType": "CONTRACT_PRICE",
5058
+ // "priceProtect": false, // if conditional order trigger is protected
5059
+ // "priceMatch": "NONE", // price match mode
5060
+ // "selfTradePreventionMode": "NONE", // self trading preventation mode
5061
+ // "goodTillDate": 0 // order pre-set auot cancel time for TIF GTD order
5062
+ // },
5063
+ // {
5064
+ // "code": -2011,
5065
+ // "msg": "Unknown order sent."
5066
+ // }
5067
+ // ]
5068
+ //
5069
+ return this.parseOrders(response, market);
5070
+ }
5002
5071
  async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
5003
5072
  /**
5004
5073
  * @method
@@ -8172,7 +8241,7 @@ export default class binance extends Exchange {
8172
8241
  }
8173
8242
  let query = undefined;
8174
8243
  const defaultRecvWindow = this.safeInteger(this.options, 'recvWindow');
8175
- const extendedParams = this.extend({
8244
+ let extendedParams = this.extend({
8176
8245
  'timestamp': this.nonce(),
8177
8246
  }, params);
8178
8247
  if (defaultRecvWindow !== undefined) {
@@ -8186,7 +8255,23 @@ export default class binance extends Exchange {
8186
8255
  query = this.urlencodeWithArrayRepeat(extendedParams);
8187
8256
  }
8188
8257
  else if ((path === 'batchOrders') || (path.indexOf('sub-account') >= 0) || (path === 'capital/withdraw/apply') || (path.indexOf('staking') >= 0)) {
8189
- query = this.rawencode(extendedParams);
8258
+ if ((method === 'DELETE') && (path === 'batchOrders')) {
8259
+ const orderidlist = this.safeValue(extendedParams, 'orderidlist', []);
8260
+ const origclientorderidlist = this.safeValue(extendedParams, 'origclientorderidlist', []);
8261
+ extendedParams = this.omit(extendedParams, ['orderidlist', 'origclientorderidlist']);
8262
+ query = this.rawencode(extendedParams);
8263
+ const orderidlistLength = orderidlist.length;
8264
+ const origclientorderidlistLength = orderidlist.length;
8265
+ if (orderidlistLength > 0) {
8266
+ query = query + '&orderidlist=[' + orderidlist.join(',') + ']';
8267
+ }
8268
+ if (origclientorderidlistLength > 0) {
8269
+ query = query + '&origclientorderidlist=[' + origclientorderidlist.join(',') + ']';
8270
+ }
8271
+ }
8272
+ else {
8273
+ query = this.rawencode(extendedParams);
8274
+ }
8190
8275
  }
8191
8276
  else {
8192
8277
  query = this.urlencode(extendedParams);
@@ -8291,6 +8376,17 @@ export default class binance extends Exchange {
8291
8376
  if (!success) {
8292
8377
  throw new ExchangeError(this.id + ' ' + body);
8293
8378
  }
8379
+ if (Array.isArray(response)) {
8380
+ // cancelOrders returns an array like this: [{"code":-2011,"msg":"Unknown order sent."}]
8381
+ const numElements = response.length;
8382
+ if (numElements > 0) {
8383
+ const firstElement = response[0];
8384
+ const error = this.safeString(firstElement, 'code');
8385
+ if (error !== undefined) {
8386
+ this.throwExactlyMatchedException(this.exceptions['exact'], error, this.id + ' ' + body);
8387
+ }
8388
+ }
8389
+ }
8294
8390
  return undefined;
8295
8391
  }
8296
8392
  calculateRateLimiterCost(api, method, path, params, config = {}) {
@@ -73,6 +73,7 @@ export default class bitmart extends Exchange {
73
73
  taker: number;
74
74
  }>;
75
75
  parseOrder(order: any, market?: any): import("./base/types.js").Order;
76
+ parseOrderSide(side: any): string;
76
77
  parseOrderStatusByType(type: any, status: any): string;
77
78
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): Promise<any>;
78
79
  cancelOrder(id: string, symbol?: string, params?: {}): Promise<any>;