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/js/src/mexc.js
CHANGED
|
@@ -74,6 +74,8 @@ export default class mexc extends Exchange {
|
|
|
74
74
|
'fetchL2OrderBook': true,
|
|
75
75
|
'fetchLedger': undefined,
|
|
76
76
|
'fetchLedgerEntry': undefined,
|
|
77
|
+
'fetchLeverage': true,
|
|
78
|
+
'fetchLeverages': false,
|
|
77
79
|
'fetchLeverageTiers': true,
|
|
78
80
|
'fetchMarginMode': false,
|
|
79
81
|
'fetchMarketLeverageTiers': undefined,
|
|
@@ -5377,6 +5379,79 @@ export default class mexc extends Exchange {
|
|
|
5377
5379
|
}
|
|
5378
5380
|
return this.assignDefaultDepositWithdrawFees(result);
|
|
5379
5381
|
}
|
|
5382
|
+
async fetchLeverage(symbol, params = {}) {
|
|
5383
|
+
/**
|
|
5384
|
+
* @method
|
|
5385
|
+
* @name mexc#fetchLeverage
|
|
5386
|
+
* @description fetch the set leverage for a market
|
|
5387
|
+
* @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#get-leverage
|
|
5388
|
+
* @param {string} symbol unified market symbol
|
|
5389
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5390
|
+
* @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
|
|
5391
|
+
*/
|
|
5392
|
+
await this.loadMarkets();
|
|
5393
|
+
const market = this.market(symbol);
|
|
5394
|
+
const request = {
|
|
5395
|
+
'symbol': market['id'],
|
|
5396
|
+
};
|
|
5397
|
+
const response = await this.contractPrivateGetPositionLeverage(this.extend(request, params));
|
|
5398
|
+
//
|
|
5399
|
+
// {
|
|
5400
|
+
// "success": true,
|
|
5401
|
+
// "code": 0,
|
|
5402
|
+
// "data": [
|
|
5403
|
+
// {
|
|
5404
|
+
// "level": 1,
|
|
5405
|
+
// "maxVol": 463300,
|
|
5406
|
+
// "mmr": 0.004,
|
|
5407
|
+
// "imr": 0.005,
|
|
5408
|
+
// "positionType": 1,
|
|
5409
|
+
// "openType": 1,
|
|
5410
|
+
// "leverage": 20,
|
|
5411
|
+
// "limitBySys": false,
|
|
5412
|
+
// "currentMmr": 0.004
|
|
5413
|
+
// },
|
|
5414
|
+
// {
|
|
5415
|
+
// "level": 1,
|
|
5416
|
+
// "maxVol": 463300,
|
|
5417
|
+
// "mmr": 0.004,
|
|
5418
|
+
// "imr": 0.005,
|
|
5419
|
+
// "positionType": 2,
|
|
5420
|
+
// "openType": 1,
|
|
5421
|
+
// "leverage": 20,
|
|
5422
|
+
// "limitBySys": false,
|
|
5423
|
+
// "currentMmr": 0.004
|
|
5424
|
+
// }
|
|
5425
|
+
// ]
|
|
5426
|
+
// }
|
|
5427
|
+
//
|
|
5428
|
+
const data = this.safeList(response, 'data', []);
|
|
5429
|
+
const longLeverage = this.safeDict(data, 0);
|
|
5430
|
+
return this.parseLeverage(longLeverage, market);
|
|
5431
|
+
}
|
|
5432
|
+
parseLeverage(leverage, market = undefined) {
|
|
5433
|
+
//
|
|
5434
|
+
// {
|
|
5435
|
+
// "level": 1,
|
|
5436
|
+
// "maxVol": 463300,
|
|
5437
|
+
// "mmr": 0.004,
|
|
5438
|
+
// "imr": 0.005,
|
|
5439
|
+
// "positionType": 1,
|
|
5440
|
+
// "openType": 1,
|
|
5441
|
+
// "leverage": 20,
|
|
5442
|
+
// "limitBySys": false,
|
|
5443
|
+
// "currentMmr": 0.004
|
|
5444
|
+
// }
|
|
5445
|
+
//
|
|
5446
|
+
const marketId = this.safeString(leverage, 'symbol');
|
|
5447
|
+
market = this.safeMarket(marketId, market, undefined, 'contract');
|
|
5448
|
+
return {
|
|
5449
|
+
'info': leverage,
|
|
5450
|
+
'symbol': market['symbol'],
|
|
5451
|
+
'leverage': this.safeInteger(leverage, 'leverage'),
|
|
5452
|
+
'marginMode': undefined,
|
|
5453
|
+
};
|
|
5454
|
+
}
|
|
5380
5455
|
handleMarginModeAndParams(methodName, params = {}, defaultValue = undefined) {
|
|
5381
5456
|
/**
|
|
5382
5457
|
* @ignore
|
package/js/src/pro/bitget.d.ts
CHANGED
|
@@ -34,7 +34,6 @@ export default class bitget extends bitgetRest {
|
|
|
34
34
|
parseWsOrderStatus(status: any): string;
|
|
35
35
|
watchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
36
36
|
handleMyTrades(client: Client, message: any): void;
|
|
37
|
-
parseWsMyTrade(trade: any, market?: any): Trade;
|
|
38
37
|
watchBalance(params?: {}): Promise<Balances>;
|
|
39
38
|
handleBalance(client: Client, message: any): void;
|
|
40
39
|
watchPublic(messageHash: any, args: any, params?: {}): Promise<any>;
|
package/js/src/pro/bitget.js
CHANGED
|
@@ -92,7 +92,10 @@ export default class bitget extends bitgetRest {
|
|
|
92
92
|
}
|
|
93
93
|
getInstType(market, params = {}) {
|
|
94
94
|
let instType = undefined;
|
|
95
|
-
if (
|
|
95
|
+
if (market === undefined) {
|
|
96
|
+
[instType, params] = this.handleProductTypeAndParams(undefined, params);
|
|
97
|
+
}
|
|
98
|
+
else if ((market['swap']) || (market['future'])) {
|
|
96
99
|
[instType, params] = this.handleProductTypeAndParams(market, params);
|
|
97
100
|
}
|
|
98
101
|
else {
|
|
@@ -669,9 +672,12 @@ export default class bitget extends bitgetRest {
|
|
|
669
672
|
stored = new ArrayCache(limit);
|
|
670
673
|
this.trades[symbol] = stored;
|
|
671
674
|
}
|
|
672
|
-
const data = this.
|
|
673
|
-
|
|
674
|
-
|
|
675
|
+
const data = this.safeList(message, 'data', []);
|
|
676
|
+
const length = data.length;
|
|
677
|
+
const maxLength = Math.max(length - 1, 0);
|
|
678
|
+
// fix chronological order by reversing
|
|
679
|
+
for (let i = maxLength; i >= 0; i--) {
|
|
680
|
+
const rawTrade = data[i];
|
|
675
681
|
const parsed = this.parseWsTrade(rawTrade, market);
|
|
676
682
|
stored.append(parsed);
|
|
677
683
|
}
|
|
@@ -688,22 +694,71 @@ export default class bitget extends bitgetRest {
|
|
|
688
694
|
// "tradeId": "1116461060594286593"
|
|
689
695
|
// }
|
|
690
696
|
//
|
|
691
|
-
|
|
692
|
-
|
|
697
|
+
// order with trade in it
|
|
698
|
+
// {
|
|
699
|
+
// accBaseVolume: '0.1',
|
|
700
|
+
// baseVolume: '0.1',
|
|
701
|
+
// cTime: '1709221342922',
|
|
702
|
+
// clientOid: '1147122943507734528',
|
|
703
|
+
// enterPointSource: 'API',
|
|
704
|
+
// feeDetail: [Array],
|
|
705
|
+
// fillFee: '-0.0049578',
|
|
706
|
+
// fillFeeCoin: 'USDT',
|
|
707
|
+
// fillNotionalUsd: '8.263',
|
|
708
|
+
// fillPrice: '82.63',
|
|
709
|
+
// fillTime: '1709221342986',
|
|
710
|
+
// force: 'gtc',
|
|
711
|
+
// instId: 'LTCUSDT',
|
|
712
|
+
// leverage: '10',
|
|
713
|
+
// marginCoin: 'USDT',
|
|
714
|
+
// marginMode: 'crossed',
|
|
715
|
+
// notionalUsd: '8.268',
|
|
716
|
+
// orderId: '1147122943499345921',
|
|
717
|
+
// orderType: 'market',
|
|
718
|
+
// pnl: '0',
|
|
719
|
+
// posMode: 'hedge_mode',
|
|
720
|
+
// posSide: 'short',
|
|
721
|
+
// price: '0',
|
|
722
|
+
// priceAvg: '82.63',
|
|
723
|
+
// reduceOnly: 'no',
|
|
724
|
+
// side: 'sell',
|
|
725
|
+
// size: '0.1',
|
|
726
|
+
// status: 'filled',
|
|
727
|
+
// tradeId: '1147122943772479563',
|
|
728
|
+
// tradeScope: 'T',
|
|
729
|
+
// tradeSide: 'open',
|
|
730
|
+
// uTime: '1709221342986'
|
|
731
|
+
// }
|
|
732
|
+
//
|
|
733
|
+
const instId = this.safeString(trade, 'instId');
|
|
734
|
+
if (market === undefined) {
|
|
735
|
+
market = this.safeMarket(instId, undefined, undefined, 'contract');
|
|
736
|
+
}
|
|
737
|
+
const timestamp = this.safeIntegerN(trade, ['uTime', 'cTime', 'ts']);
|
|
738
|
+
const feeCost = this.safeString(trade, 'fillFee');
|
|
739
|
+
let fee = undefined;
|
|
740
|
+
if (feeCost !== undefined) {
|
|
741
|
+
const feeCurrencyId = this.safeString(trade, 'fillFeeCoin');
|
|
742
|
+
const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
|
|
743
|
+
fee = {
|
|
744
|
+
'cost': Precise.stringAbs(feeCost),
|
|
745
|
+
'currency': feeCurrencyCode,
|
|
746
|
+
};
|
|
747
|
+
}
|
|
693
748
|
return this.safeTrade({
|
|
694
749
|
'info': trade,
|
|
695
750
|
'id': this.safeString(trade, 'tradeId'),
|
|
696
|
-
'order':
|
|
751
|
+
'order': this.safeString(trade, 'orderId'),
|
|
697
752
|
'timestamp': timestamp,
|
|
698
753
|
'datetime': this.iso8601(timestamp),
|
|
699
754
|
'symbol': market['symbol'],
|
|
700
755
|
'type': undefined,
|
|
701
756
|
'side': this.safeString(trade, 'side'),
|
|
702
757
|
'takerOrMaker': undefined,
|
|
703
|
-
'price': this.
|
|
758
|
+
'price': this.safeString2(trade, 'priceAvg', 'price'),
|
|
704
759
|
'amount': this.safeString(trade, 'size'),
|
|
705
|
-
'cost':
|
|
706
|
-
'fee':
|
|
760
|
+
'cost': this.safeString(trade, 'fillNotionalUsd'),
|
|
761
|
+
'fee': fee,
|
|
707
762
|
}, market);
|
|
708
763
|
}
|
|
709
764
|
async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -1108,6 +1163,9 @@ export default class bitget extends bitgetRest {
|
|
|
1108
1163
|
const marketSymbols = {};
|
|
1109
1164
|
for (let i = 0; i < data.length; i++) {
|
|
1110
1165
|
const order = data[i];
|
|
1166
|
+
if ('tradeId' in order) {
|
|
1167
|
+
this.handleMyTrades(client, order);
|
|
1168
|
+
}
|
|
1111
1169
|
const marketId = this.safeString(order, 'instId');
|
|
1112
1170
|
const market = this.safeMarket(marketId, undefined, undefined, marketType);
|
|
1113
1171
|
const parsed = this.parseWsOrder(order, market);
|
|
@@ -1373,7 +1431,7 @@ export default class bitget extends bitgetRest {
|
|
|
1373
1431
|
this.myTrades = new ArrayCache(limit);
|
|
1374
1432
|
}
|
|
1375
1433
|
const stored = this.myTrades;
|
|
1376
|
-
const parsed = this.
|
|
1434
|
+
const parsed = this.parseWsTrade(message);
|
|
1377
1435
|
stored.append(parsed);
|
|
1378
1436
|
const symbol = parsed['symbol'];
|
|
1379
1437
|
const messageHash = 'myTrades';
|
|
@@ -1381,68 +1439,6 @@ export default class bitget extends bitgetRest {
|
|
|
1381
1439
|
const symbolSpecificMessageHash = 'myTrades:' + symbol;
|
|
1382
1440
|
client.resolve(stored, symbolSpecificMessageHash);
|
|
1383
1441
|
}
|
|
1384
|
-
parseWsMyTrade(trade, market = undefined) {
|
|
1385
|
-
//
|
|
1386
|
-
// order and trade mixin (contract)
|
|
1387
|
-
//
|
|
1388
|
-
// {
|
|
1389
|
-
// "accBaseVolume": "0",
|
|
1390
|
-
// "cTime": "1701920553759",
|
|
1391
|
-
// "clientOid": "1116501214318198793",
|
|
1392
|
-
// "enterPointSource": "WEB",
|
|
1393
|
-
// "feeDetail": [{
|
|
1394
|
-
// "feeCoin": "USDT",
|
|
1395
|
-
// "fee": "-0.162003"
|
|
1396
|
-
// }],
|
|
1397
|
-
// "force": "gtc",
|
|
1398
|
-
// "instId": "BTCUSDT",
|
|
1399
|
-
// "leverage": "20",
|
|
1400
|
-
// "marginCoin": "USDT",
|
|
1401
|
-
// "marginMode": "isolated",
|
|
1402
|
-
// "notionalUsd": "105",
|
|
1403
|
-
// "orderId": "1116501214293032964",
|
|
1404
|
-
// "orderType": "limit",
|
|
1405
|
-
// "posMode": "hedge_mode",
|
|
1406
|
-
// "posSide": "long",
|
|
1407
|
-
// "price": "35000",
|
|
1408
|
-
// "reduceOnly": "no",
|
|
1409
|
-
// "side": "buy",
|
|
1410
|
-
// "size": "0.003",
|
|
1411
|
-
// "status": "canceled",
|
|
1412
|
-
// "tradeSide": "open",
|
|
1413
|
-
// "uTime": "1701920595866"
|
|
1414
|
-
// }
|
|
1415
|
-
//
|
|
1416
|
-
const marketId = this.safeString(trade, 'instId');
|
|
1417
|
-
market = this.safeMarket(marketId, market, undefined, 'contract');
|
|
1418
|
-
const timestamp = this.safeInteger2(trade, 'uTime', 'cTime');
|
|
1419
|
-
const orderFee = this.safeValue(trade, 'feeDetail', []);
|
|
1420
|
-
const fee = this.safeValue(orderFee, 0);
|
|
1421
|
-
const feeAmount = this.safeString(fee, 'fee');
|
|
1422
|
-
let feeObject = undefined;
|
|
1423
|
-
if (feeAmount !== undefined) {
|
|
1424
|
-
const feeCurrency = this.safeString(fee, 'feeCoin');
|
|
1425
|
-
feeObject = {
|
|
1426
|
-
'cost': Precise.stringAbs(feeAmount),
|
|
1427
|
-
'currency': this.safeCurrencyCode(feeCurrency),
|
|
1428
|
-
};
|
|
1429
|
-
}
|
|
1430
|
-
return this.safeTrade({
|
|
1431
|
-
'info': trade,
|
|
1432
|
-
'id': undefined,
|
|
1433
|
-
'order': this.safeString(trade, 'orderId'),
|
|
1434
|
-
'timestamp': timestamp,
|
|
1435
|
-
'datetime': this.iso8601(timestamp),
|
|
1436
|
-
'symbol': market['symbol'],
|
|
1437
|
-
'type': this.safeString(trade, 'orderType'),
|
|
1438
|
-
'side': this.safeString(trade, 'side'),
|
|
1439
|
-
'takerOrMaker': undefined,
|
|
1440
|
-
'price': this.safeString(trade, 'price'),
|
|
1441
|
-
'amount': this.safeString(trade, 'size'),
|
|
1442
|
-
'cost': this.safeString(trade, 'notionalUsd'),
|
|
1443
|
-
'fee': feeObject,
|
|
1444
|
-
}, market);
|
|
1445
|
-
}
|
|
1446
1442
|
async watchBalance(params = {}) {
|
|
1447
1443
|
/**
|
|
1448
1444
|
* @method
|
package/js/src/pro/bitmex.js
CHANGED
|
@@ -63,17 +63,9 @@ export default class bitmex extends bitmexRest {
|
|
|
63
63
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
64
64
|
*/
|
|
65
65
|
await this.loadMarkets();
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
const url = this.urls['api']['ws'];
|
|
70
|
-
const request = {
|
|
71
|
-
'op': 'subscribe',
|
|
72
|
-
'args': [
|
|
73
|
-
messageHash,
|
|
74
|
-
],
|
|
75
|
-
};
|
|
76
|
-
return await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
66
|
+
symbol = this.symbol(symbol);
|
|
67
|
+
const tickers = await this.watchTickers([symbol], params);
|
|
68
|
+
return tickers[symbol];
|
|
77
69
|
}
|
|
78
70
|
async watchTickers(symbols = undefined, params = {}) {
|
|
79
71
|
/**
|
|
@@ -89,26 +81,27 @@ export default class bitmex extends bitmexRest {
|
|
|
89
81
|
const name = 'instrument';
|
|
90
82
|
const url = this.urls['api']['ws'];
|
|
91
83
|
const messageHashes = [];
|
|
84
|
+
const rawSubscriptions = [];
|
|
92
85
|
if (symbols !== undefined) {
|
|
93
86
|
for (let i = 0; i < symbols.length; i++) {
|
|
94
87
|
const symbol = symbols[i];
|
|
95
88
|
const market = this.market(symbol);
|
|
96
|
-
const
|
|
97
|
-
|
|
89
|
+
const subscription = name + ':' + market['id'];
|
|
90
|
+
rawSubscriptions.push(subscription);
|
|
91
|
+
const messageHash = 'ticker:' + symbol;
|
|
92
|
+
messageHashes.push(messageHash);
|
|
98
93
|
}
|
|
99
94
|
}
|
|
100
95
|
else {
|
|
101
|
-
|
|
96
|
+
rawSubscriptions.push(name);
|
|
97
|
+
messageHashes.push('alltickers');
|
|
102
98
|
}
|
|
103
99
|
const request = {
|
|
104
100
|
'op': 'subscribe',
|
|
105
|
-
'args':
|
|
101
|
+
'args': rawSubscriptions,
|
|
106
102
|
};
|
|
107
|
-
const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params),
|
|
103
|
+
const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params), rawSubscriptions);
|
|
108
104
|
if (this.newUpdates) {
|
|
109
|
-
if (symbols === undefined) {
|
|
110
|
-
return ticker;
|
|
111
|
-
}
|
|
112
105
|
const result = {};
|
|
113
106
|
result[ticker['symbol']] = ticker;
|
|
114
107
|
return result;
|
|
@@ -342,23 +335,23 @@ export default class bitmex extends bitmexRest {
|
|
|
342
335
|
// ]
|
|
343
336
|
// }
|
|
344
337
|
//
|
|
345
|
-
const table = this.safeString(message, 'table');
|
|
346
338
|
const data = this.safeList(message, 'data', []);
|
|
347
339
|
const tickers = {};
|
|
348
340
|
for (let i = 0; i < data.length; i++) {
|
|
349
341
|
const update = data[i];
|
|
350
342
|
const marketId = this.safeString(update, 'symbol');
|
|
351
|
-
const
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
const
|
|
356
|
-
const
|
|
357
|
-
tickers[symbol] =
|
|
358
|
-
this.tickers[symbol] =
|
|
359
|
-
|
|
343
|
+
const symbol = this.safeSymbol(marketId);
|
|
344
|
+
if (!(symbol in this.tickers)) {
|
|
345
|
+
this.tickers[symbol] = this.parseTicker({});
|
|
346
|
+
}
|
|
347
|
+
const updatedTicker = this.parseTicker(update);
|
|
348
|
+
const fullParsedTicker = this.deepExtend(this.tickers[symbol], updatedTicker);
|
|
349
|
+
tickers[symbol] = fullParsedTicker;
|
|
350
|
+
this.tickers[symbol] = fullParsedTicker;
|
|
351
|
+
const messageHash = 'ticker:' + symbol;
|
|
352
|
+
client.resolve(fullParsedTicker, messageHash);
|
|
353
|
+
client.resolve(fullParsedTicker, 'alltickers');
|
|
360
354
|
}
|
|
361
|
-
client.resolve(tickers, 'instrument');
|
|
362
355
|
return message;
|
|
363
356
|
}
|
|
364
357
|
async watchBalance(params = {}) {
|
|
@@ -1338,7 +1331,7 @@ export default class bitmex extends bitmexRest {
|
|
|
1338
1331
|
const messageHash = table + ':' + market['id'];
|
|
1339
1332
|
const result = [
|
|
1340
1333
|
this.parse8601(this.safeString(candle, 'timestamp')) - duration * 1000,
|
|
1341
|
-
|
|
1334
|
+
undefined,
|
|
1342
1335
|
this.safeFloat(candle, 'high'),
|
|
1343
1336
|
this.safeFloat(candle, 'low'),
|
|
1344
1337
|
this.safeFloat(candle, 'close'),
|
package/js/src/pro/bybit.js
CHANGED
|
@@ -331,15 +331,29 @@ export default class bybit extends bybitRest {
|
|
|
331
331
|
// "price24hPcnt": "-0.0388"
|
|
332
332
|
// }
|
|
333
333
|
// }
|
|
334
|
+
// swap delta
|
|
335
|
+
// {
|
|
336
|
+
// "topic":"tickers.AAVEUSDT",
|
|
337
|
+
// "type":"delta",
|
|
338
|
+
// "data":{
|
|
339
|
+
// "symbol":"AAVEUSDT",
|
|
340
|
+
// "bid1Price":"112.89",
|
|
341
|
+
// "bid1Size":"2.12",
|
|
342
|
+
// "ask1Price":"112.90",
|
|
343
|
+
// "ask1Size":"5.02"
|
|
344
|
+
// },
|
|
345
|
+
// "cs":78039939929,
|
|
346
|
+
// "ts":1709210212704
|
|
347
|
+
// }
|
|
334
348
|
//
|
|
335
349
|
const topic = this.safeString(message, 'topic', '');
|
|
336
350
|
const updateType = this.safeString(message, 'type', '');
|
|
337
|
-
const data = this.
|
|
338
|
-
const isSpot = this.safeString(data, '
|
|
351
|
+
const data = this.safeDict(message, 'data', {});
|
|
352
|
+
const isSpot = this.safeString(data, 'usdIndexPrice') !== undefined;
|
|
339
353
|
const type = isSpot ? 'spot' : 'contract';
|
|
340
354
|
let symbol = undefined;
|
|
341
355
|
let parsed = undefined;
|
|
342
|
-
if ((updateType === 'snapshot')
|
|
356
|
+
if ((updateType === 'snapshot')) {
|
|
343
357
|
parsed = this.parseTicker(data);
|
|
344
358
|
symbol = parsed['symbol'];
|
|
345
359
|
}
|
|
@@ -350,8 +364,8 @@ export default class bybit extends bybitRest {
|
|
|
350
364
|
const market = this.safeMarket(marketId, undefined, undefined, type);
|
|
351
365
|
symbol = market['symbol'];
|
|
352
366
|
// update the info in place
|
|
353
|
-
const ticker = this.
|
|
354
|
-
const rawTicker = this.
|
|
367
|
+
const ticker = this.safeDict(this.tickers, symbol, {});
|
|
368
|
+
const rawTicker = this.safeDict(ticker, 'info', {});
|
|
355
369
|
const merged = this.extend(rawTicker, data);
|
|
356
370
|
parsed = this.parseTicker(merged);
|
|
357
371
|
}
|
package/js/src/pro/cex.js
CHANGED
|
@@ -1091,7 +1091,10 @@ export default class cex extends cexRest {
|
|
|
1091
1091
|
for (let i = 0; i < sorted.length; i++) {
|
|
1092
1092
|
stored.append(this.parseOHLCV(sorted[i], market));
|
|
1093
1093
|
}
|
|
1094
|
-
this.ohlcvs
|
|
1094
|
+
if (!(symbol in this.ohlcvs)) {
|
|
1095
|
+
this.ohlcvs[symbol] = {};
|
|
1096
|
+
}
|
|
1097
|
+
this.ohlcvs[symbol]['unknown'] = stored;
|
|
1095
1098
|
client.resolve(stored, messageHash);
|
|
1096
1099
|
}
|
|
1097
1100
|
handleOHLCV24(client, message) {
|
|
@@ -1150,7 +1153,8 @@ export default class cex extends cexRest {
|
|
|
1150
1153
|
const pair = this.safeString(message, 'pair');
|
|
1151
1154
|
const symbol = this.pairToSymbol(pair);
|
|
1152
1155
|
const messageHash = 'ohlcv:' + symbol;
|
|
1153
|
-
const stored = this.safeValue(this.ohlcvs, symbol);
|
|
1156
|
+
// const stored = this.safeValue (this.ohlcvs, symbol);
|
|
1157
|
+
const stored = this.ohlcvs[symbol]['unknown'];
|
|
1154
1158
|
for (let i = 0; i < data.length; i++) {
|
|
1155
1159
|
const ohlcv = [
|
|
1156
1160
|
this.safeTimestamp(data[i], 0),
|
package/js/src/pro/coinex.js
CHANGED
|
@@ -390,14 +390,17 @@ export default class coinex extends coinexRest {
|
|
|
390
390
|
const keys = Object.keys(this.ohlcvs);
|
|
391
391
|
const keysLength = keys.length;
|
|
392
392
|
if (keysLength === 0) {
|
|
393
|
+
this.ohlcvs['unknown'] = {};
|
|
393
394
|
const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
|
|
394
|
-
|
|
395
|
+
const stored = new ArrayCacheByTimestamp(limit);
|
|
396
|
+
this.ohlcvs['unknown']['unknown'] = stored;
|
|
395
397
|
}
|
|
398
|
+
const ohlcv = this.ohlcvs['unknown']['unknown'];
|
|
396
399
|
for (let i = 0; i < ohlcvs.length; i++) {
|
|
397
400
|
const candle = ohlcvs[i];
|
|
398
|
-
|
|
401
|
+
ohlcv.append(candle);
|
|
399
402
|
}
|
|
400
|
-
client.resolve(
|
|
403
|
+
client.resolve(ohlcv, messageHash);
|
|
401
404
|
}
|
|
402
405
|
async watchTicker(symbol, params = {}) {
|
|
403
406
|
/**
|
|
@@ -93,7 +93,7 @@ export default class currencycom extends currencycomRest {
|
|
|
93
93
|
// "accountId": 5470310874305732,
|
|
94
94
|
// "collateralCurrency": true,
|
|
95
95
|
// "asset": "USD",
|
|
96
|
-
// "free": 47.
|
|
96
|
+
// "free": 47.82576736,
|
|
97
97
|
// "locked": 1.187925,
|
|
98
98
|
// "default": true
|
|
99
99
|
// },
|
|
@@ -463,6 +463,7 @@ export default class currencycom extends currencycomRest {
|
|
|
463
463
|
orderbook = this.orderBook();
|
|
464
464
|
}
|
|
465
465
|
orderbook.reset({
|
|
466
|
+
'symbol': symbol,
|
|
466
467
|
'timestamp': timestamp,
|
|
467
468
|
'datetime': this.iso8601(timestamp),
|
|
468
469
|
});
|
package/js/src/pro/kraken.js
CHANGED
|
@@ -358,7 +358,7 @@ export default class kraken extends krakenRest {
|
|
|
358
358
|
// [
|
|
359
359
|
// 0, // channelID
|
|
360
360
|
// [ // price volume time side type misc
|
|
361
|
-
// [ "5541.20000", "0.15850568", "1534614057.
|
|
361
|
+
// [ "5541.20000", "0.15850568", "1534614057.321596", "s", "l", "" ],
|
|
362
362
|
// [ "6060.00000", "0.02455000", "1534614057.324998", "b", "l", "" ],
|
|
363
363
|
// ],
|
|
364
364
|
// "trade",
|
package/js/src/pro/mexc.js
CHANGED
|
@@ -247,7 +247,7 @@ export default class mexc extends mexcRest {
|
|
|
247
247
|
// "d": {
|
|
248
248
|
// "e": "spot@public.kline.v3.api",
|
|
249
249
|
// "k": {
|
|
250
|
-
// "t":
|
|
250
|
+
// "t": 1678642261,
|
|
251
251
|
// "o": 20626.94,
|
|
252
252
|
// "c": 20599.69,
|
|
253
253
|
// "h": 20626.94,
|
|
@@ -460,7 +460,7 @@ export default class mexc extends mexcRest {
|
|
|
460
460
|
client.subscriptions[messageHash] = 1;
|
|
461
461
|
this.orderbooks[symbol] = this.countedOrderBook({});
|
|
462
462
|
}
|
|
463
|
-
const storedOrderBook = this.
|
|
463
|
+
const storedOrderBook = this.orderbooks[symbol];
|
|
464
464
|
const nonce = this.safeInteger(storedOrderBook, 'nonce');
|
|
465
465
|
if (nonce === undefined) {
|
|
466
466
|
const cacheLength = storedOrderBook.cache.length;
|
package/js/src/pro/whitebit.js
CHANGED
|
@@ -117,15 +117,19 @@ export default class whitebit extends whitebitRest {
|
|
|
117
117
|
const symbol = market['symbol'];
|
|
118
118
|
const messageHash = 'candles' + ':' + symbol;
|
|
119
119
|
const parsed = this.parseOHLCV(data, market);
|
|
120
|
-
this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol);
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
// this.ohlcvs[symbol] = this.safeValue (this.ohlcvs, symbol);
|
|
121
|
+
if (!(symbol in this.ohlcvs)) {
|
|
122
|
+
this.ohlcvs[symbol] = {};
|
|
123
|
+
}
|
|
124
|
+
// let stored = this.ohlcvs[symbol]['unknown']; // we don't know the timeframe but we need to respect the type
|
|
125
|
+
if (!('unknown' in this.ohlcvs[symbol])) {
|
|
123
126
|
const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
|
|
124
|
-
stored = new ArrayCacheByTimestamp(limit);
|
|
125
|
-
this.ohlcvs[symbol] = stored;
|
|
127
|
+
const stored = new ArrayCacheByTimestamp(limit);
|
|
128
|
+
this.ohlcvs[symbol]['unknown'] = stored;
|
|
126
129
|
}
|
|
127
|
-
|
|
128
|
-
|
|
130
|
+
const ohlcv = this.ohlcvs[symbol]['unknown'];
|
|
131
|
+
ohlcv.append(parsed);
|
|
132
|
+
client.resolve(ohlcv, messageHash);
|
|
129
133
|
}
|
|
130
134
|
return message;
|
|
131
135
|
}
|
|
@@ -15,7 +15,7 @@ export declare class BigInteger {
|
|
|
15
15
|
protected intValue(): number;
|
|
16
16
|
protected byteValue(): number;
|
|
17
17
|
protected shortValue(): number;
|
|
18
|
-
protected signum():
|
|
18
|
+
protected signum(): 1 | 0 | -1;
|
|
19
19
|
toByteArray(): number[];
|
|
20
20
|
protected equals(a: BigInteger): boolean;
|
|
21
21
|
protected min(a: BigInteger): BigInteger;
|
package/js/src/upbit.js
CHANGED
|
@@ -619,7 +619,7 @@ export default class upbit extends Exchange {
|
|
|
619
619
|
// "trade_time": "104543",
|
|
620
620
|
// "trade_date_kst": "20181122",
|
|
621
621
|
// "trade_time_kst": "194543",
|
|
622
|
-
// "trade_timestamp":
|
|
622
|
+
// "trade_timestamp": 1542883543096,
|
|
623
623
|
// "opening_price": 0.02976455,
|
|
624
624
|
// "high_price": 0.02992577,
|
|
625
625
|
// "low_price": 0.02934283,
|
package/js/src/woo.d.ts
CHANGED
|
@@ -157,6 +157,7 @@ export default class woo extends Exchange {
|
|
|
157
157
|
}>;
|
|
158
158
|
fetchFundingRates(symbols?: Strings, params?: {}): Promise<any>;
|
|
159
159
|
fetchFundingRateHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<FundingRateHistory[]>;
|
|
160
|
+
setPositionMode(hedged: boolean, symbol?: Str, params?: {}): Promise<any>;
|
|
160
161
|
fetchLeverage(symbol: string, params?: {}): Promise<{
|
|
161
162
|
info: any;
|
|
162
163
|
leverage: number;
|