ccxt 4.1.28 → 4.1.30
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/dist/ccxt.browser.js +586 -62
- package/dist/ccxt.browser.min.js +9 -9
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/ws/Future.js +6 -2
- package/dist/cjs/src/bitget.js +286 -17
- package/dist/cjs/src/bitopro.js +5 -4
- package/dist/cjs/src/bitrue.js +33 -18
- package/dist/cjs/src/bybit.js +4 -0
- package/dist/cjs/src/cryptocom.js +32 -0
- package/dist/cjs/src/gate.js +58 -10
- package/dist/cjs/src/huobi.js +0 -1
- package/dist/cjs/src/huobijp.js +0 -1
- package/dist/cjs/src/krakenfutures.js +58 -4
- package/dist/cjs/src/mexc.js +95 -4
- package/dist/cjs/src/okx.js +1 -0
- package/dist/cjs/src/phemex.js +3 -0
- package/dist/cjs/src/pro/huobi.js +4 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/bybit.d.ts +1 -0
- package/js/src/abstract/okex.d.ts +1 -0
- package/js/src/abstract/okex5.d.ts +1 -0
- package/js/src/abstract/okx.d.ts +1 -0
- package/js/src/base/ws/Future.js +6 -2
- package/js/src/bitget.d.ts +12 -0
- package/js/src/bitget.js +286 -17
- package/js/src/bitopro.js +5 -4
- package/js/src/bitrue.js +33 -18
- package/js/src/bybit.js +4 -0
- package/js/src/cryptocom.d.ts +1 -0
- package/js/src/cryptocom.js +32 -0
- package/js/src/gate.js +58 -10
- package/js/src/huobi.js +0 -1
- package/js/src/huobijp.js +0 -1
- package/js/src/krakenfutures.d.ts +1 -1
- package/js/src/krakenfutures.js +58 -4
- package/js/src/mexc.d.ts +3 -1
- package/js/src/mexc.js +95 -4
- package/js/src/okx.js +1 -0
- package/js/src/phemex.js +3 -0
- package/js/src/pro/huobi.js +4 -0
- package/package.json +1 -1
package/dist/cjs/ccxt.js
CHANGED
|
@@ -180,7 +180,7 @@ var woo$1 = require('./src/pro/woo.js');
|
|
|
180
180
|
|
|
181
181
|
//-----------------------------------------------------------------------------
|
|
182
182
|
// this is updated by vss.js when building
|
|
183
|
-
const version = '4.1.
|
|
183
|
+
const version = '4.1.30';
|
|
184
184
|
Exchange["default"].ccxtVersion = version;
|
|
185
185
|
const exchanges = {
|
|
186
186
|
'ace': ace,
|
|
@@ -11,11 +11,15 @@ function createFuture() {
|
|
|
11
11
|
});
|
|
12
12
|
p.resolve = function _resolve() {
|
|
13
13
|
// eslint-disable-next-line prefer-rest-params
|
|
14
|
-
|
|
14
|
+
setTimeout(() => {
|
|
15
|
+
resolve.apply(this, arguments);
|
|
16
|
+
});
|
|
15
17
|
};
|
|
16
18
|
p.reject = function _reject() {
|
|
17
19
|
// eslint-disable-next-line prefer-rest-params
|
|
18
|
-
|
|
20
|
+
setTimeout(() => {
|
|
21
|
+
reject.apply(this, arguments);
|
|
22
|
+
});
|
|
19
23
|
};
|
|
20
24
|
return p;
|
|
21
25
|
}
|
package/dist/cjs/src/bitget.js
CHANGED
|
@@ -25,7 +25,7 @@ class bitget extends bitget$1 {
|
|
|
25
25
|
'has': {
|
|
26
26
|
'CORS': undefined,
|
|
27
27
|
'spot': true,
|
|
28
|
-
'margin':
|
|
28
|
+
'margin': true,
|
|
29
29
|
'swap': true,
|
|
30
30
|
'future': true,
|
|
31
31
|
'option': false,
|
|
@@ -40,6 +40,7 @@ class bitget extends bitget$1 {
|
|
|
40
40
|
'editOrder': true,
|
|
41
41
|
'fetchAccounts': false,
|
|
42
42
|
'fetchBalance': true,
|
|
43
|
+
'fetchBorrowInterest': true,
|
|
43
44
|
'fetchBorrowRate': true,
|
|
44
45
|
'fetchBorrowRateHistories': false,
|
|
45
46
|
'fetchBorrowRateHistory': false,
|
|
@@ -1491,20 +1492,47 @@ class bitget extends bitget$1 {
|
|
|
1491
1492
|
* @name bitget#fetchMarketLeverageTiers
|
|
1492
1493
|
* @description retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes for a single market
|
|
1493
1494
|
* @see https://bitgetlimited.github.io/apidoc/en/mix/#get-position-tier
|
|
1495
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#get-isolated-tier-data
|
|
1496
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#get-cross-tier-data
|
|
1494
1497
|
* @param {string} symbol unified market symbol
|
|
1495
1498
|
* @param {object} [params] extra parameters specific to the bitget api endpoint
|
|
1499
|
+
* @param {string} [params.marginMode] for spot margin 'cross' or 'isolated', default is 'isolated'
|
|
1500
|
+
* @param {string} [params.code] required for cross spot margin
|
|
1496
1501
|
* @returns {object} a [leverage tiers structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#leverage-tiers-structure}
|
|
1497
1502
|
*/
|
|
1498
1503
|
await this.loadMarkets();
|
|
1499
1504
|
const request = {};
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1505
|
+
const market = this.market(symbol);
|
|
1506
|
+
let type = undefined;
|
|
1507
|
+
[type, params] = this.handleMarketTypeAndParams('fetchMarketLeverageTiers', market, params);
|
|
1508
|
+
let response = undefined;
|
|
1509
|
+
let marginMode = undefined;
|
|
1510
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchMarketLeverageTiers', params, 'isolated');
|
|
1511
|
+
if ((type === 'swap') || (type === 'future')) {
|
|
1512
|
+
const marketId = market['id'];
|
|
1513
|
+
const parts = marketId.split('_');
|
|
1514
|
+
const productType = this.safeStringUpper(parts, 1);
|
|
1515
|
+
request['symbol'] = marketId;
|
|
1516
|
+
request['productType'] = productType;
|
|
1517
|
+
response = await this.publicMixGetMarketQueryPositionLever(this.extend(request, params));
|
|
1518
|
+
}
|
|
1519
|
+
else if (marginMode === 'isolated') {
|
|
1520
|
+
request['symbol'] = market['info']['symbolName'];
|
|
1521
|
+
response = await this.publicMarginGetIsolatedPublicTierData(this.extend(request, params));
|
|
1522
|
+
}
|
|
1523
|
+
else if (marginMode === 'cross') {
|
|
1524
|
+
const code = this.safeString(params, 'code');
|
|
1525
|
+
this.checkRequiredArgument('fetchMarketLeverageTiers', code, 'code');
|
|
1526
|
+
params = this.omit(params, 'code');
|
|
1527
|
+
const currency = this.currency(code);
|
|
1528
|
+
request['coin'] = currency['code'];
|
|
1529
|
+
response = await this.publicMarginGetCrossPublicTierData(this.extend(request, params));
|
|
1530
|
+
}
|
|
1531
|
+
else {
|
|
1503
1532
|
throw new errors.BadRequest(this.id + ' fetchMarketLeverageTiers() symbol does not support market ' + symbol);
|
|
1504
1533
|
}
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
const response = await this.publicMixGetMarketQueryPositionLever(this.extend(request, params));
|
|
1534
|
+
//
|
|
1535
|
+
// swap and future
|
|
1508
1536
|
//
|
|
1509
1537
|
// {
|
|
1510
1538
|
// "code":"00000",
|
|
@@ -1521,10 +1549,50 @@ class bitget extends bitget$1 {
|
|
|
1521
1549
|
// "requestTime":1627292076687
|
|
1522
1550
|
// }
|
|
1523
1551
|
//
|
|
1524
|
-
|
|
1552
|
+
// isolated
|
|
1553
|
+
//
|
|
1554
|
+
// {
|
|
1555
|
+
// "code": "00000",
|
|
1556
|
+
// "msg": "success",
|
|
1557
|
+
// "requestTime": 1698352496622,
|
|
1558
|
+
// "data": [
|
|
1559
|
+
// {
|
|
1560
|
+
// "tier": "1",
|
|
1561
|
+
// "symbol": "BTCUSDT",
|
|
1562
|
+
// "leverage": "10",
|
|
1563
|
+
// "baseCoin": "BTC",
|
|
1564
|
+
// "quoteCoin": "USDT",
|
|
1565
|
+
// "baseMaxBorrowableAmount": "3",
|
|
1566
|
+
// "quoteMaxBorrowableAmount": "30000",
|
|
1567
|
+
// "maintainMarginRate": "0.05",
|
|
1568
|
+
// "initRate": "0.1111"
|
|
1569
|
+
// },
|
|
1570
|
+
// ]
|
|
1571
|
+
// }
|
|
1572
|
+
//
|
|
1573
|
+
// cross
|
|
1574
|
+
//
|
|
1575
|
+
// {
|
|
1576
|
+
// "code": "00000",
|
|
1577
|
+
// "msg": "success",
|
|
1578
|
+
// "requestTime": 1698352997077,
|
|
1579
|
+
// "data": [
|
|
1580
|
+
// {
|
|
1581
|
+
// "tier": "1",
|
|
1582
|
+
// "leverage": "3",
|
|
1583
|
+
// "coin": "BTC",
|
|
1584
|
+
// "maxBorrowableAmount": "26",
|
|
1585
|
+
// "maintainMarginRate": "0.1"
|
|
1586
|
+
// }
|
|
1587
|
+
// ]
|
|
1588
|
+
// }
|
|
1589
|
+
//
|
|
1590
|
+
const result = this.safeValue(response, 'data', []);
|
|
1525
1591
|
return this.parseMarketLeverageTiers(result, market);
|
|
1526
1592
|
}
|
|
1527
1593
|
parseMarketLeverageTiers(info, market = undefined) {
|
|
1594
|
+
//
|
|
1595
|
+
// swap and future
|
|
1528
1596
|
//
|
|
1529
1597
|
// [
|
|
1530
1598
|
// {
|
|
@@ -1534,22 +1602,57 @@ class bitget extends bitget$1 {
|
|
|
1534
1602
|
// "leverage": 125,
|
|
1535
1603
|
// "keepMarginRate": "0.004"
|
|
1536
1604
|
// }
|
|
1537
|
-
// ]
|
|
1605
|
+
// ]
|
|
1606
|
+
//
|
|
1607
|
+
// isolated
|
|
1608
|
+
//
|
|
1609
|
+
// [
|
|
1610
|
+
// {
|
|
1611
|
+
// "tier": "1",
|
|
1612
|
+
// "symbol": "BTCUSDT",
|
|
1613
|
+
// "leverage": "10",
|
|
1614
|
+
// "baseCoin": "BTC",
|
|
1615
|
+
// "quoteCoin": "USDT",
|
|
1616
|
+
// "baseMaxBorrowableAmount": "3",
|
|
1617
|
+
// "quoteMaxBorrowableAmount": "30000",
|
|
1618
|
+
// "maintainMarginRate": "0.05",
|
|
1619
|
+
// "initRate": "0.1111"
|
|
1620
|
+
// }
|
|
1621
|
+
// ]
|
|
1622
|
+
//
|
|
1623
|
+
// cross
|
|
1624
|
+
//
|
|
1625
|
+
// [
|
|
1626
|
+
// {
|
|
1627
|
+
// "tier": "1",
|
|
1628
|
+
// "leverage": "3",
|
|
1629
|
+
// "coin": "BTC",
|
|
1630
|
+
// "maxBorrowableAmount": "26",
|
|
1631
|
+
// "maintainMarginRate": "0.1"
|
|
1632
|
+
// }
|
|
1633
|
+
// ]
|
|
1538
1634
|
//
|
|
1539
1635
|
const tiers = [];
|
|
1636
|
+
let minNotional = 0;
|
|
1540
1637
|
for (let i = 0; i < info.length; i++) {
|
|
1541
1638
|
const item = info[i];
|
|
1542
|
-
const
|
|
1543
|
-
|
|
1639
|
+
const minimumNotional = this.safeNumber(item, 'startUnit');
|
|
1640
|
+
if (minimumNotional !== undefined) {
|
|
1641
|
+
minNotional = minimumNotional;
|
|
1642
|
+
}
|
|
1643
|
+
const maxNotional = this.safeNumberN(item, ['endUnit', 'maxBorrowableAmount', 'baseMaxBorrowableAmount']);
|
|
1644
|
+
const marginCurrency = this.safeString2(item, 'coin', 'baseCoin');
|
|
1645
|
+
const currencyId = (marginCurrency !== undefined) ? marginCurrency : market['base'];
|
|
1544
1646
|
tiers.push({
|
|
1545
|
-
'tier': this.
|
|
1546
|
-
'currency':
|
|
1647
|
+
'tier': this.safeInteger2(item, 'level', 'tier'),
|
|
1648
|
+
'currency': this.safeCurrencyCode(currencyId),
|
|
1547
1649
|
'minNotional': minNotional,
|
|
1548
1650
|
'maxNotional': maxNotional,
|
|
1549
|
-
'maintenanceMarginRate': this.
|
|
1651
|
+
'maintenanceMarginRate': this.safeNumber2(item, 'keepMarginRate', 'maintainMarginRate'),
|
|
1550
1652
|
'maxLeverage': this.safeNumber(item, 'leverage'),
|
|
1551
1653
|
'info': item,
|
|
1552
1654
|
});
|
|
1655
|
+
minNotional = maxNotional;
|
|
1553
1656
|
}
|
|
1554
1657
|
return tiers;
|
|
1555
1658
|
}
|
|
@@ -3331,12 +3434,16 @@ class bitget extends bitget$1 {
|
|
|
3331
3434
|
* @description create a list of trade orders (all orders should be of the same symbol)
|
|
3332
3435
|
* @see https://bitgetlimited.github.io/apidoc/en/spot/#batch-order
|
|
3333
3436
|
* @see https://bitgetlimited.github.io/apidoc/en/mix/#batch-order
|
|
3437
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-batch-order
|
|
3438
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-batch-order
|
|
3334
3439
|
* @param {array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
|
|
3440
|
+
* @param {object} [params] extra parameters specific to the api endpoint
|
|
3335
3441
|
* @returns {object} an [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
|
|
3336
3442
|
*/
|
|
3337
3443
|
await this.loadMarkets();
|
|
3338
3444
|
const ordersRequests = [];
|
|
3339
3445
|
let symbol = undefined;
|
|
3446
|
+
let marginMode = undefined;
|
|
3340
3447
|
for (let i = 0; i < orders.length; i++) {
|
|
3341
3448
|
const rawOrder = orders[i];
|
|
3342
3449
|
const marketId = this.safeString(rawOrder, 'symbol');
|
|
@@ -3353,23 +3460,44 @@ class bitget extends bitget$1 {
|
|
|
3353
3460
|
const amount = this.safeValue(rawOrder, 'amount');
|
|
3354
3461
|
const price = this.safeValue(rawOrder, 'price');
|
|
3355
3462
|
const orderParams = this.safeValue(rawOrder, 'params', {});
|
|
3463
|
+
const marginResult = this.handleMarginModeAndParams('createOrders', params);
|
|
3464
|
+
const currentMarginMode = marginResult[0];
|
|
3465
|
+
if (currentMarginMode !== undefined) {
|
|
3466
|
+
if (marginMode === undefined) {
|
|
3467
|
+
marginMode = currentMarginMode;
|
|
3468
|
+
}
|
|
3469
|
+
else {
|
|
3470
|
+
if (marginMode !== currentMarginMode) {
|
|
3471
|
+
throw new errors.BadRequest(this.id + ' createOrders() requires all orders to have the same margin mode (isolated or cross)');
|
|
3472
|
+
}
|
|
3473
|
+
}
|
|
3474
|
+
}
|
|
3356
3475
|
const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, orderParams);
|
|
3357
3476
|
ordersRequests.push(orderRequest);
|
|
3358
3477
|
}
|
|
3359
3478
|
const market = this.market(symbol);
|
|
3479
|
+
const symbolRequest = (marginMode !== undefined) ? (market['info']['symbolName']) : (market['id']);
|
|
3360
3480
|
const request = {
|
|
3361
|
-
'symbol':
|
|
3481
|
+
'symbol': symbolRequest,
|
|
3362
3482
|
};
|
|
3363
3483
|
let response = undefined;
|
|
3364
3484
|
if (market['spot']) {
|
|
3365
3485
|
request['orderList'] = ordersRequests;
|
|
3366
|
-
response = await this.privateSpotPostTradeBatchOrders(request);
|
|
3367
3486
|
}
|
|
3368
|
-
|
|
3487
|
+
if ((market['swap']) || (market['future'])) {
|
|
3369
3488
|
request['orderDataList'] = ordersRequests;
|
|
3370
3489
|
request['marginCoin'] = market['settleId'];
|
|
3371
3490
|
response = await this.privateMixPostOrderBatchOrders(request);
|
|
3372
3491
|
}
|
|
3492
|
+
else if (marginMode === 'isolated') {
|
|
3493
|
+
response = await this.privateMarginPostIsolatedOrderBatchPlaceOrder(request);
|
|
3494
|
+
}
|
|
3495
|
+
else if (marginMode === 'cross') {
|
|
3496
|
+
response = await this.privateMarginPostCrossOrderBatchPlaceOrder(request);
|
|
3497
|
+
}
|
|
3498
|
+
else {
|
|
3499
|
+
response = await this.privateSpotPostTradeBatchOrders(request);
|
|
3500
|
+
}
|
|
3373
3501
|
//
|
|
3374
3502
|
// {
|
|
3375
3503
|
// "code": "00000",
|
|
@@ -6374,6 +6502,147 @@ class bitget extends bitget$1 {
|
|
|
6374
6502
|
'info': info,
|
|
6375
6503
|
};
|
|
6376
6504
|
}
|
|
6505
|
+
async fetchBorrowInterest(code = undefined, symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
6506
|
+
/**
|
|
6507
|
+
* @method
|
|
6508
|
+
* @name bitget#fetchBorrowInterest
|
|
6509
|
+
* @description fetch the interest owed by the user for borrowing currency for margin trading
|
|
6510
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#get-isolated-interest-records
|
|
6511
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#get-cross-interest-records
|
|
6512
|
+
* @param {string} [code] unified currency code
|
|
6513
|
+
* @param {string} [symbol] unified market symbol when fetching interest in isolated markets
|
|
6514
|
+
* @param {int} [since] the earliest time in ms to fetch borrow interest for
|
|
6515
|
+
* @param {int} [limit] the maximum number of structures to retrieve
|
|
6516
|
+
* @param {object} [params] extra parameters specific to the bitget api endpoint
|
|
6517
|
+
* @returns {object[]} a list of [borrow interest structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#borrow-interest-structure}
|
|
6518
|
+
*/
|
|
6519
|
+
await this.loadMarkets();
|
|
6520
|
+
let market = undefined;
|
|
6521
|
+
if (symbol !== undefined) {
|
|
6522
|
+
market = this.market(symbol);
|
|
6523
|
+
}
|
|
6524
|
+
const request = {};
|
|
6525
|
+
let currency = undefined;
|
|
6526
|
+
if (code !== undefined) {
|
|
6527
|
+
currency = this.currency(code);
|
|
6528
|
+
request['coin'] = currency['id'];
|
|
6529
|
+
}
|
|
6530
|
+
if (since !== undefined) {
|
|
6531
|
+
request['startTime'] = since;
|
|
6532
|
+
}
|
|
6533
|
+
else {
|
|
6534
|
+
request['startTime'] = this.milliseconds() - 7776000000;
|
|
6535
|
+
}
|
|
6536
|
+
if (limit !== undefined) {
|
|
6537
|
+
request['pageSize'] = limit;
|
|
6538
|
+
}
|
|
6539
|
+
let response = undefined;
|
|
6540
|
+
let marginMode = undefined;
|
|
6541
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchBorrowInterest', params, 'cross');
|
|
6542
|
+
if (marginMode === 'isolated') {
|
|
6543
|
+
this.checkRequiredSymbol('fetchBorrowInterest', symbol);
|
|
6544
|
+
request['symbol'] = market['info']['symbolName'];
|
|
6545
|
+
response = await this.privateMarginGetIsolatedInterestList(this.extend(request, params));
|
|
6546
|
+
}
|
|
6547
|
+
else if (marginMode === 'cross') {
|
|
6548
|
+
response = await this.privateMarginGetCrossInterestList(this.extend(request, params));
|
|
6549
|
+
}
|
|
6550
|
+
//
|
|
6551
|
+
// isolated
|
|
6552
|
+
//
|
|
6553
|
+
// {
|
|
6554
|
+
// "code": "00000",
|
|
6555
|
+
// "msg": "success",
|
|
6556
|
+
// "requestTime": 1698282523888,
|
|
6557
|
+
// "data": {
|
|
6558
|
+
// "resultList": [
|
|
6559
|
+
// {
|
|
6560
|
+
// "interestId": "1100560904468705284",
|
|
6561
|
+
// "interestCoin": "USDT",
|
|
6562
|
+
// "interestRate": "0.000126279",
|
|
6563
|
+
// "loanCoin": "USDT",
|
|
6564
|
+
// "amount": "0.00000298",
|
|
6565
|
+
// "type": "scheduled",
|
|
6566
|
+
// "symbol": "BTCUSDT",
|
|
6567
|
+
// "ctime": "1698120000000"
|
|
6568
|
+
// },
|
|
6569
|
+
// ],
|
|
6570
|
+
// "maxId": "1100560904468705284",
|
|
6571
|
+
// "minId": "1096915487398965249"
|
|
6572
|
+
// }
|
|
6573
|
+
// }
|
|
6574
|
+
//
|
|
6575
|
+
// cross
|
|
6576
|
+
//
|
|
6577
|
+
// {
|
|
6578
|
+
// "code": "00000",
|
|
6579
|
+
// "msg": "success",
|
|
6580
|
+
// "requestTime": 1698282552126,
|
|
6581
|
+
// "data": {
|
|
6582
|
+
// "resultList": [
|
|
6583
|
+
// {
|
|
6584
|
+
// "interestId": "1099126154352799744",
|
|
6585
|
+
// "interestCoin": "USDT",
|
|
6586
|
+
// "interestRate": "0.000126279",
|
|
6587
|
+
// "loanCoin": "USDT",
|
|
6588
|
+
// "amount": "0.00002631",
|
|
6589
|
+
// "type": "scheduled",
|
|
6590
|
+
// "ctime": "1697778000000"
|
|
6591
|
+
// },
|
|
6592
|
+
// ],
|
|
6593
|
+
// "maxId": "1099126154352799744",
|
|
6594
|
+
// "minId": "1096917004629716993"
|
|
6595
|
+
// }
|
|
6596
|
+
// }
|
|
6597
|
+
//
|
|
6598
|
+
const data = this.safeValue(response, 'data', {});
|
|
6599
|
+
const rows = this.safeValue(data, 'resultList', []);
|
|
6600
|
+
const interest = this.parseBorrowInterests(rows, market);
|
|
6601
|
+
return this.filterByCurrencySinceLimit(interest, code, since, limit);
|
|
6602
|
+
}
|
|
6603
|
+
parseBorrowInterest(info, market = undefined) {
|
|
6604
|
+
//
|
|
6605
|
+
// isolated
|
|
6606
|
+
//
|
|
6607
|
+
// {
|
|
6608
|
+
// "interestId": "1100560904468705284",
|
|
6609
|
+
// "interestCoin": "USDT",
|
|
6610
|
+
// "interestRate": "0.000126279",
|
|
6611
|
+
// "loanCoin": "USDT",
|
|
6612
|
+
// "amount": "0.00000298",
|
|
6613
|
+
// "type": "scheduled",
|
|
6614
|
+
// "symbol": "BTCUSDT",
|
|
6615
|
+
// "ctime": "1698120000000"
|
|
6616
|
+
// }
|
|
6617
|
+
//
|
|
6618
|
+
// cross
|
|
6619
|
+
//
|
|
6620
|
+
// {
|
|
6621
|
+
// "interestId": "1099126154352799744",
|
|
6622
|
+
// "interestCoin": "USDT",
|
|
6623
|
+
// "interestRate": "0.000126279",
|
|
6624
|
+
// "loanCoin": "USDT",
|
|
6625
|
+
// "amount": "0.00002631",
|
|
6626
|
+
// "type": "scheduled",
|
|
6627
|
+
// "ctime": "1697778000000"
|
|
6628
|
+
// }
|
|
6629
|
+
//
|
|
6630
|
+
const marketId = this.safeString(info, 'symbol');
|
|
6631
|
+
market = this.safeMarket(marketId, market);
|
|
6632
|
+
const marginMode = (marketId !== undefined) ? 'isolated' : 'cross';
|
|
6633
|
+
const timestamp = this.safeInteger(info, 'ctime');
|
|
6634
|
+
return {
|
|
6635
|
+
'symbol': this.safeString(market, 'symbol'),
|
|
6636
|
+
'marginMode': marginMode,
|
|
6637
|
+
'currency': this.safeCurrencyCode(this.safeString(info, 'interestCoin')),
|
|
6638
|
+
'interest': this.safeNumber(info, 'amount'),
|
|
6639
|
+
'interestRate': this.safeNumber(info, 'interestRate'),
|
|
6640
|
+
'amountBorrowed': undefined,
|
|
6641
|
+
'timestamp': timestamp,
|
|
6642
|
+
'datetime': this.iso8601(timestamp),
|
|
6643
|
+
'info': info,
|
|
6644
|
+
};
|
|
6645
|
+
}
|
|
6377
6646
|
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
6378
6647
|
if (!response) {
|
|
6379
6648
|
return undefined; // fallback to default error handler
|
package/dist/cjs/src/bitopro.js
CHANGED
|
@@ -1121,14 +1121,15 @@ class bitopro extends bitopro$1 {
|
|
|
1121
1121
|
const request = {
|
|
1122
1122
|
// 'pair': market['id'], // optional
|
|
1123
1123
|
};
|
|
1124
|
-
|
|
1125
|
-
let method = this.safeString(this.options, 'privateDeleteOrdersPair', 'privateDeleteOrdersAll');
|
|
1124
|
+
let response = undefined;
|
|
1126
1125
|
if (symbol !== undefined) {
|
|
1127
1126
|
const market = this.market(symbol);
|
|
1128
1127
|
request['pair'] = market['id'];
|
|
1129
|
-
|
|
1128
|
+
response = await this.privateDeleteOrdersPair(this.extend(request, params));
|
|
1129
|
+
}
|
|
1130
|
+
else {
|
|
1131
|
+
response = await this.privateDeleteOrdersAll(this.extend(request, params));
|
|
1130
1132
|
}
|
|
1131
|
-
const response = await this[method](this.extend(request, params));
|
|
1132
1133
|
const result = this.safeValue(response, 'data', {});
|
|
1133
1134
|
//
|
|
1134
1135
|
// {
|
package/dist/cjs/src/bitrue.js
CHANGED
|
@@ -796,6 +796,16 @@ class bitrue extends bitrue$1 {
|
|
|
796
796
|
return orderbook;
|
|
797
797
|
}
|
|
798
798
|
parseTicker(ticker, market = undefined) {
|
|
799
|
+
//
|
|
800
|
+
// fetchBidsAsks
|
|
801
|
+
//
|
|
802
|
+
// {
|
|
803
|
+
// "symbol": "LTCBTC",
|
|
804
|
+
// "bidPrice": "4.00000000",
|
|
805
|
+
// "bidQty": "431.00000000",
|
|
806
|
+
// "askPrice": "4.00000200",
|
|
807
|
+
// "askQty": "9.00000000"
|
|
808
|
+
// }
|
|
799
809
|
//
|
|
800
810
|
// fetchTicker
|
|
801
811
|
//
|
|
@@ -820,10 +830,10 @@ class bitrue extends bitrue$1 {
|
|
|
820
830
|
'datetime': undefined,
|
|
821
831
|
'high': this.safeString(ticker, 'high24hr'),
|
|
822
832
|
'low': this.safeString(ticker, 'low24hr'),
|
|
823
|
-
'bid': this.
|
|
824
|
-
'bidVolume':
|
|
825
|
-
'ask': this.
|
|
826
|
-
'askVolume':
|
|
833
|
+
'bid': this.safeString2(ticker, 'highestBid', 'bidPrice'),
|
|
834
|
+
'bidVolume': this.safeString(ticker, 'bidQty'),
|
|
835
|
+
'ask': this.safeString2(ticker, 'lowestAsk', 'askPrice'),
|
|
836
|
+
'askVolume': this.safeString(ticker, 'askQty'),
|
|
827
837
|
'vwap': undefined,
|
|
828
838
|
'open': undefined,
|
|
829
839
|
'close': last,
|
|
@@ -951,26 +961,31 @@ class bitrue extends bitrue$1 {
|
|
|
951
961
|
* @method
|
|
952
962
|
* @name bitrue#fetchBidsAsks
|
|
953
963
|
* @description fetches the bid and ask price and volume for multiple markets
|
|
964
|
+
* @see https://github.com/Bitrue-exchange/Spot-official-api-docs#symbol-order-book-ticker
|
|
954
965
|
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the bids and asks for, all markets are returned if not assigned
|
|
955
966
|
* @param {object} [params] extra parameters specific to the bitrue api endpoint
|
|
956
967
|
* @returns {object} a dictionary of [ticker structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure}
|
|
957
968
|
*/
|
|
958
969
|
await this.loadMarkets();
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
const
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
else if (type === 'delivery') {
|
|
967
|
-
method = 'dapiPublicGetTickerBookTicker';
|
|
968
|
-
}
|
|
969
|
-
else {
|
|
970
|
-
method = 'publicGetTickerBookTicker';
|
|
970
|
+
symbols = this.marketSymbols(symbols);
|
|
971
|
+
let market = undefined;
|
|
972
|
+
const request = {};
|
|
973
|
+
if (symbols !== undefined) {
|
|
974
|
+
const first = this.safeString(symbols, 0);
|
|
975
|
+
market = this.market(first);
|
|
976
|
+
request['symbol'] = market['id'];
|
|
971
977
|
}
|
|
972
|
-
const response = await this
|
|
973
|
-
|
|
978
|
+
const response = await this.v1PublicGetTickerBookTicker(this.extend(request, params));
|
|
979
|
+
// {
|
|
980
|
+
// "symbol": "LTCBTC",
|
|
981
|
+
// "bidPrice": "4.00000000",
|
|
982
|
+
// "bidQty": "431.00000000",
|
|
983
|
+
// "askPrice": "4.00000200",
|
|
984
|
+
// "askQty": "9.00000000"
|
|
985
|
+
// }
|
|
986
|
+
const data = {};
|
|
987
|
+
data[market['id']] = response;
|
|
988
|
+
return this.parseTickers(data, symbols);
|
|
974
989
|
}
|
|
975
990
|
async fetchTickers(symbols = undefined, params = {}) {
|
|
976
991
|
/**
|
package/dist/cjs/src/bybit.js
CHANGED
|
@@ -616,6 +616,7 @@ class bybit extends bybit$1 {
|
|
|
616
616
|
'v5/position/trading-stop': 5,
|
|
617
617
|
'v5/position/set-auto-add-margin': 2.5,
|
|
618
618
|
'v5/position/add-margin': 2.5,
|
|
619
|
+
'v5/position/confirm-pending-mmr': 2.5,
|
|
619
620
|
// account
|
|
620
621
|
'v5/account/upgrade-to-uta': 2.5,
|
|
621
622
|
'v5/account/set-margin-mode': 2.5,
|
|
@@ -3189,8 +3190,11 @@ class bybit extends bybit$1 {
|
|
|
3189
3190
|
// "time": 1672125441042
|
|
3190
3191
|
// }
|
|
3191
3192
|
//
|
|
3193
|
+
const timestamp = this.safeInteger(response, 'time');
|
|
3192
3194
|
const result = {
|
|
3193
3195
|
'info': response,
|
|
3196
|
+
'timestamp': timestamp,
|
|
3197
|
+
'datetime': this.iso8601(timestamp),
|
|
3194
3198
|
};
|
|
3195
3199
|
const responseResult = this.safeValue(response, 'result', {});
|
|
3196
3200
|
const currencyList = this.safeValueN(responseResult, ['loanAccountList', 'list', 'balance']);
|
|
@@ -32,6 +32,7 @@ class cryptocom extends cryptocom$1 {
|
|
|
32
32
|
'borrowMargin': true,
|
|
33
33
|
'cancelAllOrders': true,
|
|
34
34
|
'cancelOrder': true,
|
|
35
|
+
'cancelOrders': true,
|
|
35
36
|
'createOrder': true,
|
|
36
37
|
'createOrders': true,
|
|
37
38
|
'fetchAccounts': true,
|
|
@@ -1426,6 +1427,37 @@ class cryptocom extends cryptocom$1 {
|
|
|
1426
1427
|
const result = this.safeValue(response, 'result', {});
|
|
1427
1428
|
return this.parseOrder(result, market);
|
|
1428
1429
|
}
|
|
1430
|
+
async cancelOrders(ids, symbol = undefined, params = {}) {
|
|
1431
|
+
/**
|
|
1432
|
+
* @method
|
|
1433
|
+
* @name cryptocom#cancelOrders
|
|
1434
|
+
* @description cancel multiple orders
|
|
1435
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-order-list-list
|
|
1436
|
+
* @param {string[]} ids order ids
|
|
1437
|
+
* @param {string} symbol unified market symbol
|
|
1438
|
+
* @param {object} [params] extra parameters specific to the okx api endpoint
|
|
1439
|
+
* @returns {object} an list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
|
|
1440
|
+
*/
|
|
1441
|
+
this.checkRequiredSymbol('cancelOrders', symbol);
|
|
1442
|
+
await this.loadMarkets();
|
|
1443
|
+
const market = this.market(symbol);
|
|
1444
|
+
const orderRequests = [];
|
|
1445
|
+
for (let i = 0; i < ids.length; i++) {
|
|
1446
|
+
const id = ids[i];
|
|
1447
|
+
const order = {
|
|
1448
|
+
'instrument_name': market['id'],
|
|
1449
|
+
'order_id': id.toString(),
|
|
1450
|
+
};
|
|
1451
|
+
orderRequests.push(order);
|
|
1452
|
+
}
|
|
1453
|
+
const request = {
|
|
1454
|
+
'contingency_type': 'LIST',
|
|
1455
|
+
'order_list': orderRequests,
|
|
1456
|
+
};
|
|
1457
|
+
const response = await this.v1PrivatePostPrivateCancelOrderList(this.extend(request, params));
|
|
1458
|
+
const result = this.safeValue(response, 'result', []);
|
|
1459
|
+
return this.parseOrders(result, market, undefined, undefined, params);
|
|
1460
|
+
}
|
|
1429
1461
|
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1430
1462
|
/**
|
|
1431
1463
|
* @method
|