ccxt 4.2.56 → 4.2.58

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 (75) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.js +818 -335
  3. package/dist/ccxt.browser.min.js +7 -7
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/src/alpaca.js +90 -88
  6. package/dist/cjs/src/base/Exchange.js +53 -3
  7. package/dist/cjs/src/binance.js +196 -28
  8. package/dist/cjs/src/bingx.js +12 -1
  9. package/dist/cjs/src/bitget.js +71 -56
  10. package/dist/cjs/src/bitmex.js +26 -1
  11. package/dist/cjs/src/bitrue.js +24 -15
  12. package/dist/cjs/src/blofin.js +24 -1
  13. package/dist/cjs/src/bybit.js +11 -3
  14. package/dist/cjs/src/currencycom.js +15 -5
  15. package/dist/cjs/src/delta.js +14 -1
  16. package/dist/cjs/src/gate.js +1 -1
  17. package/dist/cjs/src/hitbtc.js +63 -55
  18. package/dist/cjs/src/krakenfutures.js +22 -7
  19. package/dist/cjs/src/kuna.js +14 -11
  20. package/dist/cjs/src/mexc.js +75 -0
  21. package/dist/cjs/src/okx.js +31 -1
  22. package/dist/cjs/src/pro/alpaca.js +1 -1
  23. package/dist/cjs/src/pro/bitmex.js +23 -32
  24. package/dist/cjs/src/pro/cex.js +6 -2
  25. package/dist/cjs/src/pro/coinex.js +6 -3
  26. package/dist/cjs/src/pro/mexc.js +2 -2
  27. package/dist/cjs/src/pro/whitebit.js +15 -13
  28. package/dist/cjs/src/probit.js +1 -1
  29. package/dist/cjs/src/wavesexchange.js +1 -1
  30. package/dist/cjs/src/woo.js +20 -4
  31. package/js/ccxt.d.ts +3 -3
  32. package/js/ccxt.js +1 -1
  33. package/js/src/alpaca.js +90 -88
  34. package/js/src/base/Exchange.d.ts +14 -6
  35. package/js/src/base/Exchange.js +53 -3
  36. package/js/src/base/types.d.ts +12 -1
  37. package/js/src/binance.d.ts +5 -2
  38. package/js/src/binance.js +196 -28
  39. package/js/src/bingx.d.ts +3 -2
  40. package/js/src/bingx.js +12 -1
  41. package/js/src/bitget.d.ts +3 -2
  42. package/js/src/bitget.js +71 -56
  43. package/js/src/bitmex.d.ts +3 -1
  44. package/js/src/bitmex.js +26 -1
  45. package/js/src/bitrue.js +24 -15
  46. package/js/src/blofin.d.ts +3 -2
  47. package/js/src/blofin.js +24 -1
  48. package/js/src/bybit.d.ts +3 -6
  49. package/js/src/bybit.js +11 -3
  50. package/js/src/currencycom.d.ts +3 -2
  51. package/js/src/currencycom.js +15 -5
  52. package/js/src/delta.d.ts +3 -2
  53. package/js/src/delta.js +14 -1
  54. package/js/src/gate.js +1 -1
  55. package/js/src/hitbtc.d.ts +5 -3
  56. package/js/src/hitbtc.js +63 -55
  57. package/js/src/krakenfutures.d.ts +3 -2
  58. package/js/src/krakenfutures.js +22 -7
  59. package/js/src/kuna.js +14 -11
  60. package/js/src/mexc.d.ts +3 -1
  61. package/js/src/mexc.js +75 -0
  62. package/js/src/okx.d.ts +3 -2
  63. package/js/src/okx.js +31 -1
  64. package/js/src/pro/alpaca.js +1 -1
  65. package/js/src/pro/bitmex.js +24 -31
  66. package/js/src/pro/cex.js +6 -2
  67. package/js/src/pro/coinex.js +6 -3
  68. package/js/src/pro/mexc.js +2 -2
  69. package/js/src/pro/whitebit.js +15 -13
  70. package/js/src/probit.js +1 -1
  71. package/js/src/wavesexchange.js +1 -1
  72. package/js/src/woo.d.ts +3 -5
  73. package/js/src/woo.js +20 -4
  74. package/package.json +1 -1
  75. package/skip-tests.json +26 -8
