ccxt 4.1.95 → 4.1.96

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.
Files changed (54) hide show
  1. package/README.md +3 -3
  2. package/build.sh +16 -16
  3. package/dist/ccxt.browser.js +385 -251
  4. package/dist/ccxt.browser.min.js +2 -2
  5. package/dist/cjs/ccxt.js +1 -1
  6. package/dist/cjs/src/binance.js +145 -135
  7. package/dist/cjs/src/bingx.js +8 -7
  8. package/dist/cjs/src/bit2c.js +2 -3
  9. package/dist/cjs/src/bitfinex2.js +2 -3
  10. package/dist/cjs/src/bitmart.js +1 -1
  11. package/dist/cjs/src/btcbox.js +2 -3
  12. package/dist/cjs/src/coinbase.js +11 -5
  13. package/dist/cjs/src/cryptocom.js +2 -1
  14. package/dist/cjs/src/delta.js +25 -0
  15. package/dist/cjs/src/gate.js +2 -2
  16. package/dist/cjs/src/kraken.js +46 -45
  17. package/dist/cjs/src/krakenfutures.js +53 -26
  18. package/dist/cjs/src/kucoin.js +73 -3
  19. package/dist/cjs/src/kucoinfutures.js +1 -1
  20. package/dist/cjs/src/pro/binance.js +2 -3
  21. package/dist/cjs/src/pro/bitfinex.js +2 -3
  22. package/dist/cjs/src/pro/cex.js +1 -1
  23. package/dist/cjs/src/pro/gate.js +2 -2
  24. package/dist/cjs/src/pro/kraken.js +2 -3
  25. package/dist/cjs/src/pro/okx.js +1 -1
  26. package/dist/cjs/src/pro/woo.js +2 -3
  27. package/js/ccxt.d.ts +1 -1
  28. package/js/ccxt.js +1 -1
  29. package/js/src/abstract/kucoin.d.ts +12 -0
  30. package/js/src/abstract/kucoinfutures.d.ts +12 -1
  31. package/js/src/binance.js +145 -135
  32. package/js/src/bingx.js +8 -7
  33. package/js/src/bit2c.js +2 -3
  34. package/js/src/bitfinex2.js +2 -3
  35. package/js/src/bitmart.js +1 -1
  36. package/js/src/btcbox.js +2 -3
  37. package/js/src/coinbase.js +11 -5
  38. package/js/src/cryptocom.js +2 -1
  39. package/js/src/delta.d.ts +5 -4
  40. package/js/src/delta.js +25 -0
  41. package/js/src/gate.js +2 -2
  42. package/js/src/kraken.js +46 -45
  43. package/js/src/krakenfutures.js +53 -26
  44. package/js/src/kucoin.d.ts +3 -0
  45. package/js/src/kucoin.js +73 -3
  46. package/js/src/kucoinfutures.js +1 -1
  47. package/js/src/pro/binance.js +2 -3
  48. package/js/src/pro/bitfinex.js +2 -3
  49. package/js/src/pro/cex.js +1 -1
  50. package/js/src/pro/gate.js +2 -2
  51. package/js/src/pro/kraken.js +2 -3
  52. package/js/src/pro/okx.js +1 -1
  53. package/js/src/pro/woo.js +2 -3
  54. package/package.json +2 -2
