ccxt 4.2.55 → 4.2.57
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 +4 -3
- package/build.sh +2 -2
- package/dist/ccxt.browser.js +540 -185
- package/dist/ccxt.browser.min.js +6 -6
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +31 -2
- package/dist/cjs/src/binance.js +155 -0
- package/dist/cjs/src/bingx.js +3 -1
- package/dist/cjs/src/bitmex.js +42 -1
- package/dist/cjs/src/hitbtc.js +51 -54
- package/dist/cjs/src/mexc.js +75 -0
- package/dist/cjs/src/pro/bitget.js +69 -73
- package/dist/cjs/src/pro/bitmex.js +23 -32
- package/dist/cjs/src/pro/bybit.js +19 -5
- package/dist/cjs/src/pro/cex.js +6 -2
- package/dist/cjs/src/pro/coinex.js +6 -3
- package/dist/cjs/src/pro/currencycom.js +2 -1
- package/dist/cjs/src/pro/kraken.js +1 -1
- package/dist/cjs/src/pro/mexc.js +2 -2
- package/dist/cjs/src/pro/whitebit.js +11 -7
- package/dist/cjs/src/upbit.js +1 -1
- package/dist/cjs/src/woo.js +41 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/woo.d.ts +9 -0
- package/js/src/base/Exchange.d.ts +11 -5
- package/js/src/base/Exchange.js +31 -2
- package/js/src/base/types.d.ts +5 -3
- package/js/src/binance.d.ts +3 -1
- package/js/src/binance.js +155 -0
- package/js/src/bingx.d.ts +4 -4
- package/js/src/bingx.js +3 -1
- package/js/src/bitmex.d.ts +2 -0
- package/js/src/bitmex.js +42 -1
- package/js/src/hitbtc.d.ts +3 -2
- package/js/src/hitbtc.js +51 -54
- package/js/src/mexc.d.ts +12 -0
- package/js/src/mexc.js +75 -0
- package/js/src/pro/bitget.d.ts +0 -1
- package/js/src/pro/bitget.js +69 -73
- package/js/src/pro/bitmex.js +24 -31
- package/js/src/pro/bybit.js +19 -5
- package/js/src/pro/cex.js +6 -2
- package/js/src/pro/coinex.js +6 -3
- package/js/src/pro/currencycom.js +2 -1
- package/js/src/pro/kraken.js +1 -1
- package/js/src/pro/mexc.js +2 -2
- package/js/src/pro/whitebit.js +11 -7
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
- package/js/src/upbit.js +1 -1
- package/js/src/woo.d.ts +1 -0
- package/js/src/woo.js +41 -0
- package/package.json +1 -1
- package/skip-tests.json +21 -163
package/dist/ccxt.browser.js
CHANGED
|
@@ -7451,9 +7451,11 @@ class Exchange {
|
|
|
7451
7451
|
'fetchLedger': undefined,
|
|
7452
7452
|
'fetchLedgerEntry': undefined,
|
|
7453
7453
|
'fetchLeverage': undefined,
|
|
7454
|
+
'fetchLeverages': undefined,
|
|
7454
7455
|
'fetchLeverageTiers': undefined,
|
|
7455
7456
|
'fetchLiquidations': undefined,
|
|
7456
7457
|
'fetchMarginMode': undefined,
|
|
7458
|
+
'fetchMarginModes': undefined,
|
|
7457
7459
|
'fetchMarketLeverageTiers': undefined,
|
|
7458
7460
|
'fetchMarkets': true,
|
|
7459
7461
|
'fetchMarketsWs': undefined,
|
|
@@ -8884,8 +8886,17 @@ class Exchange {
|
|
|
8884
8886
|
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
8885
8887
|
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchOrderBook() is not supported yet');
|
|
8886
8888
|
}
|
|
8887
|
-
async fetchMarginMode(symbol
|
|
8888
|
-
|
|
8889
|
+
async fetchMarginMode(symbol, params = {}) {
|
|
8890
|
+
if (this.has['fetchMarginModes']) {
|
|
8891
|
+
const marginModes = await this.fetchMarginModes([symbol], params);
|
|
8892
|
+
return this.safeDict(marginModes, symbol);
|
|
8893
|
+
}
|
|
8894
|
+
else {
|
|
8895
|
+
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchMarginMode() is not supported yet');
|
|
8896
|
+
}
|
|
8897
|
+
}
|
|
8898
|
+
async fetchMarginModes(symbols = undefined, params = {}) {
|
|
8899
|
+
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchMarginModes () is not supported yet');
|
|
8889
8900
|
}
|
|
8890
8901
|
async fetchRestOrderBookSafe(symbol, limit = undefined, params = {}) {
|
|
8891
8902
|
const fetchSnapshotMaxRetries = this.handleOption('watchOrderBook', 'maxRetries', 3);
|
|
@@ -8996,6 +9007,9 @@ class Exchange {
|
|
|
8996
9007
|
async fetchLeverage(symbol, params = {}) {
|
|
8997
9008
|
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchLeverage() is not supported yet');
|
|
8998
9009
|
}
|
|
9010
|
+
async fetchLeverages(symbols = undefined, params = {}) {
|
|
9011
|
+
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchLeverages() is not supported yet');
|
|
9012
|
+
}
|
|
8999
9013
|
async setPositionMode(hedged, symbol = undefined, params = {}) {
|
|
9000
9014
|
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' setPositionMode() is not supported yet');
|
|
9001
9015
|
}
|
|
@@ -12575,6 +12589,21 @@ class Exchange {
|
|
|
12575
12589
|
parseGreeks(greeks, market = undefined) {
|
|
12576
12590
|
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' parseGreeks () is not supported yet');
|
|
12577
12591
|
}
|
|
12592
|
+
parseMarginModes(response, symbols = undefined, symbolKey = undefined, marketType = undefined) {
|
|
12593
|
+
const marginModeStructures = {};
|
|
12594
|
+
for (let i = 0; i < response.length; i++) {
|
|
12595
|
+
const info = response[i];
|
|
12596
|
+
const marketId = this.safeString(info, symbolKey);
|
|
12597
|
+
const market = this.safeMarket(marketId, undefined, undefined, marketType);
|
|
12598
|
+
if ((symbols === undefined) || this.inArray(market['symbol'], symbols)) {
|
|
12599
|
+
marginModeStructures[market['symbol']] = this.parseMarginMode(info, market);
|
|
12600
|
+
}
|
|
12601
|
+
}
|
|
12602
|
+
return marginModeStructures;
|
|
12603
|
+
}
|
|
12604
|
+
parseMarginMode(marginMode, market = undefined) {
|
|
12605
|
+
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' parseMarginMode () is not supported yet');
|
|
12606
|
+
}
|
|
12578
12607
|
}
|
|
12579
12608
|
|
|
12580
12609
|
|
|
@@ -18183,6 +18212,8 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
18183
18212
|
'fetchLeverage': true,
|
|
18184
18213
|
'fetchLeverageTiers': true,
|
|
18185
18214
|
'fetchLiquidations': false,
|
|
18215
|
+
'fetchMarginMode': 'emulated',
|
|
18216
|
+
'fetchMarginModes': true,
|
|
18186
18217
|
'fetchMarketLeverageTiers': 'emulated',
|
|
18187
18218
|
'fetchMarkets': true,
|
|
18188
18219
|
'fetchMarkOHLCV': true,
|
|
@@ -30244,6 +30275,159 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
30244
30275
|
'hedged': dualSidePosition,
|
|
30245
30276
|
};
|
|
30246
30277
|
}
|
|
30278
|
+
async fetchMarginModes(symbols = undefined, params = {}) {
|
|
30279
|
+
/**
|
|
30280
|
+
* @method
|
|
30281
|
+
* @name binance#fetchMarginMode
|
|
30282
|
+
* @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
|
|
30283
|
+
* @see https://binance-docs.github.io/apidocs/futures/en/#account-information-v2-user_data
|
|
30284
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
30285
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
30286
|
+
* @returns {object} struct of marginMode
|
|
30287
|
+
*/
|
|
30288
|
+
await this.loadMarkets();
|
|
30289
|
+
let market = undefined;
|
|
30290
|
+
if (symbols !== undefined) {
|
|
30291
|
+
symbols = this.marketSymbols(symbols);
|
|
30292
|
+
market = this.market(symbols[0]);
|
|
30293
|
+
}
|
|
30294
|
+
let subType = undefined;
|
|
30295
|
+
[subType, params] = this.handleSubTypeAndParams('fetchMarginMode', market, params);
|
|
30296
|
+
let response = undefined;
|
|
30297
|
+
if (subType === 'linear') {
|
|
30298
|
+
response = await this.fapiPrivateV2GetAccount(params);
|
|
30299
|
+
//
|
|
30300
|
+
// {
|
|
30301
|
+
// feeTier: '0',
|
|
30302
|
+
// canTrade: true,
|
|
30303
|
+
// canDeposit: true,
|
|
30304
|
+
// canWithdraw: true,
|
|
30305
|
+
// tradeGroupId: '-1',
|
|
30306
|
+
// updateTime: '0',
|
|
30307
|
+
// multiAssetsMargin: true,
|
|
30308
|
+
// totalInitialMargin: '438.31134352',
|
|
30309
|
+
// totalMaintMargin: '5.90847101',
|
|
30310
|
+
// totalWalletBalance: '4345.15626338',
|
|
30311
|
+
// totalUnrealizedProfit: '376.45220224',
|
|
30312
|
+
// totalMarginBalance: '4721.60846562',
|
|
30313
|
+
// totalPositionInitialMargin: '425.45252687',
|
|
30314
|
+
// totalOpenOrderInitialMargin: '12.85881664',
|
|
30315
|
+
// totalCrossWalletBalance: '4345.15626338',
|
|
30316
|
+
// totalCrossUnPnl: '376.45220224',
|
|
30317
|
+
// availableBalance: '4281.84764041',
|
|
30318
|
+
// maxWithdrawAmount: '4281.84764041',
|
|
30319
|
+
// assets: [
|
|
30320
|
+
// {
|
|
30321
|
+
// asset: 'ETH',
|
|
30322
|
+
// walletBalance: '0.00000000',
|
|
30323
|
+
// unrealizedProfit: '0.00000000',
|
|
30324
|
+
// marginBalance: '0.00000000',
|
|
30325
|
+
// maintMargin: '0.00000000',
|
|
30326
|
+
// initialMargin: '0.00000000',
|
|
30327
|
+
// positionInitialMargin: '0.00000000',
|
|
30328
|
+
// openOrderInitialMargin: '0.00000000',
|
|
30329
|
+
// maxWithdrawAmount: '0.00000000',
|
|
30330
|
+
// crossWalletBalance: '0.00000000',
|
|
30331
|
+
// crossUnPnl: '0.00000000',
|
|
30332
|
+
// availableBalance: '1.26075574',
|
|
30333
|
+
// marginAvailable: true,
|
|
30334
|
+
// updateTime: '0'
|
|
30335
|
+
// },
|
|
30336
|
+
// ...
|
|
30337
|
+
// ],
|
|
30338
|
+
// positions: [
|
|
30339
|
+
// {
|
|
30340
|
+
// symbol: 'SNTUSDT',
|
|
30341
|
+
// initialMargin: '0',
|
|
30342
|
+
// maintMargin: '0',
|
|
30343
|
+
// unrealizedProfit: '0.00000000',
|
|
30344
|
+
// positionInitialMargin: '0',
|
|
30345
|
+
// openOrderInitialMargin: '0',
|
|
30346
|
+
// leverage: '20',
|
|
30347
|
+
// isolated: false,
|
|
30348
|
+
// entryPrice: '0.0',
|
|
30349
|
+
// breakEvenPrice: '0.0',
|
|
30350
|
+
// maxNotional: '25000',
|
|
30351
|
+
// positionSide: 'BOTH',
|
|
30352
|
+
// positionAmt: '0',
|
|
30353
|
+
// notional: '0',
|
|
30354
|
+
// isolatedWallet: '0',
|
|
30355
|
+
// updateTime: '0',
|
|
30356
|
+
// bidNotional: '0',
|
|
30357
|
+
// askNotional: '0'
|
|
30358
|
+
// },
|
|
30359
|
+
// ...
|
|
30360
|
+
// ]
|
|
30361
|
+
// }
|
|
30362
|
+
//
|
|
30363
|
+
}
|
|
30364
|
+
else if (subType === 'inverse') {
|
|
30365
|
+
response = await this.dapiPrivateGetAccount(params);
|
|
30366
|
+
//
|
|
30367
|
+
// {
|
|
30368
|
+
// feeTier: '0',
|
|
30369
|
+
// canTrade: true,
|
|
30370
|
+
// canDeposit: true,
|
|
30371
|
+
// canWithdraw: true,
|
|
30372
|
+
// updateTime: '0',
|
|
30373
|
+
// assets: [
|
|
30374
|
+
// {
|
|
30375
|
+
// asset: 'APT',
|
|
30376
|
+
// walletBalance: '0.00000000',
|
|
30377
|
+
// unrealizedProfit: '0.00000000',
|
|
30378
|
+
// marginBalance: '0.00000000',
|
|
30379
|
+
// maintMargin: '0.00000000',
|
|
30380
|
+
// initialMargin: '0.00000000',
|
|
30381
|
+
// positionInitialMargin: '0.00000000',
|
|
30382
|
+
// openOrderInitialMargin: '0.00000000',
|
|
30383
|
+
// maxWithdrawAmount: '0.00000000',
|
|
30384
|
+
// crossWalletBalance: '0.00000000',
|
|
30385
|
+
// crossUnPnl: '0.00000000',
|
|
30386
|
+
// availableBalance: '0.00000000',
|
|
30387
|
+
// updateTime: '0'
|
|
30388
|
+
// },
|
|
30389
|
+
// ...
|
|
30390
|
+
// ],
|
|
30391
|
+
// positions: [
|
|
30392
|
+
// {
|
|
30393
|
+
// symbol: 'BCHUSD_240329',
|
|
30394
|
+
// initialMargin: '0',
|
|
30395
|
+
// maintMargin: '0',
|
|
30396
|
+
// unrealizedProfit: '0.00000000',
|
|
30397
|
+
// positionInitialMargin: '0',
|
|
30398
|
+
// openOrderInitialMargin: '0',
|
|
30399
|
+
// leverage: '20',
|
|
30400
|
+
// isolated: false,
|
|
30401
|
+
// positionSide: 'BOTH',
|
|
30402
|
+
// entryPrice: '0.00000000',
|
|
30403
|
+
// maxQty: '1000',
|
|
30404
|
+
// notionalValue: '0',
|
|
30405
|
+
// isolatedWallet: '0',
|
|
30406
|
+
// updateTime: '0',
|
|
30407
|
+
// positionAmt: '0',
|
|
30408
|
+
// breakEvenPrice: '0.00000000'
|
|
30409
|
+
// },
|
|
30410
|
+
// ...
|
|
30411
|
+
// ]
|
|
30412
|
+
// }
|
|
30413
|
+
//
|
|
30414
|
+
}
|
|
30415
|
+
else {
|
|
30416
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' fetchMarginModes () supports linear and inverse subTypes only');
|
|
30417
|
+
}
|
|
30418
|
+
const assets = this.safeValue(response, 'positions', []);
|
|
30419
|
+
return this.parseMarginModes(assets, symbols, 'symbol', 'swap');
|
|
30420
|
+
}
|
|
30421
|
+
parseMarginMode(marginMode, market = undefined) {
|
|
30422
|
+
const marketId = this.safeString(marginMode, 'symbol');
|
|
30423
|
+
market = this.safeMarket(marketId, market);
|
|
30424
|
+
const isIsolated = this.safeBool(marginMode, 'isolated');
|
|
30425
|
+
return {
|
|
30426
|
+
'info': marginMode,
|
|
30427
|
+
'symbol': market['symbol'],
|
|
30428
|
+
'marginMode': isIsolated ? 'isolated' : 'cross',
|
|
30429
|
+
};
|
|
30430
|
+
}
|
|
30247
30431
|
}
|
|
30248
30432
|
|
|
30249
30433
|
|
|
@@ -31991,7 +32175,9 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
31991
32175
|
if (symbols !== undefined) {
|
|
31992
32176
|
symbols = this.marketSymbols(symbols);
|
|
31993
32177
|
const firstSymbol = this.safeString(symbols, 0);
|
|
31994
|
-
|
|
32178
|
+
if (firstSymbol !== undefined) {
|
|
32179
|
+
market = this.market(firstSymbol);
|
|
32180
|
+
}
|
|
31995
32181
|
}
|
|
31996
32182
|
let type = undefined;
|
|
31997
32183
|
[type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
|
|
@@ -58529,7 +58715,8 @@ class bitmex extends _abstract_bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
|
|
|
58529
58715
|
'fetchFundingRates': true,
|
|
58530
58716
|
'fetchIndexOHLCV': false,
|
|
58531
58717
|
'fetchLedger': true,
|
|
58532
|
-
'fetchLeverage':
|
|
58718
|
+
'fetchLeverage': true,
|
|
58719
|
+
'fetchLeverages': true,
|
|
58533
58720
|
'fetchLeverageTiers': false,
|
|
58534
58721
|
'fetchLiquidations': true,
|
|
58535
58722
|
'fetchMarketLeverageTiers': false,
|
|
@@ -60584,6 +60771,46 @@ class bitmex extends _abstract_bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
|
|
|
60584
60771
|
//
|
|
60585
60772
|
return this.parseOrders(response, market);
|
|
60586
60773
|
}
|
|
60774
|
+
async fetchLeverages(symbols = undefined, params = {}) {
|
|
60775
|
+
/**
|
|
60776
|
+
* @method
|
|
60777
|
+
* @name bitmex#fetchLeverages
|
|
60778
|
+
* @description fetch the set leverage for all contract markets
|
|
60779
|
+
* @see https://www.bitmex.com/api/explorer/#!/Position/Position_get
|
|
60780
|
+
* @param {string[]} [symbols] a list of unified market symbols
|
|
60781
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
60782
|
+
* @returns {object} a list of [leverage structures]{@link https://docs.ccxt.com/#/?id=leverage-structure}
|
|
60783
|
+
*/
|
|
60784
|
+
await this.loadMarkets();
|
|
60785
|
+
const positions = await this.fetchPositions(symbols, params);
|
|
60786
|
+
const result = [];
|
|
60787
|
+
for (let i = 0; i < positions.length; i++) {
|
|
60788
|
+
const entry = positions[i];
|
|
60789
|
+
const marketId = this.safeString(entry, 'symbol');
|
|
60790
|
+
const market = this.safeMarket(marketId, undefined, undefined, 'contract');
|
|
60791
|
+
result.push({
|
|
60792
|
+
'info': entry,
|
|
60793
|
+
'symbol': market['symbol'],
|
|
60794
|
+
'leverage': this.safeInteger(entry, 'leverage'),
|
|
60795
|
+
'marginMode': this.safeString(entry, 'marginMode'),
|
|
60796
|
+
});
|
|
60797
|
+
}
|
|
60798
|
+
return result;
|
|
60799
|
+
}
|
|
60800
|
+
async fetchLeverage(symbol, params = {}) {
|
|
60801
|
+
/**
|
|
60802
|
+
* @method
|
|
60803
|
+
* @name bitmex#fetchLeverage
|
|
60804
|
+
* @description fetch the set leverage for a market
|
|
60805
|
+
* @see https://www.bitmex.com/api/explorer/#!/Position/Position_get
|
|
60806
|
+
* @param {string} symbol unified market symbol
|
|
60807
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
60808
|
+
* @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
|
|
60809
|
+
*/
|
|
60810
|
+
await this.loadMarkets();
|
|
60811
|
+
const leverage = await this.fetchLeverages([symbol], params);
|
|
60812
|
+
return leverage;
|
|
60813
|
+
}
|
|
60587
60814
|
async fetchPositions(symbols = undefined, params = {}) {
|
|
60588
60815
|
/**
|
|
60589
60816
|
* @method
|
|
@@ -141189,7 +141416,8 @@ class hitbtc extends _abstract_hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
|
|
|
141189
141416
|
'fetchLeverage': true,
|
|
141190
141417
|
'fetchLeverageTiers': undefined,
|
|
141191
141418
|
'fetchLiquidations': false,
|
|
141192
|
-
'fetchMarginMode':
|
|
141419
|
+
'fetchMarginMode': 'emulated',
|
|
141420
|
+
'fetchMarginModes': true,
|
|
141193
141421
|
'fetchMarketLeverageTiers': false,
|
|
141194
141422
|
'fetchMarkets': true,
|
|
141195
141423
|
'fetchMarkOHLCV': true,
|
|
@@ -143633,7 +143861,7 @@ class hitbtc extends _abstract_hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
|
|
|
143633
143861
|
'stopLossPrice': undefined,
|
|
143634
143862
|
}, market);
|
|
143635
143863
|
}
|
|
143636
|
-
async
|
|
143864
|
+
async fetchMarginModes(symbols = undefined, params = {}) {
|
|
143637
143865
|
/**
|
|
143638
143866
|
* @method
|
|
143639
143867
|
* @name hitbtc#fetchMarginMode
|
|
@@ -143646,70 +143874,66 @@ class hitbtc extends _abstract_hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
|
|
|
143646
143874
|
*/
|
|
143647
143875
|
await this.loadMarkets();
|
|
143648
143876
|
let market = undefined;
|
|
143649
|
-
if (
|
|
143650
|
-
|
|
143877
|
+
if (symbols !== undefined) {
|
|
143878
|
+
symbols = this.marketSymbols(symbols);
|
|
143879
|
+
market = this.market(symbols[0]);
|
|
143651
143880
|
}
|
|
143652
143881
|
let marketType = undefined;
|
|
143653
143882
|
[marketType, params] = this.handleMarketTypeAndParams('fetchMarginMode', market, params);
|
|
143654
143883
|
let response = undefined;
|
|
143655
143884
|
if (marketType === 'margin') {
|
|
143656
143885
|
response = await this.privateGetMarginConfig(params);
|
|
143886
|
+
//
|
|
143887
|
+
// {
|
|
143888
|
+
// "config": [{
|
|
143889
|
+
// "symbol": "BTCUSD",
|
|
143890
|
+
// "margin_call_leverage_mul": "1.50",
|
|
143891
|
+
// "liquidation_leverage_mul": "2.00",
|
|
143892
|
+
// "max_initial_leverage": "10.00",
|
|
143893
|
+
// "margin_mode": "Isolated",
|
|
143894
|
+
// "force_close_fee": "0.05",
|
|
143895
|
+
// "enabled": true,
|
|
143896
|
+
// "active": true,
|
|
143897
|
+
// "limit_base": "50000.00",
|
|
143898
|
+
// "limit_power": "2.2",
|
|
143899
|
+
// "unlimited_threshold": "10.0"
|
|
143900
|
+
// }]
|
|
143901
|
+
// }
|
|
143902
|
+
//
|
|
143657
143903
|
}
|
|
143658
143904
|
else if (marketType === 'swap') {
|
|
143659
143905
|
response = await this.privateGetFuturesConfig(params);
|
|
143906
|
+
//
|
|
143907
|
+
// {
|
|
143908
|
+
// "config": [{
|
|
143909
|
+
// "symbol": "BTCUSD_PERP",
|
|
143910
|
+
// "margin_call_leverage_mul": "1.20",
|
|
143911
|
+
// "liquidation_leverage_mul": "2.00",
|
|
143912
|
+
// "max_initial_leverage": "100.00",
|
|
143913
|
+
// "margin_mode": "Isolated",
|
|
143914
|
+
// "force_close_fee": "0.001",
|
|
143915
|
+
// "enabled": true,
|
|
143916
|
+
// "active": false,
|
|
143917
|
+
// "limit_base": "5000000.000000000000",
|
|
143918
|
+
// "limit_power": "1.25",
|
|
143919
|
+
// "unlimited_threshold": "2.00"
|
|
143920
|
+
// }]
|
|
143921
|
+
// }
|
|
143922
|
+
//
|
|
143660
143923
|
}
|
|
143661
143924
|
else {
|
|
143662
|
-
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadSymbol(this.id + '
|
|
143925
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadSymbol(this.id + ' fetchMarginModes () supports swap contracts and margin only');
|
|
143663
143926
|
}
|
|
143664
|
-
|
|
143665
|
-
|
|
143666
|
-
|
|
143667
|
-
|
|
143668
|
-
|
|
143669
|
-
|
|
143670
|
-
|
|
143671
|
-
|
|
143672
|
-
|
|
143673
|
-
|
|
143674
|
-
// "enabled": true,
|
|
143675
|
-
// "active": true,
|
|
143676
|
-
// "limit_base": "50000.00",
|
|
143677
|
-
// "limit_power": "2.2",
|
|
143678
|
-
// "unlimited_threshold": "10.0"
|
|
143679
|
-
// }]
|
|
143680
|
-
// }
|
|
143681
|
-
//
|
|
143682
|
-
// swap
|
|
143683
|
-
// {
|
|
143684
|
-
// "config": [{
|
|
143685
|
-
// "symbol": "BTCUSD_PERP",
|
|
143686
|
-
// "margin_call_leverage_mul": "1.20",
|
|
143687
|
-
// "liquidation_leverage_mul": "2.00",
|
|
143688
|
-
// "max_initial_leverage": "100.00",
|
|
143689
|
-
// "margin_mode": "Isolated",
|
|
143690
|
-
// "force_close_fee": "0.001",
|
|
143691
|
-
// "enabled": true,
|
|
143692
|
-
// "active": false,
|
|
143693
|
-
// "limit_base": "5000000.000000000000",
|
|
143694
|
-
// "limit_power": "1.25",
|
|
143695
|
-
// "unlimited_threshold": "2.00"
|
|
143696
|
-
// }]
|
|
143697
|
-
// }
|
|
143698
|
-
//
|
|
143699
|
-
const config = this.safeValue(response, 'config', []);
|
|
143700
|
-
const marginModes = [];
|
|
143701
|
-
for (let i = 0; i < config.length; i++) {
|
|
143702
|
-
const data = this.safeValue(config, i);
|
|
143703
|
-
const marketId = this.safeString(data, 'symbol');
|
|
143704
|
-
const marketInner = this.safeMarket(marketId);
|
|
143705
|
-
marginModes.push({
|
|
143706
|
-
'info': data,
|
|
143707
|
-
'symbol': this.safeString(marketInner, 'symbol'),
|
|
143708
|
-
'marginMode': this.safeStringLower(data, 'margin_mode'),
|
|
143709
|
-
});
|
|
143710
|
-
}
|
|
143711
|
-
const filteredMargin = this.filterBySymbol(marginModes, symbol);
|
|
143712
|
-
return this.safeValue(filteredMargin, 0);
|
|
143927
|
+
const config = this.safeList(response, 'config', []);
|
|
143928
|
+
return this.parseMarginModes(config, symbols, 'symbol');
|
|
143929
|
+
}
|
|
143930
|
+
parseMarginMode(marginMode, market = undefined) {
|
|
143931
|
+
const marketId = this.safeString(marginMode, 'symbol');
|
|
143932
|
+
return {
|
|
143933
|
+
'info': marginMode,
|
|
143934
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
143935
|
+
'marginMode': this.safeStringLower(marginMode, 'margin_mode'),
|
|
143936
|
+
};
|
|
143713
143937
|
}
|
|
143714
143938
|
async transfer(code, amount, fromAccount, toAccount, params = {}) {
|
|
143715
143939
|
/**
|
|
@@ -184474,6 +184698,8 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
|
|
|
184474
184698
|
'fetchL2OrderBook': true,
|
|
184475
184699
|
'fetchLedger': undefined,
|
|
184476
184700
|
'fetchLedgerEntry': undefined,
|
|
184701
|
+
'fetchLeverage': true,
|
|
184702
|
+
'fetchLeverages': false,
|
|
184477
184703
|
'fetchLeverageTiers': true,
|
|
184478
184704
|
'fetchMarginMode': false,
|
|
184479
184705
|
'fetchMarketLeverageTiers': undefined,
|
|
@@ -189777,6 +190003,79 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
|
|
|
189777
190003
|
}
|
|
189778
190004
|
return this.assignDefaultDepositWithdrawFees(result);
|
|
189779
190005
|
}
|
|
190006
|
+
async fetchLeverage(symbol, params = {}) {
|
|
190007
|
+
/**
|
|
190008
|
+
* @method
|
|
190009
|
+
* @name mexc#fetchLeverage
|
|
190010
|
+
* @description fetch the set leverage for a market
|
|
190011
|
+
* @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#get-leverage
|
|
190012
|
+
* @param {string} symbol unified market symbol
|
|
190013
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
190014
|
+
* @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
|
|
190015
|
+
*/
|
|
190016
|
+
await this.loadMarkets();
|
|
190017
|
+
const market = this.market(symbol);
|
|
190018
|
+
const request = {
|
|
190019
|
+
'symbol': market['id'],
|
|
190020
|
+
};
|
|
190021
|
+
const response = await this.contractPrivateGetPositionLeverage(this.extend(request, params));
|
|
190022
|
+
//
|
|
190023
|
+
// {
|
|
190024
|
+
// "success": true,
|
|
190025
|
+
// "code": 0,
|
|
190026
|
+
// "data": [
|
|
190027
|
+
// {
|
|
190028
|
+
// "level": 1,
|
|
190029
|
+
// "maxVol": 463300,
|
|
190030
|
+
// "mmr": 0.004,
|
|
190031
|
+
// "imr": 0.005,
|
|
190032
|
+
// "positionType": 1,
|
|
190033
|
+
// "openType": 1,
|
|
190034
|
+
// "leverage": 20,
|
|
190035
|
+
// "limitBySys": false,
|
|
190036
|
+
// "currentMmr": 0.004
|
|
190037
|
+
// },
|
|
190038
|
+
// {
|
|
190039
|
+
// "level": 1,
|
|
190040
|
+
// "maxVol": 463300,
|
|
190041
|
+
// "mmr": 0.004,
|
|
190042
|
+
// "imr": 0.005,
|
|
190043
|
+
// "positionType": 2,
|
|
190044
|
+
// "openType": 1,
|
|
190045
|
+
// "leverage": 20,
|
|
190046
|
+
// "limitBySys": false,
|
|
190047
|
+
// "currentMmr": 0.004
|
|
190048
|
+
// }
|
|
190049
|
+
// ]
|
|
190050
|
+
// }
|
|
190051
|
+
//
|
|
190052
|
+
const data = this.safeList(response, 'data', []);
|
|
190053
|
+
const longLeverage = this.safeDict(data, 0);
|
|
190054
|
+
return this.parseLeverage(longLeverage, market);
|
|
190055
|
+
}
|
|
190056
|
+
parseLeverage(leverage, market = undefined) {
|
|
190057
|
+
//
|
|
190058
|
+
// {
|
|
190059
|
+
// "level": 1,
|
|
190060
|
+
// "maxVol": 463300,
|
|
190061
|
+
// "mmr": 0.004,
|
|
190062
|
+
// "imr": 0.005,
|
|
190063
|
+
// "positionType": 1,
|
|
190064
|
+
// "openType": 1,
|
|
190065
|
+
// "leverage": 20,
|
|
190066
|
+
// "limitBySys": false,
|
|
190067
|
+
// "currentMmr": 0.004
|
|
190068
|
+
// }
|
|
190069
|
+
//
|
|
190070
|
+
const marketId = this.safeString(leverage, 'symbol');
|
|
190071
|
+
market = this.safeMarket(marketId, market, undefined, 'contract');
|
|
190072
|
+
return {
|
|
190073
|
+
'info': leverage,
|
|
190074
|
+
'symbol': market['symbol'],
|
|
190075
|
+
'leverage': this.safeInteger(leverage, 'leverage'),
|
|
190076
|
+
'marginMode': undefined,
|
|
190077
|
+
};
|
|
190078
|
+
}
|
|
189780
190079
|
handleMarginModeAndParams(methodName, params = {}, defaultValue = undefined) {
|
|
189781
190080
|
/**
|
|
189782
190081
|
* @ignore
|
|
@@ -226337,7 +226636,10 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
226337
226636
|
}
|
|
226338
226637
|
getInstType(market, params = {}) {
|
|
226339
226638
|
let instType = undefined;
|
|
226340
|
-
if (
|
|
226639
|
+
if (market === undefined) {
|
|
226640
|
+
[instType, params] = this.handleProductTypeAndParams(undefined, params);
|
|
226641
|
+
}
|
|
226642
|
+
else if ((market['swap']) || (market['future'])) {
|
|
226341
226643
|
[instType, params] = this.handleProductTypeAndParams(market, params);
|
|
226342
226644
|
}
|
|
226343
226645
|
else {
|
|
@@ -226914,9 +227216,12 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
226914
227216
|
stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_3__/* .ArrayCache */ .ZL(limit);
|
|
226915
227217
|
this.trades[symbol] = stored;
|
|
226916
227218
|
}
|
|
226917
|
-
const data = this.
|
|
226918
|
-
|
|
226919
|
-
|
|
227219
|
+
const data = this.safeList(message, 'data', []);
|
|
227220
|
+
const length = data.length;
|
|
227221
|
+
const maxLength = Math.max(length - 1, 0);
|
|
227222
|
+
// fix chronological order by reversing
|
|
227223
|
+
for (let i = maxLength; i >= 0; i--) {
|
|
227224
|
+
const rawTrade = data[i];
|
|
226920
227225
|
const parsed = this.parseWsTrade(rawTrade, market);
|
|
226921
227226
|
stored.append(parsed);
|
|
226922
227227
|
}
|
|
@@ -226933,22 +227238,71 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
226933
227238
|
// "tradeId": "1116461060594286593"
|
|
226934
227239
|
// }
|
|
226935
227240
|
//
|
|
226936
|
-
|
|
226937
|
-
|
|
227241
|
+
// order with trade in it
|
|
227242
|
+
// {
|
|
227243
|
+
// accBaseVolume: '0.1',
|
|
227244
|
+
// baseVolume: '0.1',
|
|
227245
|
+
// cTime: '1709221342922',
|
|
227246
|
+
// clientOid: '1147122943507734528',
|
|
227247
|
+
// enterPointSource: 'API',
|
|
227248
|
+
// feeDetail: [Array],
|
|
227249
|
+
// fillFee: '-0.0049578',
|
|
227250
|
+
// fillFeeCoin: 'USDT',
|
|
227251
|
+
// fillNotionalUsd: '8.263',
|
|
227252
|
+
// fillPrice: '82.63',
|
|
227253
|
+
// fillTime: '1709221342986',
|
|
227254
|
+
// force: 'gtc',
|
|
227255
|
+
// instId: 'LTCUSDT',
|
|
227256
|
+
// leverage: '10',
|
|
227257
|
+
// marginCoin: 'USDT',
|
|
227258
|
+
// marginMode: 'crossed',
|
|
227259
|
+
// notionalUsd: '8.268',
|
|
227260
|
+
// orderId: '1147122943499345921',
|
|
227261
|
+
// orderType: 'market',
|
|
227262
|
+
// pnl: '0',
|
|
227263
|
+
// posMode: 'hedge_mode',
|
|
227264
|
+
// posSide: 'short',
|
|
227265
|
+
// price: '0',
|
|
227266
|
+
// priceAvg: '82.63',
|
|
227267
|
+
// reduceOnly: 'no',
|
|
227268
|
+
// side: 'sell',
|
|
227269
|
+
// size: '0.1',
|
|
227270
|
+
// status: 'filled',
|
|
227271
|
+
// tradeId: '1147122943772479563',
|
|
227272
|
+
// tradeScope: 'T',
|
|
227273
|
+
// tradeSide: 'open',
|
|
227274
|
+
// uTime: '1709221342986'
|
|
227275
|
+
// }
|
|
227276
|
+
//
|
|
227277
|
+
const instId = this.safeString(trade, 'instId');
|
|
227278
|
+
if (market === undefined) {
|
|
227279
|
+
market = this.safeMarket(instId, undefined, undefined, 'contract');
|
|
227280
|
+
}
|
|
227281
|
+
const timestamp = this.safeIntegerN(trade, ['uTime', 'cTime', 'ts']);
|
|
227282
|
+
const feeCost = this.safeString(trade, 'fillFee');
|
|
227283
|
+
let fee = undefined;
|
|
227284
|
+
if (feeCost !== undefined) {
|
|
227285
|
+
const feeCurrencyId = this.safeString(trade, 'fillFeeCoin');
|
|
227286
|
+
const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
|
|
227287
|
+
fee = {
|
|
227288
|
+
'cost': _base_Precise_js__WEBPACK_IMPORTED_MODULE_2__/* .Precise */ .O.stringAbs(feeCost),
|
|
227289
|
+
'currency': feeCurrencyCode,
|
|
227290
|
+
};
|
|
227291
|
+
}
|
|
226938
227292
|
return this.safeTrade({
|
|
226939
227293
|
'info': trade,
|
|
226940
227294
|
'id': this.safeString(trade, 'tradeId'),
|
|
226941
|
-
'order':
|
|
227295
|
+
'order': this.safeString(trade, 'orderId'),
|
|
226942
227296
|
'timestamp': timestamp,
|
|
226943
227297
|
'datetime': this.iso8601(timestamp),
|
|
226944
227298
|
'symbol': market['symbol'],
|
|
226945
227299
|
'type': undefined,
|
|
226946
227300
|
'side': this.safeString(trade, 'side'),
|
|
226947
227301
|
'takerOrMaker': undefined,
|
|
226948
|
-
'price': this.
|
|
227302
|
+
'price': this.safeString2(trade, 'priceAvg', 'price'),
|
|
226949
227303
|
'amount': this.safeString(trade, 'size'),
|
|
226950
|
-
'cost':
|
|
226951
|
-
'fee':
|
|
227304
|
+
'cost': this.safeString(trade, 'fillNotionalUsd'),
|
|
227305
|
+
'fee': fee,
|
|
226952
227306
|
}, market);
|
|
226953
227307
|
}
|
|
226954
227308
|
async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -227353,6 +227707,9 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
227353
227707
|
const marketSymbols = {};
|
|
227354
227708
|
for (let i = 0; i < data.length; i++) {
|
|
227355
227709
|
const order = data[i];
|
|
227710
|
+
if ('tradeId' in order) {
|
|
227711
|
+
this.handleMyTrades(client, order);
|
|
227712
|
+
}
|
|
227356
227713
|
const marketId = this.safeString(order, 'instId');
|
|
227357
227714
|
const market = this.safeMarket(marketId, undefined, undefined, marketType);
|
|
227358
227715
|
const parsed = this.parseWsOrder(order, market);
|
|
@@ -227618,7 +227975,7 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
227618
227975
|
this.myTrades = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_3__/* .ArrayCache */ .ZL(limit);
|
|
227619
227976
|
}
|
|
227620
227977
|
const stored = this.myTrades;
|
|
227621
|
-
const parsed = this.
|
|
227978
|
+
const parsed = this.parseWsTrade(message);
|
|
227622
227979
|
stored.append(parsed);
|
|
227623
227980
|
const symbol = parsed['symbol'];
|
|
227624
227981
|
const messageHash = 'myTrades';
|
|
@@ -227626,68 +227983,6 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
227626
227983
|
const symbolSpecificMessageHash = 'myTrades:' + symbol;
|
|
227627
227984
|
client.resolve(stored, symbolSpecificMessageHash);
|
|
227628
227985
|
}
|
|
227629
|
-
parseWsMyTrade(trade, market = undefined) {
|
|
227630
|
-
//
|
|
227631
|
-
// order and trade mixin (contract)
|
|
227632
|
-
//
|
|
227633
|
-
// {
|
|
227634
|
-
// "accBaseVolume": "0",
|
|
227635
|
-
// "cTime": "1701920553759",
|
|
227636
|
-
// "clientOid": "1116501214318198793",
|
|
227637
|
-
// "enterPointSource": "WEB",
|
|
227638
|
-
// "feeDetail": [{
|
|
227639
|
-
// "feeCoin": "USDT",
|
|
227640
|
-
// "fee": "-0.162003"
|
|
227641
|
-
// }],
|
|
227642
|
-
// "force": "gtc",
|
|
227643
|
-
// "instId": "BTCUSDT",
|
|
227644
|
-
// "leverage": "20",
|
|
227645
|
-
// "marginCoin": "USDT",
|
|
227646
|
-
// "marginMode": "isolated",
|
|
227647
|
-
// "notionalUsd": "105",
|
|
227648
|
-
// "orderId": "1116501214293032964",
|
|
227649
|
-
// "orderType": "limit",
|
|
227650
|
-
// "posMode": "hedge_mode",
|
|
227651
|
-
// "posSide": "long",
|
|
227652
|
-
// "price": "35000",
|
|
227653
|
-
// "reduceOnly": "no",
|
|
227654
|
-
// "side": "buy",
|
|
227655
|
-
// "size": "0.003",
|
|
227656
|
-
// "status": "canceled",
|
|
227657
|
-
// "tradeSide": "open",
|
|
227658
|
-
// "uTime": "1701920595866"
|
|
227659
|
-
// }
|
|
227660
|
-
//
|
|
227661
|
-
const marketId = this.safeString(trade, 'instId');
|
|
227662
|
-
market = this.safeMarket(marketId, market, undefined, 'contract');
|
|
227663
|
-
const timestamp = this.safeInteger2(trade, 'uTime', 'cTime');
|
|
227664
|
-
const orderFee = this.safeValue(trade, 'feeDetail', []);
|
|
227665
|
-
const fee = this.safeValue(orderFee, 0);
|
|
227666
|
-
const feeAmount = this.safeString(fee, 'fee');
|
|
227667
|
-
let feeObject = undefined;
|
|
227668
|
-
if (feeAmount !== undefined) {
|
|
227669
|
-
const feeCurrency = this.safeString(fee, 'feeCoin');
|
|
227670
|
-
feeObject = {
|
|
227671
|
-
'cost': _base_Precise_js__WEBPACK_IMPORTED_MODULE_2__/* .Precise */ .O.stringAbs(feeAmount),
|
|
227672
|
-
'currency': this.safeCurrencyCode(feeCurrency),
|
|
227673
|
-
};
|
|
227674
|
-
}
|
|
227675
|
-
return this.safeTrade({
|
|
227676
|
-
'info': trade,
|
|
227677
|
-
'id': undefined,
|
|
227678
|
-
'order': this.safeString(trade, 'orderId'),
|
|
227679
|
-
'timestamp': timestamp,
|
|
227680
|
-
'datetime': this.iso8601(timestamp),
|
|
227681
|
-
'symbol': market['symbol'],
|
|
227682
|
-
'type': this.safeString(trade, 'orderType'),
|
|
227683
|
-
'side': this.safeString(trade, 'side'),
|
|
227684
|
-
'takerOrMaker': undefined,
|
|
227685
|
-
'price': this.safeString(trade, 'price'),
|
|
227686
|
-
'amount': this.safeString(trade, 'size'),
|
|
227687
|
-
'cost': this.safeString(trade, 'notionalUsd'),
|
|
227688
|
-
'fee': feeObject,
|
|
227689
|
-
}, market);
|
|
227690
|
-
}
|
|
227691
227986
|
async watchBalance(params = {}) {
|
|
227692
227987
|
/**
|
|
227693
227988
|
* @method
|
|
@@ -229661,17 +229956,9 @@ class bitmex extends _bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
229661
229956
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
229662
229957
|
*/
|
|
229663
229958
|
await this.loadMarkets();
|
|
229664
|
-
|
|
229665
|
-
const
|
|
229666
|
-
|
|
229667
|
-
const url = this.urls['api']['ws'];
|
|
229668
|
-
const request = {
|
|
229669
|
-
'op': 'subscribe',
|
|
229670
|
-
'args': [
|
|
229671
|
-
messageHash,
|
|
229672
|
-
],
|
|
229673
|
-
};
|
|
229674
|
-
return await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
229959
|
+
symbol = this.symbol(symbol);
|
|
229960
|
+
const tickers = await this.watchTickers([symbol], params);
|
|
229961
|
+
return tickers[symbol];
|
|
229675
229962
|
}
|
|
229676
229963
|
async watchTickers(symbols = undefined, params = {}) {
|
|
229677
229964
|
/**
|
|
@@ -229687,26 +229974,27 @@ class bitmex extends _bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
229687
229974
|
const name = 'instrument';
|
|
229688
229975
|
const url = this.urls['api']['ws'];
|
|
229689
229976
|
const messageHashes = [];
|
|
229977
|
+
const rawSubscriptions = [];
|
|
229690
229978
|
if (symbols !== undefined) {
|
|
229691
229979
|
for (let i = 0; i < symbols.length; i++) {
|
|
229692
229980
|
const symbol = symbols[i];
|
|
229693
229981
|
const market = this.market(symbol);
|
|
229694
|
-
const
|
|
229695
|
-
|
|
229982
|
+
const subscription = name + ':' + market['id'];
|
|
229983
|
+
rawSubscriptions.push(subscription);
|
|
229984
|
+
const messageHash = 'ticker:' + symbol;
|
|
229985
|
+
messageHashes.push(messageHash);
|
|
229696
229986
|
}
|
|
229697
229987
|
}
|
|
229698
229988
|
else {
|
|
229699
|
-
|
|
229989
|
+
rawSubscriptions.push(name);
|
|
229990
|
+
messageHashes.push('alltickers');
|
|
229700
229991
|
}
|
|
229701
229992
|
const request = {
|
|
229702
229993
|
'op': 'subscribe',
|
|
229703
|
-
'args':
|
|
229994
|
+
'args': rawSubscriptions,
|
|
229704
229995
|
};
|
|
229705
|
-
const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params),
|
|
229996
|
+
const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params), rawSubscriptions);
|
|
229706
229997
|
if (this.newUpdates) {
|
|
229707
|
-
if (symbols === undefined) {
|
|
229708
|
-
return ticker;
|
|
229709
|
-
}
|
|
229710
229998
|
const result = {};
|
|
229711
229999
|
result[ticker['symbol']] = ticker;
|
|
229712
230000
|
return result;
|
|
@@ -229940,23 +230228,23 @@ class bitmex extends _bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
229940
230228
|
// ]
|
|
229941
230229
|
// }
|
|
229942
230230
|
//
|
|
229943
|
-
const table = this.safeString(message, 'table');
|
|
229944
230231
|
const data = this.safeList(message, 'data', []);
|
|
229945
230232
|
const tickers = {};
|
|
229946
230233
|
for (let i = 0; i < data.length; i++) {
|
|
229947
230234
|
const update = data[i];
|
|
229948
230235
|
const marketId = this.safeString(update, 'symbol');
|
|
229949
|
-
const
|
|
229950
|
-
|
|
229951
|
-
|
|
229952
|
-
|
|
229953
|
-
const
|
|
229954
|
-
const
|
|
229955
|
-
tickers[symbol] =
|
|
229956
|
-
this.tickers[symbol] =
|
|
229957
|
-
|
|
230236
|
+
const symbol = this.safeSymbol(marketId);
|
|
230237
|
+
if (!(symbol in this.tickers)) {
|
|
230238
|
+
this.tickers[symbol] = this.parseTicker({});
|
|
230239
|
+
}
|
|
230240
|
+
const updatedTicker = this.parseTicker(update);
|
|
230241
|
+
const fullParsedTicker = this.deepExtend(this.tickers[symbol], updatedTicker);
|
|
230242
|
+
tickers[symbol] = fullParsedTicker;
|
|
230243
|
+
this.tickers[symbol] = fullParsedTicker;
|
|
230244
|
+
const messageHash = 'ticker:' + symbol;
|
|
230245
|
+
client.resolve(fullParsedTicker, messageHash);
|
|
230246
|
+
client.resolve(fullParsedTicker, 'alltickers');
|
|
229958
230247
|
}
|
|
229959
|
-
client.resolve(tickers, 'instrument');
|
|
229960
230248
|
return message;
|
|
229961
230249
|
}
|
|
229962
230250
|
async watchBalance(params = {}) {
|
|
@@ -230936,7 +231224,7 @@ class bitmex extends _bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
230936
231224
|
const messageHash = table + ':' + market['id'];
|
|
230937
231225
|
const result = [
|
|
230938
231226
|
this.parse8601(this.safeString(candle, 'timestamp')) - duration * 1000,
|
|
230939
|
-
|
|
231227
|
+
undefined,
|
|
230940
231228
|
this.safeFloat(candle, 'high'),
|
|
230941
231229
|
this.safeFloat(candle, 'low'),
|
|
230942
231230
|
this.safeFloat(candle, 'close'),
|
|
@@ -235235,15 +235523,29 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
|
235235
235523
|
// "price24hPcnt": "-0.0388"
|
|
235236
235524
|
// }
|
|
235237
235525
|
// }
|
|
235526
|
+
// swap delta
|
|
235527
|
+
// {
|
|
235528
|
+
// "topic":"tickers.AAVEUSDT",
|
|
235529
|
+
// "type":"delta",
|
|
235530
|
+
// "data":{
|
|
235531
|
+
// "symbol":"AAVEUSDT",
|
|
235532
|
+
// "bid1Price":"112.89",
|
|
235533
|
+
// "bid1Size":"2.12",
|
|
235534
|
+
// "ask1Price":"112.90",
|
|
235535
|
+
// "ask1Size":"5.02"
|
|
235536
|
+
// },
|
|
235537
|
+
// "cs":78039939929,
|
|
235538
|
+
// "ts":1709210212704
|
|
235539
|
+
// }
|
|
235238
235540
|
//
|
|
235239
235541
|
const topic = this.safeString(message, 'topic', '');
|
|
235240
235542
|
const updateType = this.safeString(message, 'type', '');
|
|
235241
|
-
const data = this.
|
|
235242
|
-
const isSpot = this.safeString(data, '
|
|
235543
|
+
const data = this.safeDict(message, 'data', {});
|
|
235544
|
+
const isSpot = this.safeString(data, 'usdIndexPrice') !== undefined;
|
|
235243
235545
|
const type = isSpot ? 'spot' : 'contract';
|
|
235244
235546
|
let symbol = undefined;
|
|
235245
235547
|
let parsed = undefined;
|
|
235246
|
-
if ((updateType === 'snapshot')
|
|
235548
|
+
if ((updateType === 'snapshot')) {
|
|
235247
235549
|
parsed = this.parseTicker(data);
|
|
235248
235550
|
symbol = parsed['symbol'];
|
|
235249
235551
|
}
|
|
@@ -235254,8 +235556,8 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
|
235254
235556
|
const market = this.safeMarket(marketId, undefined, undefined, type);
|
|
235255
235557
|
symbol = market['symbol'];
|
|
235256
235558
|
// update the info in place
|
|
235257
|
-
const ticker = this.
|
|
235258
|
-
const rawTicker = this.
|
|
235559
|
+
const ticker = this.safeDict(this.tickers, symbol, {});
|
|
235560
|
+
const rawTicker = this.safeDict(ticker, 'info', {});
|
|
235259
235561
|
const merged = this.extend(rawTicker, data);
|
|
235260
235562
|
parsed = this.parseTicker(merged);
|
|
235261
235563
|
}
|
|
@@ -237848,7 +238150,10 @@ class cex extends _cex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
|
237848
238150
|
for (let i = 0; i < sorted.length; i++) {
|
|
237849
238151
|
stored.append(this.parseOHLCV(sorted[i], market));
|
|
237850
238152
|
}
|
|
237851
|
-
this.ohlcvs
|
|
238153
|
+
if (!(symbol in this.ohlcvs)) {
|
|
238154
|
+
this.ohlcvs[symbol] = {};
|
|
238155
|
+
}
|
|
238156
|
+
this.ohlcvs[symbol]['unknown'] = stored;
|
|
237852
238157
|
client.resolve(stored, messageHash);
|
|
237853
238158
|
}
|
|
237854
238159
|
handleOHLCV24(client, message) {
|
|
@@ -237907,7 +238212,8 @@ class cex extends _cex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
|
237907
238212
|
const pair = this.safeString(message, 'pair');
|
|
237908
238213
|
const symbol = this.pairToSymbol(pair);
|
|
237909
238214
|
const messageHash = 'ohlcv:' + symbol;
|
|
237910
|
-
const stored = this.safeValue(this.ohlcvs, symbol);
|
|
238215
|
+
// const stored = this.safeValue (this.ohlcvs, symbol);
|
|
238216
|
+
const stored = this.ohlcvs[symbol]['unknown'];
|
|
237911
238217
|
for (let i = 0; i < data.length; i++) {
|
|
237912
238218
|
const ohlcv = [
|
|
237913
238219
|
this.safeTimestamp(data[i], 0),
|
|
@@ -240432,14 +240738,17 @@ class coinex extends _coinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
240432
240738
|
const keys = Object.keys(this.ohlcvs);
|
|
240433
240739
|
const keysLength = keys.length;
|
|
240434
240740
|
if (keysLength === 0) {
|
|
240741
|
+
this.ohlcvs['unknown'] = {};
|
|
240435
240742
|
const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
|
|
240436
|
-
|
|
240743
|
+
const stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCacheByTimestamp */ .Py(limit);
|
|
240744
|
+
this.ohlcvs['unknown']['unknown'] = stored;
|
|
240437
240745
|
}
|
|
240746
|
+
const ohlcv = this.ohlcvs['unknown']['unknown'];
|
|
240438
240747
|
for (let i = 0; i < ohlcvs.length; i++) {
|
|
240439
240748
|
const candle = ohlcvs[i];
|
|
240440
|
-
|
|
240749
|
+
ohlcv.append(candle);
|
|
240441
240750
|
}
|
|
240442
|
-
client.resolve(
|
|
240751
|
+
client.resolve(ohlcv, messageHash);
|
|
240443
240752
|
}
|
|
240444
240753
|
async watchTicker(symbol, params = {}) {
|
|
240445
240754
|
/**
|
|
@@ -242689,7 +242998,7 @@ class currencycom extends _currencycom_js__WEBPACK_IMPORTED_MODULE_0__/* ["defau
|
|
|
242689
242998
|
// "accountId": 5470310874305732,
|
|
242690
242999
|
// "collateralCurrency": true,
|
|
242691
243000
|
// "asset": "USD",
|
|
242692
|
-
// "free": 47.
|
|
243001
|
+
// "free": 47.82576736,
|
|
242693
243002
|
// "locked": 1.187925,
|
|
242694
243003
|
// "default": true
|
|
242695
243004
|
// },
|
|
@@ -243059,6 +243368,7 @@ class currencycom extends _currencycom_js__WEBPACK_IMPORTED_MODULE_0__/* ["defau
|
|
|
243059
243368
|
orderbook = this.orderBook();
|
|
243060
243369
|
}
|
|
243061
243370
|
orderbook.reset({
|
|
243371
|
+
'symbol': symbol,
|
|
243062
243372
|
'timestamp': timestamp,
|
|
243063
243373
|
'datetime': this.iso8601(timestamp),
|
|
243064
243374
|
});
|
|
@@ -253301,7 +253611,7 @@ class kraken extends _kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
253301
253611
|
// [
|
|
253302
253612
|
// 0, // channelID
|
|
253303
253613
|
// [ // price volume time side type misc
|
|
253304
|
-
// [ "5541.20000", "0.15850568", "1534614057.
|
|
253614
|
+
// [ "5541.20000", "0.15850568", "1534614057.321596", "s", "l", "" ],
|
|
253305
253615
|
// [ "6060.00000", "0.02455000", "1534614057.324998", "b", "l", "" ],
|
|
253306
253616
|
// ],
|
|
253307
253617
|
// "trade",
|
|
@@ -259414,7 +259724,7 @@ class mexc extends _mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
|
259414
259724
|
// "d": {
|
|
259415
259725
|
// "e": "spot@public.kline.v3.api",
|
|
259416
259726
|
// "k": {
|
|
259417
|
-
// "t":
|
|
259727
|
+
// "t": 1678642261,
|
|
259418
259728
|
// "o": 20626.94,
|
|
259419
259729
|
// "c": 20599.69,
|
|
259420
259730
|
// "h": 20626.94,
|
|
@@ -259627,7 +259937,7 @@ class mexc extends _mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
|
259627
259937
|
client.subscriptions[messageHash] = 1;
|
|
259628
259938
|
this.orderbooks[symbol] = this.countedOrderBook({});
|
|
259629
259939
|
}
|
|
259630
|
-
const storedOrderBook = this.
|
|
259940
|
+
const storedOrderBook = this.orderbooks[symbol];
|
|
259631
259941
|
const nonce = this.safeInteger(storedOrderBook, 'nonce');
|
|
259632
259942
|
if (nonce === undefined) {
|
|
259633
259943
|
const cacheLength = storedOrderBook.cache.length;
|
|
@@ -270660,15 +270970,19 @@ class whitebit extends _whitebit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
|
|
|
270660
270970
|
const symbol = market['symbol'];
|
|
270661
270971
|
const messageHash = 'candles' + ':' + symbol;
|
|
270662
270972
|
const parsed = this.parseOHLCV(data, market);
|
|
270663
|
-
this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol);
|
|
270664
|
-
|
|
270665
|
-
|
|
270973
|
+
// this.ohlcvs[symbol] = this.safeValue (this.ohlcvs, symbol);
|
|
270974
|
+
if (!(symbol in this.ohlcvs)) {
|
|
270975
|
+
this.ohlcvs[symbol] = {};
|
|
270976
|
+
}
|
|
270977
|
+
// let stored = this.ohlcvs[symbol]['unknown']; // we don't know the timeframe but we need to respect the type
|
|
270978
|
+
if (!('unknown' in this.ohlcvs[symbol])) {
|
|
270666
270979
|
const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
|
|
270667
|
-
stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCacheByTimestamp */ .Py(limit);
|
|
270668
|
-
this.ohlcvs[symbol] = stored;
|
|
270980
|
+
const stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCacheByTimestamp */ .Py(limit);
|
|
270981
|
+
this.ohlcvs[symbol]['unknown'] = stored;
|
|
270669
270982
|
}
|
|
270670
|
-
|
|
270671
|
-
|
|
270983
|
+
const ohlcv = this.ohlcvs[symbol]['unknown'];
|
|
270984
|
+
ohlcv.append(parsed);
|
|
270985
|
+
client.resolve(ohlcv, messageHash);
|
|
270672
270986
|
}
|
|
270673
270987
|
return message;
|
|
270674
270988
|
}
|
|
@@ -288038,7 +288352,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
288038
288352
|
// "trade_time": "104543",
|
|
288039
288353
|
// "trade_date_kst": "20181122",
|
|
288040
288354
|
// "trade_time_kst": "194543",
|
|
288041
|
-
// "trade_timestamp":
|
|
288355
|
+
// "trade_timestamp": 1542883543096,
|
|
288042
288356
|
// "opening_price": 0.02976455,
|
|
288043
288357
|
// "high_price": 0.02992577,
|
|
288044
288358
|
// "low_price": 0.02934283,
|
|
@@ -295368,6 +295682,7 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
295368
295682
|
'reduceMargin': false,
|
|
295369
295683
|
'setLeverage': true,
|
|
295370
295684
|
'setMargin': false,
|
|
295685
|
+
'setPositionMode': true,
|
|
295371
295686
|
'transfer': true,
|
|
295372
295687
|
'withdraw': true, // exchange have that endpoint disabled atm, but was once implemented in ccxt per old docs: https://kronosresearch.github.io/wootrade-documents/#token-withdraw
|
|
295373
295688
|
},
|
|
@@ -295442,10 +295757,16 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
295442
295757
|
'client/trade/{tid}': 1,
|
|
295443
295758
|
'order/{oid}/trades': 1,
|
|
295444
295759
|
'client/trades': 1,
|
|
295760
|
+
'client/hist_trades': 1,
|
|
295761
|
+
'staking/yield_history': 1,
|
|
295762
|
+
'client/holding': 1,
|
|
295445
295763
|
'asset/deposit': 10,
|
|
295446
295764
|
'asset/history': 60,
|
|
295447
295765
|
'sub_account/all': 60,
|
|
295448
295766
|
'sub_account/assets': 60,
|
|
295767
|
+
'sub_account/asset_detail': 60,
|
|
295768
|
+
'sub_account/ip_restriction': 10,
|
|
295769
|
+
'asset/main_sub_transfer_history': 30,
|
|
295449
295770
|
'token_interest': 60,
|
|
295450
295771
|
'token_interest/{token}': 60,
|
|
295451
295772
|
'interest/history': 60,
|
|
@@ -295458,9 +295779,12 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
295458
295779
|
'post': {
|
|
295459
295780
|
'order': 5,
|
|
295460
295781
|
'asset/main_sub_transfer': 30,
|
|
295782
|
+
'asset/ltv': 30,
|
|
295461
295783
|
'asset/withdraw': 30,
|
|
295784
|
+
'asset/internal_withdraw': 30,
|
|
295462
295785
|
'interest/repay': 60,
|
|
295463
295786
|
'client/account_mode': 120,
|
|
295787
|
+
'client/position_mode': 5,
|
|
295464
295788
|
'client/leverage': 120,
|
|
295465
295789
|
},
|
|
295466
295790
|
'delete': {
|
|
@@ -297882,6 +298206,37 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
297882
298206
|
const sorted = this.sortBy(rates, 'timestamp');
|
|
297883
298207
|
return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
|
|
297884
298208
|
}
|
|
298209
|
+
async setPositionMode(hedged, symbol = undefined, params = {}) {
|
|
298210
|
+
/**
|
|
298211
|
+
* @method
|
|
298212
|
+
* @name woo#setPositionMode
|
|
298213
|
+
* @description set hedged to true or false for a market
|
|
298214
|
+
* @see https://docs.woo.org/#update-position-mode
|
|
298215
|
+
* @param {bool} hedged set to true to use HEDGE_MODE, false for ONE_WAY
|
|
298216
|
+
* @param {string} symbol not used by woo setPositionMode
|
|
298217
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
298218
|
+
* @returns {object} response from the exchange
|
|
298219
|
+
*/
|
|
298220
|
+
let hedgeMode = undefined;
|
|
298221
|
+
if (hedged) {
|
|
298222
|
+
hedgeMode = 'HEDGE_MODE';
|
|
298223
|
+
}
|
|
298224
|
+
else {
|
|
298225
|
+
hedgeMode = 'ONE_WAY';
|
|
298226
|
+
}
|
|
298227
|
+
const request = {
|
|
298228
|
+
'position_mode': hedgeMode,
|
|
298229
|
+
};
|
|
298230
|
+
const response = await this.v1PrivatePostClientPositionMode(this.extend(request, params));
|
|
298231
|
+
//
|
|
298232
|
+
// {
|
|
298233
|
+
// "success": true,
|
|
298234
|
+
// "data": {},
|
|
298235
|
+
// "timestamp": "1709195608551"
|
|
298236
|
+
// }
|
|
298237
|
+
//
|
|
298238
|
+
return response;
|
|
298239
|
+
}
|
|
297885
298240
|
async fetchLeverage(symbol, params = {}) {
|
|
297886
298241
|
await this.loadMarkets();
|
|
297887
298242
|
const response = await this.v3PrivateGetAccountinfo(params);
|
|
@@ -307635,7 +307990,7 @@ SOFTWARE.
|
|
|
307635
307990
|
|
|
307636
307991
|
//-----------------------------------------------------------------------------
|
|
307637
307992
|
// this is updated by vss.js when building
|
|
307638
|
-
const version = '4.2.
|
|
307993
|
+
const version = '4.2.57';
|
|
307639
307994
|
_src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
|
|
307640
307995
|
//-----------------------------------------------------------------------------
|
|
307641
307996
|
|