ccxt 4.1.13 → 4.1.16
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/CHANGELOG.md +219 -0
- package/CONTRIBUTING.md +1 -0
- package/README.md +3 -3
- package/dist/ccxt.browser.js +539 -189
- package/dist/ccxt.browser.min.js +9 -9
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ascendex.js +1 -0
- package/dist/cjs/src/base/Exchange.js +3 -0
- package/dist/cjs/src/binance.js +6 -2
- package/dist/cjs/src/bingx.js +5 -3
- package/dist/cjs/src/bitget.js +357 -64
- package/dist/cjs/src/bitmart.js +2 -0
- package/dist/cjs/src/bitmex.js +6 -3
- package/dist/cjs/src/bittrex.js +7 -0
- package/dist/cjs/src/btcalpha.js +2 -1
- package/dist/cjs/src/btcturk.js +3 -0
- package/dist/cjs/src/cex.js +1 -0
- package/dist/cjs/src/coinbase.js +1 -0
- package/dist/cjs/src/coinbasepro.js +1 -0
- package/dist/cjs/src/coinex.js +2 -0
- package/dist/cjs/src/coinfalcon.js +1 -0
- package/dist/cjs/src/coinmate.js +1 -0
- package/dist/cjs/src/coinone.js +15 -5
- package/dist/cjs/src/cryptocom.js +25 -87
- package/dist/cjs/src/currencycom.js +1 -0
- package/dist/cjs/src/delta.js +1 -0
- package/dist/cjs/src/deribit.js +1 -0
- package/dist/cjs/src/digifinex.js +10 -8
- package/dist/cjs/src/exmo.js +1 -0
- package/dist/cjs/src/gate.js +3 -0
- package/dist/cjs/src/gemini.js +1 -0
- package/dist/cjs/src/hitbtc.js +1 -0
- package/dist/cjs/src/hollaex.js +1 -0
- package/dist/cjs/src/huobi.js +8 -0
- package/dist/cjs/src/huobijp.js +1 -0
- package/dist/cjs/src/idex.js +1 -0
- package/dist/cjs/src/independentreserve.js +1 -0
- package/dist/cjs/src/indodax.js +1 -0
- package/dist/cjs/src/kraken.js +10 -0
- package/dist/cjs/src/krakenfutures.js +1 -0
- package/dist/cjs/src/kucoin.js +1 -0
- package/dist/cjs/src/kucoinfutures.js +1 -0
- package/dist/cjs/src/kuna.js +1 -0
- package/dist/cjs/src/latoken.js +1 -0
- package/dist/cjs/src/lbank.js +1 -0
- package/dist/cjs/src/lbank2.js +2 -0
- package/dist/cjs/src/luno.js +1 -0
- package/dist/cjs/src/lykke.js +2 -1
- package/dist/cjs/src/mercado.js +1 -0
- package/dist/cjs/src/mexc.js +4 -1
- package/dist/cjs/src/ndax.js +1 -0
- package/dist/cjs/src/novadax.js +1 -0
- package/dist/cjs/src/oceanex.js +1 -0
- package/dist/cjs/src/phemex.js +2 -0
- package/dist/cjs/src/poloniex.js +1 -0
- package/dist/cjs/src/poloniexfutures.js +8 -2
- package/dist/cjs/src/pro/krakenfutures.js +14 -10
- package/dist/cjs/src/probit.js +1 -0
- package/dist/cjs/src/tidex.js +1 -0
- package/dist/cjs/src/timex.js +1 -0
- package/dist/cjs/src/tokocrypto.js +1 -0
- package/dist/cjs/src/upbit.js +1 -0
- package/dist/cjs/src/wavesexchange.js +1 -0
- package/dist/cjs/src/wazirx.js +2 -1
- package/dist/cjs/src/whitebit.js +1 -0
- package/dist/cjs/src/woo.js +1 -0
- package/dist/cjs/src/yobit.js +1 -0
- package/dist/cjs/src/zaif.js +1 -0
- package/dist/cjs/src/zonda.js +1 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/binance.d.ts +4 -0
- package/js/src/abstract/binancecoinm.d.ts +4 -0
- package/js/src/abstract/binanceus.d.ts +4 -0
- package/js/src/abstract/binanceusdm.d.ts +4 -0
- package/js/src/abstract/btcturk.d.ts +3 -0
- package/js/src/abstract/kraken.d.ts +8 -0
- package/js/src/abstract/poloniexfutures.d.ts +6 -1
- package/js/src/ascendex.js +1 -0
- package/js/src/base/Exchange.d.ts +1 -0
- package/js/src/base/Exchange.js +3 -0
- package/js/src/binance.js +6 -2
- package/js/src/bingx.js +5 -3
- package/js/src/bitget.d.ts +28 -0
- package/js/src/bitget.js +357 -64
- package/js/src/bitmart.js +2 -0
- package/js/src/bitmex.js +6 -3
- package/js/src/bittrex.d.ts +2 -2
- package/js/src/bittrex.js +7 -0
- package/js/src/btcalpha.js +2 -1
- package/js/src/btcturk.js +3 -0
- package/js/src/cex.js +1 -0
- package/js/src/coinbase.js +1 -0
- package/js/src/coinbasepro.js +1 -0
- package/js/src/coinex.js +2 -0
- package/js/src/coinfalcon.js +1 -0
- package/js/src/coinmate.js +1 -0
- package/js/src/coinone.js +15 -5
- package/js/src/cryptocom.d.ts +0 -2
- package/js/src/cryptocom.js +25 -87
- package/js/src/currencycom.js +1 -0
- package/js/src/delta.js +1 -0
- package/js/src/deribit.js +1 -0
- package/js/src/digifinex.d.ts +3 -28
- package/js/src/digifinex.js +10 -8
- package/js/src/exmo.js +1 -0
- package/js/src/gate.d.ts +1 -0
- package/js/src/gate.js +3 -0
- package/js/src/gemini.d.ts +1 -0
- package/js/src/gemini.js +1 -0
- package/js/src/hitbtc.js +1 -0
- package/js/src/hollaex.js +1 -0
- package/js/src/huobi.js +8 -0
- package/js/src/huobijp.js +1 -0
- package/js/src/idex.js +1 -0
- package/js/src/independentreserve.js +1 -0
- package/js/src/indodax.js +1 -0
- package/js/src/kraken.js +10 -0
- package/js/src/krakenfutures.js +1 -0
- package/js/src/kucoin.js +1 -0
- package/js/src/kucoinfutures.js +1 -0
- package/js/src/kuna.js +1 -0
- package/js/src/latoken.js +1 -0
- package/js/src/lbank.js +1 -0
- package/js/src/lbank2.js +2 -0
- package/js/src/luno.js +1 -0
- package/js/src/lykke.js +2 -1
- package/js/src/mercado.js +1 -0
- package/js/src/mexc.js +4 -1
- package/js/src/ndax.js +1 -0
- package/js/src/novadax.js +1 -0
- package/js/src/oceanex.js +1 -0
- package/js/src/phemex.d.ts +2 -0
- package/js/src/phemex.js +2 -0
- package/js/src/poloniex.js +1 -0
- package/js/src/poloniexfutures.js +8 -2
- package/js/src/pro/krakenfutures.js +14 -10
- package/js/src/probit.js +1 -0
- package/js/src/tidex.js +1 -0
- package/js/src/timex.d.ts +1 -0
- package/js/src/timex.js +1 -0
- package/js/src/tokocrypto.js +1 -0
- package/js/src/upbit.js +1 -0
- package/js/src/wavesexchange.js +1 -0
- package/js/src/wazirx.js +2 -1
- package/js/src/whitebit.js +1 -0
- package/js/src/woo.js +1 -0
- package/js/src/yobit.js +1 -0
- package/js/src/zaif.js +1 -0
- package/js/src/zonda.js +1 -0
- package/package.json +1 -1
- package/skip-tests.json +141 -12
package/js/src/binance.js
CHANGED
|
@@ -250,7 +250,8 @@ export default class binance extends Exchange {
|
|
|
250
250
|
'margin/exchange-small-liability-history': 0.6667,
|
|
251
251
|
'margin/next-hourly-interest-rate': 0.6667,
|
|
252
252
|
'margin/capital-flow': 10,
|
|
253
|
-
'margin/delist-schedule':
|
|
253
|
+
'margin/delist-schedule': 10,
|
|
254
|
+
'margin/available-inventory': 0.3334,
|
|
254
255
|
'loan/vip/loanable/data': 40,
|
|
255
256
|
'loan/vip/collateral/data': 40,
|
|
256
257
|
'loan/vip/request/data': 2.6668,
|
|
@@ -641,7 +642,8 @@ export default class binance extends Exchange {
|
|
|
641
642
|
'premiumIndexKlines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },
|
|
642
643
|
'ticker/24hr': { 'cost': 1, 'noSymbol': 40 },
|
|
643
644
|
'ticker/price': { 'cost': 1, 'noSymbol': 2 },
|
|
644
|
-
'ticker/bookTicker': { 'cost':
|
|
645
|
+
'ticker/bookTicker': { 'cost': 2, 'noSymbol': 5 },
|
|
646
|
+
'constituents': 2,
|
|
645
647
|
'openInterest': 1,
|
|
646
648
|
},
|
|
647
649
|
},
|
|
@@ -726,6 +728,8 @@ export default class binance extends Exchange {
|
|
|
726
728
|
'ticker/bookTicker': { 'cost': 1, 'noSymbol': 2 },
|
|
727
729
|
'openInterest': 1,
|
|
728
730
|
'indexInfo': 1,
|
|
731
|
+
'assetIndex': { 'cost': 1, 'noSymbol': 10 },
|
|
732
|
+
'constituents': 2,
|
|
729
733
|
'apiTradingStatus': { 'cost': 1, 'noSymbol': 10 },
|
|
730
734
|
'lvtKlines': 1,
|
|
731
735
|
},
|
package/js/src/bingx.js
CHANGED
|
@@ -1556,7 +1556,7 @@ export default class bingx extends Exchange {
|
|
|
1556
1556
|
'info': position,
|
|
1557
1557
|
'id': this.safeString(position, 'positionId'),
|
|
1558
1558
|
'symbol': this.safeSymbol(marketId, market, '-', 'swap'),
|
|
1559
|
-
'notional': this.
|
|
1559
|
+
'notional': this.safeNumber(position, 'positionAmt'),
|
|
1560
1560
|
'marginMode': marginMode,
|
|
1561
1561
|
'liquidationPrice': undefined,
|
|
1562
1562
|
'entryPrice': this.safeNumber2(position, 'avgPrice', 'entryPrice'),
|
|
@@ -2700,8 +2700,10 @@ export default class bingx extends Exchange {
|
|
|
2700
2700
|
const network = this.safeString(transaction, 'network');
|
|
2701
2701
|
const currencyId = this.safeString(transaction, 'coin');
|
|
2702
2702
|
let code = this.safeCurrencyCode(currencyId, currency);
|
|
2703
|
-
if (code !== undefined && code.indexOf(network) >= 0) {
|
|
2704
|
-
|
|
2703
|
+
if ((code !== undefined) && (code !== network) && code.indexOf(network) >= 0) {
|
|
2704
|
+
if (network !== undefined) {
|
|
2705
|
+
code = code.replace(network, '');
|
|
2706
|
+
}
|
|
2705
2707
|
}
|
|
2706
2708
|
const rawType = this.safeString(transaction, 'transferType');
|
|
2707
2709
|
const type = (rawType === '0') ? 'deposit' : 'withdrawal';
|
package/js/src/bitget.d.ts
CHANGED
|
@@ -58,6 +58,7 @@ export default class bitget extends Exchange {
|
|
|
58
58
|
max: any;
|
|
59
59
|
};
|
|
60
60
|
};
|
|
61
|
+
created: any;
|
|
61
62
|
info: any;
|
|
62
63
|
};
|
|
63
64
|
fetchMarketsByType(type: any, params?: {}): Promise<any[]>;
|
|
@@ -286,6 +287,33 @@ export default class bitget extends Exchange {
|
|
|
286
287
|
fetchDepositWithdrawFees(codes?: string[], params?: {}): Promise<any>;
|
|
287
288
|
parseTransferStatus(status: any): string;
|
|
288
289
|
parseOpenInterest(interest: any, market?: any): import("./base/types.js").OpenInterest;
|
|
290
|
+
borrowMargin(code: string, amount: any, symbol?: string, params?: {}): Promise<{
|
|
291
|
+
id: string;
|
|
292
|
+
currency: any;
|
|
293
|
+
amount: number;
|
|
294
|
+
symbol: any;
|
|
295
|
+
timestamp: any;
|
|
296
|
+
datetime: any;
|
|
297
|
+
info: any;
|
|
298
|
+
}>;
|
|
299
|
+
repayMargin(code: string, amount: any, symbol?: string, params?: {}): Promise<{
|
|
300
|
+
id: string;
|
|
301
|
+
currency: any;
|
|
302
|
+
amount: number;
|
|
303
|
+
symbol: any;
|
|
304
|
+
timestamp: any;
|
|
305
|
+
datetime: any;
|
|
306
|
+
info: any;
|
|
307
|
+
}>;
|
|
308
|
+
parseMarginLoan(info: any, currency?: any): {
|
|
309
|
+
id: string;
|
|
310
|
+
currency: any;
|
|
311
|
+
amount: number;
|
|
312
|
+
symbol: any;
|
|
313
|
+
timestamp: any;
|
|
314
|
+
datetime: any;
|
|
315
|
+
info: any;
|
|
316
|
+
};
|
|
289
317
|
handleErrors(code: any, reason: any, url: any, method: any, headers: any, body: any, response: any, requestHeaders: any, requestBody: any): any;
|
|
290
318
|
sign(path: any, api?: any[], method?: string, params?: {}, headers?: any, body?: any): {
|
|
291
319
|
url: string;
|
package/js/src/bitget.js
CHANGED
|
@@ -28,11 +28,12 @@ export default class bitget extends Exchange {
|
|
|
28
28
|
'has': {
|
|
29
29
|
'CORS': undefined,
|
|
30
30
|
'spot': true,
|
|
31
|
-
'margin':
|
|
31
|
+
'margin': undefined,
|
|
32
32
|
'swap': true,
|
|
33
33
|
'future': true,
|
|
34
34
|
'option': false,
|
|
35
35
|
'addMargin': true,
|
|
36
|
+
'borrowMargin': true,
|
|
36
37
|
'cancelAllOrders': true,
|
|
37
38
|
'cancelOrder': true,
|
|
38
39
|
'cancelOrders': true,
|
|
@@ -91,6 +92,7 @@ export default class bitget extends Exchange {
|
|
|
91
92
|
'fetchWithdrawal': false,
|
|
92
93
|
'fetchWithdrawals': true,
|
|
93
94
|
'reduceMargin': true,
|
|
95
|
+
'repayMargin': true,
|
|
94
96
|
'setLeverage': true,
|
|
95
97
|
'setMarginMode': true,
|
|
96
98
|
'setPositionMode': true,
|
|
@@ -1295,6 +1297,7 @@ export default class bitget extends Exchange {
|
|
|
1295
1297
|
'max': undefined,
|
|
1296
1298
|
},
|
|
1297
1299
|
},
|
|
1300
|
+
'created': undefined,
|
|
1298
1301
|
'info': market,
|
|
1299
1302
|
};
|
|
1300
1303
|
}
|
|
@@ -2641,18 +2644,20 @@ export default class bitget extends Exchange {
|
|
|
2641
2644
|
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
2642
2645
|
* @see https://bitgetlimited.github.io/apidoc/en/spot/#get-account-assets
|
|
2643
2646
|
* @see https://bitgetlimited.github.io/apidoc/en/mix/#get-account-list
|
|
2647
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#get-cross-assets
|
|
2648
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#get-isolated-assets
|
|
2644
2649
|
* @param {object} [params] extra parameters specific to the bitget api endpoint
|
|
2645
2650
|
* @returns {object} a [balance structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#balance-structure}
|
|
2646
2651
|
*/
|
|
2647
2652
|
const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);
|
|
2648
2653
|
await this.loadMarkets();
|
|
2649
|
-
const [marketType, query] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
|
|
2650
|
-
const method = this.getSupportedMapping(marketType, {
|
|
2651
|
-
'spot': 'privateSpotGetAccountAssets',
|
|
2652
|
-
'swap': 'privateMixGetAccountAccounts',
|
|
2653
|
-
});
|
|
2654
2654
|
const request = {};
|
|
2655
|
-
|
|
2655
|
+
let marketType = undefined;
|
|
2656
|
+
let marginMode = undefined;
|
|
2657
|
+
let response = undefined;
|
|
2658
|
+
[marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
|
|
2659
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);
|
|
2660
|
+
if ((marketType === 'swap') || (marketType === 'future')) {
|
|
2656
2661
|
let subType = undefined;
|
|
2657
2662
|
[subType, params] = this.handleSubTypeAndParams('fetchBalance', undefined, params);
|
|
2658
2663
|
let productType = (subType === 'linear') ? 'UMCBL' : 'DMCBL';
|
|
@@ -2660,45 +2665,106 @@ export default class bitget extends Exchange {
|
|
|
2660
2665
|
productType = 'S' + productType;
|
|
2661
2666
|
}
|
|
2662
2667
|
request['productType'] = productType;
|
|
2668
|
+
response = await this.privateMixGetAccountAccounts(this.extend(request, params));
|
|
2669
|
+
}
|
|
2670
|
+
else if (marginMode === 'isolated') {
|
|
2671
|
+
response = await this.privateMarginGetIsolatedAccountAssets(this.extend(request, params));
|
|
2672
|
+
}
|
|
2673
|
+
else if (marginMode === 'cross') {
|
|
2674
|
+
response = await this.privateMarginGetCrossAccountAssets(this.extend(request, params));
|
|
2675
|
+
}
|
|
2676
|
+
else if (marketType === 'spot') {
|
|
2677
|
+
response = await this.privateSpotGetAccountAssets(this.extend(request, params));
|
|
2678
|
+
}
|
|
2679
|
+
else {
|
|
2680
|
+
throw new NotSupported(this.id + ' fetchBalance() does not support ' + marketType + ' accounts');
|
|
2663
2681
|
}
|
|
2664
|
-
const response = await this[method](this.extend(request, query));
|
|
2665
2682
|
// spot
|
|
2683
|
+
//
|
|
2666
2684
|
// {
|
|
2667
|
-
//
|
|
2668
|
-
//
|
|
2669
|
-
//
|
|
2670
|
-
//
|
|
2671
|
-
//
|
|
2672
|
-
//
|
|
2673
|
-
//
|
|
2674
|
-
//
|
|
2675
|
-
//
|
|
2676
|
-
//
|
|
2677
|
-
//
|
|
2678
|
-
//
|
|
2679
|
-
//
|
|
2685
|
+
// "code": "00000",
|
|
2686
|
+
// "msg": "success",
|
|
2687
|
+
// "requestTime": 1697507299139,
|
|
2688
|
+
// "data": [
|
|
2689
|
+
// {
|
|
2690
|
+
// "coinId": 1,
|
|
2691
|
+
// "coinName": "BTC",
|
|
2692
|
+
// "available": "0.00000000",
|
|
2693
|
+
// "frozen": "0.00000000",
|
|
2694
|
+
// "lock": "0.00000000",
|
|
2695
|
+
// "uTime": "1697248128000"
|
|
2696
|
+
// },
|
|
2697
|
+
// ]
|
|
2680
2698
|
// }
|
|
2681
2699
|
//
|
|
2682
2700
|
// swap
|
|
2701
|
+
//
|
|
2683
2702
|
// {
|
|
2684
|
-
//
|
|
2685
|
-
//
|
|
2686
|
-
//
|
|
2687
|
-
//
|
|
2688
|
-
//
|
|
2689
|
-
//
|
|
2690
|
-
//
|
|
2691
|
-
//
|
|
2692
|
-
//
|
|
2693
|
-
//
|
|
2694
|
-
//
|
|
2695
|
-
//
|
|
2696
|
-
//
|
|
2697
|
-
//
|
|
2698
|
-
//
|
|
2699
|
-
//
|
|
2703
|
+
// "code": "00000",
|
|
2704
|
+
// "msg": "success",
|
|
2705
|
+
// "requestTime": 1697507505367,
|
|
2706
|
+
// "data": [
|
|
2707
|
+
// {
|
|
2708
|
+
// "marginCoin": "STETH",
|
|
2709
|
+
// "locked": "0",
|
|
2710
|
+
// "available": "0",
|
|
2711
|
+
// "crossMaxAvailable": "0",
|
|
2712
|
+
// "fixedMaxAvailable": "0",
|
|
2713
|
+
// "maxTransferOut": "0",
|
|
2714
|
+
// "equity": "0",
|
|
2715
|
+
// "usdtEquity": "0",
|
|
2716
|
+
// "btcEquity": "0",
|
|
2717
|
+
// "crossRiskRate": "0",
|
|
2718
|
+
// "unrealizedPL": "0",
|
|
2719
|
+
// "bonus": "0"
|
|
2720
|
+
// },
|
|
2721
|
+
// ]
|
|
2700
2722
|
// }
|
|
2701
|
-
|
|
2723
|
+
//
|
|
2724
|
+
// isolated margin
|
|
2725
|
+
//
|
|
2726
|
+
// {
|
|
2727
|
+
// "code": "00000",
|
|
2728
|
+
// "msg": "success",
|
|
2729
|
+
// "requestTime": 1697501436571,
|
|
2730
|
+
// "data": [
|
|
2731
|
+
// {
|
|
2732
|
+
// "symbol": "BTCUSDT",
|
|
2733
|
+
// "coin": "BTC",
|
|
2734
|
+
// "totalAmount": "0.00021654",
|
|
2735
|
+
// "available": "0.00021654",
|
|
2736
|
+
// "transferable": "0.00021654",
|
|
2737
|
+
// "frozen": "0",
|
|
2738
|
+
// "borrow": "0",
|
|
2739
|
+
// "interest": "0",
|
|
2740
|
+
// "net": "0.00021654",
|
|
2741
|
+
// "ctime": "1697248128071"
|
|
2742
|
+
// },
|
|
2743
|
+
// ]
|
|
2744
|
+
// }
|
|
2745
|
+
//
|
|
2746
|
+
// cross margin
|
|
2747
|
+
//
|
|
2748
|
+
// {
|
|
2749
|
+
// "code": "00000",
|
|
2750
|
+
// "msg": "success",
|
|
2751
|
+
// "requestTime": 1697515463804,
|
|
2752
|
+
// "data": [
|
|
2753
|
+
// {
|
|
2754
|
+
// "coin": "BTC",
|
|
2755
|
+
// "totalAmount": "0.00024996",
|
|
2756
|
+
// "available": "0.00024996",
|
|
2757
|
+
// "transferable": "0.00004994",
|
|
2758
|
+
// "frozen": "0",
|
|
2759
|
+
// "borrow": "0.0001",
|
|
2760
|
+
// "interest": "0.00000001",
|
|
2761
|
+
// "net": "0.00014995",
|
|
2762
|
+
// "ctime": "1697251265504"
|
|
2763
|
+
// },
|
|
2764
|
+
// ]
|
|
2765
|
+
// }
|
|
2766
|
+
//
|
|
2767
|
+
const data = this.safeValue(response, 'data', []);
|
|
2702
2768
|
return this.parseBalance(data);
|
|
2703
2769
|
}
|
|
2704
2770
|
parseBalance(balance) {
|
|
@@ -2707,42 +2773,81 @@ export default class bitget extends Exchange {
|
|
|
2707
2773
|
// spot
|
|
2708
2774
|
//
|
|
2709
2775
|
// {
|
|
2710
|
-
// coinId:
|
|
2711
|
-
// coinName:
|
|
2712
|
-
// available:
|
|
2713
|
-
// frozen:
|
|
2714
|
-
// lock:
|
|
2715
|
-
// uTime:
|
|
2776
|
+
// "coinId": 1,
|
|
2777
|
+
// "coinName": "BTC",
|
|
2778
|
+
// "available": "0.00000000",
|
|
2779
|
+
// "frozen": "0.00000000",
|
|
2780
|
+
// "lock": "0.00000000",
|
|
2781
|
+
// "uTime": "1697248128000"
|
|
2716
2782
|
// }
|
|
2717
2783
|
//
|
|
2718
2784
|
// swap
|
|
2719
2785
|
//
|
|
2720
2786
|
// {
|
|
2721
|
-
// marginCoin:
|
|
2722
|
-
// locked:
|
|
2723
|
-
// available:
|
|
2724
|
-
// crossMaxAvailable:
|
|
2725
|
-
// fixedMaxAvailable:
|
|
2726
|
-
// maxTransferOut:
|
|
2727
|
-
// equity:
|
|
2728
|
-
// usdtEquity:
|
|
2729
|
-
// btcEquity:
|
|
2730
|
-
// crossRiskRate:
|
|
2731
|
-
// unrealizedPL:
|
|
2732
|
-
// bonus:
|
|
2787
|
+
// "marginCoin": "STETH",
|
|
2788
|
+
// "locked": "0",
|
|
2789
|
+
// "available": "0",
|
|
2790
|
+
// "crossMaxAvailable": "0",
|
|
2791
|
+
// "fixedMaxAvailable": "0",
|
|
2792
|
+
// "maxTransferOut": "0",
|
|
2793
|
+
// "equity": "0",
|
|
2794
|
+
// "usdtEquity": "0",
|
|
2795
|
+
// "btcEquity": "0",
|
|
2796
|
+
// "crossRiskRate": "0",
|
|
2797
|
+
// "unrealizedPL": "0",
|
|
2798
|
+
// "bonus": "0"
|
|
2799
|
+
// }
|
|
2800
|
+
//
|
|
2801
|
+
// isolated margin
|
|
2802
|
+
//
|
|
2803
|
+
// {
|
|
2804
|
+
// "symbol": "BTCUSDT",
|
|
2805
|
+
// "coin": "BTC",
|
|
2806
|
+
// "totalAmount": "0.00021654",
|
|
2807
|
+
// "available": "0.00021654",
|
|
2808
|
+
// "transferable": "0.00021654",
|
|
2809
|
+
// "frozen": "0",
|
|
2810
|
+
// "borrow": "0",
|
|
2811
|
+
// "interest": "0",
|
|
2812
|
+
// "net": "0.00021654",
|
|
2813
|
+
// "ctime": "1697248128071"
|
|
2814
|
+
// }
|
|
2815
|
+
//
|
|
2816
|
+
// cross margin
|
|
2817
|
+
//
|
|
2818
|
+
// {
|
|
2819
|
+
// "coin": "BTC",
|
|
2820
|
+
// "totalAmount": "0.00024995",
|
|
2821
|
+
// "available": "0.00024995",
|
|
2822
|
+
// "transferable": "0.00004993",
|
|
2823
|
+
// "frozen": "0",
|
|
2824
|
+
// "borrow": "0.0001",
|
|
2825
|
+
// "interest": "0.00000001",
|
|
2826
|
+
// "net": "0.00014994",
|
|
2827
|
+
// "ctime": "1697251265504"
|
|
2733
2828
|
// }
|
|
2734
2829
|
//
|
|
2735
2830
|
for (let i = 0; i < balance.length; i++) {
|
|
2736
2831
|
const entry = balance[i];
|
|
2737
|
-
const currencyId = this.safeString2(entry, 'coinName', 'marginCoin');
|
|
2738
|
-
const code = this.safeCurrencyCode(currencyId);
|
|
2739
2832
|
const account = this.account();
|
|
2740
|
-
const
|
|
2741
|
-
const
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2833
|
+
const currencyId = this.safeStringN(entry, ['coinName', 'marginCoin', 'coin']);
|
|
2834
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
2835
|
+
const borrow = this.safeString(entry, 'borrow');
|
|
2836
|
+
if (borrow !== undefined) {
|
|
2837
|
+
const interest = this.safeString(entry, 'interest');
|
|
2838
|
+
account['free'] = this.safeString(entry, 'transferable');
|
|
2839
|
+
account['total'] = this.safeString(entry, 'totalAmount');
|
|
2840
|
+
account['debt'] = Precise.stringAdd(borrow, interest);
|
|
2841
|
+
}
|
|
2842
|
+
else {
|
|
2843
|
+
// Use transferable instead of available for swap and margin https://github.com/ccxt/ccxt/pull/19127
|
|
2844
|
+
const spotAccountFree = this.safeString(entry, 'available');
|
|
2845
|
+
const contractAccountFree = this.safeString(entry, 'maxTransferOut');
|
|
2846
|
+
account['free'] = (contractAccountFree !== undefined) ? contractAccountFree : spotAccountFree;
|
|
2847
|
+
const frozen = this.safeString(entry, 'frozen');
|
|
2848
|
+
const locked = this.safeString2(entry, 'lock', 'locked');
|
|
2849
|
+
account['used'] = Precise.stringAdd(frozen, locked);
|
|
2850
|
+
}
|
|
2746
2851
|
result[code] = account;
|
|
2747
2852
|
}
|
|
2748
2853
|
return this.safeBalance(result);
|
|
@@ -5201,6 +5306,194 @@ export default class bitget extends Exchange {
|
|
|
5201
5306
|
'info': interest,
|
|
5202
5307
|
}, market);
|
|
5203
5308
|
}
|
|
5309
|
+
async borrowMargin(code, amount, symbol = undefined, params = {}) {
|
|
5310
|
+
/**
|
|
5311
|
+
* @method
|
|
5312
|
+
* @name bitget#borrowMargin
|
|
5313
|
+
* @description create a loan to borrow margin
|
|
5314
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-borrow
|
|
5315
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-borrow
|
|
5316
|
+
* @param {string} code unified currency code of the currency to borrow
|
|
5317
|
+
* @param {string} amount the amount to borrow
|
|
5318
|
+
* @param {string} [symbol] unified market symbol
|
|
5319
|
+
* @param {object} [params] extra parameters specific to the bitget api endpoint
|
|
5320
|
+
* @param {string} [params.marginMode] 'isolated' or 'cross', symbol is required for 'isolated'
|
|
5321
|
+
* @returns {object} a [margin loan structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#margin-loan-structure}
|
|
5322
|
+
*/
|
|
5323
|
+
await this.loadMarkets();
|
|
5324
|
+
const currency = this.currency(code);
|
|
5325
|
+
const request = {
|
|
5326
|
+
'coin': currency['info']['coinName'],
|
|
5327
|
+
'borrowAmount': this.currencyToPrecision(code, amount),
|
|
5328
|
+
};
|
|
5329
|
+
let response = undefined;
|
|
5330
|
+
let marginMode = undefined;
|
|
5331
|
+
[marginMode, params] = this.handleMarginModeAndParams('borrowMargin', params);
|
|
5332
|
+
if ((symbol !== undefined) || (marginMode === 'isolated')) {
|
|
5333
|
+
this.checkRequiredSymbol('borrowMargin', symbol);
|
|
5334
|
+
const market = this.market(symbol);
|
|
5335
|
+
const marketId = market['id'];
|
|
5336
|
+
const parts = marketId.split('_');
|
|
5337
|
+
const marginMarketId = this.safeStringUpper(parts, 0);
|
|
5338
|
+
request['symbol'] = marginMarketId;
|
|
5339
|
+
response = await this.privateMarginPostIsolatedAccountBorrow(this.extend(request, params));
|
|
5340
|
+
}
|
|
5341
|
+
else {
|
|
5342
|
+
response = await this.privateMarginPostCrossAccountBorrow(this.extend(request, params));
|
|
5343
|
+
}
|
|
5344
|
+
//
|
|
5345
|
+
// isolated
|
|
5346
|
+
//
|
|
5347
|
+
// {
|
|
5348
|
+
// "code": "00000",
|
|
5349
|
+
// "msg": "success",
|
|
5350
|
+
// "requestTime": 1697250952516,
|
|
5351
|
+
// "data": {
|
|
5352
|
+
// "clientOid": null,
|
|
5353
|
+
// "symbol": "BTCUSDT",
|
|
5354
|
+
// "coin": "BTC",
|
|
5355
|
+
// "borrowAmount": "0.001"
|
|
5356
|
+
// }
|
|
5357
|
+
// }
|
|
5358
|
+
//
|
|
5359
|
+
// cross
|
|
5360
|
+
//
|
|
5361
|
+
// {
|
|
5362
|
+
// "code": "00000",
|
|
5363
|
+
// "msg": "success",
|
|
5364
|
+
// "requestTime": 1697251314271,
|
|
5365
|
+
// "data": {
|
|
5366
|
+
// "clientOid": null,
|
|
5367
|
+
// "coin": "BTC",
|
|
5368
|
+
// "borrowAmount": "0.0001"
|
|
5369
|
+
// }
|
|
5370
|
+
// }
|
|
5371
|
+
//
|
|
5372
|
+
const data = this.safeValue(response, 'data', {});
|
|
5373
|
+
return this.parseMarginLoan(data, currency);
|
|
5374
|
+
}
|
|
5375
|
+
async repayMargin(code, amount, symbol = undefined, params = {}) {
|
|
5376
|
+
/**
|
|
5377
|
+
* @method
|
|
5378
|
+
* @name bitget#repayMargin
|
|
5379
|
+
* @description repay borrowed margin and interest
|
|
5380
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-repay
|
|
5381
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-repay
|
|
5382
|
+
* @param {string} code unified currency code of the currency to repay
|
|
5383
|
+
* @param {string} amount the amount to repay
|
|
5384
|
+
* @param {string} [symbol] unified market symbol
|
|
5385
|
+
* @param {object} [params] extra parameters specific to the bitget api endpoint
|
|
5386
|
+
* @param {string} [params.marginMode] 'isolated' or 'cross', symbol is required for 'isolated'
|
|
5387
|
+
* @returns {object} a [margin loan structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#margin-loan-structure}
|
|
5388
|
+
*/
|
|
5389
|
+
await this.loadMarkets();
|
|
5390
|
+
const currency = this.currency(code);
|
|
5391
|
+
const request = {
|
|
5392
|
+
'coin': currency['info']['coinName'],
|
|
5393
|
+
'repayAmount': this.currencyToPrecision(code, amount),
|
|
5394
|
+
};
|
|
5395
|
+
let response = undefined;
|
|
5396
|
+
let marginMode = undefined;
|
|
5397
|
+
[marginMode, params] = this.handleMarginModeAndParams('repayMargin', params);
|
|
5398
|
+
if ((symbol !== undefined) || (marginMode === 'isolated')) {
|
|
5399
|
+
this.checkRequiredSymbol('repayMargin', symbol);
|
|
5400
|
+
const market = this.market(symbol);
|
|
5401
|
+
const marketId = market['id'];
|
|
5402
|
+
const parts = marketId.split('_');
|
|
5403
|
+
const marginMarketId = this.safeStringUpper(parts, 0);
|
|
5404
|
+
request['symbol'] = marginMarketId;
|
|
5405
|
+
response = await this.privateMarginPostIsolatedAccountRepay(this.extend(request, params));
|
|
5406
|
+
}
|
|
5407
|
+
else {
|
|
5408
|
+
response = await this.privateMarginPostCrossAccountRepay(this.extend(request, params));
|
|
5409
|
+
}
|
|
5410
|
+
//
|
|
5411
|
+
// isolated
|
|
5412
|
+
//
|
|
5413
|
+
// {
|
|
5414
|
+
// "code": "00000",
|
|
5415
|
+
// "msg": "success",
|
|
5416
|
+
// "requestTime": 1697251988593,
|
|
5417
|
+
// "data": {
|
|
5418
|
+
// "remainDebtAmount": "0",
|
|
5419
|
+
// "clientOid": null,
|
|
5420
|
+
// "symbol": "BTCUSDT",
|
|
5421
|
+
// "coin": "BTC",
|
|
5422
|
+
// "repayAmount": "0.00100001"
|
|
5423
|
+
// }
|
|
5424
|
+
// }
|
|
5425
|
+
//
|
|
5426
|
+
// cross
|
|
5427
|
+
//
|
|
5428
|
+
// {
|
|
5429
|
+
// "code": "00000",
|
|
5430
|
+
// "msg": "success",
|
|
5431
|
+
// "requestTime": 1697252151042,
|
|
5432
|
+
// "data": {
|
|
5433
|
+
// "remainDebtAmount": "0",
|
|
5434
|
+
// "clientOid": null,
|
|
5435
|
+
// "coin": "BTC",
|
|
5436
|
+
// "repayAmount": "0.00010001"
|
|
5437
|
+
// }
|
|
5438
|
+
// }
|
|
5439
|
+
//
|
|
5440
|
+
const data = this.safeValue(response, 'data', {});
|
|
5441
|
+
return this.parseMarginLoan(data, currency);
|
|
5442
|
+
}
|
|
5443
|
+
parseMarginLoan(info, currency = undefined) {
|
|
5444
|
+
//
|
|
5445
|
+
// isolated: borrowMargin
|
|
5446
|
+
//
|
|
5447
|
+
// {
|
|
5448
|
+
// "clientOid": null,
|
|
5449
|
+
// "symbol": "BTCUSDT",
|
|
5450
|
+
// "coin": "BTC",
|
|
5451
|
+
// "borrowAmount": "0.001"
|
|
5452
|
+
// }
|
|
5453
|
+
//
|
|
5454
|
+
// cross: borrowMargin
|
|
5455
|
+
//
|
|
5456
|
+
// {
|
|
5457
|
+
// "clientOid": null,
|
|
5458
|
+
// "coin": "BTC",
|
|
5459
|
+
// "borrowAmount": "0.0001"
|
|
5460
|
+
// }
|
|
5461
|
+
//
|
|
5462
|
+
// isolated: repayMargin
|
|
5463
|
+
//
|
|
5464
|
+
// {
|
|
5465
|
+
// "remainDebtAmount": "0",
|
|
5466
|
+
// "clientOid": null,
|
|
5467
|
+
// "symbol": "BTCUSDT",
|
|
5468
|
+
// "coin": "BTC",
|
|
5469
|
+
// "repayAmount": "0.00100001"
|
|
5470
|
+
// }
|
|
5471
|
+
//
|
|
5472
|
+
// cross: repayMargin
|
|
5473
|
+
//
|
|
5474
|
+
// {
|
|
5475
|
+
// "remainDebtAmount": "0",
|
|
5476
|
+
// "clientOid": null,
|
|
5477
|
+
// "coin": "BTC",
|
|
5478
|
+
// "repayAmount": "0.00010001"
|
|
5479
|
+
// }
|
|
5480
|
+
//
|
|
5481
|
+
const currencyId = this.safeString(info, 'coin');
|
|
5482
|
+
const marketId = this.safeString(info, 'symbol');
|
|
5483
|
+
let symbol = undefined;
|
|
5484
|
+
if (marketId !== undefined) {
|
|
5485
|
+
symbol = this.safeSymbol(marketId);
|
|
5486
|
+
}
|
|
5487
|
+
return {
|
|
5488
|
+
'id': this.safeString(info, 'clientOid'),
|
|
5489
|
+
'currency': this.safeCurrencyCode(currencyId, currency),
|
|
5490
|
+
'amount': this.safeNumber2(info, 'borrowAmount', 'repayAmount'),
|
|
5491
|
+
'symbol': symbol,
|
|
5492
|
+
'timestamp': undefined,
|
|
5493
|
+
'datetime': undefined,
|
|
5494
|
+
'info': info,
|
|
5495
|
+
};
|
|
5496
|
+
}
|
|
5204
5497
|
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
5205
5498
|
if (!response) {
|
|
5206
5499
|
return undefined; // fallback to default error handler
|
package/js/src/bitmart.js
CHANGED
|
@@ -760,6 +760,7 @@ export default class bitmart extends Exchange {
|
|
|
760
760
|
'max': undefined,
|
|
761
761
|
},
|
|
762
762
|
},
|
|
763
|
+
'created': undefined,
|
|
763
764
|
'info': market,
|
|
764
765
|
});
|
|
765
766
|
}
|
|
@@ -866,6 +867,7 @@ export default class bitmart extends Exchange {
|
|
|
866
867
|
'max': undefined,
|
|
867
868
|
},
|
|
868
869
|
},
|
|
870
|
+
'created': this.safeInteger(market, 'open_timestamp'),
|
|
869
871
|
'info': market,
|
|
870
872
|
});
|
|
871
873
|
}
|
package/js/src/bitmex.js
CHANGED
|
@@ -663,6 +663,7 @@ export default class bitmex extends Exchange {
|
|
|
663
663
|
'max': positionIsQuote ? maxOrderQty : undefined,
|
|
664
664
|
},
|
|
665
665
|
},
|
|
666
|
+
'created': this.parse8601(this.safeString(market, 'listing')),
|
|
666
667
|
'info': market,
|
|
667
668
|
});
|
|
668
669
|
}
|
|
@@ -1043,6 +1044,7 @@ export default class bitmex extends Exchange {
|
|
|
1043
1044
|
'Deposit': 'transaction',
|
|
1044
1045
|
'Transfer': 'transfer',
|
|
1045
1046
|
'AffiliatePayout': 'referral',
|
|
1047
|
+
'SpotTrade': 'trade',
|
|
1046
1048
|
};
|
|
1047
1049
|
return this.safeString(types, type, type);
|
|
1048
1050
|
}
|
|
@@ -1580,9 +1582,9 @@ export default class bitmex extends Exchange {
|
|
|
1580
1582
|
const feeCurrencyCode = this.safeCurrencyCode(currencyId);
|
|
1581
1583
|
const feeRateString = this.safeString(trade, 'commission');
|
|
1582
1584
|
fee = {
|
|
1583
|
-
'cost': feeCostString,
|
|
1585
|
+
'cost': Precise.stringAbs(feeCostString),
|
|
1584
1586
|
'currency': feeCurrencyCode,
|
|
1585
|
-
'rate': feeRateString,
|
|
1587
|
+
'rate': Precise.stringAbs(feeRateString),
|
|
1586
1588
|
};
|
|
1587
1589
|
}
|
|
1588
1590
|
// Trade or Funding
|
|
@@ -2110,7 +2112,8 @@ export default class bitmex extends Exchange {
|
|
|
2110
2112
|
// }
|
|
2111
2113
|
// ]
|
|
2112
2114
|
//
|
|
2113
|
-
|
|
2115
|
+
const results = this.parsePositions(response, symbols);
|
|
2116
|
+
return this.filterByArrayPositions(results, 'symbol', symbols, false);
|
|
2114
2117
|
}
|
|
2115
2118
|
parsePosition(position, market = undefined) {
|
|
2116
2119
|
//
|