ccxt 4.5.55 → 4.5.56
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 +209 -5
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/aftermath.js +10 -5
- package/dist/cjs/src/alpaca.js +2 -2
- package/dist/cjs/src/apex.js +25 -16
- package/dist/cjs/src/arkham.js +7 -4
- package/dist/cjs/src/ascendex.js +6 -3
- package/dist/cjs/src/base/Exchange.js +3 -3
- package/dist/cjs/src/bigone.js +7 -4
- package/dist/cjs/src/binance.js +4 -4
- package/dist/cjs/src/bingx.js +4 -4
- package/dist/cjs/src/bitflyer.js +2 -1
- package/dist/cjs/src/bitget.js +14 -3
- package/dist/cjs/src/bitmart.js +5 -4
- package/dist/cjs/src/bitmex.js +7 -4
- package/dist/cjs/src/bitopro.js +1 -1
- package/dist/cjs/src/bitrue.js +2 -1
- package/dist/cjs/src/bitso.js +6 -3
- package/dist/cjs/src/bitstamp.js +5 -3
- package/dist/cjs/src/bittrade.js +2 -1
- package/dist/cjs/src/blofin.js +2 -1
- package/dist/cjs/src/bybit.js +19 -17
- package/dist/cjs/src/bybiteu.js +1 -0
- package/dist/cjs/src/coinbaseexchange.js +2 -1
- package/dist/cjs/src/coinbaseinternational.js +15 -9
- package/dist/cjs/src/coinex.js +5 -3
- package/dist/cjs/src/coinsph.js +4 -4
- package/dist/cjs/src/cryptocom.js +6 -6
- package/dist/cjs/src/deepcoin.js +6 -3
- package/dist/cjs/src/delta.js +2 -1
- package/dist/cjs/src/deribit.js +4 -2
- package/dist/cjs/src/derive.js +5 -3
- package/dist/cjs/src/digifinex.js +2 -1
- package/dist/cjs/src/exmo.js +12 -39
- package/dist/cjs/src/foxbit.js +1 -1
- package/dist/cjs/src/gemini.js +4 -2
- package/dist/cjs/src/grvt.js +13 -7
- package/dist/cjs/src/hashkey.js +4 -4
- package/dist/cjs/src/hibachi.js +1 -1
- package/dist/cjs/src/hitbtc.js +2 -1
- package/dist/cjs/src/htx.js +9 -5
- package/dist/cjs/src/hyperliquid.js +19 -13
- package/dist/cjs/src/indodax.js +2 -1
- package/dist/cjs/src/kraken.js +14 -13
- package/dist/cjs/src/krakenfutures.js +2 -1
- package/dist/cjs/src/lbank.js +8 -4
- package/dist/cjs/src/lighter.js +1 -1
- package/dist/cjs/src/luno.js +1 -1
- package/dist/cjs/src/mercado.js +2 -1
- package/dist/cjs/src/mexc.js +24 -14
- package/dist/cjs/src/modetrade.js +1 -1
- package/dist/cjs/src/okx.js +6 -3
- package/dist/cjs/src/oxfun.js +5 -3
- package/dist/cjs/src/p2b.js +8 -4
- package/dist/cjs/src/paradex.js +3 -2
- package/dist/cjs/src/phemex.js +4 -2
- package/dist/cjs/src/poloniex.js +2 -1
- package/dist/cjs/src/pro/apex.js +10 -1
- package/dist/cjs/src/pro/aster.js +10 -9
- package/dist/cjs/src/pro/binance.js +3 -3
- package/dist/cjs/src/pro/bingx.js +7 -2
- package/dist/cjs/src/pro/bitmart.js +10 -0
- package/dist/cjs/src/pro/bitmex.js +1 -1
- package/dist/cjs/src/pro/grvt.js +8 -0
- package/dist/cjs/src/pro/htx.js +4 -4
- package/dist/cjs/src/pro/krakenfutures.js +16 -4
- package/dist/cjs/src/pro/modetrade.js +3 -3
- package/dist/cjs/src/pro/okx.js +4 -4
- package/dist/cjs/src/pro/oxfun.js +4 -4
- package/dist/cjs/src/pro/woo.js +4 -4
- package/dist/cjs/src/pro/woofipro.js +3 -3
- package/dist/cjs/src/pro/xt.js +1 -1
- package/dist/cjs/src/toobit.js +1 -1
- package/dist/cjs/src/woo.js +1 -1
- package/dist/cjs/src/woofipro.js +1 -1
- package/dist/cjs/src/xt.js +2 -1
- package/dist/cjs/src/yobit.js +4 -2
- package/dist/cjs/src/zebpay.js +3 -3
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/mexc.d.ts +1 -0
- package/js/src/aftermath.js +10 -5
- package/js/src/alpaca.js +2 -2
- package/js/src/apex.d.ts +1 -1
- package/js/src/apex.js +25 -16
- package/js/src/arkham.js +7 -4
- package/js/src/ascendex.js +6 -3
- package/js/src/base/Exchange.js +3 -3
- package/js/src/bigone.js +7 -4
- package/js/src/binance.js +4 -4
- package/js/src/bingx.js +4 -4
- package/js/src/bitflyer.js +2 -1
- package/js/src/bitget.js +14 -3
- package/js/src/bitmart.js +5 -4
- package/js/src/bitmex.js +7 -4
- package/js/src/bitopro.js +1 -1
- package/js/src/bitrue.js +2 -1
- package/js/src/bitso.js +6 -3
- package/js/src/bitstamp.js +5 -3
- package/js/src/bittrade.js +2 -1
- package/js/src/blofin.js +2 -1
- package/js/src/bybit.d.ts +1 -1
- package/js/src/bybit.js +19 -17
- package/js/src/bybiteu.js +1 -0
- package/js/src/coinbaseexchange.js +2 -1
- package/js/src/coinbaseinternational.d.ts +1 -1
- package/js/src/coinbaseinternational.js +15 -9
- package/js/src/coinex.d.ts +1 -1
- package/js/src/coinex.js +5 -3
- package/js/src/coinsph.js +4 -4
- package/js/src/cryptocom.js +6 -6
- package/js/src/deepcoin.js +6 -3
- package/js/src/delta.js +2 -1
- package/js/src/deribit.js +4 -2
- package/js/src/derive.js +5 -3
- package/js/src/digifinex.js +2 -1
- package/js/src/exmo.js +12 -39
- package/js/src/foxbit.js +1 -1
- package/js/src/gemini.js +4 -2
- package/js/src/grvt.d.ts +1 -1
- package/js/src/grvt.js +13 -7
- package/js/src/hashkey.js +4 -4
- package/js/src/hibachi.d.ts +1 -1
- package/js/src/hibachi.js +1 -1
- package/js/src/hitbtc.js +2 -1
- package/js/src/htx.js +9 -5
- package/js/src/hyperliquid.d.ts +4 -4
- package/js/src/hyperliquid.js +19 -13
- package/js/src/indodax.js +2 -1
- package/js/src/kraken.js +14 -13
- package/js/src/krakenfutures.js +2 -1
- package/js/src/lbank.js +8 -4
- package/js/src/lighter.d.ts +1 -1
- package/js/src/lighter.js +1 -1
- package/js/src/luno.js +1 -1
- package/js/src/mercado.js +2 -1
- package/js/src/mexc.d.ts +2 -2
- package/js/src/mexc.js +24 -14
- package/js/src/modetrade.js +1 -1
- package/js/src/okx.js +6 -3
- package/js/src/oxfun.js +5 -3
- package/js/src/p2b.js +8 -4
- package/js/src/paradex.js +3 -2
- package/js/src/phemex.js +4 -2
- package/js/src/poloniex.js +2 -1
- package/js/src/pro/apex.js +10 -1
- package/js/src/pro/aster.js +10 -9
- package/js/src/pro/binance.d.ts +1 -1
- package/js/src/pro/binance.js +3 -3
- package/js/src/pro/bingx.js +7 -2
- package/js/src/pro/bitmart.js +10 -0
- package/js/src/pro/bitmex.js +1 -1
- package/js/src/pro/grvt.js +8 -0
- package/js/src/pro/htx.d.ts +4 -4
- package/js/src/pro/htx.js +4 -4
- package/js/src/pro/krakenfutures.d.ts +4 -4
- package/js/src/pro/krakenfutures.js +16 -4
- package/js/src/pro/modetrade.d.ts +3 -3
- package/js/src/pro/modetrade.js +3 -3
- package/js/src/pro/okx.d.ts +4 -4
- package/js/src/pro/okx.js +4 -4
- package/js/src/pro/oxfun.d.ts +4 -4
- package/js/src/pro/oxfun.js +4 -4
- package/js/src/pro/woo.d.ts +4 -4
- package/js/src/pro/woo.js +4 -4
- package/js/src/pro/woofipro.d.ts +3 -3
- package/js/src/pro/woofipro.js +3 -3
- package/js/src/pro/xt.js +1 -1
- package/js/src/toobit.d.ts +1 -1
- package/js/src/toobit.js +1 -1
- package/js/src/woo.js +1 -1
- package/js/src/woofipro.js +1 -1
- package/js/src/xt.js +2 -1
- package/js/src/yobit.js +4 -2
- package/js/src/zebpay.js +3 -3
- package/package.json +21 -7
package/js/src/apex.js
CHANGED
|
@@ -1209,7 +1209,7 @@ export default class apex extends Exchange {
|
|
|
1209
1209
|
'IMMEDIATE_OR_CANCEL': 'IMMEDIATE_OR_CANCEL',
|
|
1210
1210
|
'POST_ONLY': 'POST_ONLY',
|
|
1211
1211
|
};
|
|
1212
|
-
return this.safeString(timeInForces, timeInForce
|
|
1212
|
+
return this.safeString(timeInForces, timeInForce);
|
|
1213
1213
|
}
|
|
1214
1214
|
parseOrderStatus(status) {
|
|
1215
1215
|
if (status !== undefined) {
|
|
@@ -1357,14 +1357,16 @@ export default class apex extends Exchange {
|
|
|
1357
1357
|
if (clientOrderId === undefined) {
|
|
1358
1358
|
clientOrderId = this.generateRandomClientIdOmni(accountId);
|
|
1359
1359
|
}
|
|
1360
|
+
const finalClientOrderId = clientOrderId; // java req
|
|
1360
1361
|
params = this.omit(params, ['clientId', 'clientOrderId', 'client_order_id', 'stopLossPrice', 'takeProfitPrice', 'triggerPrice']);
|
|
1362
|
+
const finalOrderPrice = orderPrice; // java req
|
|
1361
1363
|
const orderToSign = {
|
|
1362
1364
|
'accountId': accountId,
|
|
1363
|
-
'slotId':
|
|
1364
|
-
'nonce':
|
|
1365
|
+
'slotId': finalClientOrderId,
|
|
1366
|
+
'nonce': finalClientOrderId,
|
|
1365
1367
|
'pairId': market['quoteId'],
|
|
1366
1368
|
'size': orderSize,
|
|
1367
|
-
'price':
|
|
1369
|
+
'price': finalOrderPrice,
|
|
1368
1370
|
'direction': orderSide,
|
|
1369
1371
|
'makerFeeRate': maker,
|
|
1370
1372
|
'takerFeeRate': taker,
|
|
@@ -1378,11 +1380,11 @@ export default class apex extends Exchange {
|
|
|
1378
1380
|
'side': orderSide,
|
|
1379
1381
|
'type': orderType,
|
|
1380
1382
|
'size': orderSize,
|
|
1381
|
-
'price':
|
|
1383
|
+
'price': finalOrderPrice,
|
|
1382
1384
|
'limitFee': limitFee,
|
|
1383
1385
|
'expiration': Math.floor(timeNow / 1000 + 30 * 24 * 60 * 60),
|
|
1384
1386
|
'timeInForce': timeInForce,
|
|
1385
|
-
'clientId':
|
|
1387
|
+
'clientId': finalClientOrderId,
|
|
1386
1388
|
'brokerId': this.safeString(this.options, 'brokerId', '6956'),
|
|
1387
1389
|
};
|
|
1388
1390
|
if (triggerPrice !== undefined) {
|
|
@@ -1428,6 +1430,7 @@ export default class apex extends Exchange {
|
|
|
1428
1430
|
if (subAccounts.length > 0) {
|
|
1429
1431
|
nonce = this.safeString(subAccounts[0], 'nonce', '0');
|
|
1430
1432
|
}
|
|
1433
|
+
const finalNonce = nonce; // java req
|
|
1431
1434
|
const ethAddress = this.safeString(accountData, 'ethereumAddress', '');
|
|
1432
1435
|
const accountId = this.safeString(accountData, 'id', '');
|
|
1433
1436
|
let currency = {};
|
|
@@ -1444,12 +1447,15 @@ export default class apex extends Exchange {
|
|
|
1444
1447
|
}
|
|
1445
1448
|
}
|
|
1446
1449
|
const tokenId = this.safeString(currency, 'tokenId', '');
|
|
1447
|
-
const
|
|
1450
|
+
const decimalsNum = this.safeNumber(currency, 'decimals', 0);
|
|
1451
|
+
const mathPowResult = (Math.pow(10, decimalsNum));
|
|
1452
|
+
const amountNumber = this.parseToInt(amount * mathPowResult);
|
|
1448
1453
|
const timestampSeconds = this.parseToInt(this.milliseconds() / 1000);
|
|
1449
1454
|
let clientOrderId = this.safeStringN(params, ['clientId', 'clientOrderId', 'client_order_id']);
|
|
1450
1455
|
if (clientOrderId === undefined) {
|
|
1451
1456
|
clientOrderId = this.generateRandomClientIdOmni(this.safeString(this.options, 'accountId'));
|
|
1452
1457
|
}
|
|
1458
|
+
const finalClientOrderId = clientOrderId; // java req
|
|
1453
1459
|
params = this.omit(params, ['clientId', 'clientOrderId', 'client_order_id']);
|
|
1454
1460
|
if (fromAccount !== undefined && fromAccount.toLowerCase() === 'contract') {
|
|
1455
1461
|
const formattedUint32 = '4294967295';
|
|
@@ -1463,7 +1469,7 @@ export default class apex extends Exchange {
|
|
|
1463
1469
|
'tokenId': tokenId,
|
|
1464
1470
|
'amount': amountNumber.toString(),
|
|
1465
1471
|
'fee': '0',
|
|
1466
|
-
'nonce':
|
|
1472
|
+
'nonce': finalClientOrderId,
|
|
1467
1473
|
'timestampSeconds': expireTime,
|
|
1468
1474
|
'isContract': true,
|
|
1469
1475
|
};
|
|
@@ -1471,7 +1477,7 @@ export default class apex extends Exchange {
|
|
|
1471
1477
|
const request = {
|
|
1472
1478
|
'amount': amount,
|
|
1473
1479
|
'expireTime': expireTime,
|
|
1474
|
-
'clientWithdrawId':
|
|
1480
|
+
'clientWithdrawId': finalClientOrderId,
|
|
1475
1481
|
'signature': signature,
|
|
1476
1482
|
'token': code,
|
|
1477
1483
|
'ethAddress': ethAddress,
|
|
@@ -1479,10 +1485,11 @@ export default class apex extends Exchange {
|
|
|
1479
1485
|
const response = await this.privatePostV3ContractTransferOut(this.extend(request, params));
|
|
1480
1486
|
const data = this.safeDict(response, 'data', {});
|
|
1481
1487
|
const currentTime = this.milliseconds();
|
|
1488
|
+
const parsedAmount = this.parseNumber(amount);
|
|
1482
1489
|
return this.extend(this.parseTransfer(data, this.currency(code)), {
|
|
1483
1490
|
'timestamp': currentTime,
|
|
1484
1491
|
'datetime': this.iso8601(currentTime),
|
|
1485
|
-
'amount':
|
|
1492
|
+
'amount': parsedAmount,
|
|
1486
1493
|
'fromAccount': 'contract',
|
|
1487
1494
|
'toAccount': 'spot',
|
|
1488
1495
|
});
|
|
@@ -1496,14 +1503,16 @@ export default class apex extends Exchange {
|
|
|
1496
1503
|
'tokenId': tokenId,
|
|
1497
1504
|
'amount': amountNumber.toString(),
|
|
1498
1505
|
'fee': '0',
|
|
1499
|
-
'nonce':
|
|
1506
|
+
'nonce': finalNonce,
|
|
1500
1507
|
'timestampSeconds': timestampSeconds,
|
|
1501
1508
|
};
|
|
1502
1509
|
const signature = await this.getZKTransferSignatureObj(this.remove0xPrefix(this.getSeeds()), orderToSign);
|
|
1510
|
+
const amountStr = amount.toString();
|
|
1511
|
+
const ts = timestampSeconds; // java req
|
|
1503
1512
|
const request = {
|
|
1504
|
-
'amount':
|
|
1505
|
-
'timestamp':
|
|
1506
|
-
'clientTransferId':
|
|
1513
|
+
'amount': amountStr,
|
|
1514
|
+
'timestamp': ts,
|
|
1515
|
+
'clientTransferId': finalClientOrderId,
|
|
1507
1516
|
'signature': signature,
|
|
1508
1517
|
'zkAccountId': zkAccountId,
|
|
1509
1518
|
'subAccountId': subAccountId,
|
|
@@ -1514,7 +1523,7 @@ export default class apex extends Exchange {
|
|
|
1514
1523
|
'receiverZkAccountId': receiverZkAccountId,
|
|
1515
1524
|
'receiverSubAccountId': receiverSubAccountId,
|
|
1516
1525
|
'receiverAddress': receiverAddress,
|
|
1517
|
-
'nonce':
|
|
1526
|
+
'nonce': finalNonce,
|
|
1518
1527
|
};
|
|
1519
1528
|
const response = await this.privatePostV3TransferOut(this.extend(request, params));
|
|
1520
1529
|
const data = this.safeDict(response, 'data', {});
|
|
@@ -1572,7 +1581,7 @@ export default class apex extends Exchange {
|
|
|
1572
1581
|
* @description cancels an open order
|
|
1573
1582
|
* @see https://api-docs.pro.apex.exchange/#privateapi-v3-for-omni-post-cancel-order
|
|
1574
1583
|
* @param {string} id order id
|
|
1575
|
-
* @param symbol
|
|
1584
|
+
* @param {string} [symbol] unified symbol of the market the order was made in
|
|
1576
1585
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1577
1586
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/?id=order-structure}
|
|
1578
1587
|
*/
|
package/js/src/arkham.js
CHANGED
|
@@ -1289,7 +1289,7 @@ export default class arkham extends Exchange {
|
|
|
1289
1289
|
//
|
|
1290
1290
|
// [] returns an empty array, even when successfully cancels orders
|
|
1291
1291
|
//
|
|
1292
|
-
return this.parseOrders(response
|
|
1292
|
+
return this.parseOrders(response);
|
|
1293
1293
|
}
|
|
1294
1294
|
/**
|
|
1295
1295
|
* @method
|
|
@@ -1828,7 +1828,8 @@ export default class arkham extends Exchange {
|
|
|
1828
1828
|
// }
|
|
1829
1829
|
//
|
|
1830
1830
|
const data = this.safeList(response, 'addresses');
|
|
1831
|
-
const
|
|
1831
|
+
const networkCodeUnified = networkCode; // java req
|
|
1832
|
+
const parsed = this.parseDepositAddresses(data, undefined, false, { 'network': networkCodeUnified });
|
|
1832
1833
|
return this.indexBy(parsed, 'network');
|
|
1833
1834
|
}
|
|
1834
1835
|
parseDepositAddress(entry, currency = undefined) {
|
|
@@ -2386,11 +2387,13 @@ export default class arkham extends Exchange {
|
|
|
2386
2387
|
const marketId = this.safeString(info, 'market');
|
|
2387
2388
|
market = this.safeMarket(marketId, market, undefined, 'swap');
|
|
2388
2389
|
const maxNotional = this.safeNumber(tier, 'positionLimit');
|
|
2390
|
+
const curr = market['linear'] ? market['base'] : market['quote'];
|
|
2391
|
+
const notional = minNotional;
|
|
2389
2392
|
tiers.push({
|
|
2390
2393
|
'tier': this.sum(i, 1),
|
|
2391
2394
|
'symbol': this.safeSymbol(marketId, market, undefined, 'swap'),
|
|
2392
|
-
'currency':
|
|
2393
|
-
'minNotional':
|
|
2395
|
+
'currency': curr,
|
|
2396
|
+
'minNotional': notional,
|
|
2394
2397
|
'maxNotional': maxNotional,
|
|
2395
2398
|
'maintenanceMarginRate': this.safeNumber(tier, 'marginRate'),
|
|
2396
2399
|
'maxLeverage': this.safeInteger(tier, 'leverageRate'),
|
package/js/src/ascendex.js
CHANGED
|
@@ -902,12 +902,14 @@ export default class ascendex extends Exchange {
|
|
|
902
902
|
accountGroup = this.safeString(data, 'accountGroup');
|
|
903
903
|
this.options['account-group'] = accountGroup;
|
|
904
904
|
}
|
|
905
|
+
const finalResponse = response; // java req
|
|
906
|
+
const finalAccountGroup = accountGroup;
|
|
905
907
|
return [
|
|
906
908
|
{
|
|
907
|
-
'id':
|
|
909
|
+
'id': finalAccountGroup,
|
|
908
910
|
'type': undefined,
|
|
909
911
|
'code': undefined,
|
|
910
|
-
'info':
|
|
912
|
+
'info': finalResponse,
|
|
911
913
|
},
|
|
912
914
|
];
|
|
913
915
|
}
|
|
@@ -3041,8 +3043,9 @@ export default class ascendex extends Exchange {
|
|
|
3041
3043
|
if (type === 'reduce') {
|
|
3042
3044
|
amount = Precise.stringAbs(amount);
|
|
3043
3045
|
}
|
|
3046
|
+
const parsedAmount = this.parseNumber(amount);
|
|
3044
3047
|
return this.extend(this.parseMarginModification(response, market), {
|
|
3045
|
-
'amount':
|
|
3048
|
+
'amount': parsedAmount,
|
|
3046
3049
|
'type': type,
|
|
3047
3050
|
});
|
|
3048
3051
|
}
|
package/js/src/base/Exchange.js
CHANGED
|
@@ -2988,7 +2988,7 @@ export default class Exchange {
|
|
|
2988
2988
|
}
|
|
2989
2989
|
else {
|
|
2990
2990
|
if (marketType === 'spot') {
|
|
2991
|
-
this.features[marketType] = this.featuresMapper(initialFeatures, marketType
|
|
2991
|
+
this.features[marketType] = this.featuresMapper(initialFeatures, marketType);
|
|
2992
2992
|
}
|
|
2993
2993
|
else {
|
|
2994
2994
|
this.features[marketType] = {};
|
|
@@ -4870,7 +4870,7 @@ export default class Exchange {
|
|
|
4870
4870
|
positions = this.toArray(positions);
|
|
4871
4871
|
const result = [];
|
|
4872
4872
|
for (let i = 0; i < positions.length; i++) {
|
|
4873
|
-
const position = this.extend(this.parsePosition(positions[i]
|
|
4873
|
+
const position = this.extend(this.parsePosition(positions[i]), params);
|
|
4874
4874
|
result.push(position);
|
|
4875
4875
|
}
|
|
4876
4876
|
return this.filterByArrayPositions(result, 'symbol', symbols, false);
|
|
@@ -4883,7 +4883,7 @@ export default class Exchange {
|
|
|
4883
4883
|
ranks = this.toArray(ranks);
|
|
4884
4884
|
const result = [];
|
|
4885
4885
|
for (let i = 0; i < ranks.length; i++) {
|
|
4886
|
-
const rank = this.extend(this.parseADLRank(ranks[i]
|
|
4886
|
+
const rank = this.extend(this.parseADLRank(ranks[i]), params);
|
|
4887
4887
|
result.push(rank);
|
|
4888
4888
|
}
|
|
4889
4889
|
return this.filterByArrayPositions(result, 'symbol', symbols, false);
|
package/js/src/bigone.js
CHANGED
|
@@ -1239,18 +1239,21 @@ export default class bigone extends Exchange {
|
|
|
1239
1239
|
const makerFeeCost = this.safeString(trade, 'maker_fee');
|
|
1240
1240
|
const takerFeeCost = this.safeString(trade, 'taker_fee');
|
|
1241
1241
|
if (makerFeeCost !== undefined) {
|
|
1242
|
+
const makerCode = makerCurrencyCode;
|
|
1242
1243
|
if (takerFeeCost !== undefined) {
|
|
1244
|
+
const takerCode = takerCurrencyCode;
|
|
1243
1245
|
result['fees'] = [
|
|
1244
|
-
{ 'cost': makerFeeCost, 'currency':
|
|
1245
|
-
{ 'cost': takerFeeCost, 'currency':
|
|
1246
|
+
{ 'cost': makerFeeCost, 'currency': makerCode },
|
|
1247
|
+
{ 'cost': takerFeeCost, 'currency': takerCode },
|
|
1246
1248
|
];
|
|
1247
1249
|
}
|
|
1248
1250
|
else {
|
|
1249
|
-
result['fee'] = { 'cost': makerFeeCost, 'currency':
|
|
1251
|
+
result['fee'] = { 'cost': makerFeeCost, 'currency': makerCode };
|
|
1250
1252
|
}
|
|
1251
1253
|
}
|
|
1252
1254
|
else if (takerFeeCost !== undefined) {
|
|
1253
|
-
|
|
1255
|
+
const takerCode2 = takerCurrencyCode;
|
|
1256
|
+
result['fee'] = { 'cost': takerFeeCost, 'currency': takerCode2 };
|
|
1254
1257
|
}
|
|
1255
1258
|
else {
|
|
1256
1259
|
result['fee'] = undefined;
|
package/js/src/binance.js
CHANGED
|
@@ -6590,9 +6590,10 @@ export default class binance extends Exchange {
|
|
|
6590
6590
|
const initialUppercaseType = type.toUpperCase();
|
|
6591
6591
|
const isMarketOrder = initialUppercaseType === 'MARKET';
|
|
6592
6592
|
const isLimitOrder = initialUppercaseType === 'LIMIT';
|
|
6593
|
+
const upperCaseSide = side.toUpperCase();
|
|
6593
6594
|
const request = {
|
|
6594
6595
|
'symbol': market['id'],
|
|
6595
|
-
'side':
|
|
6596
|
+
'side': upperCaseSide,
|
|
6596
6597
|
};
|
|
6597
6598
|
let isPortfolioMargin = undefined;
|
|
6598
6599
|
[isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'createOrder', 'papi', 'portfolioMargin', false);
|
|
@@ -8090,10 +8091,9 @@ export default class binance extends Exchange {
|
|
|
8090
8091
|
return this.parseOrders(response, market);
|
|
8091
8092
|
}
|
|
8092
8093
|
else {
|
|
8094
|
+
const order = this.safeOrder({ 'info': response });
|
|
8093
8095
|
return [
|
|
8094
|
-
|
|
8095
|
-
'info': response,
|
|
8096
|
-
}),
|
|
8096
|
+
order,
|
|
8097
8097
|
];
|
|
8098
8098
|
}
|
|
8099
8099
|
}
|
package/js/src/bingx.js
CHANGED
|
@@ -1699,10 +1699,10 @@ export default class bingx extends Exchange {
|
|
|
1699
1699
|
[subType, params] = this.handleSubTypeAndParams('fetchFundingRates', firstMarket, params, subType);
|
|
1700
1700
|
let response = undefined;
|
|
1701
1701
|
if (subType === 'inverse') {
|
|
1702
|
-
response = await this.cswapV1PublicGetMarketPremiumIndex(
|
|
1702
|
+
response = await this.cswapV1PublicGetMarketPremiumIndex(params);
|
|
1703
1703
|
}
|
|
1704
1704
|
else {
|
|
1705
|
-
response = await this.swapV2PublicGetQuotePremiumIndex(
|
|
1705
|
+
response = await this.swapV2PublicGetQuotePremiumIndex(params);
|
|
1706
1706
|
}
|
|
1707
1707
|
const data = this.safeList(response, 'data', []);
|
|
1708
1708
|
return this.parseFundingRates(data, symbols);
|
|
@@ -5249,7 +5249,7 @@ export default class bingx extends Exchange {
|
|
|
5249
5249
|
await this.loadMarkets();
|
|
5250
5250
|
const currency = this.currency(code);
|
|
5251
5251
|
const defaultRecvWindow = this.safeInteger(this.options, 'recvWindow');
|
|
5252
|
-
const recvWindow = this.safeInteger(
|
|
5252
|
+
const recvWindow = this.safeInteger(params, 'recvWindow', defaultRecvWindow);
|
|
5253
5253
|
const request = {
|
|
5254
5254
|
'coin': currency['id'],
|
|
5255
5255
|
'offset': 0,
|
|
@@ -6320,7 +6320,7 @@ export default class bingx extends Exchange {
|
|
|
6320
6320
|
async closeAllPositions(params = {}) {
|
|
6321
6321
|
await this.loadMarkets();
|
|
6322
6322
|
const defaultRecvWindow = this.safeInteger(this.options, 'recvWindow');
|
|
6323
|
-
const recvWindow = this.safeInteger(
|
|
6323
|
+
const recvWindow = this.safeInteger(params, 'recvWindow', defaultRecvWindow);
|
|
6324
6324
|
let marketType = undefined;
|
|
6325
6325
|
[marketType, params] = this.handleMarketTypeAndParams('closeAllPositions', undefined, params);
|
|
6326
6326
|
let subType = undefined;
|
package/js/src/bitflyer.js
CHANGED
|
@@ -1191,7 +1191,8 @@ export default class bitflyer extends Exchange {
|
|
|
1191
1191
|
if (api === 'private') {
|
|
1192
1192
|
this.checkRequiredCredentials();
|
|
1193
1193
|
const nonce = this.nonce().toString();
|
|
1194
|
-
|
|
1194
|
+
const content = [nonce, method, request];
|
|
1195
|
+
let auth = content.join('');
|
|
1195
1196
|
if (Object.keys(params).length) {
|
|
1196
1197
|
if (method !== 'GET') {
|
|
1197
1198
|
body = this.json(params);
|
package/js/src/bitget.js
CHANGED
|
@@ -1960,9 +1960,7 @@ export default class bitget extends Exchange {
|
|
|
1960
1960
|
if (uta) {
|
|
1961
1961
|
return await this.fetchUtaMarkets(params);
|
|
1962
1962
|
}
|
|
1963
|
-
|
|
1964
|
-
return await this.fetchDefaultMarkets(params);
|
|
1965
|
-
}
|
|
1963
|
+
return await this.fetchDefaultMarkets(params);
|
|
1966
1964
|
}
|
|
1967
1965
|
async fetchDefaultMarkets(params) {
|
|
1968
1966
|
let types = undefined;
|
|
@@ -5363,6 +5361,13 @@ export default class bitget extends Exchange {
|
|
|
5363
5361
|
const trailingTriggerPrice = this.safeString(params, 'trailingTriggerPrice', this.numberToString(price));
|
|
5364
5362
|
const trailingPercent = this.safeString2(params, 'trailingPercent', 'callbackRatio');
|
|
5365
5363
|
const isTrailingPercentOrder = trailingPercent !== undefined;
|
|
5364
|
+
// const multipleTriggers = (isTriggerOrder && (isStopLossTriggerOrder || isTakeProfitTriggerOrder || isTrailingPercentOrder))
|
|
5365
|
+
// || (isStopLossTriggerOrder && (isTakeProfitTriggerOrder || isTrailingPercentOrder))
|
|
5366
|
+
// || (isTakeProfitTriggerOrder && isTrailingPercentOrder);
|
|
5367
|
+
// if (multipleTriggers) {
|
|
5368
|
+
// throw new ExchangeError (this.id + ' createOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent');
|
|
5369
|
+
// }
|
|
5370
|
+
//
|
|
5366
5371
|
if (this.sum(isTriggerOrder, isStopLossTriggerOrder, isTakeProfitTriggerOrder, isTrailingPercentOrder) > 1) {
|
|
5367
5372
|
throw new ExchangeError(this.id + ' createOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent');
|
|
5368
5373
|
}
|
|
@@ -5787,6 +5792,12 @@ export default class bitget extends Exchange {
|
|
|
5787
5792
|
const trailingTriggerPrice = this.safeString(params, 'trailingTriggerPrice', this.numberToString(price));
|
|
5788
5793
|
const trailingPercent = this.safeString2(params, 'trailingPercent', 'newCallbackRatio');
|
|
5789
5794
|
const isTrailingPercentOrder = trailingPercent !== undefined;
|
|
5795
|
+
// const multipleTriggers = (isTriggerOrder && (isStopLossOrder || isTakeProfitOrder || isTrailingPercentOrder))
|
|
5796
|
+
// || (isStopLossOrder && (isTakeProfitOrder || isTrailingPercentOrder))
|
|
5797
|
+
// || (isTakeProfitOrder && isTrailingPercentOrder);
|
|
5798
|
+
// if (multipleTriggers) {
|
|
5799
|
+
// throw new ExchangeError (this.id + ' editOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent');
|
|
5800
|
+
// }
|
|
5790
5801
|
if (this.sum(isTriggerOrder, isStopLossOrder, isTakeProfitOrder, isTrailingPercentOrder) > 1) {
|
|
5791
5802
|
throw new ExchangeError(this.id + ' editOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent');
|
|
5792
5803
|
}
|
package/js/src/bitmart.js
CHANGED
|
@@ -3296,9 +3296,9 @@ export default class bitmart extends Exchange {
|
|
|
3296
3296
|
}
|
|
3297
3297
|
const succeeded = this.safeValue(data, 'succeed');
|
|
3298
3298
|
if (succeeded !== undefined) {
|
|
3299
|
-
|
|
3300
|
-
if (
|
|
3301
|
-
throw new InvalidOrder(this.id + ' cancelOrder() failed to cancel ' + symbol + ' order id ' +
|
|
3299
|
+
const id2 = this.safeString(succeeded, 0);
|
|
3300
|
+
if (id2 === undefined) {
|
|
3301
|
+
throw new InvalidOrder(this.id + ' cancelOrder() failed to cancel ' + symbol + ' order id ' + id2);
|
|
3302
3302
|
}
|
|
3303
3303
|
}
|
|
3304
3304
|
else {
|
|
@@ -4636,8 +4636,9 @@ export default class bitmart extends Exchange {
|
|
|
4636
4636
|
if (limit === undefined) {
|
|
4637
4637
|
limit = 10;
|
|
4638
4638
|
}
|
|
4639
|
+
const pageNumber = this.safeInteger(params, 'page', 1);
|
|
4639
4640
|
const request = {
|
|
4640
|
-
'page':
|
|
4641
|
+
'page': pageNumber,
|
|
4641
4642
|
'limit': limit, // default is 10, max is 100
|
|
4642
4643
|
};
|
|
4643
4644
|
let currency = undefined;
|
package/js/src/bitmex.js
CHANGED
|
@@ -1481,13 +1481,14 @@ export default class bitmex extends Exchange {
|
|
|
1481
1481
|
if (status !== undefined) {
|
|
1482
1482
|
status = this.parseTransactionStatus(status);
|
|
1483
1483
|
}
|
|
1484
|
+
const code = currency['code'];
|
|
1484
1485
|
return {
|
|
1485
1486
|
'info': transaction,
|
|
1486
1487
|
'id': this.safeString(transaction, 'transactID'),
|
|
1487
1488
|
'txid': this.safeString(transaction, 'tx'),
|
|
1488
1489
|
'type': type,
|
|
1489
|
-
'currency':
|
|
1490
|
-
'network': this.networkIdToCode(this.safeString(transaction, 'network'),
|
|
1490
|
+
'currency': code,
|
|
1491
|
+
'network': this.networkIdToCode(this.safeString(transaction, 'network'), code),
|
|
1491
1492
|
'amount': this.parseNumber(amount),
|
|
1492
1493
|
'status': status,
|
|
1493
1494
|
'timestamp': transactTime,
|
|
@@ -2022,6 +2023,7 @@ export default class bitmex extends Exchange {
|
|
|
2022
2023
|
await this.loadMarkets();
|
|
2023
2024
|
const market = this.market(symbol);
|
|
2024
2025
|
let orderType = this.capitalize(type);
|
|
2026
|
+
const capitalizeOrderType = orderType;
|
|
2025
2027
|
const reduceOnly = this.safeValue(params, 'reduceOnly');
|
|
2026
2028
|
if (reduceOnly !== undefined) {
|
|
2027
2029
|
if ((!market['swap']) && (!market['future'])) {
|
|
@@ -2036,7 +2038,7 @@ export default class bitmex extends Exchange {
|
|
|
2036
2038
|
'symbol': market['id'],
|
|
2037
2039
|
'side': this.capitalize(side),
|
|
2038
2040
|
'orderQty': qty,
|
|
2039
|
-
'ordType':
|
|
2041
|
+
'ordType': capitalizeOrderType,
|
|
2040
2042
|
'text': brokerId,
|
|
2041
2043
|
};
|
|
2042
2044
|
const execInstructions = [];
|
|
@@ -2857,9 +2859,10 @@ export default class bitmex extends Exchange {
|
|
|
2857
2859
|
}
|
|
2858
2860
|
const currency = this.currency(code);
|
|
2859
2861
|
params = this.omit(params, 'network');
|
|
2862
|
+
const parsedNetwork = this.networkCodeToId(networkCode, currency['code']);
|
|
2860
2863
|
const request = {
|
|
2861
2864
|
'currency': currency['id'],
|
|
2862
|
-
'network':
|
|
2865
|
+
'network': parsedNetwork,
|
|
2863
2866
|
};
|
|
2864
2867
|
const response = await this.privateGetUserDepositAddress(this.extend(request, params));
|
|
2865
2868
|
//
|
package/js/src/bitopro.js
CHANGED
|
@@ -1015,7 +1015,7 @@ export default class bitopro extends Exchange {
|
|
|
1015
1015
|
'4': 'canceled',
|
|
1016
1016
|
'6': 'canceled',
|
|
1017
1017
|
};
|
|
1018
|
-
return this.safeString(statuses, status
|
|
1018
|
+
return this.safeString(statuses, status);
|
|
1019
1019
|
}
|
|
1020
1020
|
parseOrder(order, market = undefined) {
|
|
1021
1021
|
//
|
package/js/src/bitrue.js
CHANGED
|
@@ -978,6 +978,7 @@ export default class bitrue extends Exchange {
|
|
|
978
978
|
if (minCost === undefined) {
|
|
979
979
|
minCost = this.safeNumber(market, 'minOrderMoney');
|
|
980
980
|
}
|
|
981
|
+
const isSpot = (type === 'spot');
|
|
981
982
|
return {
|
|
982
983
|
'id': id,
|
|
983
984
|
'lowercaseId': lowercaseId,
|
|
@@ -989,7 +990,7 @@ export default class bitrue extends Exchange {
|
|
|
989
990
|
'quoteId': quoteId,
|
|
990
991
|
'settleId': settleId,
|
|
991
992
|
'type': type,
|
|
992
|
-
'spot':
|
|
993
|
+
'spot': isSpot,
|
|
993
994
|
'margin': false,
|
|
994
995
|
'swap': isContract,
|
|
995
996
|
'future': false,
|
package/js/src/bitso.js
CHANGED
|
@@ -1046,8 +1046,9 @@ export default class bitso extends Exchange {
|
|
|
1046
1046
|
}
|
|
1047
1047
|
// convert it to an integer unconditionally
|
|
1048
1048
|
if (markerInParams) {
|
|
1049
|
+
const marker = parseInt(params['marker']);
|
|
1049
1050
|
params = this.extend(params, {
|
|
1050
|
-
'marker':
|
|
1051
|
+
'marker': marker,
|
|
1051
1052
|
});
|
|
1052
1053
|
}
|
|
1053
1054
|
const request = {
|
|
@@ -1266,8 +1267,9 @@ export default class bitso extends Exchange {
|
|
|
1266
1267
|
}
|
|
1267
1268
|
// convert it to an integer unconditionally
|
|
1268
1269
|
if (markerInParams) {
|
|
1270
|
+
const marker = parseInt(params['marker']);
|
|
1269
1271
|
params = this.extend(params, {
|
|
1270
|
-
'marker':
|
|
1272
|
+
'marker': marker,
|
|
1271
1273
|
});
|
|
1272
1274
|
}
|
|
1273
1275
|
const request = {
|
|
@@ -1827,7 +1829,8 @@ export default class bitso extends Exchange {
|
|
|
1827
1829
|
this.checkRequiredCredentials();
|
|
1828
1830
|
const nonce = this.nonce().toString();
|
|
1829
1831
|
endpoint = '/api' + endpoint;
|
|
1830
|
-
|
|
1832
|
+
const content = [nonce, method, endpoint];
|
|
1833
|
+
let request = content.join('');
|
|
1831
1834
|
if (method !== 'GET' && method !== 'DELETE') {
|
|
1832
1835
|
if (Object.keys(query).length) {
|
|
1833
1836
|
body = this.json(query);
|
package/js/src/bitstamp.js
CHANGED
|
@@ -677,12 +677,13 @@ export default class bitstamp extends Exchange {
|
|
|
677
677
|
}
|
|
678
678
|
}
|
|
679
679
|
const isSpot = (type === 'spot');
|
|
680
|
+
const settle = settleId ? this.safeCurrencyCode(settleId) : undefined;
|
|
680
681
|
result.push({
|
|
681
682
|
'id': this.safeString(market, 'market_symbol'),
|
|
682
683
|
'symbol': symbol,
|
|
683
684
|
'base': base,
|
|
684
685
|
'quote': quote,
|
|
685
|
-
'settle':
|
|
686
|
+
'settle': settle,
|
|
686
687
|
'baseId': baseId,
|
|
687
688
|
'quoteId': quoteId,
|
|
688
689
|
'settleId': settleId,
|
|
@@ -910,7 +911,7 @@ export default class bitstamp extends Exchange {
|
|
|
910
911
|
// }
|
|
911
912
|
//
|
|
912
913
|
const marketId = this.safeString(ticker, 'pair');
|
|
913
|
-
const symbol = this.safeSymbol(marketId, market
|
|
914
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
914
915
|
const timestamp = this.safeTimestamp(ticker, 'timestamp');
|
|
915
916
|
const vwap = this.safeString(ticker, 'vwap');
|
|
916
917
|
const baseVolume = this.safeString(ticker, 'volume');
|
|
@@ -1332,8 +1333,9 @@ export default class bitstamp extends Exchange {
|
|
|
1332
1333
|
return this.parseOHLCVs(ohlc, market, timeframe, since, limit);
|
|
1333
1334
|
}
|
|
1334
1335
|
parseBalance(response) {
|
|
1336
|
+
const finalResponse = response; // java req
|
|
1335
1337
|
const result = {
|
|
1336
|
-
'info':
|
|
1338
|
+
'info': finalResponse,
|
|
1337
1339
|
'timestamp': undefined,
|
|
1338
1340
|
'datetime': undefined,
|
|
1339
1341
|
};
|
package/js/src/bittrade.js
CHANGED
|
@@ -1991,8 +1991,9 @@ export default class bittrade extends Exchange {
|
|
|
1991
1991
|
const requestSorted = this.keysort(request);
|
|
1992
1992
|
let auth = this.urlencode(requestSorted);
|
|
1993
1993
|
// unfortunately, PHP demands double quotes for the escaped newline symbol
|
|
1994
|
+
const content = [method, this.hostname, url, auth];
|
|
1994
1995
|
// eslint-disable-next-line quotes
|
|
1995
|
-
const payload =
|
|
1996
|
+
const payload = content.join("\n");
|
|
1996
1997
|
const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256, 'base64');
|
|
1997
1998
|
auth += '&' + this.urlencode({ 'Signature': signature });
|
|
1998
1999
|
url += '?' + auth;
|
package/js/src/blofin.js
CHANGED
|
@@ -546,6 +546,7 @@ export default class blofin extends Exchange {
|
|
|
546
546
|
let maxLeverage = this.safeString(market, 'maxLeverage', '100');
|
|
547
547
|
maxLeverage = Precise.stringMax(maxLeverage, '1');
|
|
548
548
|
const isActive = (this.safeString(market, 'state') === 'live');
|
|
549
|
+
const isMargin = spot && (Precise.stringGt(maxLeverage, '1'));
|
|
549
550
|
return this.safeMarketStructure({
|
|
550
551
|
'id': id,
|
|
551
552
|
'symbol': symbol,
|
|
@@ -558,7 +559,7 @@ export default class blofin extends Exchange {
|
|
|
558
559
|
'type': type,
|
|
559
560
|
'spot': spot,
|
|
560
561
|
'option': option,
|
|
561
|
-
'margin':
|
|
562
|
+
'margin': isMargin,
|
|
562
563
|
'swap': swap,
|
|
563
564
|
'future': future,
|
|
564
565
|
'active': isActive,
|
package/js/src/bybit.d.ts
CHANGED
|
@@ -70,7 +70,7 @@ export default class bybit extends Exchange {
|
|
|
70
70
|
*/
|
|
71
71
|
fetchMarkets(params?: {}): Promise<Market[]>;
|
|
72
72
|
fetchSpotMarkets(params: any): Promise<Market[]>;
|
|
73
|
-
fetchFutureMarkets(params
|
|
73
|
+
fetchFutureMarkets(params?: {}): Promise<Market[]>;
|
|
74
74
|
fetchOptionMarkets(params: any): Promise<Market[]>;
|
|
75
75
|
parseTicker(ticker: Dict, market?: Market): Ticker;
|
|
76
76
|
/**
|