ccxt 4.2.56 → 4.2.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/ccxt.browser.js +818 -335
- package/dist/ccxt.browser.min.js +7 -7
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/alpaca.js +90 -88
- package/dist/cjs/src/base/Exchange.js +53 -3
- package/dist/cjs/src/binance.js +196 -28
- package/dist/cjs/src/bingx.js +12 -1
- package/dist/cjs/src/bitget.js +71 -56
- package/dist/cjs/src/bitmex.js +26 -1
- package/dist/cjs/src/bitrue.js +24 -15
- package/dist/cjs/src/blofin.js +24 -1
- package/dist/cjs/src/bybit.js +11 -3
- package/dist/cjs/src/currencycom.js +15 -5
- package/dist/cjs/src/delta.js +14 -1
- package/dist/cjs/src/gate.js +1 -1
- package/dist/cjs/src/hitbtc.js +63 -55
- package/dist/cjs/src/krakenfutures.js +22 -7
- package/dist/cjs/src/kuna.js +14 -11
- package/dist/cjs/src/mexc.js +75 -0
- package/dist/cjs/src/okx.js +31 -1
- package/dist/cjs/src/pro/alpaca.js +1 -1
- package/dist/cjs/src/pro/bitmex.js +23 -32
- package/dist/cjs/src/pro/cex.js +6 -2
- package/dist/cjs/src/pro/coinex.js +6 -3
- package/dist/cjs/src/pro/mexc.js +2 -2
- package/dist/cjs/src/pro/whitebit.js +15 -13
- package/dist/cjs/src/probit.js +1 -1
- package/dist/cjs/src/wavesexchange.js +1 -1
- package/dist/cjs/src/woo.js +20 -4
- package/js/ccxt.d.ts +3 -3
- package/js/ccxt.js +1 -1
- package/js/src/alpaca.js +90 -88
- package/js/src/base/Exchange.d.ts +14 -6
- package/js/src/base/Exchange.js +53 -3
- package/js/src/base/types.d.ts +12 -1
- package/js/src/binance.d.ts +5 -2
- package/js/src/binance.js +196 -28
- package/js/src/bingx.d.ts +3 -2
- package/js/src/bingx.js +12 -1
- package/js/src/bitget.d.ts +3 -2
- package/js/src/bitget.js +71 -56
- package/js/src/bitmex.d.ts +3 -1
- package/js/src/bitmex.js +26 -1
- package/js/src/bitrue.js +24 -15
- package/js/src/blofin.d.ts +3 -2
- package/js/src/blofin.js +24 -1
- package/js/src/bybit.d.ts +3 -6
- package/js/src/bybit.js +11 -3
- package/js/src/currencycom.d.ts +3 -2
- package/js/src/currencycom.js +15 -5
- package/js/src/delta.d.ts +3 -2
- package/js/src/delta.js +14 -1
- package/js/src/gate.js +1 -1
- package/js/src/hitbtc.d.ts +5 -3
- package/js/src/hitbtc.js +63 -55
- package/js/src/krakenfutures.d.ts +3 -2
- package/js/src/krakenfutures.js +22 -7
- package/js/src/kuna.js +14 -11
- package/js/src/mexc.d.ts +3 -1
- package/js/src/mexc.js +75 -0
- package/js/src/okx.d.ts +3 -2
- package/js/src/okx.js +31 -1
- package/js/src/pro/alpaca.js +1 -1
- package/js/src/pro/bitmex.js +24 -31
- package/js/src/pro/cex.js +6 -2
- package/js/src/pro/coinex.js +6 -3
- package/js/src/pro/mexc.js +2 -2
- package/js/src/pro/whitebit.js +15 -13
- package/js/src/probit.js +1 -1
- package/js/src/wavesexchange.js +1 -1
- package/js/src/woo.d.ts +3 -5
- package/js/src/woo.js +20 -4
- package/package.json +1 -1
- package/skip-tests.json +26 -8
package/js/src/delta.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/delta.js';
|
|
2
|
-
import type { Balances, Currency, Greeks, Int, Market, MarketInterface, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Position } from './base/types.js';
|
|
2
|
+
import type { Balances, Currency, Greeks, Int, Market, MarketInterface, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Position, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class delta
|
|
5
5
|
* @augments Exchange
|
|
@@ -153,7 +153,8 @@ export default class delta extends Exchange {
|
|
|
153
153
|
};
|
|
154
154
|
fetchOpenInterest(symbol: string, params?: {}): Promise<import("./base/types.js").OpenInterest>;
|
|
155
155
|
parseOpenInterest(interest: any, market?: Market): import("./base/types.js").OpenInterest;
|
|
156
|
-
fetchLeverage(symbol: string, params?: {}): Promise<
|
|
156
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
157
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
157
158
|
setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
|
|
158
159
|
fetchSettlementHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<any>;
|
|
159
160
|
parseSettlement(settlement: any, market: any): {
|
package/js/src/delta.js
CHANGED
|
@@ -2814,6 +2814,7 @@ export default class delta extends Exchange {
|
|
|
2814
2814
|
const request = {
|
|
2815
2815
|
'product_id': market['numericId'],
|
|
2816
2816
|
};
|
|
2817
|
+
const response = await this.privateGetProductsProductIdOrdersLeverage(this.extend(request, params));
|
|
2817
2818
|
//
|
|
2818
2819
|
// {
|
|
2819
2820
|
// "result": {
|
|
@@ -2827,7 +2828,19 @@ export default class delta extends Exchange {
|
|
|
2827
2828
|
// "success": true
|
|
2828
2829
|
// }
|
|
2829
2830
|
//
|
|
2830
|
-
|
|
2831
|
+
const result = this.safeDict(response, 'result', {});
|
|
2832
|
+
return this.parseLeverage(result, market);
|
|
2833
|
+
}
|
|
2834
|
+
parseLeverage(leverage, market = undefined) {
|
|
2835
|
+
const marketId = this.safeString(leverage, 'index_symbol');
|
|
2836
|
+
const leverageValue = this.safeInteger(leverage, 'leverage');
|
|
2837
|
+
return {
|
|
2838
|
+
'info': leverage,
|
|
2839
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
2840
|
+
'marginMode': this.safeStringLower(leverage, 'margin_mode'),
|
|
2841
|
+
'longLeverage': leverageValue,
|
|
2842
|
+
'shortLeverage': leverageValue,
|
|
2843
|
+
};
|
|
2831
2844
|
}
|
|
2832
2845
|
async setLeverage(leverage, symbol = undefined, params = {}) {
|
|
2833
2846
|
/**
|
package/js/src/gate.js
CHANGED
|
@@ -962,7 +962,7 @@ export default class gate extends Exchange {
|
|
|
962
962
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
963
963
|
* @returns {object[]} an array of objects representing market data
|
|
964
964
|
*/
|
|
965
|
-
const sandboxMode = this.
|
|
965
|
+
const sandboxMode = this.safeBool(this.options, 'sandboxMode', false);
|
|
966
966
|
let rawPromises = [
|
|
967
967
|
this.fetchContractMarkets(params),
|
|
968
968
|
this.fetchOptionMarkets(params),
|
package/js/src/hitbtc.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/hitbtc.js';
|
|
2
|
-
import type { TransferEntry, Int, OrderSide, OrderType, FundingRateHistory, OHLCV, Ticker, Order, OrderBook, Dictionary, Position, Str, Trade, Balances, Transaction, MarginMode, Tickers, Strings, Market, Currency } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, Int, OrderSide, OrderType, FundingRateHistory, OHLCV, Ticker, Order, OrderBook, Dictionary, Position, Str, Trade, Balances, Transaction, MarginMode, Tickers, Strings, Market, Currency, MarginModes, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class hitbtc
|
|
5
5
|
* @augments Exchange
|
|
@@ -69,7 +69,8 @@ export default class hitbtc extends Exchange {
|
|
|
69
69
|
createOrderRequest(market: object, marketType: string, type: OrderType, side: OrderSide, amount: any, price?: any, marginMode?: Str, params?: {}): {}[];
|
|
70
70
|
parseOrderStatus(status: any): string;
|
|
71
71
|
parseOrder(order: any, market?: Market): Order;
|
|
72
|
-
|
|
72
|
+
fetchMarginModes(symbols?: Str[], params?: {}): Promise<MarginModes>;
|
|
73
|
+
parseMarginMode(marginMode: any, market?: any): MarginMode;
|
|
73
74
|
transfer(code: string, amount: number, fromAccount: string, toAccount: string, params?: {}): Promise<TransferEntry>;
|
|
74
75
|
parseTransfer(transfer: any, currency?: Currency): {
|
|
75
76
|
id: string;
|
|
@@ -142,7 +143,8 @@ export default class hitbtc extends Exchange {
|
|
|
142
143
|
};
|
|
143
144
|
reduceMargin(symbol: string, amount: any, params?: {}): Promise<any>;
|
|
144
145
|
addMargin(symbol: string, amount: any, params?: {}): Promise<any>;
|
|
145
|
-
fetchLeverage(symbol: string, params?: {}): Promise<
|
|
146
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
147
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
146
148
|
setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
|
|
147
149
|
fetchDepositWithdrawFees(codes?: Strings, params?: {}): Promise<any>;
|
|
148
150
|
parseDepositWithdrawFee(fee: any, currency?: Currency): any;
|
package/js/src/hitbtc.js
CHANGED
|
@@ -66,7 +66,8 @@ export default class hitbtc extends Exchange {
|
|
|
66
66
|
'fetchLeverage': true,
|
|
67
67
|
'fetchLeverageTiers': undefined,
|
|
68
68
|
'fetchLiquidations': false,
|
|
69
|
-
'fetchMarginMode':
|
|
69
|
+
'fetchMarginMode': 'emulated',
|
|
70
|
+
'fetchMarginModes': true,
|
|
70
71
|
'fetchMarketLeverageTiers': false,
|
|
71
72
|
'fetchMarkets': true,
|
|
72
73
|
'fetchMarkOHLCV': true,
|
|
@@ -2510,7 +2511,7 @@ export default class hitbtc extends Exchange {
|
|
|
2510
2511
|
'stopLossPrice': undefined,
|
|
2511
2512
|
}, market);
|
|
2512
2513
|
}
|
|
2513
|
-
async
|
|
2514
|
+
async fetchMarginModes(symbols = undefined, params = {}) {
|
|
2514
2515
|
/**
|
|
2515
2516
|
* @method
|
|
2516
2517
|
* @name hitbtc#fetchMarginMode
|
|
@@ -2523,70 +2524,66 @@ export default class hitbtc extends Exchange {
|
|
|
2523
2524
|
*/
|
|
2524
2525
|
await this.loadMarkets();
|
|
2525
2526
|
let market = undefined;
|
|
2526
|
-
if (
|
|
2527
|
-
|
|
2527
|
+
if (symbols !== undefined) {
|
|
2528
|
+
symbols = this.marketSymbols(symbols);
|
|
2529
|
+
market = this.market(symbols[0]);
|
|
2528
2530
|
}
|
|
2529
2531
|
let marketType = undefined;
|
|
2530
2532
|
[marketType, params] = this.handleMarketTypeAndParams('fetchMarginMode', market, params);
|
|
2531
2533
|
let response = undefined;
|
|
2532
2534
|
if (marketType === 'margin') {
|
|
2533
2535
|
response = await this.privateGetMarginConfig(params);
|
|
2536
|
+
//
|
|
2537
|
+
// {
|
|
2538
|
+
// "config": [{
|
|
2539
|
+
// "symbol": "BTCUSD",
|
|
2540
|
+
// "margin_call_leverage_mul": "1.50",
|
|
2541
|
+
// "liquidation_leverage_mul": "2.00",
|
|
2542
|
+
// "max_initial_leverage": "10.00",
|
|
2543
|
+
// "margin_mode": "Isolated",
|
|
2544
|
+
// "force_close_fee": "0.05",
|
|
2545
|
+
// "enabled": true,
|
|
2546
|
+
// "active": true,
|
|
2547
|
+
// "limit_base": "50000.00",
|
|
2548
|
+
// "limit_power": "2.2",
|
|
2549
|
+
// "unlimited_threshold": "10.0"
|
|
2550
|
+
// }]
|
|
2551
|
+
// }
|
|
2552
|
+
//
|
|
2534
2553
|
}
|
|
2535
2554
|
else if (marketType === 'swap') {
|
|
2536
2555
|
response = await this.privateGetFuturesConfig(params);
|
|
2556
|
+
//
|
|
2557
|
+
// {
|
|
2558
|
+
// "config": [{
|
|
2559
|
+
// "symbol": "BTCUSD_PERP",
|
|
2560
|
+
// "margin_call_leverage_mul": "1.20",
|
|
2561
|
+
// "liquidation_leverage_mul": "2.00",
|
|
2562
|
+
// "max_initial_leverage": "100.00",
|
|
2563
|
+
// "margin_mode": "Isolated",
|
|
2564
|
+
// "force_close_fee": "0.001",
|
|
2565
|
+
// "enabled": true,
|
|
2566
|
+
// "active": false,
|
|
2567
|
+
// "limit_base": "5000000.000000000000",
|
|
2568
|
+
// "limit_power": "1.25",
|
|
2569
|
+
// "unlimited_threshold": "2.00"
|
|
2570
|
+
// }]
|
|
2571
|
+
// }
|
|
2572
|
+
//
|
|
2537
2573
|
}
|
|
2538
2574
|
else {
|
|
2539
|
-
throw new BadSymbol(this.id + '
|
|
2575
|
+
throw new BadSymbol(this.id + ' fetchMarginModes () supports swap contracts and margin only');
|
|
2540
2576
|
}
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
// "enabled": true,
|
|
2552
|
-
// "active": true,
|
|
2553
|
-
// "limit_base": "50000.00",
|
|
2554
|
-
// "limit_power": "2.2",
|
|
2555
|
-
// "unlimited_threshold": "10.0"
|
|
2556
|
-
// }]
|
|
2557
|
-
// }
|
|
2558
|
-
//
|
|
2559
|
-
// swap
|
|
2560
|
-
// {
|
|
2561
|
-
// "config": [{
|
|
2562
|
-
// "symbol": "BTCUSD_PERP",
|
|
2563
|
-
// "margin_call_leverage_mul": "1.20",
|
|
2564
|
-
// "liquidation_leverage_mul": "2.00",
|
|
2565
|
-
// "max_initial_leverage": "100.00",
|
|
2566
|
-
// "margin_mode": "Isolated",
|
|
2567
|
-
// "force_close_fee": "0.001",
|
|
2568
|
-
// "enabled": true,
|
|
2569
|
-
// "active": false,
|
|
2570
|
-
// "limit_base": "5000000.000000000000",
|
|
2571
|
-
// "limit_power": "1.25",
|
|
2572
|
-
// "unlimited_threshold": "2.00"
|
|
2573
|
-
// }]
|
|
2574
|
-
// }
|
|
2575
|
-
//
|
|
2576
|
-
const config = this.safeValue(response, 'config', []);
|
|
2577
|
-
const marginModes = [];
|
|
2578
|
-
for (let i = 0; i < config.length; i++) {
|
|
2579
|
-
const data = this.safeValue(config, i);
|
|
2580
|
-
const marketId = this.safeString(data, 'symbol');
|
|
2581
|
-
const marketInner = this.safeMarket(marketId);
|
|
2582
|
-
marginModes.push({
|
|
2583
|
-
'info': data,
|
|
2584
|
-
'symbol': this.safeString(marketInner, 'symbol'),
|
|
2585
|
-
'marginMode': this.safeStringLower(data, 'margin_mode'),
|
|
2586
|
-
});
|
|
2587
|
-
}
|
|
2588
|
-
const filteredMargin = this.filterBySymbol(marginModes, symbol);
|
|
2589
|
-
return this.safeValue(filteredMargin, 0);
|
|
2577
|
+
const config = this.safeList(response, 'config', []);
|
|
2578
|
+
return this.parseMarginModes(config, symbols, 'symbol');
|
|
2579
|
+
}
|
|
2580
|
+
parseMarginMode(marginMode, market = undefined) {
|
|
2581
|
+
const marketId = this.safeString(marginMode, 'symbol');
|
|
2582
|
+
return {
|
|
2583
|
+
'info': marginMode,
|
|
2584
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
2585
|
+
'marginMode': this.safeStringLower(marginMode, 'margin_mode'),
|
|
2586
|
+
};
|
|
2590
2587
|
}
|
|
2591
2588
|
async transfer(code, amount, fromAccount, toAccount, params = {}) {
|
|
2592
2589
|
/**
|
|
@@ -3405,7 +3402,18 @@ export default class hitbtc extends Exchange {
|
|
|
3405
3402
|
// ]
|
|
3406
3403
|
// }
|
|
3407
3404
|
//
|
|
3408
|
-
return this.
|
|
3405
|
+
return this.parseLeverage(response, market);
|
|
3406
|
+
}
|
|
3407
|
+
parseLeverage(leverage, market = undefined) {
|
|
3408
|
+
const marketId = this.safeString(leverage, 'symbol');
|
|
3409
|
+
const leverageValue = this.safeInteger(leverage, 'leverage');
|
|
3410
|
+
return {
|
|
3411
|
+
'info': leverage,
|
|
3412
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
3413
|
+
'marginMode': this.safeStringLower(leverage, 'type'),
|
|
3414
|
+
'longLeverage': leverageValue,
|
|
3415
|
+
'shortLeverage': leverageValue,
|
|
3416
|
+
};
|
|
3409
3417
|
}
|
|
3410
3418
|
async setLeverage(leverage, symbol = undefined, params = {}) {
|
|
3411
3419
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/krakenfutures.js';
|
|
2
|
-
import type { TransferEntry, Int, OrderSide, OrderType, OHLCV, Trade, FundingRateHistory, OrderRequest, Order, Balances, Str, Ticker, OrderBook, Tickers, Strings, Market, Currency } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, Int, OrderSide, OrderType, OHLCV, Trade, FundingRateHistory, OrderRequest, Order, Balances, Str, Ticker, OrderBook, Tickers, Strings, Market, Currency, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class krakenfutures
|
|
5
5
|
* @augments Exchange
|
|
@@ -94,7 +94,8 @@ export default class krakenfutures extends Exchange {
|
|
|
94
94
|
transferOut(code: string, amount: any, params?: {}): Promise<TransferEntry>;
|
|
95
95
|
transfer(code: string, amount: number, fromAccount: string, toAccount: string, params?: {}): Promise<TransferEntry>;
|
|
96
96
|
setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
|
|
97
|
-
fetchLeverage(symbol
|
|
97
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
98
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
98
99
|
handleErrors(code: any, reason: any, url: any, method: any, headers: any, body: any, response: any, requestHeaders: any, requestBody: any): any;
|
|
99
100
|
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
100
101
|
url: string;
|
package/js/src/krakenfutures.js
CHANGED
|
@@ -2459,7 +2459,7 @@ export default class krakenfutures extends Exchange {
|
|
|
2459
2459
|
//
|
|
2460
2460
|
return await this.privatePutLeveragepreferences(this.extend(request, params));
|
|
2461
2461
|
}
|
|
2462
|
-
async fetchLeverage(symbol
|
|
2462
|
+
async fetchLeverage(symbol, params = {}) {
|
|
2463
2463
|
/**
|
|
2464
2464
|
* @method
|
|
2465
2465
|
* @name krakenfutures#fetchLeverage
|
|
@@ -2473,17 +2473,32 @@ export default class krakenfutures extends Exchange {
|
|
|
2473
2473
|
throw new ArgumentsRequired(this.id + ' fetchLeverage() requires a symbol argument');
|
|
2474
2474
|
}
|
|
2475
2475
|
await this.loadMarkets();
|
|
2476
|
+
const market = this.market(symbol);
|
|
2476
2477
|
const request = {
|
|
2477
2478
|
'symbol': this.marketId(symbol).toUpperCase(),
|
|
2478
2479
|
};
|
|
2480
|
+
const response = await this.privateGetLeveragepreferences(this.extend(request, params));
|
|
2479
2481
|
//
|
|
2480
|
-
//
|
|
2481
|
-
//
|
|
2482
|
-
//
|
|
2483
|
-
//
|
|
2484
|
-
//
|
|
2482
|
+
// {
|
|
2483
|
+
// "result": "success",
|
|
2484
|
+
// "serverTime": "2023-08-01T09:54:08.900Z",
|
|
2485
|
+
// "leveragePreferences": [ { symbol: "PF_LTCUSD", maxLeverage: "5.00" } ]
|
|
2486
|
+
// }
|
|
2485
2487
|
//
|
|
2486
|
-
|
|
2488
|
+
const leveragePreferences = this.safeList(response, 'leveragePreferences', []);
|
|
2489
|
+
const data = this.safeDict(leveragePreferences, 0, {});
|
|
2490
|
+
return this.parseLeverage(data, market);
|
|
2491
|
+
}
|
|
2492
|
+
parseLeverage(leverage, market = undefined) {
|
|
2493
|
+
const marketId = this.safeString(leverage, 'symbol');
|
|
2494
|
+
const leverageValue = this.safeInteger(leverage, 'maxLeverage');
|
|
2495
|
+
return {
|
|
2496
|
+
'info': leverage,
|
|
2497
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
2498
|
+
'marginMode': undefined,
|
|
2499
|
+
'longLeverage': leverageValue,
|
|
2500
|
+
'shortLeverage': leverageValue,
|
|
2501
|
+
};
|
|
2487
2502
|
}
|
|
2488
2503
|
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
2489
2504
|
if (response === undefined) {
|
package/js/src/kuna.js
CHANGED
|
@@ -809,7 +809,7 @@ export default class kuna extends Exchange {
|
|
|
809
809
|
await this.loadMarkets();
|
|
810
810
|
const market = this.market(symbol);
|
|
811
811
|
const request = {
|
|
812
|
-
'
|
|
812
|
+
'pairs': market['id'],
|
|
813
813
|
};
|
|
814
814
|
if (limit !== undefined) {
|
|
815
815
|
request['limit'] = limit;
|
|
@@ -817,18 +817,21 @@ export default class kuna extends Exchange {
|
|
|
817
817
|
const response = await this.v4PublicGetTradePublicBookPairs(this.extend(request, params));
|
|
818
818
|
//
|
|
819
819
|
// {
|
|
820
|
-
//
|
|
821
|
-
//
|
|
822
|
-
//
|
|
823
|
-
//
|
|
824
|
-
//
|
|
825
|
-
//
|
|
826
|
-
//
|
|
827
|
-
//
|
|
828
|
-
//
|
|
820
|
+
// 'data': [
|
|
821
|
+
// {
|
|
822
|
+
// 'createdAt': '2024-03-02T00:10:49.385Z',
|
|
823
|
+
// 'id': '3b42878a-3688-4bc1-891e-5cc2fc902142',
|
|
824
|
+
// 'matchPrice': '62181.31',
|
|
825
|
+
// 'matchQuantity': '0.00568',
|
|
826
|
+
// 'pair': 'BTC_USDT',
|
|
827
|
+
// 'quoteQuantity': '353.1898408',
|
|
828
|
+
// 'side': 'Bid'
|
|
829
|
+
// },
|
|
830
|
+
// ...
|
|
831
|
+
// ]
|
|
829
832
|
// }
|
|
830
833
|
//
|
|
831
|
-
const data = this.
|
|
834
|
+
const data = this.safeList(response, 'data', []);
|
|
832
835
|
return this.parseTrades(data, market, since, limit);
|
|
833
836
|
}
|
|
834
837
|
parseTrade(trade, market = undefined) {
|
package/js/src/mexc.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/mexc.js';
|
|
2
|
-
import type { TransferEntry, IndexType, Int, OrderSide, Balances, OrderType, OHLCV, FundingRateHistory, Position, OrderBook, OrderRequest, FundingHistory, Order, Str, Trade, Transaction, Ticker, Tickers, Strings, Market, Currency } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, IndexType, Int, OrderSide, Balances, OrderType, OHLCV, FundingRateHistory, Position, OrderBook, OrderRequest, FundingHistory, Order, Str, Trade, Transaction, Ticker, Tickers, Strings, Market, Currency, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class mexc
|
|
5
5
|
* @augments Exchange
|
|
@@ -172,6 +172,8 @@ export default class mexc extends Exchange {
|
|
|
172
172
|
parseTransactionFee(transaction: any, currency?: Currency): {};
|
|
173
173
|
fetchDepositWithdrawFees(codes?: Strings, params?: {}): Promise<any>;
|
|
174
174
|
parseDepositWithdrawFee(fee: any, currency?: Currency): any;
|
|
175
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
176
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
175
177
|
handleMarginModeAndParams(methodName: any, params?: {}, defaultValue?: any): any[];
|
|
176
178
|
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
177
179
|
url: any;
|
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
|
+
return this.parseLeverage(data, market);
|
|
5430
|
+
}
|
|
5431
|
+
parseLeverage(leverage, market = undefined) {
|
|
5432
|
+
let marginMode = undefined;
|
|
5433
|
+
let longLeverage = undefined;
|
|
5434
|
+
let shortLeverage = undefined;
|
|
5435
|
+
for (let i = 0; i < leverage.length; i++) {
|
|
5436
|
+
const entry = leverage[i];
|
|
5437
|
+
const openType = this.safeInteger(entry, 'openType');
|
|
5438
|
+
const positionType = this.safeInteger(entry, 'positionType');
|
|
5439
|
+
if (positionType === 1) {
|
|
5440
|
+
longLeverage = this.safeInteger(entry, 'leverage');
|
|
5441
|
+
}
|
|
5442
|
+
else if (positionType === 2) {
|
|
5443
|
+
shortLeverage = this.safeInteger(entry, 'leverage');
|
|
5444
|
+
}
|
|
5445
|
+
marginMode = (openType === 1) ? 'isolated' : 'cross';
|
|
5446
|
+
}
|
|
5447
|
+
return {
|
|
5448
|
+
'info': leverage,
|
|
5449
|
+
'symbol': market['symbol'],
|
|
5450
|
+
'marginMode': marginMode,
|
|
5451
|
+
'longLeverage': longLeverage,
|
|
5452
|
+
'shortLeverage': shortLeverage,
|
|
5453
|
+
};
|
|
5454
|
+
}
|
|
5380
5455
|
handleMarginModeAndParams(methodName, params = {}, defaultValue = undefined) {
|
|
5381
5456
|
/**
|
|
5382
5457
|
* @ignore
|
package/js/src/okx.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/okx.js';
|
|
2
|
-
import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Str, Transaction, Ticker, OrderBook, Balances, Tickers, Market, Greeks, Strings, MarketInterface, Currency } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Str, Transaction, Ticker, OrderBook, Balances, Tickers, Market, Greeks, Strings, MarketInterface, Currency, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class okx
|
|
5
5
|
* @augments Exchange
|
|
@@ -104,7 +104,8 @@ export default class okx extends Exchange {
|
|
|
104
104
|
fetchWithdrawal(id: string, code?: Str, params?: {}): Promise<Transaction>;
|
|
105
105
|
parseTransactionStatus(status: any): string;
|
|
106
106
|
parseTransaction(transaction: any, currency?: Currency): Transaction;
|
|
107
|
-
fetchLeverage(symbol: string, params?: {}): Promise<
|
|
107
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
108
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
108
109
|
fetchPosition(symbol: string, params?: {}): Promise<import("./base/types.js").Position>;
|
|
109
110
|
fetchPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
|
|
110
111
|
fetchPositionsForSymbol(symbol: string, params?: {}): Promise<import("./base/types.js").Position[]>;
|
package/js/src/okx.js
CHANGED
|
@@ -5164,7 +5164,37 @@ export default class okx extends Exchange {
|
|
|
5164
5164
|
// "msg": ""
|
|
5165
5165
|
// }
|
|
5166
5166
|
//
|
|
5167
|
-
|
|
5167
|
+
const data = this.safeList(response, 'data', []);
|
|
5168
|
+
return this.parseLeverage(data, market);
|
|
5169
|
+
}
|
|
5170
|
+
parseLeverage(leverage, market = undefined) {
|
|
5171
|
+
let marketId = undefined;
|
|
5172
|
+
let marginMode = undefined;
|
|
5173
|
+
let longLeverage = undefined;
|
|
5174
|
+
let shortLeverage = undefined;
|
|
5175
|
+
for (let i = 0; i < leverage.length; i++) {
|
|
5176
|
+
const entry = leverage[i];
|
|
5177
|
+
marginMode = this.safeStringLower(entry, 'mgnMode');
|
|
5178
|
+
marketId = this.safeString(entry, 'instId');
|
|
5179
|
+
const positionSide = this.safeStringLower(entry, 'posSide');
|
|
5180
|
+
if (positionSide === 'long') {
|
|
5181
|
+
longLeverage = this.safeInteger(entry, 'lever');
|
|
5182
|
+
}
|
|
5183
|
+
else if (positionSide === 'short') {
|
|
5184
|
+
shortLeverage = this.safeInteger(entry, 'lever');
|
|
5185
|
+
}
|
|
5186
|
+
else {
|
|
5187
|
+
longLeverage = this.safeInteger(entry, 'lever');
|
|
5188
|
+
shortLeverage = this.safeInteger(entry, 'lever');
|
|
5189
|
+
}
|
|
5190
|
+
}
|
|
5191
|
+
return {
|
|
5192
|
+
'info': leverage,
|
|
5193
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
5194
|
+
'marginMode': marginMode,
|
|
5195
|
+
'longLeverage': longLeverage,
|
|
5196
|
+
'shortLeverage': shortLeverage,
|
|
5197
|
+
};
|
|
5168
5198
|
}
|
|
5169
5199
|
async fetchPosition(symbol, params = {}) {
|
|
5170
5200
|
/**
|
package/js/src/pro/alpaca.js
CHANGED
|
@@ -613,7 +613,7 @@ export default class alpaca extends alpacaRest {
|
|
|
613
613
|
for (let i = 0; i < message.length; i++) {
|
|
614
614
|
const data = message[i];
|
|
615
615
|
const T = this.safeString(data, 'T');
|
|
616
|
-
const msg = this.
|
|
616
|
+
const msg = this.safeString(data, 'msg');
|
|
617
617
|
if (T === 'subscription') {
|
|
618
618
|
this.handleSubscription(client, data);
|
|
619
619
|
return;
|
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'),
|