package/js/src/binance.js CHANGED
@@ -97,9 +97,12 @@ export default class binance extends Exchange {
97
97
  'fetchLastPrices': true,
98
98
  'fetchLedger': true,
99
99
  'fetchLedgerEntry': true,
100
- 'fetchLeverage': true,
100
+ 'fetchLeverage': 'emulated',
101
+ 'fetchLeverages': true,
101
102
  'fetchLeverageTiers': true,
102
103
  'fetchLiquidations': false,
104
+ 'fetchMarginMode': 'emulated',
105
+ 'fetchMarginModes': true,
103
106
  'fetchMarketLeverageTiers': 'emulated',
104
107
  'fetchMarkets': true,
105
108
  'fetchMarkOHLCV': true,
@@ -10389,31 +10392,27 @@ export default class binance extends Exchange {
10389
10392
  //
10390
10393
  return response;
10391
10394
  }
10392
- async fetchLeverage(symbol, params = {}) {
10395
+ async fetchLeverages(symbols = undefined, params = {}) {
10393
10396
  /**
10394
10397
  * @method
10395
- * @name binance#fetchLeverage
10396
- * @description fetch the set leverage for a market
10398
+ * @name binance#fetchLeverages
10399
+ * @description fetch the set leverage for all markets
10397
10400
  * @see https://binance-docs.github.io/apidocs/futures/en/#account-information-v2-user_data
10398
10401
  * @see https://binance-docs.github.io/apidocs/delivery/en/#account-information-user_data
10399
10402
  * @see https://binance-docs.github.io/apidocs/pm/en/#get-um-account-detail-user_data
10400
10403
  * @see https://binance-docs.github.io/apidocs/pm/en/#get-cm-account-detail-user_data
10401
- * @param {string} symbol unified market symbol
10404
+ * @param {string[]} [symbols] a list of unified market symbols
10402
10405
  * @param {object} [params] extra parameters specific to the exchange API endpoint
10403
- * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
10406
+ * @returns {object} a list of [leverage structures]{@link https://docs.ccxt.com/#/?id=leverage-structure}
10404
10407
  */
10405
10408
  await this.loadMarkets();
10406
10409
  await this.loadLeverageBrackets(false, params);
10407
- const market = this.market(symbol);
10408
- if (!market['contract']) {
10409
- throw new NotSupported(this.id + ' fetchLeverage() supports linear and inverse contracts only');
10410
- }
10411
10410
  let type = undefined;
10412
- [type, params] = this.handleMarketTypeAndParams('fetchLeverage', market, params);
10411
+ [type, params] = this.handleMarketTypeAndParams('fetchLeverages', undefined, params);
10413
10412
  let subType = undefined;
10414
- [subType, params] = this.handleSubTypeAndParams('fetchLeverage', market, params, 'linear');
10413
+ [subType, params] = this.handleSubTypeAndParams('fetchLeverages', undefined, params, 'linear');
10415
10414
  let isPortfolioMargin = undefined;
10416
- [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchLeverage', 'papi', 'portfolioMargin', false);
10415
+ [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchLeverages', 'papi', 'portfolioMargin', false);
10417
10416
  let response = undefined;
10418
10417
  if (this.isLinear(type, subType)) {
10419
10418
  if (isPortfolioMargin) {
@@ -10432,23 +10431,39 @@ export default class binance extends Exchange {
10432
10431
  }
10433
10432
  }
10434
10433
  else {
10435
- throw new NotSupported(this.id + ' fetchPositions() supports linear and inverse contracts only');
10434
+ throw new NotSupported(this.id + ' fetchLeverages() supports linear and inverse contracts only');
10436
10435
  }
10437
- const positions = this.safeList(response, 'positions', []);
10438
- for (let i = 0; i < positions.length; i++) {
10439
- const position = positions[i];
10440
- const innerSymbol = this.safeString(position, 'symbol');
10441
- if (innerSymbol === market['id']) {
10442
- const isolated = this.safeBool(position, 'isolated');
10443
- const marginMode = isolated ? 'isolated' : 'cross';
10444
- return {
10445
- 'info': position,
10446
- 'marginMode': marginMode,
10447
- 'leverage': this.safeInteger(position, 'leverage'),
10448
- };
10449
- }
10436
+ const leverages = this.safeList(response, 'positions', []);
10437
+ return this.parseLeverages(leverages, symbols, 'symbol');
10438
+ }
10439
+ parseLeverage(leverage, market = undefined) {
10440
+ const marketId = this.safeString(leverage, 'symbol');
10441
+ const marginModeRaw = this.safeBool(leverage, 'isolated');
10442
+ let marginMode = undefined;
10443
+ if (marginModeRaw !== undefined) {
10444
+ marginMode = marginModeRaw ? 'isolated' : 'cross';
10450
10445
  }
10451
- return response;
10446
+ const side = this.safeStringLower(leverage, 'positionSide');
10447
+ let longLeverage = undefined;
10448
+ let shortLeverage = undefined;
10449
+ const leverageValue = this.safeInteger(leverage, 'leverage');
10450
+ if (side === 'both') {
10451
+ longLeverage = leverageValue;
10452
+ shortLeverage = leverageValue;
10453
+ }
10454
+ else if (side === 'long') {
10455
+ longLeverage = leverageValue;
10456
+ }
10457
+ else if (side === 'short') {
10458
+ shortLeverage = leverageValue;
10459
+ }
10460
+ return {
10461
+ 'info': leverage,
10462
+ 'symbol': this.safeSymbol(marketId, market),
10463
+ 'marginMode': marginMode,
10464
+ 'longLeverage': longLeverage,
10465
+ 'shortLeverage': shortLeverage,
10466
+ };
10452
10467
  }
10453
10468
  async fetchSettlementHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
10454
10469
  /**
@@ -12161,4 +12176,157 @@ export default class binance extends Exchange {
12161
12176
  'hedged': dualSidePosition,
12162
12177
  };
12163
12178
  }
12179
+ async fetchMarginModes(symbols = undefined, params = {}) {
12180
+ /**
12181
+ * @method
12182
+ * @name binance#fetchMarginMode
12183
+ * @description fetches margin modes ("isolated" or "cross") that the market for the symbol in in, with symbol=undefined all markets for a subType (linear/inverse) are returned
12184
+ * @see https://binance-docs.github.io/apidocs/futures/en/#account-information-v2-user_data
12185
+ * @param {string} symbol unified symbol of the market the order was made in
12186
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
12187
+ * @returns {object} struct of marginMode
12188
+ */
12189
+ await this.loadMarkets();
12190
+ let market = undefined;
12191
+ if (symbols !== undefined) {
12192
+ symbols = this.marketSymbols(symbols);
12193
+ market = this.market(symbols[0]);
12194
+ }
12195
+ let subType = undefined;
12196
+ [subType, params] = this.handleSubTypeAndParams('fetchMarginMode', market, params);
12197
+ let response = undefined;
12198
+ if (subType === 'linear') {
12199
+ response = await this.fapiPrivateV2GetAccount(params);
12200
+ //
12201
+ // {
12202
+ // feeTier: '0',
12203
+ // canTrade: true,
12204
+ // canDeposit: true,
12205
+ // canWithdraw: true,
12206
+ // tradeGroupId: '-1',
12207
+ // updateTime: '0',
12208
+ // multiAssetsMargin: true,
12209
+ // totalInitialMargin: '438.31134352',
12210
+ // totalMaintMargin: '5.90847101',
12211
+ // totalWalletBalance: '4345.15626338',
12212
+ // totalUnrealizedProfit: '376.45220224',
12213
+ // totalMarginBalance: '4721.60846562',
12214
+ // totalPositionInitialMargin: '425.45252687',
12215
+ // totalOpenOrderInitialMargin: '12.85881664',
12216
+ // totalCrossWalletBalance: '4345.15626338',
12217
+ // totalCrossUnPnl: '376.45220224',
12218
+ // availableBalance: '4281.84764041',
12219
+ // maxWithdrawAmount: '4281.84764041',
12220
+ // assets: [
12221
+ // {
12222
+ // asset: 'ETH',
12223
+ // walletBalance: '0.00000000',
12224
+ // unrealizedProfit: '0.00000000',
12225
+ // marginBalance: '0.00000000',
12226
+ // maintMargin: '0.00000000',
12227
+ // initialMargin: '0.00000000',
12228
+ // positionInitialMargin: '0.00000000',
12229
+ // openOrderInitialMargin: '0.00000000',
12230
+ // maxWithdrawAmount: '0.00000000',
12231
+ // crossWalletBalance: '0.00000000',
12232
+ // crossUnPnl: '0.00000000',
12233
+ // availableBalance: '1.26075574',
12234
+ // marginAvailable: true,
12235
+ // updateTime: '0'
12236
+ // },
12237
+ // ...
12238
+ // ],
12239
+ // positions: [
12240
+ // {
12241
+ // symbol: 'SNTUSDT',
12242
+ // initialMargin: '0',
12243
+ // maintMargin: '0',
12244
+ // unrealizedProfit: '0.00000000',
12245
+ // positionInitialMargin: '0',
12246
+ // openOrderInitialMargin: '0',
12247
+ // leverage: '20',
12248
+ // isolated: false,
12249
+ // entryPrice: '0.0',
12250
+ // breakEvenPrice: '0.0',
12251
+ // maxNotional: '25000',
12252
+ // positionSide: 'BOTH',
12253
+ // positionAmt: '0',
12254
+ // notional: '0',
12255
+ // isolatedWallet: '0',
12256
+ // updateTime: '0',
12257
+ // bidNotional: '0',
12258
+ // askNotional: '0'
12259
+ // },
12260
+ // ...
12261
+ // ]
12262
+ // }
12263
+ //
12264
+ }
12265
+ else if (subType === 'inverse') {
12266
+ response = await this.dapiPrivateGetAccount(params);
12267
+ //
12268
+ // {
12269
+ // feeTier: '0',
12270
+ // canTrade: true,
12271
+ // canDeposit: true,
12272
+ // canWithdraw: true,
12273
+ // updateTime: '0',
12274
+ // assets: [
12275
+ // {
12276
+ // asset: 'APT',
12277
+ // walletBalance: '0.00000000',
12278
+ // unrealizedProfit: '0.00000000',
12279
+ // marginBalance: '0.00000000',
12280
+ // maintMargin: '0.00000000',
12281
+ // initialMargin: '0.00000000',
12282
+ // positionInitialMargin: '0.00000000',
12283
+ // openOrderInitialMargin: '0.00000000',
12284
+ // maxWithdrawAmount: '0.00000000',
12285
+ // crossWalletBalance: '0.00000000',
12286
+ // crossUnPnl: '0.00000000',
12287
+ // availableBalance: '0.00000000',
12288
+ // updateTime: '0'
12289
+ // },
12290
+ // ...
12291
+ // ],
12292
+ // positions: [
12293
+ // {
12294
+ // symbol: 'BCHUSD_240329',
12295
+ // initialMargin: '0',
12296
+ // maintMargin: '0',
12297
+ // unrealizedProfit: '0.00000000',
12298
+ // positionInitialMargin: '0',
12299
+ // openOrderInitialMargin: '0',
12300
+ // leverage: '20',
12301
+ // isolated: false,
12302
+ // positionSide: 'BOTH',
12303
+ // entryPrice: '0.00000000',
12304
+ // maxQty: '1000',
12305
+ // notionalValue: '0',
12306
+ // isolatedWallet: '0',
12307
+ // updateTime: '0',
12308
+ // positionAmt: '0',
12309
+ // breakEvenPrice: '0.00000000'
12310
+ // },
12311
+ // ...
12312
+ // ]
12313
+ // }
12314
+ //
12315
+ }
12316
+ else {
12317
+ throw new BadRequest(this.id + ' fetchMarginModes () supports linear and inverse subTypes only');
12318
+ }
12319
+ const assets = this.safeValue(response, 'positions', []);
12320
+ return this.parseMarginModes(assets, symbols, 'symbol', 'swap');
12321
+ }
12322
+ parseMarginMode(marginMode, market = undefined) {
12323
+ const marketId = this.safeString(marginMode, 'symbol');
12324
+ market = this.safeMarket(marketId, market);
12325
+ const isIsolated = this.safeBool(marginMode, 'isolated');
12326
+ return {
12327
+ 'info': marginMode,
12328
+ 'symbol': market['symbol'],
12329
+ 'marginMode': isIsolated ? 'isolated' : 'cross',
12330
+ };
12331
+ }
12164
12332
  }
package/js/src/bingx.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/bingx.js';
2
- import type { TransferEntry, Int, OrderSide, OHLCV, FundingRateHistory, Order, OrderType, OrderRequest, Str, Trade, Balances, Transaction, Ticker, OrderBook, Tickers, Market, Strings, Currency, Position, Dict } from './base/types.js';
2
+ import type { TransferEntry, Int, OrderSide, OHLCV, FundingRateHistory, Order, OrderType, OrderRequest, Str, Trade, Balances, Transaction, Ticker, OrderBook, Tickers, Market, Strings, Currency, Position, Dict, Leverage } from './base/types.js';
3
3
  /**
4
4
  * @class bingx
5
5
  * @augments Exchange
@@ -110,7 +110,8 @@ export default class bingx extends Exchange {
110
110
  parseTransactionStatus(status: string): string;
111
111
  setMarginMode(marginMode: string, symbol?: Str, params?: {}): Promise<any>;
112
112
  setMargin(symbol: string, amount: number, params?: {}): Promise<any>;
113
- fetchLeverage(symbol: string, params?: {}): Promise<any>;
113
+ fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
114
+ parseLeverage(leverage: any, market?: any): Leverage;
114
115
  setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
115
116
  fetchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
116
117
  parseDepositWithdrawFee(fee: any, currency?: Currency): {
package/js/src/bingx.js CHANGED
@@ -3499,7 +3499,18 @@ export default class bingx extends Exchange {
3499
3499
  // }
3500
3500
  // }
3501
3501
  //
3502
- return response;
3502
+ const data = this.safeDict(response, 'data', {});
3503
+ return this.parseLeverage(data, market);
3504
+ }
3505
+ parseLeverage(leverage, market = undefined) {
3506
+ const marketId = this.safeString(leverage, 'symbol');
3507
+ return {
3508
+ 'info': leverage,
3509
+ 'symbol': this.safeSymbol(marketId, market),
3510
+ 'marginMode': undefined,
3511
+ 'longLeverage': this.safeInteger(leverage, 'longLeverage'),
3512
+ 'shortLeverage': this.safeInteger(leverage, 'shortLeverage'),
3513
+ };
3503
3514
  }
3504
3515
  async setLeverage(leverage, symbol = undefined, params = {}) {
3505
3516
  /**
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/bitget.js';
2
- import type { Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Balances, Str, Transaction, Ticker, OrderBook, Tickers, Market, Strings, Currency, Position, Liquidation, TransferEntry } from './base/types.js';
2
+ import type { Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Balances, Str, Transaction, Ticker, OrderBook, Tickers, Market, Strings, Currency, Position, Liquidation, TransferEntry, Leverage } from './base/types.js';
3
3
  /**
4
4
  * @class bitget
5
5
  * @augments Exchange
@@ -157,7 +157,8 @@ export default class bitget extends Exchange {
157
157
  };
158
158
  reduceMargin(symbol: string, amount: any, params?: {}): Promise<any>;
159
159
  addMargin(symbol: string, amount: any, params?: {}): Promise<any>;
160
- fetchLeverage(symbol: string, params?: {}): Promise<any>;
160
+ fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
161
+ parseLeverage(leverage: any, market?: any): Leverage;
161
162
  setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
162
163
  setMarginMode(marginMode: string, symbol?: Str, params?: {}): Promise<any>;
163
164
  setPositionMode(hedged: boolean, symbol?: Str, params?: {}): Promise<any>;