package/js/src/binance.js CHANGED
@@ -2568,24 +2568,23 @@ export default class binance extends Exchange {
2568
2568
  let type = this.safeString(params, 'type', defaultType);
2569
2569
  let subType = undefined;
2570
2570
  [subType, params] = this.handleSubTypeAndParams('fetchBalance', undefined, params);
2571
- const [marginMode, query] = this.handleMarginModeAndParams('fetchBalance', params);
2572
- let method = 'privateGetAccount';
2571
+ let marginMode = undefined;
2572
+ let query = undefined;
2573
+ [marginMode, query] = this.handleMarginModeAndParams('fetchBalance', params);
2574
+ query = this.omit(query, 'type');
2575
+ let response = undefined;
2573
2576
  const request = {};
2574
2577
  if (this.isLinear(type, subType)) {
2575
- const options = this.safeValue(this.options, type, {});
2576
- const fetchBalanceOptions = this.safeValue(options, 'fetchBalance', {});
2577
- method = this.safeString(fetchBalanceOptions, 'method', 'fapiPrivateV2GetAccount');
2578
2578
  type = 'linear';
2579
+ response = await this.fapiPrivateV2GetAccount(this.extend(request, query));
2579
2580
  }
2580
2581
  else if (this.isInverse(type, subType)) {
2581
- const options = this.safeValue(this.options, type, {});
2582
- const fetchBalanceOptions = this.safeValue(options, 'fetchBalance', {});
2583
- method = this.safeString(fetchBalanceOptions, 'method', 'dapiPrivateGetAccount');
2584
2582
  type = 'inverse';
2583
+ response = await this.dapiPrivateGetAccount(this.extend(request, query));
2585
2584
  }
2586
2585
  else if (marginMode === 'isolated') {
2587
- method = 'sapiGetMarginIsolatedAccount';
2588
2586
  const paramSymbols = this.safeValue(params, 'symbols');
2587
+ query = this.omit(query, 'symbols');
2589
2588
  if (paramSymbols !== undefined) {
2590
2589
  let symbols = '';
2591
2590
  if (Array.isArray(paramSymbols)) {
@@ -2601,18 +2600,20 @@ export default class binance extends Exchange {
2601
2600
  }
2602
2601
  request['symbols'] = symbols;
2603
2602
  }
2603
+ response = await this.sapiGetMarginIsolatedAccount(this.extend(request, query));
2604
2604
  }
2605
2605
  else if ((type === 'margin') || (marginMode === 'cross')) {
2606
- method = 'sapiGetMarginAccount';
2606
+ response = await this.sapiGetMarginAccount(this.extend(request, query));
2607
2607
  }
2608
2608
  else if (type === 'savings') {
2609
- method = 'sapiGetLendingUnionAccount';
2609
+ response = await this.sapiGetLendingUnionAccount(this.extend(request, query));
2610
2610
  }
2611
2611
  else if (type === 'funding') {
2612
- method = 'sapiPostAssetGetFundingAsset';
2612
+ response = await this.sapiPostAssetGetFundingAsset(this.extend(request, query));
2613
+ }
2614
+ else {
2615
+ response = await this.privateGetAccount(this.extend(request, query));
2613
2616
  }
2614
- const requestParams = this.omit(query, ['type', 'symbols']);
2615
- const response = await this[method](this.extend(request, requestParams));
2616
2617
  //
2617
2618
  // spot
2618
2619
  //
@@ -3304,33 +3305,35 @@ export default class binance extends Exchange {
3304
3305
  if (until !== undefined) {
3305
3306
  request['endTime'] = until;
3306
3307
  }
3307
- let method = 'publicGetKlines';
3308
+ let response = undefined;
3308
3309
  if (market['option']) {
3309
- method = 'eapiPublicGetKlines';
3310
+ response = await this.eapiPublicGetKlines(this.extend(request, params));
3310
3311
  }
3311
3312
  else if (price === 'mark') {
3312
3313
  if (market['inverse']) {
3313
- method = 'dapiPublicGetMarkPriceKlines';
3314
+ response = await this.dapiPublicGetMarkPriceKlines(this.extend(request, params));
3314
3315
  }
3315
3316
  else {
3316
- method = 'fapiPublicGetMarkPriceKlines';
3317
+ response = await this.fapiPublicGetMarkPriceKlines(this.extend(request, params));
3317
3318
  }
3318
3319
  }
3319
3320
  else if (price === 'index') {
3320
3321
  if (market['inverse']) {
3321
- method = 'dapiPublicGetIndexPriceKlines';
3322
+ response = await this.dapiPublicGetIndexPriceKlines(this.extend(request, params));
3322
3323
  }
3323
3324
  else {
3324
- method = 'fapiPublicGetIndexPriceKlines';
3325
+ response = await this.fapiPublicGetIndexPriceKlines(this.extend(request, params));
3325
3326
  }
3326
3327
  }
3327
3328
  else if (market['linear']) {
3328
- method = 'fapiPublicGetKlines';
3329
+ response = await this.fapiPublicGetKlines(this.extend(request, params));
3329
3330
  }
3330
3331
  else if (market['inverse']) {
3331
- method = 'dapiPublicGetKlines';
3332
+ response = await this.dapiPublicGetKlines(this.extend(request, params));
3333
+ }
3334
+ else {
3335
+ response = await this.publicGetKlines(this.extend(request, params));
3332
3336
  }
3333
- const response = await this[method](this.extend(request, params));
3334
3337
  //
3335
3338
  // [
3336
3339
  // [1591478520000,"0.02501300","0.02501800","0.02500000","0.02500000","22.19000000",1591478579999,"0.55490906",40,"10.92900000","0.27336462","0"],
@@ -4746,22 +4749,6 @@ export default class binance extends Exchange {
4746
4749
  const request = {
4747
4750
  'symbol': market['id'],
4748
4751
  };
4749
- let method = 'privateGetOrder';
4750
- if (market['option']) {
4751
- method = 'eapiPrivateGetOrder';
4752
- }
4753
- else if (market['linear']) {
4754
- method = 'fapiPrivateGetOrder';
4755
- }
4756
- else if (market['inverse']) {
4757
- method = 'dapiPrivateGetOrder';
4758
- }
4759
- else if (type === 'margin' || marginMode !== undefined) {
4760
- method = 'sapiGetMarginOrder';
4761
- if (marginMode === 'isolated') {
4762
- request['isIsolated'] = true;
4763
- }
4764
- }
4765
4752
  const clientOrderId = this.safeValue2(params, 'origClientOrderId', 'clientOrderId');
4766
4753
  if (clientOrderId !== undefined) {
4767
4754
  if (market['option']) {
@@ -4775,7 +4762,25 @@ export default class binance extends Exchange {
4775
4762
  request['orderId'] = id;
4776
4763
  }
4777
4764
  const requestParams = this.omit(query, ['type', 'clientOrderId', 'origClientOrderId']);
4778
- const response = await this[method](this.extend(request, requestParams));
4765
+ let response = undefined;
4766
+ if (market['option']) {
4767
+ response = await this.eapiPrivateGetOrder(this.extend(request, requestParams));
4768
+ }
4769
+ else if (market['linear']) {
4770
+ response = await this.fapiPrivateGetOrder(this.extend(request, requestParams));
4771
+ }
4772
+ else if (market['inverse']) {
4773
+ response = await this.dapiPrivateGetOrder(this.extend(request, requestParams));
4774
+ }
4775
+ else if (type === 'margin' || marginMode !== undefined) {
4776
+ if (marginMode === 'isolated') {
4777
+ request['isIsolated'] = true;
4778
+ }
4779
+ response = await this.sapiGetMarginOrder(this.extend(request, requestParams));
4780
+ }
4781
+ else {
4782
+ response = await this.privateGetOrder(this.extend(request, requestParams));
4783
+ }
4779
4784
  return this.parseOrder(response, market);
4780
4785
  }
4781
4786
  async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -4813,34 +4818,36 @@ export default class binance extends Exchange {
4813
4818
  const request = {
4814
4819
  'symbol': market['id'],
4815
4820
  };
4816
- let method = 'privateGetAllOrders';
4821
+ const until = this.safeInteger(params, 'until');
4822
+ if (until !== undefined) {
4823
+ params = this.omit(params, 'until');
4824
+ request['endTime'] = until;
4825
+ }
4826
+ if (since !== undefined) {
4827
+ request['startTime'] = since;
4828
+ }
4829
+ if (limit !== undefined) {
4830
+ request['limit'] = limit;
4831
+ }
4832
+ let response = undefined;
4817
4833
  if (market['option']) {
4818
- method = 'eapiPrivateGetHistoryOrders';
4834
+ response = await this.eapiPrivateGetHistoryOrders(this.extend(request, query));
4819
4835
  }
4820
4836
  else if (market['linear']) {
4821
- method = 'fapiPrivateGetAllOrders';
4837
+ response = await this.fapiPrivateGetAllOrders(this.extend(request, query));
4822
4838
  }
4823
4839
  else if (market['inverse']) {
4824
- method = 'dapiPrivateGetAllOrders';
4840
+ response = await this.dapiPrivateGetAllOrders(this.extend(request, query));
4825
4841
  }
4826
4842
  else if (type === 'margin' || marginMode !== undefined) {
4827
- method = 'sapiGetMarginAllOrders';
4828
4843
  if (marginMode === 'isolated') {
4829
4844
  request['isIsolated'] = true;
4830
4845
  }
4846
+ response = await this.sapiGetMarginAllOrders(this.extend(request, query));
4831
4847
  }
4832
- const until = this.safeInteger(params, 'until');
4833
- if (until !== undefined) {
4834
- params = this.omit(params, 'until');
4835
- request['endTime'] = until;
4836
- }
4837
- if (since !== undefined) {
4838
- request['startTime'] = since;
4839
- }
4840
- if (limit !== undefined) {
4841
- request['limit'] = limit;
4848
+ else {
4849
+ response = await this.privateGetAllOrders(this.extend(request, query));
4842
4850
  }
4843
- const response = await this[method](this.extend(request, query));
4844
4851
  //
4845
4852
  // spot
4846
4853
  //
@@ -4965,32 +4972,34 @@ export default class binance extends Exchange {
4965
4972
  let subType = undefined;
4966
4973
  [subType, query] = this.handleSubTypeAndParams('fetchOpenOrders', market, query);
4967
4974
  const requestParams = this.omit(query, 'type');
4968
- let method = 'privateGetOpenOrders';
4975
+ let response = undefined;
4969
4976
  if (type === 'option') {
4970
- method = 'eapiPrivateGetOpenOrders';
4971
4977
  if (since !== undefined) {
4972
4978
  request['startTime'] = since;
4973
4979
  }
4974
4980
  if (limit !== undefined) {
4975
4981
  request['limit'] = limit;
4976
4982
  }
4983
+ response = await this.eapiPrivateGetOpenOrders(this.extend(request, requestParams));
4977
4984
  }
4978
4985
  else if (this.isLinear(type, subType)) {
4979
- method = 'fapiPrivateGetOpenOrders';
4986
+ response = await this.fapiPrivateGetOpenOrders(this.extend(request, requestParams));
4980
4987
  }
4981
4988
  else if (this.isInverse(type, subType)) {
4982
- method = 'dapiPrivateGetOpenOrders';
4989
+ response = await this.dapiPrivateGetOpenOrders(this.extend(request, requestParams));
4983
4990
  }
4984
4991
  else if (type === 'margin' || marginMode !== undefined) {
4985
- method = 'sapiGetMarginOpenOrders';
4986
4992
  if (marginMode === 'isolated') {
4987
4993
  request['isIsolated'] = true;
4988
4994
  if (symbol === undefined) {
4989
4995
  throw new ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument for isolated markets');
4990
4996
  }
4991
4997
  }
4998
+ response = await this.sapiGetMarginOpenOrders(this.extend(request, requestParams));
4999
+ }
5000
+ else {
5001
+ response = await this.privateGetOpenOrders(this.extend(request, requestParams));
4992
5002
  }
4993
- const response = await this[method](this.extend(request, requestParams));
4994
5003
  return this.parseOrders(response, market, since, limit);
4995
5004
  }
4996
5005
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -5081,24 +5090,26 @@ export default class binance extends Exchange {
5081
5090
  else {
5082
5091
  request['orderId'] = id;
5083
5092
  }
5084
- let method = 'privateDeleteOrder';
5093
+ const requestParams = this.omit(query, ['type', 'origClientOrderId', 'clientOrderId']);
5094
+ let response = undefined;
5085
5095
  if (market['option']) {
5086
- method = 'eapiPrivateDeleteOrder';
5096
+ response = await this.eapiPrivateDeleteOrder(this.extend(request, requestParams));
5087
5097
  }
5088
5098
  else if (market['linear']) {
5089
- method = 'fapiPrivateDeleteOrder';
5099
+ response = await this.fapiPrivateDeleteOrder(this.extend(request, requestParams));
5090
5100
  }
5091
5101
  else if (market['inverse']) {
5092
- method = 'dapiPrivateDeleteOrder';
5102
+ response = await this.dapiPrivateDeleteOrder(this.extend(request, requestParams));
5093
5103
  }
5094
5104
  else if (type === 'margin' || marginMode !== undefined) {
5095
- method = 'sapiDeleteMarginOrder';
5096
5105
  if (marginMode === 'isolated') {
5097
5106
  request['isIsolated'] = true;
5098
5107
  }
5108
+ response = await this.sapiDeleteMarginOrder(this.extend(request, requestParams));
5109
+ }
5110
+ else {
5111
+ response = await this.privateDeleteOrder(this.extend(request, requestParams));
5099
5112
  }
5100
- const requestParams = this.omit(query, ['type', 'origClientOrderId', 'clientOrderId']);
5101
- const response = await this[method](this.extend(request, requestParams));
5102
5113
  return this.parseOrder(response, market);
5103
5114
  }
5104
5115
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -5127,23 +5138,25 @@ export default class binance extends Exchange {
5127
5138
  const type = this.safeString(params, 'type', market['type']);
5128
5139
  params = this.omit(params, ['type']);
5129
5140
  const [marginMode, query] = this.handleMarginModeAndParams('cancelAllOrders', params);
5130
- let method = 'privateDeleteOpenOrders';
5141
+ let response = undefined;
5131
5142
  if (market['option']) {
5132
- method = 'eapiPrivateDeleteAllOpenOrders';
5143
+ response = await this.eapiPrivateDeleteAllOpenOrders(this.extend(request, query));
5133
5144
  }
5134
5145
  else if (market['linear']) {
5135
- method = 'fapiPrivateDeleteAllOpenOrders';
5146
+ response = await this.fapiPrivateDeleteAllOpenOrders(this.extend(request, query));
5136
5147
  }
5137
5148
  else if (market['inverse']) {
5138
- method = 'dapiPrivateDeleteAllOpenOrders';
5149
+ response = await this.dapiPrivateDeleteAllOpenOrders(this.extend(request, query));
5139
5150
  }
5140
5151
  else if ((type === 'margin') || (marginMode !== undefined)) {
5141
- method = 'sapiDeleteMarginOpenOrders';
5142
5152
  if (marginMode === 'isolated') {
5143
5153
  request['isIsolated'] = true;
5144
5154
  }
5155
+ response = await this.sapiDeleteMarginOpenOrders(this.extend(request, query));
5156
+ }
5157
+ else {
5158
+ response = await this.privateDeleteOpenOrders(this.extend(request, query));
5145
5159
  }
5146
- const response = await this[method](this.extend(request, query));
5147
5160
  if (Array.isArray(response)) {
5148
5161
  return this.parseOrders(response, market);
5149
5162
  }
@@ -5280,37 +5293,12 @@ export default class binance extends Exchange {
5280
5293
  const request = {};
5281
5294
  let market = undefined;
5282
5295
  let type = undefined;
5283
- let method = undefined;
5284
5296
  let marginMode = undefined;
5285
5297
  if (symbol !== undefined) {
5286
5298
  market = this.market(symbol);
5287
5299
  request['symbol'] = market['id'];
5288
5300
  }
5289
5301
  [type, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
5290
- if (type === 'option') {
5291
- method = 'eapiPrivateGetUserTrades';
5292
- }
5293
- else {
5294
- if (symbol === undefined) {
5295
- throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
5296
- }
5297
- [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
5298
- if (type === 'spot' || type === 'margin') {
5299
- method = 'privateGetMyTrades';
5300
- if ((type === 'margin') || (marginMode !== undefined)) {
5301
- method = 'sapiGetMarginMyTrades';
5302
- if (marginMode === 'isolated') {
5303
- request['isIsolated'] = true;
5304
- }
5305
- }
5306
- }
5307
- else if (market['linear']) {
5308
- method = 'fapiPrivateGetUserTrades';
5309
- }
5310
- else if (market['inverse']) {
5311
- method = 'dapiPrivateGetUserTrades';
5312
- }
5313
- }
5314
5302
  let endTime = this.safeInteger2(params, 'until', 'endTime');
5315
5303
  if (since !== undefined) {
5316
5304
  const startTime = since;
@@ -5338,7 +5326,33 @@ export default class binance extends Exchange {
5338
5326
  }
5339
5327
  request['limit'] = limit;
5340
5328
  }
5341
- const response = await this[method](this.extend(request, params));
5329
+ let response = undefined;
5330
+ if (type === 'option') {
5331
+ response = await this.eapiPrivateGetUserTrades(this.extend(request, params));
5332
+ }
5333
+ else {
5334
+ if (symbol === undefined) {
5335
+ throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
5336
+ }
5337
+ [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
5338
+ if (type === 'spot' || type === 'margin') {
5339
+ if ((type === 'margin') || (marginMode !== undefined)) {
5340
+ if (marginMode === 'isolated') {
5341
+ request['isIsolated'] = true;
5342
+ }
5343
+ response = await this.sapiGetMarginMyTrades(this.extend(request, params));
5344
+ }
5345
+ else {
5346
+ response = await this.privateGetMyTrades(this.extend(request, params));
5347
+ }
5348
+ }
5349
+ else if (market['linear']) {
5350
+ response = await this.fapiPrivateGetUserTrades(this.extend(request, params));
5351
+ }
5352
+ else if (market['inverse']) {
5353
+ response = await this.dapiPrivateGetUserTrades(this.extend(request, params));
5354
+ }
5355
+ }
5342
5356
  //
5343
5357
  // spot trade
5344
5358
  //
@@ -6668,7 +6682,6 @@ export default class binance extends Exchange {
6668
6682
  * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
6669
6683
  */
6670
6684
  await this.loadMarkets();
6671
- let method = undefined;
6672
6685
  let type = undefined;
6673
6686
  [type, params] = this.handleMarketTypeAndParams('fetchTradingFees', undefined, params);
6674
6687
  let subType = undefined;
@@ -6676,16 +6689,16 @@ export default class binance extends Exchange {
6676
6689
  const isSpotOrMargin = (type === 'spot') || (type === 'margin');
6677
6690
  const isLinear = this.isLinear(type, subType);
6678
6691
  const isInverse = this.isInverse(type, subType);
6692
+ let response = undefined;
6679
6693
  if (isSpotOrMargin) {
6680
- method = 'sapiGetAssetTradeFee';
6694
+ response = await this.sapiGetAssetTradeFee(params);
6681
6695
  }
6682
6696
  else if (isLinear) {
6683
- method = 'fapiPrivateV2GetAccount';
6697
+ response = await this.fapiPrivateV2GetAccount(params);
6684
6698
  }
6685
6699
  else if (isInverse) {
6686
- method = 'dapiPrivateGetAccount';
6700
+ response = await this.dapiPrivateGetAccount(params);
6687
6701
  }
6688
- const response = await this[method](params);
6689
6702
  //
6690
6703
  // sapi / spot
6691
6704
  //
@@ -6883,17 +6896,16 @@ export default class binance extends Exchange {
6883
6896
  const request = {
6884
6897
  'symbol': market['id'],
6885
6898
  };
6886
- let method = undefined;
6899
+ let response = undefined;
6887
6900
  if (market['linear']) {
6888
- method = 'fapiPublicGetPremiumIndex';
6901
+ response = await this.fapiPublicGetPremiumIndex(this.extend(request, params));
6889
6902
  }
6890
6903
  else if (market['inverse']) {
6891
- method = 'dapiPublicGetPremiumIndex';
6904
+ response = await this.dapiPublicGetPremiumIndex(this.extend(request, params));
6892
6905
  }
6893
6906
  else {
6894
6907
  throw new NotSupported(this.id + ' fetchFundingRate() supports linear and inverse contracts only');
6895
6908
  }
6896
- let response = await this[method](this.extend(request, params));
6897
6909
  if (market['inverse']) {
6898
6910
  response = response[0];
6899
6911
  }
@@ -7531,20 +7543,20 @@ export default class binance extends Exchange {
7531
7543
  * @returns {object} a dictionary of [leverage tiers structures]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}, indexed by market symbols
7532
7544
  */
7533
7545
  await this.loadMarkets();
7534
- const [type, query] = this.handleMarketTypeAndParams('fetchLeverageTiers', undefined, params);
7546
+ let type = undefined;
7547
+ [type, params] = this.handleMarketTypeAndParams('fetchLeverageTiers', undefined, params);
7535
7548
  let subType = undefined;
7536
- [subType, params] = this.handleSubTypeAndParams('fetchLeverageTiers', undefined, query, 'linear');
7537
- let method = undefined;
7549
+ [subType, params] = this.handleSubTypeAndParams('fetchLeverageTiers', undefined, params, 'linear');
7550
+ let response = undefined;
7538
7551
  if (this.isLinear(type, subType)) {
7539
- method = 'fapiPrivateGetLeverageBracket';
7552
+ response = await this.fapiPrivateGetLeverageBracket(params);
7540
7553
  }
7541
7554
  else if (this.isInverse(type, subType)) {
7542
- method = 'dapiPrivateV2GetLeverageBracket';
7555
+ response = await this.dapiPrivateV2GetLeverageBracket(params);
7543
7556
  }
7544
7557
  else {
7545
7558
  throw new NotSupported(this.id + ' fetchLeverageTiers() supports linear and inverse contracts only');
7546
7559
  }
7547
- const response = await this[method](query);
7548
7560
  //
7549
7561
  // usdm
7550
7562
  //
@@ -8018,21 +8030,21 @@ export default class binance extends Exchange {
8018
8030
  }
8019
8031
  await this.loadMarkets();
8020
8032
  const market = this.market(symbol);
8021
- let method;
8033
+ const request = {
8034
+ 'symbol': market['id'],
8035
+ 'leverage': leverage,
8036
+ };
8037
+ let response = undefined;
8022
8038
  if (market['linear']) {
8023
- method = 'fapiPrivatePostLeverage';
8039
+ response = await this.fapiPrivatePostLeverage(this.extend(request, params));
8024
8040
  }
8025
8041
  else if (market['inverse']) {
8026
- method = 'dapiPrivatePostLeverage';
8042
+ response = await this.dapiPrivatePostLeverage(this.extend(request, params));
8027
8043
  }
8028
8044
  else {
8029
8045
  throw new NotSupported(this.id + ' setLeverage() supports linear and inverse contracts only');
8030
8046
  }
8031
- const request = {
8032
- 'symbol': market['id'],
8033
- 'leverage': leverage,
8034
- };
8035
- return await this[method](this.extend(request, params));
8047
+ return response;
8036
8048
  }
8037
8049
  async setMarginMode(marginMode, symbol = undefined, params = {}) {
8038
8050
  /**
@@ -8065,23 +8077,21 @@ export default class binance extends Exchange {
8065
8077
  }
8066
8078
  await this.loadMarkets();
8067
8079
  const market = this.market(symbol);
8068
- let method = undefined;
8069
- if (market['linear']) {
8070
- method = 'fapiPrivatePostMarginType';
8071
- }
8072
- else if (market['inverse']) {
8073
- method = 'dapiPrivatePostMarginType';
8074
- }
8075
- else {
8076
- throw new NotSupported(this.id + ' setMarginMode() supports linear and inverse contracts only');
8077
- }
8078
8080
  const request = {
8079
8081
  'symbol': market['id'],
8080
8082
  'marginType': marginMode,
8081
8083
  };
8082
8084
  let response = undefined;
8083
8085
  try {
8084
- response = await this[method](this.extend(request, params));
8086
+ if (market['linear']) {
8087
+ response = await this.fapiPrivatePostMarginType(this.extend(request, params));
8088
+ }
8089
+ else if (market['inverse']) {
8090
+ response = await this.dapiPrivatePostMarginType(this.extend(request, params));
8091
+ }
8092
+ else {
8093
+ throw new NotSupported(this.id + ' setMarginMode() supports linear and inverse contracts only');
8094
+ }
8085
8095
  }
8086
8096
  catch (e) {
8087
8097
  // not an error
package/js/src/bingx.js CHANGED
@@ -331,6 +331,7 @@ export default class bingx extends Exchange {
331
331
  '100202': InsufficientFunds,
332
332
  '100204': BadRequest,
333
333
  '100400': BadRequest,
334
+ '100421': BadSymbol,
334
335
  '100440': ExchangeError,
335
336
  '100500': ExchangeError,
336
337
  '100503': ExchangeError,
@@ -1306,7 +1307,7 @@ export default class bingx extends Exchange {
1306
1307
  // }
1307
1308
  //
1308
1309
  const marketId = this.safeString(ticker, 'symbol');
1309
- const change = this.safeString(ticker, 'priceChange');
1310
+ // const change = this.safeString (ticker, 'priceChange'); // this is not ccxt's change because it does high-low instead of last-open
1310
1311
  const lastQty = this.safeString(ticker, 'lastQty');
1311
1312
  // in spot markets, lastQty is not present
1312
1313
  // it's (bad, but) the only way we can check the tickers origin
@@ -1318,10 +1319,10 @@ export default class bingx extends Exchange {
1318
1319
  const close = this.safeString(ticker, 'lastPrice');
1319
1320
  const quoteVolume = this.safeString(ticker, 'quoteVolume');
1320
1321
  const baseVolume = this.safeString(ticker, 'volume');
1321
- let percentage = this.safeString(ticker, 'priceChangePercent');
1322
- if (percentage !== undefined) {
1323
- percentage = percentage.replace('%', '');
1324
- }
1322
+ // let percentage = this.safeString (ticker, 'priceChangePercent');
1323
+ // if (percentage !== undefined) {
1324
+ // percentage = percentage.replace ('%', '');
1325
+ // } similarly to change, it's not ccxt's percentage because it does priceChange/open, and priceChange is high-low
1325
1326
  const ts = this.safeInteger(ticker, 'closeTime');
1326
1327
  const datetime = this.iso8601(ts);
1327
1328
  const bid = this.safeString(ticker, 'bidPrice');
@@ -1343,8 +1344,8 @@ export default class bingx extends Exchange {
1343
1344
  'close': close,
1344
1345
  'last': undefined,
1345
1346
  'previousClose': undefined,
1346
- 'change': change,
1347
- 'percentage': percentage,
1347
+ 'change': undefined,
1348
+ 'percentage': undefined,
1348
1349
  'average': undefined,
1349
1350
  'baseVolume': baseVolume,
1350
1351
  'quoteVolume': quoteVolume,
package/js/src/bit2c.js CHANGED
@@ -279,14 +279,13 @@ export default class bit2c extends Exchange {
279
279
  }
280
280
  parseTicker(ticker, market = undefined) {
281
281
  const symbol = this.safeSymbol(undefined, market);
282
- const timestamp = this.milliseconds();
283
282
  const averagePrice = this.safeString(ticker, 'av');
284
283
  const baseVolume = this.safeString(ticker, 'a');
285
284
  const last = this.safeString(ticker, 'll');
286
285
  return this.safeTicker({
287
286
  'symbol': symbol,
288
- 'timestamp': timestamp,
289
- 'datetime': this.iso8601(timestamp),
287
+ 'timestamp': undefined,
288
+ 'datetime': undefined,
290
289
  'high': undefined,
291
290
  'low': undefined,
292
291
  'bid': this.safeString(ticker, 'h'),
@@ -1066,15 +1066,14 @@ export default class bitfinex2 extends Exchange {
1066
1066
  // FRR_AMOUNT_AVAILABLE
1067
1067
  // ]
1068
1068
  //
1069
- const timestamp = this.milliseconds();
1070
1069
  const symbol = this.safeSymbol(undefined, market);
1071
1070
  const length = ticker.length;
1072
1071
  const last = this.safeString(ticker, length - 4);
1073
1072
  const percentage = this.safeString(ticker, length - 5);
1074
1073
  return this.safeTicker({
1075
1074
  'symbol': symbol,
1076
- 'timestamp': timestamp,
1077
- 'datetime': this.iso8601(timestamp),
1075
+ 'timestamp': undefined,
1076
+ 'datetime': undefined,
1078
1077
  'high': this.safeString(ticker, length - 2),
1079
1078
  'low': this.safeString(ticker, length - 1),
1080
1079
  'bid': this.safeString(ticker, length - 10),
package/js/src/bitmart.js CHANGED
@@ -1080,7 +1080,7 @@ export default class bitmart extends Exchange {
1080
1080
  // "legal_coin_price":"0.1302699"
1081
1081
  // }
1082
1082
  //
1083
- const timestamp = this.safeInteger(ticker, 'timestamp', this.milliseconds());
1083
+ const timestamp = this.safeInteger(ticker, 'timestamp');
1084
1084
  const marketId = this.safeString2(ticker, 'symbol', 'contract_symbol');
1085
1085
  market = this.safeMarket(marketId, market);
1086
1086
  const symbol = market['symbol'];
package/js/src/btcbox.js CHANGED
@@ -177,13 +177,12 @@ export default class btcbox extends Exchange {
177
177
  return this.parseOrderBook(response, market['symbol']);
178
178
  }
179
179
  parseTicker(ticker, market = undefined) {
180
- const timestamp = this.milliseconds();
181
180
  const symbol = this.safeSymbol(undefined, market);
182
181
  const last = this.safeString(ticker, 'last');
183
182
  return this.safeTicker({
184
183
  'symbol': symbol,
185
- 'timestamp': timestamp,
186
- 'datetime': this.iso8601(timestamp),
184
+ 'timestamp': undefined,
185
+ 'datetime': undefined,
187
186
  'high': this.safeString(ticker, 'high'),
188
187
  'low': this.safeString(ticker, 'low'),
189
188
  'bid': this.safeString(ticker, 'buy'),
@@ -2366,6 +2366,12 @@ export default class coinbase extends Exchange {
2366
2366
  // "base_size": "0.2",
2367
2367
  // "limit_price": "0.006",
2368
2368
  // "post_only": false
2369
+ // },
2370
+ // "stop_limit_stop_limit_gtc": {
2371
+ // "base_size": "48.54",
2372
+ // "limit_price": "6.998",
2373
+ // "stop_price": "7.0687",
2374
+ // "stop_direction": "STOP_DIRECTION_STOP_DOWN"
2369
2375
  // }
2370
2376
  // },
2371
2377
  // "side": "SELL",
@@ -2399,11 +2405,11 @@ export default class coinbase extends Exchange {
2399
2405
  market = this.market(symbol);
2400
2406
  }
2401
2407
  const orderConfiguration = this.safeValue(order, 'order_configuration', {});
2402
- const limitGTC = this.safeValue(orderConfiguration, 'limit_limit_gtc', {});
2403
- const limitGTD = this.safeValue(orderConfiguration, 'limit_limit_gtd', {});
2404
- const stopLimitGTC = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtc', {});
2405
- const stopLimitGTD = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtd', {});
2406
- const marketIOC = this.safeValue(orderConfiguration, 'market_market_ioc', {});
2408
+ const limitGTC = this.safeValue(orderConfiguration, 'limit_limit_gtc');
2409
+ const limitGTD = this.safeValue(orderConfiguration, 'limit_limit_gtd');
2410
+ const stopLimitGTC = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtc');
2411
+ const stopLimitGTD = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtd');
2412
+ const marketIOC = this.safeValue(orderConfiguration, 'market_market_ioc');
2407
2413
  const isLimit = ((limitGTC !== undefined) || (limitGTD !== undefined));
2408
2414
  const isStop = ((stopLimitGTC !== undefined) || (stopLimitGTD !== undefined));
2409
2415
  let price = undefined;