ccxt 4.2.86 → 4.2.87
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 +3 -3
- package/build.sh +1 -1
- package/dist/ccxt.browser.js +671 -130
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ascendex.js +11 -1
- package/dist/cjs/src/binance.js +14 -1
- package/dist/cjs/src/bingx.js +37 -1
- package/dist/cjs/src/bitfinex.js +3 -0
- package/dist/cjs/src/bitfinex2.js +16 -1
- package/dist/cjs/src/bitflyer.js +19 -0
- package/dist/cjs/src/bitget.js +15 -1
- package/dist/cjs/src/bitopro.js +3 -0
- package/dist/cjs/src/bitrue.js +13 -7
- package/dist/cjs/src/bitvavo.js +3 -0
- package/dist/cjs/src/btcmarkets.js +1 -1
- package/dist/cjs/src/btcturk.js +2 -1
- package/dist/cjs/src/coinex.js +182 -54
- package/dist/cjs/src/currencycom.js +1 -1
- package/dist/cjs/src/delta.js +3 -1
- package/dist/cjs/src/digifinex.js +4 -2
- package/dist/cjs/src/exmo.js +11 -12
- package/dist/cjs/src/gate.js +5 -2
- package/dist/cjs/src/hitbtc.js +26 -2
- package/dist/cjs/src/htx.js +2 -2
- package/dist/cjs/src/huobijp.js +1 -1
- package/dist/cjs/src/hyperliquid.js +249 -12
- package/dist/cjs/src/idex.js +1 -1
- package/dist/cjs/src/krakenfutures.js +2 -6
- package/dist/cjs/src/lbank.js +3 -0
- package/dist/cjs/src/oceanex.js +1 -1
- package/dist/cjs/src/okx.js +24 -10
- package/dist/cjs/src/phemex.js +3 -1
- package/dist/cjs/src/pro/kucoin.js +11 -6
- package/dist/cjs/src/wazirx.js +1 -1
- package/dist/cjs/src/zonda.js +3 -0
- package/examples/js/benchmark.js +104 -0
- package/examples/ts/benchmark.ts +134 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/ascendex.d.ts +5 -12
- package/js/src/ascendex.js +11 -1
- package/js/src/base/Exchange.d.ts +4 -4
- package/js/src/base/types.d.ts +11 -0
- package/js/src/binance.d.ts +4 -11
- package/js/src/binance.js +14 -1
- package/js/src/bingx.d.ts +5 -2
- package/js/src/bingx.js +37 -1
- package/js/src/bitfinex.js +3 -0
- package/js/src/bitfinex2.d.ts +3 -17
- package/js/src/bitfinex2.js +16 -1
- package/js/src/bitflyer.d.ts +1 -0
- package/js/src/bitflyer.js +20 -1
- package/js/src/bitget.d.ts +5 -12
- package/js/src/bitget.js +15 -1
- package/js/src/bitopro.js +3 -0
- package/js/src/bitrue.d.ts +3 -17
- package/js/src/bitrue.js +13 -7
- package/js/src/bitvavo.js +3 -0
- package/js/src/btcmarkets.js +1 -1
- package/js/src/btcturk.js +2 -1
- package/js/src/coinex.d.ts +4 -11
- package/js/src/coinex.js +182 -54
- package/js/src/currencycom.js +1 -1
- package/js/src/delta.d.ts +5 -37
- package/js/src/delta.js +3 -1
- package/js/src/digifinex.d.ts +5 -13
- package/js/src/digifinex.js +4 -2
- package/js/src/exmo.d.ts +5 -37
- package/js/src/exmo.js +11 -12
- package/js/src/gate.d.ts +5 -33
- package/js/src/gate.js +5 -2
- package/js/src/hitbtc.d.ts +5 -12
- package/js/src/hitbtc.js +26 -2
- package/js/src/htx.js +2 -2
- package/js/src/huobijp.js +1 -1
- package/js/src/hyperliquid.d.ts +7 -4
- package/js/src/hyperliquid.js +249 -12
- package/js/src/idex.js +1 -1
- package/js/src/krakenfutures.js +2 -6
- package/js/src/kucoinfutures.d.ts +2 -2
- package/js/src/lbank.js +3 -0
- package/js/src/mexc.d.ts +3 -3
- package/js/src/oceanex.js +1 -1
- package/js/src/okx.d.ts +5 -33
- package/js/src/okx.js +24 -10
- package/js/src/phemex.d.ts +3 -11
- package/js/src/phemex.js +3 -1
- package/js/src/pro/kucoin.js +11 -6
- package/js/src/wazirx.js +1 -1
- package/js/src/zonda.js +3 -0
- package/package.json +3 -2
- package/skip-tests.json +3 -3
package/dist/cjs/ccxt.js
CHANGED
|
@@ -182,7 +182,7 @@ var woo$1 = require('./src/pro/woo.js');
|
|
|
182
182
|
|
|
183
183
|
//-----------------------------------------------------------------------------
|
|
184
184
|
// this is updated by vss.js when building
|
|
185
|
-
const version = '4.2.
|
|
185
|
+
const version = '4.2.87';
|
|
186
186
|
Exchange["default"].ccxtVersion = version;
|
|
187
187
|
const exchanges = {
|
|
188
188
|
'ace': ace,
|
package/dist/cjs/src/ascendex.js
CHANGED
|
@@ -2873,15 +2873,25 @@ class ascendex extends ascendex$1 {
|
|
|
2873
2873
|
});
|
|
2874
2874
|
}
|
|
2875
2875
|
parseMarginModification(data, market = undefined) {
|
|
2876
|
+
//
|
|
2877
|
+
// addMargin/reduceMargin
|
|
2878
|
+
//
|
|
2879
|
+
// {
|
|
2880
|
+
// "code": 0
|
|
2881
|
+
// }
|
|
2882
|
+
//
|
|
2876
2883
|
const errorCode = this.safeString(data, 'code');
|
|
2877
2884
|
const status = (errorCode === '0') ? 'ok' : 'failed';
|
|
2878
2885
|
return {
|
|
2879
2886
|
'info': data,
|
|
2887
|
+
'symbol': market['symbol'],
|
|
2880
2888
|
'type': undefined,
|
|
2881
2889
|
'amount': undefined,
|
|
2890
|
+
'total': undefined,
|
|
2882
2891
|
'code': market['quote'],
|
|
2883
|
-
'symbol': market['symbol'],
|
|
2884
2892
|
'status': status,
|
|
2893
|
+
'timestamp': undefined,
|
|
2894
|
+
'datetime': undefined,
|
|
2885
2895
|
};
|
|
2886
2896
|
}
|
|
2887
2897
|
async reduceMargin(symbol, amount, params = {}) {
|
package/dist/cjs/src/binance.js
CHANGED
|
@@ -11212,6 +11212,16 @@ class binance extends binance$1 {
|
|
|
11212
11212
|
});
|
|
11213
11213
|
}
|
|
11214
11214
|
parseMarginModification(data, market = undefined) {
|
|
11215
|
+
//
|
|
11216
|
+
// add/reduce margin
|
|
11217
|
+
//
|
|
11218
|
+
// {
|
|
11219
|
+
// "code": 200,
|
|
11220
|
+
// "msg": "Successfully modify position margin.",
|
|
11221
|
+
// "amount": 0.001,
|
|
11222
|
+
// "type": 1
|
|
11223
|
+
// }
|
|
11224
|
+
//
|
|
11215
11225
|
const rawType = this.safeInteger(data, 'type');
|
|
11216
11226
|
const resultType = (rawType === 1) ? 'add' : 'reduce';
|
|
11217
11227
|
const resultAmount = this.safeNumber(data, 'amount');
|
|
@@ -11219,11 +11229,14 @@ class binance extends binance$1 {
|
|
|
11219
11229
|
const status = (errorCode === '200') ? 'ok' : 'failed';
|
|
11220
11230
|
return {
|
|
11221
11231
|
'info': data,
|
|
11232
|
+
'symbol': market['symbol'],
|
|
11222
11233
|
'type': resultType,
|
|
11223
11234
|
'amount': resultAmount,
|
|
11235
|
+
'total': undefined,
|
|
11224
11236
|
'code': undefined,
|
|
11225
|
-
'symbol': market['symbol'],
|
|
11226
11237
|
'status': status,
|
|
11238
|
+
'timestamp': undefined,
|
|
11239
|
+
'datetime': undefined,
|
|
11227
11240
|
};
|
|
11228
11241
|
}
|
|
11229
11242
|
async reduceMargin(symbol, amount, params = {}) {
|
package/dist/cjs/src/bingx.js
CHANGED
|
@@ -30,6 +30,7 @@ class bingx extends bingx$1 {
|
|
|
30
30
|
'swap': true,
|
|
31
31
|
'future': false,
|
|
32
32
|
'option': false,
|
|
33
|
+
'addMargin': true,
|
|
33
34
|
'cancelAllOrders': true,
|
|
34
35
|
'cancelOrder': true,
|
|
35
36
|
'cancelOrders': true,
|
|
@@ -76,6 +77,7 @@ class bingx extends bingx$1 {
|
|
|
76
77
|
'fetchTrades': true,
|
|
77
78
|
'fetchTransfers': true,
|
|
78
79
|
'fetchWithdrawals': true,
|
|
80
|
+
'reduceMargin': true,
|
|
79
81
|
'setLeverage': true,
|
|
80
82
|
'setMargin': true,
|
|
81
83
|
'setMarginMode': true,
|
|
@@ -3464,6 +3466,18 @@ class bingx extends bingx$1 {
|
|
|
3464
3466
|
};
|
|
3465
3467
|
return await this.swapV2PrivatePostTradeMarginType(this.extend(request, params));
|
|
3466
3468
|
}
|
|
3469
|
+
async addMargin(symbol, amount, params = {}) {
|
|
3470
|
+
const request = {
|
|
3471
|
+
'type': 1,
|
|
3472
|
+
};
|
|
3473
|
+
return await this.setMargin(symbol, amount, this.extend(request, params));
|
|
3474
|
+
}
|
|
3475
|
+
async reduceMargin(symbol, amount, params = {}) {
|
|
3476
|
+
const request = {
|
|
3477
|
+
'type': 2,
|
|
3478
|
+
};
|
|
3479
|
+
return await this.setMargin(symbol, amount, this.extend(request, params));
|
|
3480
|
+
}
|
|
3467
3481
|
async setMargin(symbol, amount, params = {}) {
|
|
3468
3482
|
/**
|
|
3469
3483
|
* @method
|
|
@@ -3498,7 +3512,29 @@ class bingx extends bingx$1 {
|
|
|
3498
3512
|
// "type": 1
|
|
3499
3513
|
// }
|
|
3500
3514
|
//
|
|
3501
|
-
return response;
|
|
3515
|
+
return this.parseMarginModification(response, market);
|
|
3516
|
+
}
|
|
3517
|
+
parseMarginModification(data, market = undefined) {
|
|
3518
|
+
//
|
|
3519
|
+
// {
|
|
3520
|
+
// "code": 0,
|
|
3521
|
+
// "msg": "",
|
|
3522
|
+
// "amount": 1,
|
|
3523
|
+
// "type": 1
|
|
3524
|
+
// }
|
|
3525
|
+
//
|
|
3526
|
+
const type = this.safeString(data, 'type');
|
|
3527
|
+
return {
|
|
3528
|
+
'info': data,
|
|
3529
|
+
'symbol': this.safeString(market, 'symbol'),
|
|
3530
|
+
'type': (type === '1') ? 'add' : 'reduce',
|
|
3531
|
+
'amount': this.safeNumber(data, 'amount'),
|
|
3532
|
+
'total': this.safeNumber(data, 'margin'),
|
|
3533
|
+
'code': this.safeString(market, 'settle'),
|
|
3534
|
+
'status': undefined,
|
|
3535
|
+
'timestamp': undefined,
|
|
3536
|
+
'datetime': undefined,
|
|
3537
|
+
};
|
|
3502
3538
|
}
|
|
3503
3539
|
async fetchLeverage(symbol, params = {}) {
|
|
3504
3540
|
/**
|
package/dist/cjs/src/bitfinex.js
CHANGED
|
@@ -1323,6 +1323,9 @@ class bitfinex extends bitfinex$1 {
|
|
|
1323
1323
|
if (limit === undefined) {
|
|
1324
1324
|
limit = 100;
|
|
1325
1325
|
}
|
|
1326
|
+
else {
|
|
1327
|
+
limit = Math.min(limit, 10000);
|
|
1328
|
+
}
|
|
1326
1329
|
const market = this.market(symbol);
|
|
1327
1330
|
const v2id = 't' + market['id'];
|
|
1328
1331
|
const request = {
|
|
@@ -1380,6 +1380,9 @@ class bitfinex2 extends bitfinex2$1 {
|
|
|
1380
1380
|
if (limit === undefined) {
|
|
1381
1381
|
limit = 10000;
|
|
1382
1382
|
}
|
|
1383
|
+
else {
|
|
1384
|
+
limit = Math.min(limit, 10000);
|
|
1385
|
+
}
|
|
1383
1386
|
let request = {
|
|
1384
1387
|
'symbol': market['id'],
|
|
1385
1388
|
'timeframe': this.safeString(this.timeframes, timeframe, timeframe),
|
|
@@ -3501,15 +3504,27 @@ class bitfinex2 extends bitfinex2$1 {
|
|
|
3501
3504
|
return this.parseMarginModification(data, market);
|
|
3502
3505
|
}
|
|
3503
3506
|
parseMarginModification(data, market = undefined) {
|
|
3507
|
+
//
|
|
3508
|
+
// setMargin
|
|
3509
|
+
//
|
|
3510
|
+
// [
|
|
3511
|
+
// [
|
|
3512
|
+
// 1
|
|
3513
|
+
// ]
|
|
3514
|
+
// ]
|
|
3515
|
+
//
|
|
3504
3516
|
const marginStatusRaw = data[0];
|
|
3505
3517
|
const marginStatus = (marginStatusRaw === 1) ? 'ok' : 'failed';
|
|
3506
3518
|
return {
|
|
3507
3519
|
'info': data,
|
|
3520
|
+
'symbol': market['symbol'],
|
|
3508
3521
|
'type': undefined,
|
|
3509
3522
|
'amount': undefined,
|
|
3523
|
+
'total': undefined,
|
|
3510
3524
|
'code': undefined,
|
|
3511
|
-
'symbol': market['symbol'],
|
|
3512
3525
|
'status': marginStatus,
|
|
3526
|
+
'timestamp': undefined,
|
|
3527
|
+
'datetime': undefined,
|
|
3513
3528
|
};
|
|
3514
3529
|
}
|
|
3515
3530
|
async fetchOrder(id, symbol = undefined, params = {}) {
|
package/dist/cjs/src/bitflyer.js
CHANGED
|
@@ -114,6 +114,11 @@ class bitflyer extends bitflyer$1 {
|
|
|
114
114
|
},
|
|
115
115
|
},
|
|
116
116
|
'precisionMode': number.TICK_SIZE,
|
|
117
|
+
'exceptions': {
|
|
118
|
+
'exact': {
|
|
119
|
+
'-2': errors.OnMaintenance, // {"status":-2,"error_message":"Under maintenance","data":null}
|
|
120
|
+
},
|
|
121
|
+
},
|
|
117
122
|
});
|
|
118
123
|
}
|
|
119
124
|
parseExpiryDate(expiry) {
|
|
@@ -1041,6 +1046,20 @@ class bitflyer extends bitflyer$1 {
|
|
|
1041
1046
|
}
|
|
1042
1047
|
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
1043
1048
|
}
|
|
1049
|
+
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
1050
|
+
if (response === undefined) {
|
|
1051
|
+
return undefined; // fallback to the default error handler
|
|
1052
|
+
}
|
|
1053
|
+
const feedback = this.id + ' ' + body;
|
|
1054
|
+
// i.e. {"status":-2,"error_message":"Under maintenance","data":null}
|
|
1055
|
+
const errorMessage = this.safeString(response, 'error_message');
|
|
1056
|
+
const statusCode = this.safeNumber(response, 'status');
|
|
1057
|
+
if (errorMessage !== undefined) {
|
|
1058
|
+
this.throwExactlyMatchedException(this.exceptions['exact'], statusCode, feedback);
|
|
1059
|
+
this.throwBroadlyMatchedException(this.exceptions['broad'], errorMessage, feedback);
|
|
1060
|
+
}
|
|
1061
|
+
return undefined;
|
|
1062
|
+
}
|
|
1044
1063
|
}
|
|
1045
1064
|
|
|
1046
1065
|
module.exports = bitflyer;
|
package/dist/cjs/src/bitget.js
CHANGED
|
@@ -1219,6 +1219,7 @@ class bitget extends bitget$1 {
|
|
|
1219
1219
|
'40768': errors.OrderNotFound,
|
|
1220
1220
|
'41114': errors.OnMaintenance,
|
|
1221
1221
|
'43011': errors.InvalidOrder,
|
|
1222
|
+
'43012': errors.InsufficientFunds,
|
|
1222
1223
|
'43025': errors.InvalidOrder,
|
|
1223
1224
|
'43115': errors.OnMaintenance,
|
|
1224
1225
|
'45110': errors.InvalidOrder,
|
|
@@ -6960,15 +6961,28 @@ class bitget extends bitget$1 {
|
|
|
6960
6961
|
});
|
|
6961
6962
|
}
|
|
6962
6963
|
parseMarginModification(data, market = undefined) {
|
|
6964
|
+
//
|
|
6965
|
+
// addMargin/reduceMargin
|
|
6966
|
+
//
|
|
6967
|
+
// {
|
|
6968
|
+
// "code": "00000",
|
|
6969
|
+
// "msg": "success",
|
|
6970
|
+
// "requestTime": 1700813444618,
|
|
6971
|
+
// "data": ""
|
|
6972
|
+
// }
|
|
6973
|
+
//
|
|
6963
6974
|
const errorCode = this.safeString(data, 'code');
|
|
6964
6975
|
const status = (errorCode === '00000') ? 'ok' : 'failed';
|
|
6965
6976
|
return {
|
|
6966
6977
|
'info': data,
|
|
6978
|
+
'symbol': market['symbol'],
|
|
6967
6979
|
'type': undefined,
|
|
6968
6980
|
'amount': undefined,
|
|
6981
|
+
'total': undefined,
|
|
6969
6982
|
'code': market['settle'],
|
|
6970
|
-
'symbol': market['symbol'],
|
|
6971
6983
|
'status': status,
|
|
6984
|
+
'timestamp': undefined,
|
|
6985
|
+
'datetime': undefined,
|
|
6972
6986
|
};
|
|
6973
6987
|
}
|
|
6974
6988
|
async reduceMargin(symbol, amount, params = {}) {
|
package/dist/cjs/src/bitopro.js
CHANGED
|
@@ -756,6 +756,9 @@ class bitopro extends bitopro$1 {
|
|
|
756
756
|
if (limit === undefined) {
|
|
757
757
|
limit = 500;
|
|
758
758
|
}
|
|
759
|
+
else {
|
|
760
|
+
limit = Math.min(limit, 75000); // supports slightly more than 75k candles atm, but limit here to avoid errors
|
|
761
|
+
}
|
|
759
762
|
const timeframeInSeconds = this.parseTimeframe(timeframe);
|
|
760
763
|
let alignedSince = undefined;
|
|
761
764
|
if (since === undefined) {
|
package/dist/cjs/src/bitrue.js
CHANGED
|
@@ -1348,9 +1348,6 @@ class bitrue extends bitrue$1 {
|
|
|
1348
1348
|
'interval': this.safeString(timeframesFuture, timeframe, '1min'),
|
|
1349
1349
|
};
|
|
1350
1350
|
if (limit !== undefined) {
|
|
1351
|
-
if (limit > 300) {
|
|
1352
|
-
limit = 300;
|
|
1353
|
-
}
|
|
1354
1351
|
request['limit'] = limit;
|
|
1355
1352
|
}
|
|
1356
1353
|
if (market['linear']) {
|
|
@@ -1369,9 +1366,6 @@ class bitrue extends bitrue$1 {
|
|
|
1369
1366
|
'scale': this.safeString(timeframesSpot, timeframe, '1m'),
|
|
1370
1367
|
};
|
|
1371
1368
|
if (limit !== undefined) {
|
|
1372
|
-
if (limit > 1440) {
|
|
1373
|
-
limit = 1440;
|
|
1374
|
-
}
|
|
1375
1369
|
request['limit'] = limit;
|
|
1376
1370
|
}
|
|
1377
1371
|
if (since !== undefined) {
|
|
@@ -3043,13 +3037,25 @@ class bitrue extends bitrue$1 {
|
|
|
3043
3037
|
return response;
|
|
3044
3038
|
}
|
|
3045
3039
|
parseMarginModification(data, market = undefined) {
|
|
3040
|
+
//
|
|
3041
|
+
// setMargin
|
|
3042
|
+
//
|
|
3043
|
+
// {
|
|
3044
|
+
// "code": 0,
|
|
3045
|
+
// "msg": "success"
|
|
3046
|
+
// "data": null
|
|
3047
|
+
// }
|
|
3048
|
+
//
|
|
3046
3049
|
return {
|
|
3047
3050
|
'info': data,
|
|
3051
|
+
'symbol': market['symbol'],
|
|
3048
3052
|
'type': undefined,
|
|
3049
3053
|
'amount': undefined,
|
|
3054
|
+
'total': undefined,
|
|
3050
3055
|
'code': undefined,
|
|
3051
|
-
'symbol': market['symbol'],
|
|
3052
3056
|
'status': undefined,
|
|
3057
|
+
'timestamp': undefined,
|
|
3058
|
+
'datetime': undefined,
|
|
3053
3059
|
};
|
|
3054
3060
|
}
|
|
3055
3061
|
async setMargin(symbol, amount, params = {}) {
|
package/dist/cjs/src/bitvavo.js
CHANGED
|
@@ -932,6 +932,9 @@ class bitvavo extends bitvavo$1 {
|
|
|
932
932
|
if (limit === undefined) {
|
|
933
933
|
limit = 1440;
|
|
934
934
|
}
|
|
935
|
+
else {
|
|
936
|
+
limit = Math.min(limit, 1440);
|
|
937
|
+
}
|
|
935
938
|
request['end'] = this.sum(since, limit * duration * 1000);
|
|
936
939
|
}
|
|
937
940
|
[request, params] = this.handleUntilOption('end', request, params);
|
|
@@ -538,7 +538,7 @@ class btcmarkets extends btcmarkets$1 {
|
|
|
538
538
|
request['from'] = this.iso8601(since);
|
|
539
539
|
}
|
|
540
540
|
if (limit !== undefined) {
|
|
541
|
-
request['limit'] = limit; // default is 10, max 200
|
|
541
|
+
request['limit'] = Math.min(limit, 200); // default is 10, max 200
|
|
542
542
|
}
|
|
543
543
|
const response = await this.publicGetMarketsMarketIdCandles(this.extend(request, params));
|
|
544
544
|
//
|
package/dist/cjs/src/btcturk.js
CHANGED
|
@@ -585,6 +585,7 @@ class btcturk extends btcturk$1 {
|
|
|
585
585
|
limit = 100; // default value
|
|
586
586
|
}
|
|
587
587
|
if (limit !== undefined) {
|
|
588
|
+
limit = Math.min(limit, 11000); // max 11000 candles diapason can be covered
|
|
588
589
|
if (timeframe === '1y') { // difficult with leap years
|
|
589
590
|
throw new errors.BadRequest(this.id + ' fetchOHLCV () does not accept a limit parameter when timeframe == "1y"');
|
|
590
591
|
}
|
|
@@ -595,7 +596,7 @@ class btcturk extends btcturk$1 {
|
|
|
595
596
|
request['to'] = Math.min(request['to'], to);
|
|
596
597
|
}
|
|
597
598
|
else {
|
|
598
|
-
request['from'] = this.parseToInt(
|
|
599
|
+
request['from'] = this.parseToInt(0 / 1000) - limitSeconds;
|
|
599
600
|
}
|
|
600
601
|
}
|
|
601
602
|
const response = await this.graphGetKlinesHistory(this.extend(request, params));
|
package/dist/cjs/src/coinex.js
CHANGED
|
@@ -1065,19 +1065,22 @@ class coinex extends coinex$1 {
|
|
|
1065
1065
|
* @method
|
|
1066
1066
|
* @name coinex#fetchTime
|
|
1067
1067
|
* @description fetches the current integer timestamp in milliseconds from the exchange server
|
|
1068
|
-
* @see https://
|
|
1068
|
+
* @see https://docs.coinex.com/api/v2/common/http/time
|
|
1069
1069
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1070
1070
|
* @returns {int} the current integer timestamp in milliseconds from the exchange server
|
|
1071
1071
|
*/
|
|
1072
|
-
const response = await this.
|
|
1072
|
+
const response = await this.v2PublicGetTime(params);
|
|
1073
1073
|
//
|
|
1074
1074
|
// {
|
|
1075
|
-
// "code":
|
|
1076
|
-
// "data":
|
|
1075
|
+
// "code": 0,
|
|
1076
|
+
// "data": {
|
|
1077
|
+
// "timestamp": 1711699867777
|
|
1078
|
+
// },
|
|
1077
1079
|
// "message": "OK"
|
|
1078
1080
|
// }
|
|
1079
1081
|
//
|
|
1080
|
-
|
|
1082
|
+
const data = this.safeDict(response, 'data', {});
|
|
1083
|
+
return this.safeInteger(data, 'timestamp');
|
|
1081
1084
|
}
|
|
1082
1085
|
async fetchOrderBook(symbol, limit = 20, params = {}) {
|
|
1083
1086
|
/**
|
|
@@ -1337,7 +1340,8 @@ class coinex extends coinex$1 {
|
|
|
1337
1340
|
* @method
|
|
1338
1341
|
* @name coinex#fetchTradingFee
|
|
1339
1342
|
* @description fetch the trading fees for a market
|
|
1340
|
-
* @see https://
|
|
1343
|
+
* @see https://docs.coinex.com/api/v2/spot/market/http/list-market
|
|
1344
|
+
* @see https://docs.coinex.com/api/v2/futures/market/http/list-market
|
|
1341
1345
|
* @param {string} symbol unified market symbol
|
|
1342
1346
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1343
1347
|
* @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
@@ -1347,67 +1351,132 @@ class coinex extends coinex$1 {
|
|
|
1347
1351
|
const request = {
|
|
1348
1352
|
'market': market['id'],
|
|
1349
1353
|
};
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1354
|
+
let response = undefined;
|
|
1355
|
+
if (market['spot']) {
|
|
1356
|
+
response = await this.v2PublicGetSpotMarket(this.extend(request, params));
|
|
1357
|
+
//
|
|
1358
|
+
// {
|
|
1359
|
+
// "code": 0,
|
|
1360
|
+
// "data": [
|
|
1361
|
+
// {
|
|
1362
|
+
// "base_ccy": "BTC",
|
|
1363
|
+
// "base_ccy_precision": 8,
|
|
1364
|
+
// "is_amm_available": false,
|
|
1365
|
+
// "is_margin_available": true,
|
|
1366
|
+
// "maker_fee_rate": "0.002",
|
|
1367
|
+
// "market": "BTCUSDT",
|
|
1368
|
+
// "min_amount": "0.0001",
|
|
1369
|
+
// "quote_ccy": "USDT",
|
|
1370
|
+
// "quote_ccy_precision": 2,
|
|
1371
|
+
// "taker_fee_rate": "0.002"
|
|
1372
|
+
// }
|
|
1373
|
+
// ],
|
|
1374
|
+
// "message": "OK"
|
|
1375
|
+
// }
|
|
1376
|
+
//
|
|
1377
|
+
}
|
|
1378
|
+
else {
|
|
1379
|
+
response = await this.v2PublicGetFuturesMarket(this.extend(request, params));
|
|
1380
|
+
//
|
|
1381
|
+
// {
|
|
1382
|
+
// "code": 0,
|
|
1383
|
+
// "data": [
|
|
1384
|
+
// {
|
|
1385
|
+
// "base_ccy": "BTC",
|
|
1386
|
+
// "base_ccy_precision": 8,
|
|
1387
|
+
// "contract_type": "linear",
|
|
1388
|
+
// "leverage": ["1","2","3","5","8","10","15","20","30","50","100"],
|
|
1389
|
+
// "maker_fee_rate": "0",
|
|
1390
|
+
// "market": "BTCUSDT",
|
|
1391
|
+
// "min_amount": "0.0001",
|
|
1392
|
+
// "open_interest_volume": "185.7498",
|
|
1393
|
+
// "quote_ccy": "USDT",
|
|
1394
|
+
// "quote_ccy_precision": 2,
|
|
1395
|
+
// "taker_fee_rate": "0"
|
|
1396
|
+
// }
|
|
1397
|
+
// ],
|
|
1398
|
+
// "message": "OK"
|
|
1399
|
+
// }
|
|
1400
|
+
//
|
|
1401
|
+
}
|
|
1402
|
+
const data = this.safeList(response, 'data', []);
|
|
1403
|
+
const result = this.safeDict(data, 0, {});
|
|
1404
|
+
return this.parseTradingFee(result, market);
|
|
1369
1405
|
}
|
|
1370
1406
|
async fetchTradingFees(params = {}) {
|
|
1371
1407
|
/**
|
|
1372
1408
|
* @method
|
|
1373
1409
|
* @name coinex#fetchTradingFees
|
|
1374
1410
|
* @description fetch the trading fees for multiple markets
|
|
1375
|
-
* @see https://
|
|
1411
|
+
* @see https://docs.coinex.com/api/v2/spot/market/http/list-market
|
|
1412
|
+
* @see https://docs.coinex.com/api/v2/futures/market/http/list-market
|
|
1376
1413
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1377
1414
|
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
|
1378
1415
|
*/
|
|
1379
1416
|
await this.loadMarkets();
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1417
|
+
let type = undefined;
|
|
1418
|
+
[type, params] = this.handleMarketTypeAndParams('fetchTradingFees', undefined, params);
|
|
1419
|
+
let response = undefined;
|
|
1420
|
+
if (type === 'swap') {
|
|
1421
|
+
response = await this.v2PublicGetFuturesMarket(params);
|
|
1422
|
+
//
|
|
1423
|
+
// {
|
|
1424
|
+
// "code": 0,
|
|
1425
|
+
// "data": [
|
|
1426
|
+
// {
|
|
1427
|
+
// "base_ccy": "BTC",
|
|
1428
|
+
// "base_ccy_precision": 8,
|
|
1429
|
+
// "contract_type": "linear",
|
|
1430
|
+
// "leverage": ["1","2","3","5","8","10","15","20","30","50","100"],
|
|
1431
|
+
// "maker_fee_rate": "0",
|
|
1432
|
+
// "market": "BTCUSDT",
|
|
1433
|
+
// "min_amount": "0.0001",
|
|
1434
|
+
// "open_interest_volume": "185.7498",
|
|
1435
|
+
// "quote_ccy": "USDT",
|
|
1436
|
+
// "quote_ccy_precision": 2,
|
|
1437
|
+
// "taker_fee_rate": "0"
|
|
1438
|
+
// }
|
|
1439
|
+
// ],
|
|
1440
|
+
// "message": "OK"
|
|
1441
|
+
// }
|
|
1442
|
+
//
|
|
1443
|
+
}
|
|
1444
|
+
else {
|
|
1445
|
+
response = await this.v2PublicGetSpotMarket(params);
|
|
1446
|
+
//
|
|
1447
|
+
// {
|
|
1448
|
+
// "code": 0,
|
|
1449
|
+
// "data": [
|
|
1450
|
+
// {
|
|
1451
|
+
// "base_ccy": "BTC",
|
|
1452
|
+
// "base_ccy_precision": 8,
|
|
1453
|
+
// "is_amm_available": false,
|
|
1454
|
+
// "is_margin_available": true,
|
|
1455
|
+
// "maker_fee_rate": "0.002",
|
|
1456
|
+
// "market": "BTCUSDT",
|
|
1457
|
+
// "min_amount": "0.0001",
|
|
1458
|
+
// "quote_ccy": "USDT",
|
|
1459
|
+
// "quote_ccy_precision": 2,
|
|
1460
|
+
// "taker_fee_rate": "0.002"
|
|
1461
|
+
// },
|
|
1462
|
+
// ],
|
|
1463
|
+
// "message": "OK"
|
|
1464
|
+
// }
|
|
1465
|
+
//
|
|
1466
|
+
}
|
|
1467
|
+
const data = this.safeList(response, 'data', []);
|
|
1400
1468
|
const result = {};
|
|
1401
|
-
for (let i = 0; i <
|
|
1402
|
-
const
|
|
1403
|
-
const
|
|
1404
|
-
const
|
|
1405
|
-
|
|
1469
|
+
for (let i = 0; i < data.length; i++) {
|
|
1470
|
+
const entry = data[i];
|
|
1471
|
+
const marketId = this.safeString(entry, 'market');
|
|
1472
|
+
const market = this.safeMarket(marketId, undefined, undefined, type);
|
|
1473
|
+
const symbol = market['symbol'];
|
|
1474
|
+
result[symbol] = this.parseTradingFee(entry, market);
|
|
1406
1475
|
}
|
|
1407
1476
|
return result;
|
|
1408
1477
|
}
|
|
1409
1478
|
parseTradingFee(fee, market = undefined) {
|
|
1410
|
-
const marketId = this.safeValue(fee, '
|
|
1479
|
+
const marketId = this.safeValue(fee, 'market');
|
|
1411
1480
|
const symbol = this.safeSymbol(marketId, market);
|
|
1412
1481
|
return {
|
|
1413
1482
|
'info': fee,
|
|
@@ -4179,13 +4248,72 @@ class coinex extends coinex$1 {
|
|
|
4179
4248
|
});
|
|
4180
4249
|
}
|
|
4181
4250
|
parseMarginModification(data, market = undefined) {
|
|
4251
|
+
//
|
|
4252
|
+
// addMargin/reduceMargin
|
|
4253
|
+
//
|
|
4254
|
+
// {
|
|
4255
|
+
// "adl_sort": 1,
|
|
4256
|
+
// "adl_sort_val": "0.00004320",
|
|
4257
|
+
// "amount": "0.0005",
|
|
4258
|
+
// "amount_max": "0.0005",
|
|
4259
|
+
// "amount_max_margin": "6.57352000000000000000",
|
|
4260
|
+
// "bkr_price": "16294.08000000000000011090",
|
|
4261
|
+
// "bkr_price_imply": "0.00000000000000000000",
|
|
4262
|
+
// "close_left": "0.0005",
|
|
4263
|
+
// "create_time": 1651202571.320778,
|
|
4264
|
+
// "deal_all": "19.72000000000000000000",
|
|
4265
|
+
// "deal_asset_fee": "0.00000000000000000000",
|
|
4266
|
+
// "fee_asset": "",
|
|
4267
|
+
// "finish_type": 1,
|
|
4268
|
+
// "first_price": "39441.12",
|
|
4269
|
+
// "insurance": "0.00000000000000000000",
|
|
4270
|
+
// "latest_price": "39441.12",
|
|
4271
|
+
// "leverage": "3",
|
|
4272
|
+
// "liq_amount": "0.00000000000000000000",
|
|
4273
|
+
// "liq_order_price": "0",
|
|
4274
|
+
// "liq_order_time": 0,
|
|
4275
|
+
// "liq_price": "16491.28560000000000011090",
|
|
4276
|
+
// "liq_price_imply": "0.00000000000000000000",
|
|
4277
|
+
// "liq_profit": "0.00000000000000000000",
|
|
4278
|
+
// "liq_time": 0,
|
|
4279
|
+
// "mainten_margin": "0.005",
|
|
4280
|
+
// "mainten_margin_amount": "0.09860280000000000000",
|
|
4281
|
+
// "maker_fee": "0.00000000000000000000",
|
|
4282
|
+
// "margin_amount": "11.57352000000000000000",
|
|
4283
|
+
// "market": "BTCUSDT",
|
|
4284
|
+
// "open_margin": "0.58687582908396110455",
|
|
4285
|
+
// "open_margin_imply": "0.00000000000000000000",
|
|
4286
|
+
// "open_price": "39441.12000000000000000000",
|
|
4287
|
+
// "open_val": "19.72056000000000000000",
|
|
4288
|
+
// "open_val_max": "19.72056000000000000000",
|
|
4289
|
+
// "position_id": 65171206,
|
|
4290
|
+
// "profit_clearing": "-0.00986028000000000000",
|
|
4291
|
+
// "profit_real": "-0.00986028000000000000",
|
|
4292
|
+
// "profit_unreal": "0.00",
|
|
4293
|
+
// "side": 2,
|
|
4294
|
+
// "stop_loss_price": "0.00000000000000000000",
|
|
4295
|
+
// "stop_loss_type": 0,
|
|
4296
|
+
// "sys": 0,
|
|
4297
|
+
// "take_profit_price": "0.00000000000000000000",
|
|
4298
|
+
// "take_profit_type": 0,
|
|
4299
|
+
// "taker_fee": "0.00000000000000000000",
|
|
4300
|
+
// "total": 3464,
|
|
4301
|
+
// "type": 1,
|
|
4302
|
+
// "update_time": 1651202638.911212,
|
|
4303
|
+
// "user_id": 3620173
|
|
4304
|
+
// }
|
|
4305
|
+
//
|
|
4306
|
+
const timestamp = this.safeIntegerProduct(data, 'update_time', 1000);
|
|
4182
4307
|
return {
|
|
4183
4308
|
'info': data,
|
|
4309
|
+
'symbol': this.safeSymbol(undefined, market),
|
|
4184
4310
|
'type': undefined,
|
|
4185
|
-
'amount':
|
|
4311
|
+
'amount': this.safeNumber(data, 'margin_amount'),
|
|
4312
|
+
'total': undefined,
|
|
4186
4313
|
'code': market['quote'],
|
|
4187
|
-
'symbol': this.safeSymbol(undefined, market),
|
|
4188
4314
|
'status': undefined,
|
|
4315
|
+
'timestamp': timestamp,
|
|
4316
|
+
'datetime': this.iso8601(timestamp),
|
|
4189
4317
|
};
|
|
4190
4318
|
}
|
|
4191
4319
|
async addMargin(symbol, amount, params = {}) {
|