ccxt 4.1.29 → 4.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +186 -0
- package/README.md +3 -3
- package/dist/ccxt.browser.js +474 -135
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ascendex.js +89 -12
- package/dist/cjs/src/base/Exchange.js +6 -0
- package/dist/cjs/src/base/ws/Future.js +6 -2
- package/dist/cjs/src/bitget.js +187 -44
- package/dist/cjs/src/bitopro.js +5 -4
- package/dist/cjs/src/bitrue.js +33 -18
- package/dist/cjs/src/bitvavo.js +43 -7
- package/dist/cjs/src/bybit.js +0 -3
- package/dist/cjs/src/coinex.js +2 -1
- package/dist/cjs/src/gate.js +58 -10
- package/dist/cjs/src/gemini.js +1 -2
- package/dist/cjs/src/hitbtc.js +32 -22
- package/dist/cjs/src/huobi.js +0 -1
- package/dist/cjs/src/huobijp.js +0 -1
- package/dist/cjs/src/krakenfutures.js +1 -1
- package/dist/cjs/src/mexc.js +2 -6
- 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 +3 -3
- package/js/ccxt.js +1 -1
- package/js/src/ascendex.d.ts +11 -1
- package/js/src/ascendex.js +89 -12
- package/js/src/base/Exchange.d.ts +5 -3
- package/js/src/base/Exchange.js +6 -0
- package/js/src/base/types.d.ts +9 -0
- package/js/src/base/ws/Future.js +6 -2
- package/js/src/binance.d.ts +1 -1
- package/js/src/bitget.d.ts +3 -3
- package/js/src/bitget.js +187 -44
- package/js/src/bitopro.js +5 -4
- package/js/src/bitrue.js +33 -18
- package/js/src/bitvavo.d.ts +13 -13
- package/js/src/bitvavo.js +43 -7
- package/js/src/bybit.js +0 -3
- package/js/src/coinex.d.ts +2 -2
- package/js/src/coinex.js +2 -1
- package/js/src/gate.d.ts +3 -3
- package/js/src/gate.js +58 -10
- package/js/src/gemini.js +1 -2
- package/js/src/hitbtc.js +33 -23
- package/js/src/huobi.d.ts +1 -1
- package/js/src/huobi.js +0 -1
- package/js/src/huobijp.js +0 -1
- package/js/src/krakenfutures.js +1 -1
- package/js/src/kucoinfutures.d.ts +2 -2
- package/js/src/mexc.d.ts +2 -2
- package/js/src/mexc.js +2 -6
- package/js/src/okx.d.ts +2 -2
- package/js/src/okx.js +1 -0
- package/js/src/phemex.d.ts +2 -2
- package/js/src/phemex.js +3 -0
- package/js/src/poloniexfutures.d.ts +2 -2
- package/js/src/pro/huobi.js +4 -0
- package/js/src/woo.d.ts +1 -1
- package/package.json +2 -2
package/js/src/bitget.js
CHANGED
|
@@ -28,7 +28,7 @@ export default class bitget extends Exchange {
|
|
|
28
28
|
'has': {
|
|
29
29
|
'CORS': undefined,
|
|
30
30
|
'spot': true,
|
|
31
|
-
'margin':
|
|
31
|
+
'margin': true,
|
|
32
32
|
'swap': true,
|
|
33
33
|
'future': true,
|
|
34
34
|
'option': false,
|
|
@@ -1306,11 +1306,16 @@ export default class bitget extends Exchange {
|
|
|
1306
1306
|
};
|
|
1307
1307
|
}
|
|
1308
1308
|
async fetchMarketsByType(type, params = {}) {
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
}
|
|
1313
|
-
|
|
1309
|
+
let response = undefined;
|
|
1310
|
+
if (type === 'spot') {
|
|
1311
|
+
response = await this.publicSpotGetPublicProducts(params);
|
|
1312
|
+
}
|
|
1313
|
+
else if (type === 'swap') {
|
|
1314
|
+
response = await this.publicMixGetMarketContracts(params);
|
|
1315
|
+
}
|
|
1316
|
+
else {
|
|
1317
|
+
throw new NotSupported(this.id + ' does not support ' + type + ' market');
|
|
1318
|
+
}
|
|
1314
1319
|
//
|
|
1315
1320
|
// spot
|
|
1316
1321
|
//
|
|
@@ -1495,20 +1500,47 @@ export default class bitget extends Exchange {
|
|
|
1495
1500
|
* @name bitget#fetchMarketLeverageTiers
|
|
1496
1501
|
* @description retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes for a single market
|
|
1497
1502
|
* @see https://bitgetlimited.github.io/apidoc/en/mix/#get-position-tier
|
|
1503
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#get-isolated-tier-data
|
|
1504
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#get-cross-tier-data
|
|
1498
1505
|
* @param {string} symbol unified market symbol
|
|
1499
1506
|
* @param {object} [params] extra parameters specific to the bitget api endpoint
|
|
1507
|
+
* @param {string} [params.marginMode] for spot margin 'cross' or 'isolated', default is 'isolated'
|
|
1508
|
+
* @param {string} [params.code] required for cross spot margin
|
|
1500
1509
|
* @returns {object} a [leverage tiers structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#leverage-tiers-structure}
|
|
1501
1510
|
*/
|
|
1502
1511
|
await this.loadMarkets();
|
|
1503
1512
|
const request = {};
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1513
|
+
const market = this.market(symbol);
|
|
1514
|
+
let type = undefined;
|
|
1515
|
+
[type, params] = this.handleMarketTypeAndParams('fetchMarketLeverageTiers', market, params);
|
|
1516
|
+
let response = undefined;
|
|
1517
|
+
let marginMode = undefined;
|
|
1518
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchMarketLeverageTiers', params, 'isolated');
|
|
1519
|
+
if ((type === 'swap') || (type === 'future')) {
|
|
1520
|
+
const marketId = market['id'];
|
|
1521
|
+
const parts = marketId.split('_');
|
|
1522
|
+
const productType = this.safeStringUpper(parts, 1);
|
|
1523
|
+
request['symbol'] = marketId;
|
|
1524
|
+
request['productType'] = productType;
|
|
1525
|
+
response = await this.publicMixGetMarketQueryPositionLever(this.extend(request, params));
|
|
1526
|
+
}
|
|
1527
|
+
else if (marginMode === 'isolated') {
|
|
1528
|
+
request['symbol'] = market['info']['symbolName'];
|
|
1529
|
+
response = await this.publicMarginGetIsolatedPublicTierData(this.extend(request, params));
|
|
1530
|
+
}
|
|
1531
|
+
else if (marginMode === 'cross') {
|
|
1532
|
+
const code = this.safeString(params, 'code');
|
|
1533
|
+
this.checkRequiredArgument('fetchMarketLeverageTiers', code, 'code');
|
|
1534
|
+
params = this.omit(params, 'code');
|
|
1535
|
+
const currency = this.currency(code);
|
|
1536
|
+
request['coin'] = currency['code'];
|
|
1537
|
+
response = await this.publicMarginGetCrossPublicTierData(this.extend(request, params));
|
|
1538
|
+
}
|
|
1539
|
+
else {
|
|
1507
1540
|
throw new BadRequest(this.id + ' fetchMarketLeverageTiers() symbol does not support market ' + symbol);
|
|
1508
1541
|
}
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
const response = await this.publicMixGetMarketQueryPositionLever(this.extend(request, params));
|
|
1542
|
+
//
|
|
1543
|
+
// swap and future
|
|
1512
1544
|
//
|
|
1513
1545
|
// {
|
|
1514
1546
|
// "code":"00000",
|
|
@@ -1525,10 +1557,50 @@ export default class bitget extends Exchange {
|
|
|
1525
1557
|
// "requestTime":1627292076687
|
|
1526
1558
|
// }
|
|
1527
1559
|
//
|
|
1528
|
-
|
|
1560
|
+
// isolated
|
|
1561
|
+
//
|
|
1562
|
+
// {
|
|
1563
|
+
// "code": "00000",
|
|
1564
|
+
// "msg": "success",
|
|
1565
|
+
// "requestTime": 1698352496622,
|
|
1566
|
+
// "data": [
|
|
1567
|
+
// {
|
|
1568
|
+
// "tier": "1",
|
|
1569
|
+
// "symbol": "BTCUSDT",
|
|
1570
|
+
// "leverage": "10",
|
|
1571
|
+
// "baseCoin": "BTC",
|
|
1572
|
+
// "quoteCoin": "USDT",
|
|
1573
|
+
// "baseMaxBorrowableAmount": "3",
|
|
1574
|
+
// "quoteMaxBorrowableAmount": "30000",
|
|
1575
|
+
// "maintainMarginRate": "0.05",
|
|
1576
|
+
// "initRate": "0.1111"
|
|
1577
|
+
// },
|
|
1578
|
+
// ]
|
|
1579
|
+
// }
|
|
1580
|
+
//
|
|
1581
|
+
// cross
|
|
1582
|
+
//
|
|
1583
|
+
// {
|
|
1584
|
+
// "code": "00000",
|
|
1585
|
+
// "msg": "success",
|
|
1586
|
+
// "requestTime": 1698352997077,
|
|
1587
|
+
// "data": [
|
|
1588
|
+
// {
|
|
1589
|
+
// "tier": "1",
|
|
1590
|
+
// "leverage": "3",
|
|
1591
|
+
// "coin": "BTC",
|
|
1592
|
+
// "maxBorrowableAmount": "26",
|
|
1593
|
+
// "maintainMarginRate": "0.1"
|
|
1594
|
+
// }
|
|
1595
|
+
// ]
|
|
1596
|
+
// }
|
|
1597
|
+
//
|
|
1598
|
+
const result = this.safeValue(response, 'data', []);
|
|
1529
1599
|
return this.parseMarketLeverageTiers(result, market);
|
|
1530
1600
|
}
|
|
1531
1601
|
parseMarketLeverageTiers(info, market = undefined) {
|
|
1602
|
+
//
|
|
1603
|
+
// swap and future
|
|
1532
1604
|
//
|
|
1533
1605
|
// [
|
|
1534
1606
|
// {
|
|
@@ -1538,22 +1610,57 @@ export default class bitget extends Exchange {
|
|
|
1538
1610
|
// "leverage": 125,
|
|
1539
1611
|
// "keepMarginRate": "0.004"
|
|
1540
1612
|
// }
|
|
1541
|
-
// ]
|
|
1613
|
+
// ]
|
|
1614
|
+
//
|
|
1615
|
+
// isolated
|
|
1616
|
+
//
|
|
1617
|
+
// [
|
|
1618
|
+
// {
|
|
1619
|
+
// "tier": "1",
|
|
1620
|
+
// "symbol": "BTCUSDT",
|
|
1621
|
+
// "leverage": "10",
|
|
1622
|
+
// "baseCoin": "BTC",
|
|
1623
|
+
// "quoteCoin": "USDT",
|
|
1624
|
+
// "baseMaxBorrowableAmount": "3",
|
|
1625
|
+
// "quoteMaxBorrowableAmount": "30000",
|
|
1626
|
+
// "maintainMarginRate": "0.05",
|
|
1627
|
+
// "initRate": "0.1111"
|
|
1628
|
+
// }
|
|
1629
|
+
// ]
|
|
1630
|
+
//
|
|
1631
|
+
// cross
|
|
1632
|
+
//
|
|
1633
|
+
// [
|
|
1634
|
+
// {
|
|
1635
|
+
// "tier": "1",
|
|
1636
|
+
// "leverage": "3",
|
|
1637
|
+
// "coin": "BTC",
|
|
1638
|
+
// "maxBorrowableAmount": "26",
|
|
1639
|
+
// "maintainMarginRate": "0.1"
|
|
1640
|
+
// }
|
|
1641
|
+
// ]
|
|
1542
1642
|
//
|
|
1543
1643
|
const tiers = [];
|
|
1644
|
+
let minNotional = 0;
|
|
1544
1645
|
for (let i = 0; i < info.length; i++) {
|
|
1545
1646
|
const item = info[i];
|
|
1546
|
-
const
|
|
1547
|
-
|
|
1647
|
+
const minimumNotional = this.safeNumber(item, 'startUnit');
|
|
1648
|
+
if (minimumNotional !== undefined) {
|
|
1649
|
+
minNotional = minimumNotional;
|
|
1650
|
+
}
|
|
1651
|
+
const maxNotional = this.safeNumberN(item, ['endUnit', 'maxBorrowableAmount', 'baseMaxBorrowableAmount']);
|
|
1652
|
+
const marginCurrency = this.safeString2(item, 'coin', 'baseCoin');
|
|
1653
|
+
const currencyId = (marginCurrency !== undefined) ? marginCurrency : market['base'];
|
|
1548
1654
|
tiers.push({
|
|
1549
|
-
'tier': this.
|
|
1550
|
-
'currency':
|
|
1655
|
+
'tier': this.safeInteger2(item, 'level', 'tier'),
|
|
1656
|
+
'currency': this.safeCurrencyCode(currencyId),
|
|
1551
1657
|
'minNotional': minNotional,
|
|
1552
1658
|
'maxNotional': maxNotional,
|
|
1553
|
-
'maintenanceMarginRate': this.
|
|
1659
|
+
'maintenanceMarginRate': this.safeNumber2(item, 'keepMarginRate', 'maintainMarginRate'),
|
|
1554
1660
|
'maxLeverage': this.safeNumber(item, 'leverage'),
|
|
1555
1661
|
'info': item,
|
|
1556
1662
|
});
|
|
1663
|
+
minNotional = maxNotional;
|
|
1557
1664
|
}
|
|
1558
1665
|
return tiers;
|
|
1559
1666
|
}
|
|
@@ -3335,12 +3442,16 @@ export default class bitget extends Exchange {
|
|
|
3335
3442
|
* @description create a list of trade orders (all orders should be of the same symbol)
|
|
3336
3443
|
* @see https://bitgetlimited.github.io/apidoc/en/spot/#batch-order
|
|
3337
3444
|
* @see https://bitgetlimited.github.io/apidoc/en/mix/#batch-order
|
|
3445
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-batch-order
|
|
3446
|
+
* @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-batch-order
|
|
3338
3447
|
* @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
|
|
3448
|
+
* @param {object} [params] extra parameters specific to the api endpoint
|
|
3339
3449
|
* @returns {object} an [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
|
|
3340
3450
|
*/
|
|
3341
3451
|
await this.loadMarkets();
|
|
3342
3452
|
const ordersRequests = [];
|
|
3343
3453
|
let symbol = undefined;
|
|
3454
|
+
let marginMode = undefined;
|
|
3344
3455
|
for (let i = 0; i < orders.length; i++) {
|
|
3345
3456
|
const rawOrder = orders[i];
|
|
3346
3457
|
const marketId = this.safeString(rawOrder, 'symbol');
|
|
@@ -3357,23 +3468,44 @@ export default class bitget extends Exchange {
|
|
|
3357
3468
|
const amount = this.safeValue(rawOrder, 'amount');
|
|
3358
3469
|
const price = this.safeValue(rawOrder, 'price');
|
|
3359
3470
|
const orderParams = this.safeValue(rawOrder, 'params', {});
|
|
3471
|
+
const marginResult = this.handleMarginModeAndParams('createOrders', params);
|
|
3472
|
+
const currentMarginMode = marginResult[0];
|
|
3473
|
+
if (currentMarginMode !== undefined) {
|
|
3474
|
+
if (marginMode === undefined) {
|
|
3475
|
+
marginMode = currentMarginMode;
|
|
3476
|
+
}
|
|
3477
|
+
else {
|
|
3478
|
+
if (marginMode !== currentMarginMode) {
|
|
3479
|
+
throw new BadRequest(this.id + ' createOrders() requires all orders to have the same margin mode (isolated or cross)');
|
|
3480
|
+
}
|
|
3481
|
+
}
|
|
3482
|
+
}
|
|
3360
3483
|
const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, orderParams);
|
|
3361
3484
|
ordersRequests.push(orderRequest);
|
|
3362
3485
|
}
|
|
3363
3486
|
const market = this.market(symbol);
|
|
3487
|
+
const symbolRequest = (marginMode !== undefined) ? (market['info']['symbolName']) : (market['id']);
|
|
3364
3488
|
const request = {
|
|
3365
|
-
'symbol':
|
|
3489
|
+
'symbol': symbolRequest,
|
|
3366
3490
|
};
|
|
3367
3491
|
let response = undefined;
|
|
3368
3492
|
if (market['spot']) {
|
|
3369
3493
|
request['orderList'] = ordersRequests;
|
|
3370
|
-
response = await this.privateSpotPostTradeBatchOrders(request);
|
|
3371
3494
|
}
|
|
3372
|
-
|
|
3495
|
+
if ((market['swap']) || (market['future'])) {
|
|
3373
3496
|
request['orderDataList'] = ordersRequests;
|
|
3374
3497
|
request['marginCoin'] = market['settleId'];
|
|
3375
3498
|
response = await this.privateMixPostOrderBatchOrders(request);
|
|
3376
3499
|
}
|
|
3500
|
+
else if (marginMode === 'isolated') {
|
|
3501
|
+
response = await this.privateMarginPostIsolatedOrderBatchPlaceOrder(request);
|
|
3502
|
+
}
|
|
3503
|
+
else if (marginMode === 'cross') {
|
|
3504
|
+
response = await this.privateMarginPostCrossOrderBatchPlaceOrder(request);
|
|
3505
|
+
}
|
|
3506
|
+
else {
|
|
3507
|
+
response = await this.privateSpotPostTradeBatchOrders(request);
|
|
3508
|
+
}
|
|
3377
3509
|
//
|
|
3378
3510
|
// {
|
|
3379
3511
|
// "code": "00000",
|
|
@@ -3441,11 +3573,6 @@ export default class bitget extends Exchange {
|
|
|
3441
3573
|
if (!isStopOrder && !isTriggerOrder) {
|
|
3442
3574
|
throw new InvalidOrder(this.id + ' editOrder() only support plan orders');
|
|
3443
3575
|
}
|
|
3444
|
-
let method = this.getSupportedMapping(marketType, {
|
|
3445
|
-
'spot': 'privateSpotPostPlanModifyPlan',
|
|
3446
|
-
'swap': 'privateMixPostPlanModifyPlan',
|
|
3447
|
-
'future': 'privateMixPostPlanModifyPlan',
|
|
3448
|
-
});
|
|
3449
3576
|
if (triggerPrice !== undefined) {
|
|
3450
3577
|
// default triggerType to market price for unification
|
|
3451
3578
|
const triggerType = this.safeString(params, 'triggerType', 'market_price');
|
|
@@ -3453,6 +3580,8 @@ export default class bitget extends Exchange {
|
|
|
3453
3580
|
request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);
|
|
3454
3581
|
request['executePrice'] = this.priceToPrecision(symbol, price);
|
|
3455
3582
|
}
|
|
3583
|
+
const omitted = this.omit(query, ['stopPrice', 'triggerType', 'stopLossPrice', 'takeProfitPrice']);
|
|
3584
|
+
let response = undefined;
|
|
3456
3585
|
if (marketType === 'spot') {
|
|
3457
3586
|
if (isStopOrder) {
|
|
3458
3587
|
throw new InvalidOrder(this.id + ' editOrder() does not support stop orders on spot markets, only swap markets');
|
|
@@ -3472,10 +3601,15 @@ export default class bitget extends Exchange {
|
|
|
3472
3601
|
else {
|
|
3473
3602
|
request['size'] = this.amountToPrecision(symbol, amount);
|
|
3474
3603
|
}
|
|
3604
|
+
response = await this.privateSpotPostPlanModifyPlan(this.extend(request, omitted));
|
|
3475
3605
|
}
|
|
3476
3606
|
else {
|
|
3477
3607
|
request['symbol'] = market['id'];
|
|
3478
3608
|
request['size'] = this.amountToPrecision(symbol, amount);
|
|
3609
|
+
if ((marketType !== 'swap') && (marketType !== 'future')) {
|
|
3610
|
+
throw new NotSupported(this.id + ' editOrder() does not support ' + marketType + ' market');
|
|
3611
|
+
}
|
|
3612
|
+
request['marginCoin'] = market['settleId'];
|
|
3479
3613
|
if (isStopOrder) {
|
|
3480
3614
|
if (!isMarketOrder) {
|
|
3481
3615
|
throw new ExchangeError(this.id + ' editOrder() bitget stopLoss or takeProfit orders must be market orders');
|
|
@@ -3488,12 +3622,12 @@ export default class bitget extends Exchange {
|
|
|
3488
3622
|
request['triggerPrice'] = this.priceToPrecision(symbol, takeProfitPrice);
|
|
3489
3623
|
request['planType'] = 'profit_plan';
|
|
3490
3624
|
}
|
|
3491
|
-
|
|
3625
|
+
response = await this.privateMixPostPlanModifyTPSLPlan(this.extend(request, omitted));
|
|
3626
|
+
}
|
|
3627
|
+
else {
|
|
3628
|
+
response = await this.privateMixPostPlanModifyPlan(this.extend(request, omitted));
|
|
3492
3629
|
}
|
|
3493
|
-
request['marginCoin'] = market['settleId'];
|
|
3494
3630
|
}
|
|
3495
|
-
const omitted = this.omit(query, ['stopPrice', 'triggerType', 'stopLossPrice', 'takeProfitPrice']);
|
|
3496
|
-
const response = await this[method](this.extend(request, omitted));
|
|
3497
3631
|
//
|
|
3498
3632
|
// spot
|
|
3499
3633
|
// {
|
|
@@ -3823,16 +3957,20 @@ export default class bitget extends Exchange {
|
|
|
3823
3957
|
await this.loadMarkets();
|
|
3824
3958
|
const market = this.market(symbol);
|
|
3825
3959
|
const [marketType, query] = this.handleMarketTypeAndParams('fetchOrder', market, params);
|
|
3826
|
-
const method = this.getSupportedMapping(marketType, {
|
|
3827
|
-
'spot': 'privateSpotPostTradeOrderInfo',
|
|
3828
|
-
'swap': 'privateMixGetOrderDetail',
|
|
3829
|
-
'future': 'privateMixGetOrderDetail',
|
|
3830
|
-
});
|
|
3831
3960
|
const request = {
|
|
3832
3961
|
'symbol': market['id'],
|
|
3833
3962
|
'orderId': id,
|
|
3834
3963
|
};
|
|
3835
|
-
let response =
|
|
3964
|
+
let response = undefined;
|
|
3965
|
+
if (marketType === 'spot') {
|
|
3966
|
+
response = await this.privateSpotPostTradeOrderInfo(this.extend(request, query));
|
|
3967
|
+
}
|
|
3968
|
+
else if ((marketType === 'swap') || (marketType === 'future')) {
|
|
3969
|
+
response = await this.privateMixGetOrderDetail(this.extend(request, query));
|
|
3970
|
+
}
|
|
3971
|
+
else {
|
|
3972
|
+
throw new NotSupported(this.id + ' fetchOrder() does not support ' + marketType + ' market');
|
|
3973
|
+
}
|
|
3836
3974
|
// spot
|
|
3837
3975
|
// {
|
|
3838
3976
|
// code: '00000',
|
|
@@ -4758,16 +4896,20 @@ export default class bitget extends Exchange {
|
|
|
4758
4896
|
await this.loadMarkets();
|
|
4759
4897
|
const market = this.market(symbol);
|
|
4760
4898
|
const [marketType, query] = this.handleMarketTypeAndParams('fetchOrderTrades', market, params);
|
|
4761
|
-
const method = this.getSupportedMapping(marketType, {
|
|
4762
|
-
'spot': 'privateSpotPostTradeFills',
|
|
4763
|
-
'swap': 'privateMixGetOrderFills',
|
|
4764
|
-
'future': 'privateMixGetOrderFills',
|
|
4765
|
-
});
|
|
4766
4899
|
const request = {
|
|
4767
4900
|
'symbol': market['id'],
|
|
4768
4901
|
'orderId': id,
|
|
4769
4902
|
};
|
|
4770
|
-
|
|
4903
|
+
let response = undefined;
|
|
4904
|
+
if (marketType === 'spot') {
|
|
4905
|
+
response = await this.privateSpotPostTradeFills(this.extend(request, query));
|
|
4906
|
+
}
|
|
4907
|
+
else if ((marketType === 'swap') || (marketType === 'future')) {
|
|
4908
|
+
response = await this.privateMixGetOrderFills(this.extend(request, query));
|
|
4909
|
+
}
|
|
4910
|
+
else {
|
|
4911
|
+
throw new NotSupported(this.id + ' fetchOrderTrades() does not support ' + marketType + ' market');
|
|
4912
|
+
}
|
|
4771
4913
|
// spot
|
|
4772
4914
|
//
|
|
4773
4915
|
// swap
|
|
@@ -5231,7 +5373,7 @@ export default class bitget extends Exchange {
|
|
|
5231
5373
|
'previousFundingDatetime': undefined,
|
|
5232
5374
|
};
|
|
5233
5375
|
}
|
|
5234
|
-
async fetchFundingHistory(symbol, since = undefined, limit = undefined, params = {}) {
|
|
5376
|
+
async fetchFundingHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
5235
5377
|
/**
|
|
5236
5378
|
* @method
|
|
5237
5379
|
* @name bitget#fetchFundingHistory
|
|
@@ -5244,6 +5386,7 @@ export default class bitget extends Exchange {
|
|
|
5244
5386
|
* @returns {object[]} a list of [funding history structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#funding-history-structure}
|
|
5245
5387
|
*/
|
|
5246
5388
|
await this.loadMarkets();
|
|
5389
|
+
this.checkRequiredSymbol('fetchFundingHistory', symbol);
|
|
5247
5390
|
const market = this.market(symbol);
|
|
5248
5391
|
if (!market['swap']) {
|
|
5249
5392
|
throw new BadSymbol(this.id + ' fetchFundingHistory() supports swap contracts only');
|
package/js/src/bitopro.js
CHANGED
|
@@ -1124,14 +1124,15 @@ export default class bitopro extends Exchange {
|
|
|
1124
1124
|
const request = {
|
|
1125
1125
|
// 'pair': market['id'], // optional
|
|
1126
1126
|
};
|
|
1127
|
-
|
|
1128
|
-
let method = this.safeString(this.options, 'privateDeleteOrdersPair', 'privateDeleteOrdersAll');
|
|
1127
|
+
let response = undefined;
|
|
1129
1128
|
if (symbol !== undefined) {
|
|
1130
1129
|
const market = this.market(symbol);
|
|
1131
1130
|
request['pair'] = market['id'];
|
|
1132
|
-
|
|
1131
|
+
response = await this.privateDeleteOrdersPair(this.extend(request, params));
|
|
1132
|
+
}
|
|
1133
|
+
else {
|
|
1134
|
+
response = await this.privateDeleteOrdersAll(this.extend(request, params));
|
|
1133
1135
|
}
|
|
1134
|
-
const response = await this[method](this.extend(request, params));
|
|
1135
1136
|
const result = this.safeValue(response, 'data', {});
|
|
1136
1137
|
//
|
|
1137
1138
|
// {
|
package/js/src/bitrue.js
CHANGED
|
@@ -799,6 +799,16 @@ export default class bitrue extends Exchange {
|
|
|
799
799
|
return orderbook;
|
|
800
800
|
}
|
|
801
801
|
parseTicker(ticker, market = undefined) {
|
|
802
|
+
//
|
|
803
|
+
// fetchBidsAsks
|
|
804
|
+
//
|
|
805
|
+
// {
|
|
806
|
+
// "symbol": "LTCBTC",
|
|
807
|
+
// "bidPrice": "4.00000000",
|
|
808
|
+
// "bidQty": "431.00000000",
|
|
809
|
+
// "askPrice": "4.00000200",
|
|
810
|
+
// "askQty": "9.00000000"
|
|
811
|
+
// }
|
|
802
812
|
//
|
|
803
813
|
// fetchTicker
|
|
804
814
|
//
|
|
@@ -823,10 +833,10 @@ export default class bitrue extends Exchange {
|
|
|
823
833
|
'datetime': undefined,
|
|
824
834
|
'high': this.safeString(ticker, 'high24hr'),
|
|
825
835
|
'low': this.safeString(ticker, 'low24hr'),
|
|
826
|
-
'bid': this.
|
|
827
|
-
'bidVolume':
|
|
828
|
-
'ask': this.
|
|
829
|
-
'askVolume':
|
|
836
|
+
'bid': this.safeString2(ticker, 'highestBid', 'bidPrice'),
|
|
837
|
+
'bidVolume': this.safeString(ticker, 'bidQty'),
|
|
838
|
+
'ask': this.safeString2(ticker, 'lowestAsk', 'askPrice'),
|
|
839
|
+
'askVolume': this.safeString(ticker, 'askQty'),
|
|
830
840
|
'vwap': undefined,
|
|
831
841
|
'open': undefined,
|
|
832
842
|
'close': last,
|
|
@@ -954,26 +964,31 @@ export default class bitrue extends Exchange {
|
|
|
954
964
|
* @method
|
|
955
965
|
* @name bitrue#fetchBidsAsks
|
|
956
966
|
* @description fetches the bid and ask price and volume for multiple markets
|
|
967
|
+
* @see https://github.com/Bitrue-exchange/Spot-official-api-docs#symbol-order-book-ticker
|
|
957
968
|
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the bids and asks for, all markets are returned if not assigned
|
|
958
969
|
* @param {object} [params] extra parameters specific to the bitrue api endpoint
|
|
959
970
|
* @returns {object} a dictionary of [ticker structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure}
|
|
960
971
|
*/
|
|
961
972
|
await this.loadMarkets();
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
const
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
else if (type === 'delivery') {
|
|
970
|
-
method = 'dapiPublicGetTickerBookTicker';
|
|
971
|
-
}
|
|
972
|
-
else {
|
|
973
|
-
method = 'publicGetTickerBookTicker';
|
|
973
|
+
symbols = this.marketSymbols(symbols);
|
|
974
|
+
let market = undefined;
|
|
975
|
+
const request = {};
|
|
976
|
+
if (symbols !== undefined) {
|
|
977
|
+
const first = this.safeString(symbols, 0);
|
|
978
|
+
market = this.market(first);
|
|
979
|
+
request['symbol'] = market['id'];
|
|
974
980
|
}
|
|
975
|
-
const response = await this
|
|
976
|
-
|
|
981
|
+
const response = await this.v1PublicGetTickerBookTicker(this.extend(request, params));
|
|
982
|
+
// {
|
|
983
|
+
// "symbol": "LTCBTC",
|
|
984
|
+
// "bidPrice": "4.00000000",
|
|
985
|
+
// "bidQty": "431.00000000",
|
|
986
|
+
// "askPrice": "4.00000200",
|
|
987
|
+
// "askQty": "9.00000000"
|
|
988
|
+
// }
|
|
989
|
+
const data = {};
|
|
990
|
+
data[market['id']] = response;
|
|
991
|
+
return this.parseTickers(data, symbols);
|
|
977
992
|
}
|
|
978
993
|
async fetchTickers(symbols = undefined, params = {}) {
|
|
979
994
|
/**
|
package/js/src/bitvavo.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/bitvavo.js';
|
|
2
|
-
import { Int, OrderSide, OrderType } from './base/types.js';
|
|
2
|
+
import { Int, OHLCV, Order, OrderSide, OrderType, Trade } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class bitvavo
|
|
5
5
|
* @extends Exchange
|
|
@@ -15,12 +15,12 @@ export default class bitvavo extends Exchange {
|
|
|
15
15
|
fetchTicker(symbol: string, params?: {}): Promise<import("./base/types.js").Ticker>;
|
|
16
16
|
parseTicker(ticker: any, market?: any): import("./base/types.js").Ticker;
|
|
17
17
|
fetchTickers(symbols?: string[], params?: {}): Promise<import("./base/types.js").Dictionary<import("./base/types.js").Ticker>>;
|
|
18
|
-
fetchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<
|
|
19
|
-
parseTrade(trade: any, market?: any):
|
|
18
|
+
fetchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
19
|
+
parseTrade(trade: any, market?: any): Trade;
|
|
20
20
|
fetchTradingFees(params?: {}): Promise<{}>;
|
|
21
21
|
fetchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<import("./base/types.js").OrderBook>;
|
|
22
22
|
parseOHLCV(ohlcv: any, market?: any): number[];
|
|
23
|
-
fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<
|
|
23
|
+
fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
24
24
|
parseBalance(response: any): import("./base/types.js").Balances;
|
|
25
25
|
fetchBalance(params?: {}): Promise<import("./base/types.js").Balances>;
|
|
26
26
|
fetchDepositAddress(code: string, params?: {}): Promise<{
|
|
@@ -30,16 +30,16 @@ export default class bitvavo extends Exchange {
|
|
|
30
30
|
network: any;
|
|
31
31
|
info: any;
|
|
32
32
|
}>;
|
|
33
|
-
createOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): Promise<
|
|
34
|
-
editOrder(id: string, symbol: any, type: any, side: any, amount?: any, price?: any, params?: {}): Promise<
|
|
35
|
-
cancelOrder(id: string, symbol?: string, params?: {}): Promise<
|
|
36
|
-
cancelAllOrders(symbol?: string, params?: {}): Promise<
|
|
37
|
-
fetchOrder(id: string, symbol?: string, params?: {}): Promise<
|
|
38
|
-
fetchOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<
|
|
39
|
-
fetchOpenOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<
|
|
33
|
+
createOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): Promise<Order>;
|
|
34
|
+
editOrder(id: string, symbol: any, type: any, side: any, amount?: any, price?: any, params?: {}): Promise<Order>;
|
|
35
|
+
cancelOrder(id: string, symbol?: string, params?: {}): Promise<Order>;
|
|
36
|
+
cancelAllOrders(symbol?: string, params?: {}): Promise<Order[]>;
|
|
37
|
+
fetchOrder(id: string, symbol?: string, params?: {}): Promise<Order>;
|
|
38
|
+
fetchOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
39
|
+
fetchOpenOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
40
40
|
parseOrderStatus(status: any): string;
|
|
41
|
-
parseOrder(order: any, market?: any):
|
|
42
|
-
fetchMyTrades(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<
|
|
41
|
+
parseOrder(order: any, market?: any): Order;
|
|
42
|
+
fetchMyTrades(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
43
43
|
withdraw(code: string, amount: any, address: any, tag?: any, params?: {}): Promise<{
|
|
44
44
|
info: any;
|
|
45
45
|
id: any;
|