ccxt 4.2.29 → 4.2.31
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 +5 -6
- package/dist/ccxt.browser.js +2196 -601
- package/dist/ccxt.browser.min.js +7 -7
- package/dist/cjs/ccxt.js +3 -1
- package/dist/cjs/src/ascendex.js +5 -5
- package/dist/cjs/src/base/Exchange.js +33 -25
- package/dist/cjs/src/base/errors.js +3 -3
- package/dist/cjs/src/base/functions/type.js +12 -0
- package/dist/cjs/src/bigone.js +2 -2
- package/dist/cjs/src/binance.js +897 -218
- package/dist/cjs/src/bingx.js +1 -1
- package/dist/cjs/src/bitfinex.js +1 -1
- package/dist/cjs/src/bitfinex2.js +457 -93
- package/dist/cjs/src/bitforex.js +3 -0
- package/dist/cjs/src/bitget.js +8 -4
- package/dist/cjs/src/bitmart.js +3 -3
- package/dist/cjs/src/bitmex.js +4 -4
- package/dist/cjs/src/bitrue.js +1 -1
- package/dist/cjs/src/bitso.js +1 -1
- package/dist/cjs/src/bitteam.js +2 -2
- package/dist/cjs/src/btcalpha.js +1 -1
- package/dist/cjs/src/bybit.js +3 -3
- package/dist/cjs/src/coinbase.js +22 -5
- package/dist/cjs/src/coincheck.js +1 -1
- package/dist/cjs/src/coinex.js +2 -2
- package/dist/cjs/src/coinlist.js +1 -1
- package/dist/cjs/src/coinmate.js +1 -1
- package/dist/cjs/src/coinmetro.js +2 -2
- package/dist/cjs/src/coinsph.js +1 -1
- package/dist/cjs/src/cryptocom.js +3 -3
- package/dist/cjs/src/deribit.js +1 -0
- package/dist/cjs/src/digifinex.js +6 -4
- package/dist/cjs/src/exmo.js +2 -2
- package/dist/cjs/src/gate.js +5 -5
- package/dist/cjs/src/gemini.js +3 -3
- package/dist/cjs/src/hitbtc.js +14 -20
- package/dist/cjs/src/hollaex.js +2 -2
- package/dist/cjs/src/htx.js +6 -6
- package/dist/cjs/src/huobijp.js +1 -1
- package/dist/cjs/src/kraken.js +3 -1
- package/dist/cjs/src/krakenfutures.js +4 -1
- package/dist/cjs/src/kucoin.js +17 -17
- package/dist/cjs/src/kucoinfutures.js +3 -3
- package/dist/cjs/src/lbank.js +28 -27
- package/dist/cjs/src/mexc.js +7 -7
- package/dist/cjs/src/novadax.js +1 -1
- package/dist/cjs/src/okcoin.js +2 -2
- package/dist/cjs/src/okx.js +23 -8
- package/dist/cjs/src/p2b.js +1 -0
- package/dist/cjs/src/phemex.js +3 -3
- package/dist/cjs/src/poloniexfutures.js +6 -3
- package/dist/cjs/src/pro/alpaca.js +1 -1
- package/dist/cjs/src/pro/binance.js +4 -4
- package/dist/cjs/src/pro/bitget.js +1 -1
- package/dist/cjs/src/pro/bitmart.js +1 -1
- package/dist/cjs/src/pro/bitmex.js +49 -6
- package/dist/cjs/src/pro/bitvavo.js +1 -1
- package/dist/cjs/src/pro/bybit.js +2 -2
- package/dist/cjs/src/pro/cex.js +2 -2
- package/dist/cjs/src/pro/independentreserve.js +1 -1
- package/dist/cjs/src/pro/okx.js +1 -1
- package/dist/cjs/src/pro/onetrading.js +2 -2
- package/dist/cjs/src/pro/p2b.js +432 -0
- package/dist/cjs/src/pro/probit.js +5 -5
- package/dist/cjs/src/pro/whitebit.js +1 -1
- package/dist/cjs/src/probit.js +1 -1
- package/dist/cjs/src/timex.js +2 -2
- package/dist/cjs/src/tokocrypto.js +3 -3
- package/dist/cjs/src/wavesexchange.js +2 -2
- package/dist/cjs/src/whitebit.js +3 -3
- package/dist/cjs/src/woo.js +3 -3
- package/dist/cjs/src/yobit.js +1 -1
- package/dist/cjs/src/zaif.js +1 -1
- package/dist/cjs/src/zonda.js +3 -3
- package/js/ccxt.d.ts +4 -1
- package/js/ccxt.js +3 -1
- package/js/src/abstract/bybit.d.ts +2 -2
- package/js/src/abstract/coinbase.d.ts +10 -0
- package/js/src/abstract/okx.d.ts +12 -1
- package/js/src/ascendex.js +5 -5
- package/js/src/base/Exchange.d.ts +2 -2
- package/js/src/base/Exchange.js +33 -25
- package/js/src/base/errorHierarchy.d.ts +7 -6
- package/js/src/base/errorHierarchy.js +7 -6
- package/js/src/base/errors.d.ts +3 -3
- package/js/src/base/errors.js +3 -3
- package/js/src/base/functions/type.js +12 -0
- package/js/src/bigone.js +2 -2
- package/js/src/binance.d.ts +1 -0
- package/js/src/binance.js +898 -219
- package/js/src/bingx.js +1 -1
- package/js/src/bitfinex.js +1 -1
- package/js/src/bitfinex2.d.ts +6 -1
- package/js/src/bitfinex2.js +457 -93
- package/js/src/bitforex.js +3 -0
- package/js/src/bitget.js +8 -4
- package/js/src/bitmart.js +3 -3
- package/js/src/bitmex.js +4 -4
- package/js/src/bitrue.js +1 -1
- package/js/src/bitso.d.ts +1 -1
- package/js/src/bitso.js +1 -1
- package/js/src/bitteam.js +2 -2
- package/js/src/btcalpha.js +1 -1
- package/js/src/bybit.js +3 -3
- package/js/src/coinbase.js +22 -5
- package/js/src/coincheck.js +1 -1
- package/js/src/coinex.js +2 -2
- package/js/src/coinlist.js +1 -1
- package/js/src/coinmate.js +1 -1
- package/js/src/coinmetro.d.ts +1 -1
- package/js/src/coinmetro.js +2 -2
- package/js/src/coinsph.js +1 -1
- package/js/src/cryptocom.js +3 -3
- package/js/src/deribit.js +1 -0
- package/js/src/digifinex.js +6 -4
- package/js/src/exmo.js +2 -2
- package/js/src/gate.js +5 -5
- package/js/src/gemini.d.ts +1 -1
- package/js/src/gemini.js +3 -3
- package/js/src/hitbtc.js +14 -20
- package/js/src/hollaex.js +2 -2
- package/js/src/htx.js +6 -6
- package/js/src/huobijp.js +1 -1
- package/js/src/kraken.js +3 -1
- package/js/src/krakenfutures.js +4 -1
- package/js/src/kucoin.js +17 -17
- package/js/src/kucoinfutures.js +3 -3
- package/js/src/lbank.d.ts +1 -1
- package/js/src/lbank.js +28 -27
- package/js/src/mexc.js +7 -7
- package/js/src/novadax.js +1 -1
- package/js/src/okcoin.js +2 -2
- package/js/src/okx.js +23 -8
- package/js/src/p2b.js +1 -0
- package/js/src/phemex.js +3 -3
- package/js/src/poloniexfutures.js +6 -3
- package/js/src/pro/alpaca.js +1 -1
- package/js/src/pro/binance.js +4 -4
- package/js/src/pro/bitget.js +1 -1
- package/js/src/pro/bitmart.js +1 -1
- package/js/src/pro/bitmex.d.ts +2 -1
- package/js/src/pro/bitmex.js +49 -6
- package/js/src/pro/bitvavo.js +1 -1
- package/js/src/pro/bybit.js +2 -2
- package/js/src/pro/cex.js +2 -2
- package/js/src/pro/independentreserve.js +1 -1
- package/js/src/pro/okx.js +1 -1
- package/js/src/pro/onetrading.js +2 -2
- package/js/src/pro/p2b.d.ts +23 -0
- package/js/src/pro/p2b.js +433 -0
- package/js/src/pro/probit.js +5 -5
- package/js/src/pro/whitebit.js +1 -1
- package/js/src/probit.js +1 -1
- package/js/src/timex.js +2 -2
- package/js/src/tokocrypto.js +3 -3
- package/js/src/wavesexchange.js +2 -2
- package/js/src/whitebit.js +3 -3
- package/js/src/woo.js +3 -3
- package/js/src/yobit.js +1 -1
- package/js/src/zaif.js +1 -1
- package/js/src/zonda.d.ts +1 -1
- package/js/src/zonda.js +3 -3
- package/package.json +1 -1
- package/skip-tests.json +3 -10
package/js/src/okx.js
CHANGED
|
@@ -344,9 +344,11 @@ export default class okx extends Exchange {
|
|
|
344
344
|
'tradingBot/grid/sub-orders': 1,
|
|
345
345
|
'tradingBot/grid/positions': 1,
|
|
346
346
|
'tradingBot/grid/ai-param': 1,
|
|
347
|
-
'tradingBot/
|
|
347
|
+
'tradingBot/signal/signals': 1,
|
|
348
348
|
'tradingBot/signal/orders-algo-details': 1,
|
|
349
|
+
'tradingBot/signal/orders-algo-history': 1,
|
|
349
350
|
'tradingBot/signal/positions': 1,
|
|
351
|
+
'tradingBot/signal/positions-history': 1,
|
|
350
352
|
'tradingBot/signal/sub-orders': 1,
|
|
351
353
|
'tradingBot/signal/event-history': 1,
|
|
352
354
|
'tradingBot/recurring/orders-algo-pending': 1,
|
|
@@ -466,6 +468,15 @@ export default class okx extends Exchange {
|
|
|
466
468
|
'tradingBot/grid/compute-margin-balance': 1,
|
|
467
469
|
'tradingBot/grid/margin-balance': 1,
|
|
468
470
|
'tradingBot/grid/min-investment': 1,
|
|
471
|
+
'tradingBot/signal/create-signal': 1,
|
|
472
|
+
'tradingBot/signal/order-algo': 1,
|
|
473
|
+
'tradingBot/signal/stop-order-algo': 1,
|
|
474
|
+
'tradingBot/signal/margin-balance': 1,
|
|
475
|
+
'tradingBot/signal/amendTPSL': 1,
|
|
476
|
+
'tradingBot/signal/set-instruments': 1,
|
|
477
|
+
'tradingBot/signal/close-position': 1,
|
|
478
|
+
'tradingBot/signal/sub-order': 1,
|
|
479
|
+
'tradingBot/signal/cancel-sub-order': 1,
|
|
469
480
|
'tradingBot/recurring/order-algo': 1,
|
|
470
481
|
'tradingBot/recurring/amend-order-algo': 1,
|
|
471
482
|
'tradingBot/recurring/stop-order-algo': 1,
|
|
@@ -2141,7 +2152,8 @@ export default class okx extends Exchange {
|
|
|
2141
2152
|
if (since < historyBorder) {
|
|
2142
2153
|
defaultType = 'HistoryCandles';
|
|
2143
2154
|
}
|
|
2144
|
-
|
|
2155
|
+
const startTime = Math.max(since - 1, 0);
|
|
2156
|
+
request['before'] = startTime;
|
|
2145
2157
|
request['after'] = this.sum(since, durationInMilliseconds * limit);
|
|
2146
2158
|
}
|
|
2147
2159
|
const until = this.safeInteger(params, 'until');
|
|
@@ -3106,7 +3118,7 @@ export default class okx extends Exchange {
|
|
|
3106
3118
|
throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
|
|
3107
3119
|
}
|
|
3108
3120
|
const stop = this.safeValue2(params, 'stop', 'trigger');
|
|
3109
|
-
const trailing = this.
|
|
3121
|
+
const trailing = this.safeBool(params, 'trailing', false);
|
|
3110
3122
|
if (stop || trailing) {
|
|
3111
3123
|
const orderInner = await this.cancelOrders([id], symbol, params);
|
|
3112
3124
|
return this.safeValue(orderInner, 0);
|
|
@@ -3174,7 +3186,7 @@ export default class okx extends Exchange {
|
|
|
3174
3186
|
const clientOrderIds = this.parseIds(this.safeValue2(params, 'clOrdId', 'clientOrderId'));
|
|
3175
3187
|
const algoIds = this.parseIds(this.safeValue(params, 'algoId'));
|
|
3176
3188
|
const stop = this.safeValue2(params, 'stop', 'trigger');
|
|
3177
|
-
const trailing = this.
|
|
3189
|
+
const trailing = this.safeBool(params, 'trailing', false);
|
|
3178
3190
|
if (stop || trailing) {
|
|
3179
3191
|
method = 'privatePostTradeCancelAlgos';
|
|
3180
3192
|
}
|
|
@@ -3673,7 +3685,7 @@ export default class okx extends Exchange {
|
|
|
3673
3685
|
let method = this.safeString(params, 'method', defaultMethod);
|
|
3674
3686
|
const ordType = this.safeString(params, 'ordType');
|
|
3675
3687
|
const stop = this.safeValue2(params, 'stop', 'trigger');
|
|
3676
|
-
const trailing = this.
|
|
3688
|
+
const trailing = this.safeBool(params, 'trailing', false);
|
|
3677
3689
|
if (trailing || stop || (ordType in algoOrderTypes)) {
|
|
3678
3690
|
method = 'privateGetTradeOrdersAlgoPending';
|
|
3679
3691
|
}
|
|
@@ -3842,7 +3854,7 @@ export default class okx extends Exchange {
|
|
|
3842
3854
|
let method = this.safeString(params, 'method', defaultMethod);
|
|
3843
3855
|
const ordType = this.safeString(params, 'ordType');
|
|
3844
3856
|
const stop = this.safeValue2(params, 'stop', 'trigger');
|
|
3845
|
-
const trailing = this.
|
|
3857
|
+
const trailing = this.safeBool(params, 'trailing', false);
|
|
3846
3858
|
if (trailing) {
|
|
3847
3859
|
method = 'privateGetTradeOrdersAlgoHistory';
|
|
3848
3860
|
request['ordType'] = 'move_order_stop';
|
|
@@ -4036,7 +4048,7 @@ export default class okx extends Exchange {
|
|
|
4036
4048
|
let method = this.safeString(params, 'method', defaultMethod);
|
|
4037
4049
|
const ordType = this.safeString(params, 'ordType');
|
|
4038
4050
|
const stop = this.safeValue2(params, 'stop', 'trigger');
|
|
4039
|
-
const trailing = this.
|
|
4051
|
+
const trailing = this.safeBool(params, 'trailing', false);
|
|
4040
4052
|
if (trailing || stop || (ordType in algoOrderTypes)) {
|
|
4041
4053
|
method = 'privateGetTradeOrdersAlgoHistory';
|
|
4042
4054
|
request['state'] = 'effective';
|
|
@@ -4205,10 +4217,13 @@ export default class okx extends Exchange {
|
|
|
4205
4217
|
market = this.market(symbol);
|
|
4206
4218
|
request['instId'] = market['id'];
|
|
4207
4219
|
}
|
|
4220
|
+
if (since !== undefined) {
|
|
4221
|
+
request['begin'] = since;
|
|
4222
|
+
}
|
|
4208
4223
|
[request, params] = this.handleUntilOption('end', request, params);
|
|
4209
4224
|
const [type, query] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
|
|
4210
4225
|
request['instType'] = this.convertToInstrumentType(type);
|
|
4211
|
-
if (limit !== undefined) {
|
|
4226
|
+
if ((limit !== undefined) && (since === undefined)) { // let limit = n, okx will return the n most recent results, instead of the n results after limit, so limit should only be sent when since is undefined
|
|
4212
4227
|
request['limit'] = limit; // default 100, max 100
|
|
4213
4228
|
}
|
|
4214
4229
|
const response = await this.privateGetTradeFillsHistory(this.extend(request, query));
|
package/js/src/p2b.js
CHANGED
package/js/src/phemex.js
CHANGED
|
@@ -2420,7 +2420,7 @@ export default class phemex extends Exchange {
|
|
|
2420
2420
|
});
|
|
2421
2421
|
}
|
|
2422
2422
|
parseOrder(order, market = undefined) {
|
|
2423
|
-
const isSwap = this.
|
|
2423
|
+
const isSwap = this.safeBool(market, 'swap', false);
|
|
2424
2424
|
const hasPnl = ('closedPnl' in order);
|
|
2425
2425
|
if (isSwap || hasPnl) {
|
|
2426
2426
|
return this.parseSwapOrder(order, market);
|
|
@@ -4332,7 +4332,7 @@ export default class phemex extends Exchange {
|
|
|
4332
4332
|
throw new BadRequest(this.id + ' setLeverage() leverage should be between -100 and 100');
|
|
4333
4333
|
}
|
|
4334
4334
|
await this.loadMarkets();
|
|
4335
|
-
const isHedged = this.
|
|
4335
|
+
const isHedged = this.safeBool(params, 'hedged', false);
|
|
4336
4336
|
const longLeverageRr = this.safeInteger(params, 'longLeverageRr');
|
|
4337
4337
|
const shortLeverageRr = this.safeInteger(params, 'shortLeverageRr');
|
|
4338
4338
|
const market = this.market(symbol);
|
|
@@ -4428,7 +4428,7 @@ export default class phemex extends Exchange {
|
|
|
4428
4428
|
transfer = this.parseTransfer(response);
|
|
4429
4429
|
}
|
|
4430
4430
|
const transferOptions = this.safeValue(this.options, 'transfer', {});
|
|
4431
|
-
const fillResponseFromRequest = this.
|
|
4431
|
+
const fillResponseFromRequest = this.safeBool(transferOptions, 'fillResponseFromRequest', true);
|
|
4432
4432
|
if (fillResponseFromRequest) {
|
|
4433
4433
|
if (transfer['fromAccount'] === undefined) {
|
|
4434
4434
|
transfer['fromAccount'] = fromAccount;
|
|
@@ -37,6 +37,9 @@ export default class poloniexfutures extends Exchange {
|
|
|
37
37
|
'fetchBalance': true,
|
|
38
38
|
'fetchClosedOrders': true,
|
|
39
39
|
'fetchCurrencies': false,
|
|
40
|
+
'fetchDepositAddress': false,
|
|
41
|
+
'fetchDepositAddresses': false,
|
|
42
|
+
'fetchDepositAddressesByNetwork': false,
|
|
40
43
|
'fetchFundingRate': true,
|
|
41
44
|
'fetchFundingRateHistory': false,
|
|
42
45
|
'fetchL3OrderBook': true,
|
|
@@ -864,7 +867,7 @@ export default class poloniexfutures extends Exchange {
|
|
|
864
867
|
request['timeInForce'] = timeInForce;
|
|
865
868
|
}
|
|
866
869
|
}
|
|
867
|
-
const postOnly = this.
|
|
870
|
+
const postOnly = this.safeBool(params, 'postOnly', false);
|
|
868
871
|
const hidden = this.safeValue(params, 'hidden');
|
|
869
872
|
if (postOnly && (hidden !== undefined)) {
|
|
870
873
|
throw new BadRequest(this.id + ' createOrder() does not support the postOnly parameter together with a hidden parameter');
|
|
@@ -1555,8 +1558,8 @@ export default class poloniexfutures extends Exchange {
|
|
|
1555
1558
|
// precision reported by their api is 8 d.p.
|
|
1556
1559
|
// const average = Precise.stringDiv (rawCost, Precise.stringMul (filled, market['contractSize']));
|
|
1557
1560
|
// bool
|
|
1558
|
-
const isActive = this.
|
|
1559
|
-
const cancelExist = this.
|
|
1561
|
+
const isActive = this.safeBool(order, 'isActive', false);
|
|
1562
|
+
const cancelExist = this.safeBool(order, 'cancelExist', false);
|
|
1560
1563
|
const status = isActive ? 'open' : 'closed';
|
|
1561
1564
|
let id = this.safeString(order, 'id');
|
|
1562
1565
|
if ('cancelledOrderIds' in order) {
|
package/js/src/pro/alpaca.js
CHANGED
|
@@ -227,7 +227,7 @@ export default class alpaca extends alpacaRest {
|
|
|
227
227
|
const symbol = this.safeSymbol(marketId);
|
|
228
228
|
const datetime = this.safeString(message, 't');
|
|
229
229
|
const timestamp = this.parse8601(datetime);
|
|
230
|
-
const isSnapshot = this.
|
|
230
|
+
const isSnapshot = this.safeBool(message, 'r', false);
|
|
231
231
|
let orderbook = this.safeValue(this.orderbooks, symbol);
|
|
232
232
|
if (orderbook === undefined) {
|
|
233
233
|
orderbook = this.orderBook();
|
package/js/src/pro/binance.js
CHANGED
|
@@ -1273,7 +1273,7 @@ export default class binance extends binanceRest {
|
|
|
1273
1273
|
return undefined;
|
|
1274
1274
|
}
|
|
1275
1275
|
const options = this.safeValue(this.options, 'watchBalance');
|
|
1276
|
-
const fetchBalanceSnapshot = this.
|
|
1276
|
+
const fetchBalanceSnapshot = this.safeBool(options, 'fetchBalanceSnapshot', false);
|
|
1277
1277
|
if (fetchBalanceSnapshot) {
|
|
1278
1278
|
const messageHash = type + ':fetchBalanceSnapshot';
|
|
1279
1279
|
if (!(messageHash in client.futures)) {
|
|
@@ -1399,8 +1399,8 @@ export default class binance extends binanceRest {
|
|
|
1399
1399
|
this.setBalanceCache(client, type);
|
|
1400
1400
|
this.setPositionsCache(client, type);
|
|
1401
1401
|
const options = this.safeValue(this.options, 'watchBalance');
|
|
1402
|
-
const fetchBalanceSnapshot = this.
|
|
1403
|
-
const awaitBalanceSnapshot = this.
|
|
1402
|
+
const fetchBalanceSnapshot = this.safeBool(options, 'fetchBalanceSnapshot', false);
|
|
1403
|
+
const awaitBalanceSnapshot = this.safeBool(options, 'awaitBalanceSnapshot', true);
|
|
1404
1404
|
if (fetchBalanceSnapshot && awaitBalanceSnapshot) {
|
|
1405
1405
|
await client.future(type + ':fetchBalanceSnapshot');
|
|
1406
1406
|
}
|
|
@@ -1561,7 +1561,7 @@ export default class binance extends binanceRest {
|
|
|
1561
1561
|
let returnRateLimits = false;
|
|
1562
1562
|
[returnRateLimits, params] = this.handleOptionAndParams(params, 'createOrderWs', 'returnRateLimits', false);
|
|
1563
1563
|
payload['returnRateLimits'] = returnRateLimits;
|
|
1564
|
-
const test = this.
|
|
1564
|
+
const test = this.safeBool(params, 'test', false);
|
|
1565
1565
|
params = this.omit(params, 'test');
|
|
1566
1566
|
const message = {
|
|
1567
1567
|
'id': messageHash,
|
package/js/src/pro/bitget.js
CHANGED
|
@@ -895,7 +895,7 @@ export default class bitget extends bitgetRest {
|
|
|
895
895
|
await this.loadMarkets();
|
|
896
896
|
let market = undefined;
|
|
897
897
|
let marketId = undefined;
|
|
898
|
-
const isStop = this.
|
|
898
|
+
const isStop = this.safeBool(params, 'stop', false);
|
|
899
899
|
params = this.omit(params, 'stop');
|
|
900
900
|
let messageHash = (isStop) ? 'triggerOrder' : 'order';
|
|
901
901
|
let subscriptionHash = 'order:trades';
|
package/js/src/pro/bitmart.js
CHANGED
|
@@ -146,7 +146,7 @@ export default class bitmart extends bitmartRest {
|
|
|
146
146
|
return;
|
|
147
147
|
}
|
|
148
148
|
const options = this.safeValue(this.options, 'watchBalance');
|
|
149
|
-
const snapshot = this.
|
|
149
|
+
const snapshot = this.safeBool(options, 'fetchBalanceSnapshot', true);
|
|
150
150
|
if (snapshot) {
|
|
151
151
|
const messageHash = type + ':' + 'fetchBalanceSnapshot';
|
|
152
152
|
if (!(messageHash in client.futures)) {
|
package/js/src/pro/bitmex.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import bitmexRest from '../bitmex.js';
|
|
2
|
-
import type { Int, Str, Strings, OrderBook, Order, Trade, Ticker, OHLCV, Position, Balances } from '../base/types.js';
|
|
2
|
+
import type { Int, Str, Strings, OrderBook, Order, Trade, Ticker, Tickers, OHLCV, Position, Balances } from '../base/types.js';
|
|
3
3
|
import Client from '../base/ws/Client.js';
|
|
4
4
|
export default class bitmex extends bitmexRest {
|
|
5
5
|
describe(): any;
|
|
6
6
|
watchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
7
|
+
watchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
7
8
|
handleTicker(client: Client, message: any): any;
|
|
8
9
|
watchBalance(params?: {}): Promise<Balances>;
|
|
9
10
|
handleBalance(client: Client, message: any): void;
|
package/js/src/pro/bitmex.js
CHANGED
|
@@ -23,7 +23,7 @@ export default class bitmex extends bitmexRest {
|
|
|
23
23
|
'watchOrders': true,
|
|
24
24
|
'watchPostions': true,
|
|
25
25
|
'watchTicker': true,
|
|
26
|
-
'watchTickers':
|
|
26
|
+
'watchTickers': true,
|
|
27
27
|
'watchTrades': true,
|
|
28
28
|
'watchTradesForSymbols': true,
|
|
29
29
|
},
|
|
@@ -75,6 +75,46 @@ export default class bitmex extends bitmexRest {
|
|
|
75
75
|
};
|
|
76
76
|
return await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
77
77
|
}
|
|
78
|
+
async watchTickers(symbols = undefined, params = {}) {
|
|
79
|
+
/**
|
|
80
|
+
* @method
|
|
81
|
+
* @name bitmex#watchTickers
|
|
82
|
+
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
83
|
+
* @param {string[]} symbols unified symbol of the market to fetch the ticker for
|
|
84
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
85
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
86
|
+
*/
|
|
87
|
+
await this.loadMarkets();
|
|
88
|
+
symbols = this.marketSymbols(symbols, undefined, true);
|
|
89
|
+
const name = 'instrument';
|
|
90
|
+
const url = this.urls['api']['ws'];
|
|
91
|
+
const messageHashes = [];
|
|
92
|
+
if (symbols !== undefined) {
|
|
93
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
94
|
+
const symbol = symbols[i];
|
|
95
|
+
const market = this.market(symbol);
|
|
96
|
+
const hash = name + ':' + market['id'];
|
|
97
|
+
messageHashes.push(hash);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
messageHashes.push(name);
|
|
102
|
+
}
|
|
103
|
+
const request = {
|
|
104
|
+
'op': 'subscribe',
|
|
105
|
+
'args': messageHashes,
|
|
106
|
+
};
|
|
107
|
+
const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes);
|
|
108
|
+
if (this.newUpdates) {
|
|
109
|
+
if (symbols === undefined) {
|
|
110
|
+
return ticker;
|
|
111
|
+
}
|
|
112
|
+
const result = {};
|
|
113
|
+
result[ticker['symbol']] = ticker;
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
return this.filterByArray(this.tickers, 'symbol', symbols);
|
|
117
|
+
}
|
|
78
118
|
handleTicker(client, message) {
|
|
79
119
|
//
|
|
80
120
|
// {
|
|
@@ -303,19 +343,22 @@ export default class bitmex extends bitmexRest {
|
|
|
303
343
|
// }
|
|
304
344
|
//
|
|
305
345
|
const table = this.safeString(message, 'table');
|
|
306
|
-
const data = this.
|
|
346
|
+
const data = this.safeList(message, 'data', []);
|
|
347
|
+
const tickers = {};
|
|
307
348
|
for (let i = 0; i < data.length; i++) {
|
|
308
349
|
const update = data[i];
|
|
309
|
-
const marketId = this.
|
|
350
|
+
const marketId = this.safeString(update, 'symbol');
|
|
310
351
|
const market = this.safeMarket(marketId);
|
|
311
352
|
const symbol = market['symbol'];
|
|
312
353
|
const messageHash = table + ':' + marketId;
|
|
313
|
-
let ticker = this.
|
|
314
|
-
const info = this.
|
|
354
|
+
let ticker = this.safeDict(this.tickers, symbol, {});
|
|
355
|
+
const info = this.safeDict(ticker, 'info', {});
|
|
315
356
|
ticker = this.parseTicker(this.extend(info, update), market);
|
|
357
|
+
tickers[symbol] = ticker;
|
|
316
358
|
this.tickers[symbol] = ticker;
|
|
317
359
|
client.resolve(ticker, messageHash);
|
|
318
360
|
}
|
|
361
|
+
client.resolve(tickers, 'instrument');
|
|
319
362
|
return message;
|
|
320
363
|
}
|
|
321
364
|
async watchBalance(params = {}) {
|
|
@@ -579,7 +622,7 @@ export default class bitmex extends bitmexRest {
|
|
|
579
622
|
return future;
|
|
580
623
|
}
|
|
581
624
|
handleAuthenticationMessage(client, message) {
|
|
582
|
-
const authenticated = this.
|
|
625
|
+
const authenticated = this.safeBool(message, 'success', false);
|
|
583
626
|
const messageHash = 'authenticated';
|
|
584
627
|
if (authenticated) {
|
|
585
628
|
// we resolve the future here permanently so authentication only happens once
|
package/js/src/pro/bitvavo.js
CHANGED
|
@@ -1228,7 +1228,7 @@ export default class bitvavo extends bitvavoRest {
|
|
|
1228
1228
|
// }
|
|
1229
1229
|
//
|
|
1230
1230
|
const messageHash = 'authenticated';
|
|
1231
|
-
const authenticated = this.
|
|
1231
|
+
const authenticated = this.safeBool(message, 'authenticated', false);
|
|
1232
1232
|
if (authenticated) {
|
|
1233
1233
|
// we resolve the future here permanently so authentication only happens once
|
|
1234
1234
|
client.resolve(message, messageHash);
|
package/js/src/pro/bybit.js
CHANGED
|
@@ -1345,8 +1345,8 @@ export default class bybit extends bybitRest {
|
|
|
1345
1345
|
let subType = undefined;
|
|
1346
1346
|
[subType, params] = this.handleSubTypeAndParams('watchBalance', undefined, params);
|
|
1347
1347
|
const unified = await this.isUnifiedEnabled();
|
|
1348
|
-
const isUnifiedMargin = this.
|
|
1349
|
-
const isUnifiedAccount = this.
|
|
1348
|
+
const isUnifiedMargin = this.safeBool(unified, 0, false);
|
|
1349
|
+
const isUnifiedAccount = this.safeBool(unified, 1, false);
|
|
1350
1350
|
const url = this.getUrlByMarketType(undefined, true, method, params);
|
|
1351
1351
|
await this.authenticate(url);
|
|
1352
1352
|
const topicByMarket = {
|
package/js/src/pro/cex.js
CHANGED
|
@@ -720,7 +720,7 @@ export default class cex extends cexRest {
|
|
|
720
720
|
order = this.parseWsOrderUpdate(data, market);
|
|
721
721
|
}
|
|
722
722
|
order['remaining'] = remains;
|
|
723
|
-
const canceled = this.
|
|
723
|
+
const canceled = this.safeBool(data, 'cancel', false);
|
|
724
724
|
if (canceled) {
|
|
725
725
|
order['status'] = 'canceled';
|
|
726
726
|
}
|
|
@@ -809,7 +809,7 @@ export default class cex extends cexRest {
|
|
|
809
809
|
if (isTransaction) {
|
|
810
810
|
timestamp = this.parse8601(time);
|
|
811
811
|
}
|
|
812
|
-
const canceled = this.
|
|
812
|
+
const canceled = this.safeBool(order, 'cancel', false);
|
|
813
813
|
let status = 'open';
|
|
814
814
|
if (canceled) {
|
|
815
815
|
status = 'canceled';
|
|
@@ -179,7 +179,7 @@ export default class independentreserve extends independentreserveRest {
|
|
|
179
179
|
const orderBook = this.safeValue(message, 'Data', {});
|
|
180
180
|
const messageHash = 'orderbook:' + symbol + ':' + depth;
|
|
181
181
|
const subscription = this.safeValue(client.subscriptions, messageHash, {});
|
|
182
|
-
const receivedSnapshot = this.
|
|
182
|
+
const receivedSnapshot = this.safeBool(subscription, 'receivedSnapshot', false);
|
|
183
183
|
const timestamp = this.safeInteger(message, 'Time');
|
|
184
184
|
let storedOrderBook = this.safeValue(this.orderbooks, symbol);
|
|
185
185
|
if (storedOrderBook === undefined) {
|
package/js/src/pro/okx.js
CHANGED
|
@@ -867,7 +867,7 @@ export default class okx extends okxRest {
|
|
|
867
867
|
// By default, receive order updates from any instrument type
|
|
868
868
|
let type = undefined;
|
|
869
869
|
[type, params] = this.handleOptionAndParams(params, 'watchMyTrades', 'type', 'ANY');
|
|
870
|
-
const isStop = this.
|
|
870
|
+
const isStop = this.safeBool(params, 'stop', false);
|
|
871
871
|
params = this.omit(params, ['stop']);
|
|
872
872
|
await this.loadMarkets();
|
|
873
873
|
await this.authenticate({ 'access': isStop ? 'business' : 'private' });
|
package/js/src/pro/onetrading.js
CHANGED
|
@@ -1060,7 +1060,7 @@ export default class onetrading extends onetradingRest {
|
|
|
1060
1060
|
subscription = this.safeValue(client.subscriptions, subscriptionHash);
|
|
1061
1061
|
if (subscription !== undefined) {
|
|
1062
1062
|
const ohlcvMarket = this.safeValue(subscription, marketId, {});
|
|
1063
|
-
const marketSubscribed = this.
|
|
1063
|
+
const marketSubscribed = this.safeBool(ohlcvMarket, timeframe, false);
|
|
1064
1064
|
if (!marketSubscribed) {
|
|
1065
1065
|
type = 'UPDATE_SUBSCRIPTION';
|
|
1066
1066
|
client.subscriptions[subscriptionHash] = undefined;
|
|
@@ -1301,7 +1301,7 @@ export default class onetrading extends onetradingRest {
|
|
|
1301
1301
|
if (subscription !== undefined) {
|
|
1302
1302
|
for (let i = 0; i < marketIds.length; i++) {
|
|
1303
1303
|
const marketId = marketIds[i];
|
|
1304
|
-
const marketSubscribed = this.
|
|
1304
|
+
const marketSubscribed = this.safeBool(subscription, marketId, false);
|
|
1305
1305
|
if (!marketSubscribed) {
|
|
1306
1306
|
type = 'UPDATE_SUBSCRIPTION';
|
|
1307
1307
|
client.subscriptions[subscriptionHash] = undefined;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import p2bRest from '../p2b.js';
|
|
2
|
+
import type { Int, OHLCV, OrderBook, Trade, Ticker } from '../base/types.js';
|
|
3
|
+
import Client from '../base/ws/Client.js';
|
|
4
|
+
export default class p2b extends p2bRest {
|
|
5
|
+
describe(): any;
|
|
6
|
+
subscribe(name: string, messageHash: string, request: any, params?: {}): Promise<any>;
|
|
7
|
+
watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
8
|
+
watchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
9
|
+
watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
10
|
+
watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
11
|
+
handleOHLCV(client: Client, message: any): any;
|
|
12
|
+
handleTrade(client: Client, message: any): any;
|
|
13
|
+
handleTicker(client: Client, message: any): any;
|
|
14
|
+
handleOrderBook(client: Client, message: any): void;
|
|
15
|
+
handleMessage(client: Client, message: any): any;
|
|
16
|
+
handleErrorMessage(client: Client, message: any): boolean;
|
|
17
|
+
ping(client: any): {
|
|
18
|
+
method: string;
|
|
19
|
+
params: any[];
|
|
20
|
+
id: number;
|
|
21
|
+
};
|
|
22
|
+
handlePong(client: Client, message: any): any;
|
|
23
|
+
}
|