ccxt 4.1.87 → 4.1.89
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 +8309 -5710
- package/README.md +10 -9
- package/changelog.js +101 -0
- package/dist/ccxt.browser.js +8628 -4849
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +6 -1
- package/dist/cjs/src/base/Exchange.js +95 -27
- package/dist/cjs/src/base/ws/Client.js +3 -3
- package/dist/cjs/src/base/ws/Future.js +9 -2
- package/dist/cjs/src/base/ws/WsClient.js +1 -1
- package/dist/cjs/src/bigone.js +8 -1
- package/dist/cjs/src/binance.js +4 -105
- package/dist/cjs/src/bit2c.js +8 -2
- package/dist/cjs/src/bitget.js +3455 -2480
- package/dist/cjs/src/bitmart.js +35 -9
- package/dist/cjs/src/coinbase.js +2 -0
- package/dist/cjs/src/coinbasepro.js +0 -43
- package/dist/cjs/src/coinex.js +14 -1
- package/dist/cjs/src/coinsph.js +0 -29
- package/dist/cjs/src/cryptocom.js +22 -10
- package/dist/cjs/src/gate.js +37 -39
- package/dist/cjs/src/gemini.js +1 -0
- package/dist/cjs/src/novadax.js +28 -16
- package/dist/cjs/src/okcoin.js +80 -21
- package/dist/cjs/src/phemex.js +105 -29
- package/dist/cjs/src/pro/binance.js +18 -215
- package/dist/cjs/src/pro/bitget.js +780 -736
- package/dist/cjs/src/pro/bitmart.js +8 -10
- package/dist/cjs/src/pro/bitmex.js +9 -34
- package/dist/cjs/src/pro/bitpanda.js +4 -4
- package/dist/cjs/src/pro/bybit.js +21 -97
- package/dist/cjs/src/pro/coinbasepro.js +36 -40
- package/dist/cjs/src/pro/cryptocom.js +10 -26
- package/dist/cjs/src/pro/gate.js +20 -17
- package/dist/cjs/src/pro/kucoin.js +39 -39
- package/dist/cjs/src/pro/kucoinfutures.js +40 -36
- package/dist/cjs/src/pro/okx.js +16 -29
- package/dist/cjs/src/tokocrypto.js +28 -14
- package/dist/cjs/src/woo.js +41 -14
- package/js/ccxt.d.ts +8 -2
- package/js/ccxt.js +6 -2
- package/js/src/abstract/bitget.d.ts +1 -1
- package/js/src/abstract/coinbasepro.d.ts +69 -0
- package/js/src/abstract/coinbasepro.js +11 -0
- package/js/src/abstract/phemex.d.ts +1 -0
- package/js/src/base/Exchange.d.ts +2 -3
- package/js/src/base/Exchange.js +96 -28
- package/js/src/base/ws/Client.d.ts +2 -2
- package/js/src/base/ws/Client.js +4 -4
- package/js/src/base/ws/Future.d.ts +5 -2
- package/js/src/base/ws/Future.js +8 -2
- package/js/src/base/ws/WsClient.d.ts +1 -1
- package/js/src/base/ws/WsClient.js +2 -2
- package/js/src/bigone.js +9 -2
- package/js/src/binance.d.ts +0 -9
- package/js/src/binance.js +4 -105
- package/js/src/bit2c.js +8 -2
- package/js/src/bitget.d.ts +13 -11
- package/js/src/bitget.js +3455 -2480
- package/js/src/bitmart.js +35 -9
- package/js/src/coinbase.js +2 -0
- package/js/src/coinbasepro.d.ts +0 -4
- package/js/src/coinbasepro.js +1 -44
- package/js/src/coinex.js +14 -1
- package/js/src/coinsph.d.ts +0 -1
- package/js/src/coinsph.js +0 -29
- package/js/src/cryptocom.js +22 -10
- package/js/src/gate.js +37 -39
- package/js/src/gemini.js +1 -0
- package/js/src/novadax.js +28 -16
- package/js/src/okcoin.d.ts +1 -0
- package/js/src/okcoin.js +81 -22
- package/js/src/phemex.d.ts +2 -108
- package/js/src/phemex.js +105 -29
- package/js/src/pro/binance.d.ts +0 -2
- package/js/src/pro/binance.js +19 -216
- package/js/src/pro/bitget.d.ts +3 -5
- package/js/src/pro/bitget.js +780 -736
- package/js/src/pro/bitmart.js +8 -10
- package/js/src/pro/bitmex.js +9 -34
- package/js/src/pro/bitpanda.d.ts +1 -1
- package/js/src/pro/bitpanda.js +4 -4
- package/js/src/pro/bybit.d.ts +1 -2
- package/js/src/pro/bybit.js +21 -97
- package/js/src/pro/coinbasepro.d.ts +2 -2
- package/js/src/pro/coinbasepro.js +36 -40
- package/js/src/pro/cryptocom.d.ts +1 -1
- package/js/src/pro/cryptocom.js +10 -26
- package/js/src/pro/gate.d.ts +1 -0
- package/js/src/pro/gate.js +20 -17
- package/js/src/pro/kucoin.d.ts +1 -0
- package/js/src/pro/kucoin.js +39 -39
- package/js/src/pro/kucoinfutures.d.ts +2 -1
- package/js/src/pro/kucoinfutures.js +40 -36
- package/js/src/pro/okx.d.ts +1 -1
- package/js/src/pro/okx.js +16 -29
- package/js/src/tokocrypto.js +28 -14
- package/js/src/woo.d.ts +1 -0
- package/js/src/woo.js +42 -15
- package/package.json +2 -2
- package/skip-tests.json +3 -14
package/dist/cjs/src/okcoin.js
CHANGED
|
@@ -31,8 +31,17 @@ class okcoin extends okcoin$1 {
|
|
|
31
31
|
'future': true,
|
|
32
32
|
'option': undefined,
|
|
33
33
|
'cancelOrder': true,
|
|
34
|
+
'createMarketBuyOrderWithCost': true,
|
|
35
|
+
'createMarketOrderWithCost': false,
|
|
36
|
+
'createMarketSellOrderWithCost': false,
|
|
34
37
|
'createOrder': true,
|
|
35
38
|
'fetchBalance': true,
|
|
39
|
+
'fetchBorrowInterest': false,
|
|
40
|
+
'fetchBorrowRate': false,
|
|
41
|
+
'fetchBorrowRateHistories': false,
|
|
42
|
+
'fetchBorrowRateHistory': false,
|
|
43
|
+
'fetchBorrowRates': false,
|
|
44
|
+
'fetchBorrowRatesPerSymbol': false,
|
|
36
45
|
'fetchClosedOrders': true,
|
|
37
46
|
'fetchCurrencies': true,
|
|
38
47
|
'fetchDepositAddress': true,
|
|
@@ -54,6 +63,10 @@ class okcoin extends okcoin$1 {
|
|
|
54
63
|
'fetchTrades': true,
|
|
55
64
|
'fetchTransactions': undefined,
|
|
56
65
|
'fetchWithdrawals': true,
|
|
66
|
+
'reduceMargin': false,
|
|
67
|
+
'repayCrossMargin': false,
|
|
68
|
+
'repayIsolatedMargin': false,
|
|
69
|
+
'setMargin': false,
|
|
57
70
|
'transfer': true,
|
|
58
71
|
'withdraw': true,
|
|
59
72
|
},
|
|
@@ -1253,6 +1266,26 @@ class okcoin extends okcoin$1 {
|
|
|
1253
1266
|
}
|
|
1254
1267
|
return this.safeBalance(result);
|
|
1255
1268
|
}
|
|
1269
|
+
async createMarketBuyOrderWithCost(symbol, cost, params = {}) {
|
|
1270
|
+
/**
|
|
1271
|
+
* @method
|
|
1272
|
+
* @name okcoin#createMarketBuyOrderWithCost
|
|
1273
|
+
* @description create a market buy order by providing the symbol and cost
|
|
1274
|
+
* @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
|
|
1275
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
1276
|
+
* @param {float} cost how much you want to trade in units of the quote currency
|
|
1277
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1278
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1279
|
+
*/
|
|
1280
|
+
await this.loadMarkets();
|
|
1281
|
+
const market = this.market(symbol);
|
|
1282
|
+
if (!market['spot']) {
|
|
1283
|
+
throw new errors.NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
|
|
1284
|
+
}
|
|
1285
|
+
params['createMarketBuyOrderRequiresPrice'] = false;
|
|
1286
|
+
params['tgtCcy'] = 'quote_ccy';
|
|
1287
|
+
return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
|
|
1288
|
+
}
|
|
1256
1289
|
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
1257
1290
|
/**
|
|
1258
1291
|
* @method
|
|
@@ -1279,6 +1312,7 @@ class okcoin extends okcoin$1 {
|
|
|
1279
1312
|
* @param {float} [params.stopLoss.triggerPrice] stop loss trigger price
|
|
1280
1313
|
* @param {float} [params.stopLoss.price] used for stop loss limit orders, not used for stop loss market price orders
|
|
1281
1314
|
* @param {string} [params.stopLoss.type] 'market' or 'limit' used to specify the stop loss price type
|
|
1315
|
+
* @param {float} [params.cost] *spot market buy only* the quote quantity that can be used as an alternative for the amount
|
|
1282
1316
|
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1283
1317
|
*/
|
|
1284
1318
|
await this.loadMarkets();
|
|
@@ -1289,16 +1323,25 @@ class okcoin extends okcoin$1 {
|
|
|
1289
1323
|
if ((requestOrdType === 'trigger') || (requestOrdType === 'conditional') || (type === 'oco') || (type === 'move_order_stop') || (type === 'iceberg') || (type === 'twap')) {
|
|
1290
1324
|
method = 'privatePostTradeOrderAlgo';
|
|
1291
1325
|
}
|
|
1292
|
-
if ((method !== 'privatePostTradeOrder') && (method !== 'privatePostTradeOrderAlgo') && (method !== 'privatePostTradeBatchOrders')) {
|
|
1293
|
-
throw new errors.ExchangeError(this.id + ' createOrder() this.options["createOrder"] must be either privatePostTradeBatchOrders or privatePostTradeOrder or privatePostTradeOrderAlgo');
|
|
1294
|
-
}
|
|
1295
1326
|
if (method === 'privatePostTradeBatchOrders') {
|
|
1296
1327
|
// keep the request body the same
|
|
1297
1328
|
// submit a single order in an array to the batch order endpoint
|
|
1298
1329
|
// because it has a lower ratelimit
|
|
1299
1330
|
request = [request];
|
|
1300
1331
|
}
|
|
1301
|
-
|
|
1332
|
+
let response = undefined;
|
|
1333
|
+
if (method === 'privatePostTradeOrder') {
|
|
1334
|
+
response = await this.privatePostTradeOrder(request);
|
|
1335
|
+
}
|
|
1336
|
+
else if (method === 'privatePostTradeOrderAlgo') {
|
|
1337
|
+
response = await this.privatePostTradeOrderAlgo(request);
|
|
1338
|
+
}
|
|
1339
|
+
else if (method === 'privatePostTradeBatchOrders') {
|
|
1340
|
+
response = await this.privatePostTradeBatchOrders(request);
|
|
1341
|
+
}
|
|
1342
|
+
else {
|
|
1343
|
+
throw new errors.ExchangeError(this.id + ' createOrder() this.options["createOrder"] must be either privatePostTradeBatchOrders or privatePostTradeOrder or privatePostTradeOrderAlgo');
|
|
1344
|
+
}
|
|
1302
1345
|
const data = this.safeValue(response, 'data', []);
|
|
1303
1346
|
const first = this.safeValue(data, 0);
|
|
1304
1347
|
const order = this.parseOrder(first, market);
|
|
@@ -1318,7 +1361,7 @@ class okcoin extends okcoin$1 {
|
|
|
1318
1361
|
'ordType': type,
|
|
1319
1362
|
// 'ordType': type, // privatePostTradeOrder: market, limit, post_only, fok, ioc, optimal_limit_ioc
|
|
1320
1363
|
// 'ordType': type, // privatePostTradeOrderAlgo: conditional, oco, trigger, move_order_stop, iceberg, twap
|
|
1321
|
-
'sz': this.amountToPrecision(symbol, amount),
|
|
1364
|
+
// 'sz': this.amountToPrecision (symbol, amount),
|
|
1322
1365
|
// 'px': this.priceToPrecision (symbol, price), // limit orders only
|
|
1323
1366
|
// 'reduceOnly': false,
|
|
1324
1367
|
//
|
|
@@ -1385,30 +1428,37 @@ class okcoin extends okcoin$1 {
|
|
|
1385
1428
|
// see documentation: https://www.okx.com/docs-v5/en/#rest-api-trade-place-order
|
|
1386
1429
|
if (tgtCcy === 'quote_ccy') {
|
|
1387
1430
|
// quote_ccy: sz refers to units of quote currency
|
|
1388
|
-
let
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1431
|
+
let quoteAmount = undefined;
|
|
1432
|
+
let createMarketBuyOrderRequiresPrice = true;
|
|
1433
|
+
[createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
|
|
1434
|
+
const cost = this.safeNumber2(params, 'cost', 'sz');
|
|
1435
|
+
params = this.omit(params, ['cost', 'sz']);
|
|
1436
|
+
if (cost !== undefined) {
|
|
1437
|
+
quoteAmount = this.costToPrecision(symbol, cost);
|
|
1438
|
+
}
|
|
1439
|
+
else if (createMarketBuyOrderRequiresPrice) {
|
|
1440
|
+
if (price === undefined) {
|
|
1441
|
+
throw new errors.InvalidOrder(this.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend (quote quantity) in the amount argument');
|
|
1398
1442
|
}
|
|
1399
|
-
else
|
|
1400
|
-
|
|
1443
|
+
else {
|
|
1444
|
+
const amountString = this.numberToString(amount);
|
|
1445
|
+
const priceString = this.numberToString(price);
|
|
1446
|
+
const costRequest = Precise["default"].stringMul(amountString, priceString);
|
|
1447
|
+
quoteAmount = this.costToPrecision(symbol, costRequest);
|
|
1401
1448
|
}
|
|
1402
1449
|
}
|
|
1403
1450
|
else {
|
|
1404
|
-
|
|
1451
|
+
quoteAmount = this.costToPrecision(symbol, amount);
|
|
1405
1452
|
}
|
|
1406
|
-
request['sz'] =
|
|
1407
|
-
|
|
1453
|
+
request['sz'] = quoteAmount;
|
|
1454
|
+
}
|
|
1455
|
+
else {
|
|
1456
|
+
request['sz'] = this.amountToPrecision(symbol, amount);
|
|
1408
1457
|
}
|
|
1409
1458
|
}
|
|
1410
1459
|
}
|
|
1411
1460
|
else {
|
|
1461
|
+
request['sz'] = this.amountToPrecision(symbol, amount);
|
|
1412
1462
|
if ((!trigger) && (!conditional)) {
|
|
1413
1463
|
request['px'] = this.priceToPrecision(symbol, price);
|
|
1414
1464
|
}
|
|
@@ -2813,7 +2863,16 @@ class okcoin extends okcoin$1 {
|
|
|
2813
2863
|
request['ccy'] = currency['id'];
|
|
2814
2864
|
}
|
|
2815
2865
|
[request, params] = this.handleUntilOption('end', request, params);
|
|
2816
|
-
|
|
2866
|
+
let response = undefined;
|
|
2867
|
+
if (method === 'privateGetAccountBillsArchive') {
|
|
2868
|
+
response = await this.privateGetAccountBillsArchive(this.extend(request, params));
|
|
2869
|
+
}
|
|
2870
|
+
else if (method === 'privateGetAssetBills') {
|
|
2871
|
+
response = await this.privateGetAssetBills(this.extend(request, params));
|
|
2872
|
+
}
|
|
2873
|
+
else {
|
|
2874
|
+
response = await this.privateGetAccountBills(this.extend(request, params));
|
|
2875
|
+
}
|
|
2817
2876
|
//
|
|
2818
2877
|
// privateGetAccountBills, privateGetAccountBillsArchive
|
|
2819
2878
|
//
|
package/dist/cjs/src/phemex.js
CHANGED
|
@@ -157,6 +157,7 @@ class phemex extends phemex$1 {
|
|
|
157
157
|
},
|
|
158
158
|
'v2': {
|
|
159
159
|
'get': {
|
|
160
|
+
'public/products': 5,
|
|
160
161
|
'md/v2/orderbook': 5,
|
|
161
162
|
'md/v2/trade': 5,
|
|
162
163
|
'md/v2/ticker/24hr': 5,
|
|
@@ -483,6 +484,8 @@ class phemex extends phemex$1 {
|
|
|
483
484
|
//
|
|
484
485
|
// {
|
|
485
486
|
// "symbol":"BTCUSD",
|
|
487
|
+
// "code":"1",
|
|
488
|
+
// "type":"Perpetual",
|
|
486
489
|
// "displaySymbol":"BTC / USD",
|
|
487
490
|
// "indexSymbol":".BTC",
|
|
488
491
|
// "markSymbol":".MBTC",
|
|
@@ -500,9 +503,10 @@ class phemex extends phemex$1 {
|
|
|
500
503
|
// "minPriceEp":5000,
|
|
501
504
|
// "maxPriceEp":10000000000,
|
|
502
505
|
// "maxOrderQty":1000000,
|
|
503
|
-
// "type":"Perpetual",
|
|
504
506
|
// "status":"Listed",
|
|
505
507
|
// "tipOrderQty":1000000,
|
|
508
|
+
// "listTime":"1574650800000",
|
|
509
|
+
// "majorSymbol":true,
|
|
506
510
|
// "steps":"50",
|
|
507
511
|
// "riskLimits":[
|
|
508
512
|
// {"limit":100,"initialMargin":"1.0%","initialMarginEr":1000000,"maintenanceMargin":"0.5%","maintenanceMarginEr":500000},
|
|
@@ -560,7 +564,7 @@ class phemex extends phemex$1 {
|
|
|
560
564
|
// "1.0"
|
|
561
565
|
contractSize = this.parseNumber(contractSizeString);
|
|
562
566
|
}
|
|
563
|
-
return {
|
|
567
|
+
return this.safeMarketStructure({
|
|
564
568
|
'id': id,
|
|
565
569
|
'symbol': base + '/' + quote + ':' + settle,
|
|
566
570
|
'base': base,
|
|
@@ -613,24 +617,26 @@ class phemex extends phemex$1 {
|
|
|
613
617
|
},
|
|
614
618
|
'created': undefined,
|
|
615
619
|
'info': market,
|
|
616
|
-
};
|
|
620
|
+
});
|
|
617
621
|
}
|
|
618
622
|
parseSpotMarket(market) {
|
|
619
623
|
//
|
|
620
624
|
// {
|
|
621
625
|
// "symbol":"sBTCUSDT",
|
|
622
626
|
// "code":1001,
|
|
627
|
+
// "type":"Spot",
|
|
623
628
|
// "displaySymbol":"BTC / USDT",
|
|
624
629
|
// "quoteCurrency":"USDT",
|
|
625
630
|
// "priceScale":8,
|
|
626
631
|
// "ratioScale":8,
|
|
627
632
|
// "pricePrecision":2,
|
|
628
|
-
// "type":"Spot",
|
|
629
633
|
// "baseCurrency":"BTC",
|
|
630
634
|
// "baseTickSize":"0.000001 BTC",
|
|
631
635
|
// "baseTickSizeEv":100,
|
|
632
636
|
// "quoteTickSize":"0.01 USDT",
|
|
633
637
|
// "quoteTickSizeEv":1000000,
|
|
638
|
+
// "baseQtyPrecision":6,
|
|
639
|
+
// "quoteQtyPrecision":2,
|
|
634
640
|
// "minOrderValue":"10 USDT",
|
|
635
641
|
// "minOrderValueEv":1000000000,
|
|
636
642
|
// "maxBaseOrderSize":"1000 BTC",
|
|
@@ -641,13 +647,13 @@ class phemex extends phemex$1 {
|
|
|
641
647
|
// "defaultTakerFeeEr":100000,
|
|
642
648
|
// "defaultMakerFee":"0.001",
|
|
643
649
|
// "defaultMakerFeeEr":100000,
|
|
644
|
-
// "
|
|
645
|
-
// "quoteQtyPrecision":2,
|
|
650
|
+
// "description":"BTCUSDT is a BTC/USDT spot trading pair. Minimum order value is 1 USDT",
|
|
646
651
|
// "status":"Listed",
|
|
647
652
|
// "tipOrderQty":2,
|
|
648
|
-
// "
|
|
653
|
+
// "listTime":1589338800000,
|
|
654
|
+
// "buyPriceUpperLimitPct":110,
|
|
655
|
+
// "sellPriceLowerLimitPct":90,
|
|
649
656
|
// "leverage":5
|
|
650
|
-
// "valueScale":8,
|
|
651
657
|
// },
|
|
652
658
|
//
|
|
653
659
|
const type = this.safeStringLower(market, 'type');
|
|
@@ -659,7 +665,7 @@ class phemex extends phemex$1 {
|
|
|
659
665
|
const status = this.safeString(market, 'status');
|
|
660
666
|
const precisionAmount = this.parseSafeNumber(this.safeString(market, 'baseTickSize'));
|
|
661
667
|
const precisionPrice = this.parseSafeNumber(this.safeString(market, 'quoteTickSize'));
|
|
662
|
-
return {
|
|
668
|
+
return this.safeMarketStructure({
|
|
663
669
|
'id': id,
|
|
664
670
|
'symbol': base + '/' + quote,
|
|
665
671
|
'base': base,
|
|
@@ -712,7 +718,7 @@ class phemex extends phemex$1 {
|
|
|
712
718
|
},
|
|
713
719
|
'created': undefined,
|
|
714
720
|
'info': market,
|
|
715
|
-
};
|
|
721
|
+
});
|
|
716
722
|
}
|
|
717
723
|
async fetchMarkets(params = {}) {
|
|
718
724
|
/**
|
|
@@ -722,21 +728,22 @@ class phemex extends phemex$1 {
|
|
|
722
728
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
723
729
|
* @returns {object[]} an array of objects representing market data
|
|
724
730
|
*/
|
|
725
|
-
const v2Products = await this.
|
|
731
|
+
const v2Products = await this.v2GetPublicProducts(params);
|
|
726
732
|
//
|
|
727
733
|
// {
|
|
728
734
|
// "code":0,
|
|
729
|
-
// "msg":"
|
|
735
|
+
// "msg":"",
|
|
730
736
|
// "data":{
|
|
731
|
-
// "ratioScale":8,
|
|
732
737
|
// "currencies":[
|
|
733
|
-
// {"
|
|
734
|
-
// {"
|
|
735
|
-
// {"
|
|
738
|
+
// {"currency":"BTC","name":"Bitcoin","code":1,"valueScale":8,"minValueEv":1,"maxValueEv":5000000000000000000,"needAddrTag":0,"status":"Listed","displayCurrency":"BTC","inAssetsDisplay":1,"perpetual":0,"stableCoin":0,"assetsPrecision":8},
|
|
739
|
+
// {"currency":"USD","name":"USD","code":2,"valueScale":4,"minValueEv":1,"maxValueEv":5000000000000000000,"needAddrTag":0,"status":"Listed","displayCurrency":"USD","inAssetsDisplay":1,"perpetual":0,"stableCoin":0,"assetsPrecision":2},
|
|
740
|
+
// {"currency":"USDT","name":"TetherUS","code":3,"valueScale":8,"minValueEv":1,"maxValueEv":5000000000000000000,"needAddrTag":0,"status":"Listed","displayCurrency":"USDT","inAssetsDisplay":1,"perpetual":2,"stableCoin":1,"assetsPrecision":8},
|
|
736
741
|
// ],
|
|
737
742
|
// "products":[
|
|
738
743
|
// {
|
|
739
744
|
// "symbol":"BTCUSD",
|
|
745
|
+
// "code":1,
|
|
746
|
+
// "type":"Perpetual"
|
|
740
747
|
// "displaySymbol":"BTC / USD",
|
|
741
748
|
// "indexSymbol":".BTC",
|
|
742
749
|
// "markSymbol":".MBTC",
|
|
@@ -754,22 +761,31 @@ class phemex extends phemex$1 {
|
|
|
754
761
|
// "minPriceEp":5000,
|
|
755
762
|
// "maxPriceEp":10000000000,
|
|
756
763
|
// "maxOrderQty":1000000,
|
|
757
|
-
// "
|
|
764
|
+
// "description":"BTC/USD perpetual contracts are priced on the .BTC Index. Each contract is worth 1 USD. Funding fees are paid and received every 8 hours at UTC time: 00:00, 08:00 and 16:00.",
|
|
765
|
+
// "status":"Listed",
|
|
766
|
+
// "tipOrderQty":1000000,
|
|
767
|
+
// "listTime":1574650800000,
|
|
768
|
+
// "majorSymbol":true,
|
|
769
|
+
// "defaultLeverage":"-10",
|
|
770
|
+
// "fundingInterval":28800,
|
|
771
|
+
// "maxLeverage":100
|
|
758
772
|
// },
|
|
759
773
|
// {
|
|
760
774
|
// "symbol":"sBTCUSDT",
|
|
761
775
|
// "code":1001,
|
|
776
|
+
// "type":"Spot",
|
|
762
777
|
// "displaySymbol":"BTC / USDT",
|
|
763
778
|
// "quoteCurrency":"USDT",
|
|
764
779
|
// "priceScale":8,
|
|
765
780
|
// "ratioScale":8,
|
|
766
781
|
// "pricePrecision":2,
|
|
767
|
-
// "type":"Spot",
|
|
768
782
|
// "baseCurrency":"BTC",
|
|
769
783
|
// "baseTickSize":"0.000001 BTC",
|
|
770
784
|
// "baseTickSizeEv":100,
|
|
771
785
|
// "quoteTickSize":"0.01 USDT",
|
|
772
786
|
// "quoteTickSizeEv":1000000,
|
|
787
|
+
// "baseQtyPrecision":6,
|
|
788
|
+
// "quoteQtyPrecision":2,
|
|
773
789
|
// "minOrderValue":"10 USDT",
|
|
774
790
|
// "minOrderValueEv":1000000000,
|
|
775
791
|
// "maxBaseOrderSize":"1000 BTC",
|
|
@@ -780,14 +796,51 @@ class phemex extends phemex$1 {
|
|
|
780
796
|
// "defaultTakerFeeEr":100000,
|
|
781
797
|
// "defaultMakerFee":"0.001",
|
|
782
798
|
// "defaultMakerFeeEr":100000,
|
|
783
|
-
// "
|
|
784
|
-
// "quoteQtyPrecision":2,
|
|
799
|
+
// "description":"BTCUSDT is a BTC/USDT spot trading pair. Minimum order value is 1 USDT",
|
|
785
800
|
// "status":"Listed",
|
|
786
801
|
// "tipOrderQty":2,
|
|
787
|
-
// "
|
|
802
|
+
// "listTime":1589338800000,
|
|
803
|
+
// "buyPriceUpperLimitPct":110,
|
|
804
|
+
// "sellPriceLowerLimitPct":90,
|
|
788
805
|
// "leverage":5
|
|
789
806
|
// },
|
|
790
807
|
// ],
|
|
808
|
+
// "perpProductsV2":[
|
|
809
|
+
// {
|
|
810
|
+
// "symbol":"BTCUSDT",
|
|
811
|
+
// "code":41541,
|
|
812
|
+
// "type":"PerpetualV2",
|
|
813
|
+
// "displaySymbol":"BTC / USDT",
|
|
814
|
+
// "indexSymbol":".BTCUSDT",
|
|
815
|
+
// "markSymbol":".MBTCUSDT",
|
|
816
|
+
// "fundingRateSymbol":".BTCUSDTFR",
|
|
817
|
+
// "fundingRate8hSymbol":".BTCUSDTFR8H",
|
|
818
|
+
// "contractUnderlyingAssets":"BTC",
|
|
819
|
+
// "settleCurrency":"USDT",
|
|
820
|
+
// "quoteCurrency":"USDT",
|
|
821
|
+
// "tickSize":"0.1",
|
|
822
|
+
// "priceScale":0,
|
|
823
|
+
// "ratioScale":0,
|
|
824
|
+
// "pricePrecision":1,
|
|
825
|
+
// "baseCurrency":"BTC",
|
|
826
|
+
// "description":"BTC/USDT perpetual contracts are priced on the .BTCUSDT Index. Each contract is worth 1 BTC. Funding fees are paid and received every 8 hours at UTC time: 00:00, 08:00 and 16:00.",
|
|
827
|
+
// "status":"Listed",
|
|
828
|
+
// "tipOrderQty":0,
|
|
829
|
+
// "listTime":1668225600000,
|
|
830
|
+
// "majorSymbol":true,
|
|
831
|
+
// "defaultLeverage":"-10",
|
|
832
|
+
// "fundingInterval":28800,
|
|
833
|
+
// "maxLeverage":100,
|
|
834
|
+
// "maxOrderQtyRq":"1000",
|
|
835
|
+
// "maxPriceRp":"2000000000",
|
|
836
|
+
// "minOrderValueRv":"1",
|
|
837
|
+
// "minPriceRp":"1000.0",
|
|
838
|
+
// "qtyPrecision":3,
|
|
839
|
+
// "qtyStepSize":"0.001",
|
|
840
|
+
// "tipOrderQtyRq":"200",
|
|
841
|
+
// "maxOpenPosLeverage":100.0
|
|
842
|
+
// },
|
|
843
|
+
// ],
|
|
791
844
|
// "riskLimits":[
|
|
792
845
|
// {
|
|
793
846
|
// "symbol":"BTCUSD",
|
|
@@ -803,7 +856,25 @@ class phemex extends phemex$1 {
|
|
|
803
856
|
// {"initialMargin":"1.0%","initialMarginEr":1000000,"options":[1,2,3,5,10,25,50,100]},
|
|
804
857
|
// {"initialMargin":"1.5%","initialMarginEr":1500000,"options":[1,2,3,5,10,25,50,66]},
|
|
805
858
|
// {"initialMargin":"2.0%","initialMarginEr":2000000,"options":[1,2,3,5,10,25,33,50]},
|
|
806
|
-
// ]
|
|
859
|
+
// ],
|
|
860
|
+
// "riskLimitsV2":[
|
|
861
|
+
// {
|
|
862
|
+
// "symbol":"BTCUSDT",
|
|
863
|
+
// "steps":"2000K",
|
|
864
|
+
// "riskLimits":[
|
|
865
|
+
// {"limit":2000000,"initialMarginRr":"0.01","maintenanceMarginRr":"0.005"},,
|
|
866
|
+
// {"limit":4000000,"initialMarginRr":"0.015","maintenanceMarginRr":"0.0075"},
|
|
867
|
+
// {"limit":6000000,"initialMarginRr":"0.02","maintenanceMarginRr":"0.01"},
|
|
868
|
+
// ]
|
|
869
|
+
// },
|
|
870
|
+
// ],
|
|
871
|
+
// "leveragesV2":[
|
|
872
|
+
// {"options":[1.0,2.0,3.0,5.0,10.0,25.0,50.0,100.0],"initialMarginRr":"0.01"},
|
|
873
|
+
// {"options":[1.0,2.0,3.0,5.0,10.0,25.0,50.0,66.67],"initialMarginRr":"0.015"},
|
|
874
|
+
// {"options":[1.0,2.0,3.0,5.0,10.0,25.0,33.0,50.0],"initialMarginRr":"0.02"},
|
|
875
|
+
// ],
|
|
876
|
+
// "ratioScale":8,
|
|
877
|
+
// "md5Checksum":"5c6604814d3c1bafbe602c3d11a7e8bf",
|
|
807
878
|
// }
|
|
808
879
|
// }
|
|
809
880
|
//
|
|
@@ -845,8 +916,12 @@ class phemex extends phemex$1 {
|
|
|
845
916
|
// }
|
|
846
917
|
//
|
|
847
918
|
const v2ProductsData = this.safeValue(v2Products, 'data', {});
|
|
848
|
-
|
|
849
|
-
const
|
|
919
|
+
let products = this.safeValue(v2ProductsData, 'products', []);
|
|
920
|
+
const perpetualProductsV2 = this.safeValue(v2ProductsData, 'perpProductsV2', []);
|
|
921
|
+
products = this.arrayConcat(products, perpetualProductsV2);
|
|
922
|
+
let riskLimits = this.safeValue(v2ProductsData, 'riskLimits', []);
|
|
923
|
+
const riskLimitsV2 = this.safeValue(v2ProductsData, 'riskLimitsV2', []);
|
|
924
|
+
riskLimits = this.arrayConcat(riskLimits, riskLimitsV2);
|
|
850
925
|
const currencies = this.safeValue(v2ProductsData, 'currencies', []);
|
|
851
926
|
const riskLimitsById = this.indexBy(riskLimits, 'symbol');
|
|
852
927
|
const v1ProductsById = this.indexBy(v1ProductsData, 'symbol');
|
|
@@ -882,7 +957,7 @@ class phemex extends phemex$1 {
|
|
|
882
957
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
883
958
|
* @returns {object} an associative dictionary of currencies
|
|
884
959
|
*/
|
|
885
|
-
const response = await this.
|
|
960
|
+
const response = await this.v2GetPublicProducts(params);
|
|
886
961
|
//
|
|
887
962
|
// {
|
|
888
963
|
// "code":0,
|
|
@@ -890,9 +965,9 @@ class phemex extends phemex$1 {
|
|
|
890
965
|
// "data":{
|
|
891
966
|
// ...,
|
|
892
967
|
// "currencies":[
|
|
893
|
-
// {"currency":"BTC","valueScale":8,"minValueEv":1,"maxValueEv":5000000000000000000,"
|
|
894
|
-
// {"currency":"USD","valueScale":4,"minValueEv":1,"maxValueEv":
|
|
895
|
-
// {"currency":"USDT","valueScale":8,"minValueEv":1,"maxValueEv":5000000000000000000,"
|
|
968
|
+
// {"currency":"BTC","name":"Bitcoin","code":1,"valueScale":8,"minValueEv":1,"maxValueEv":5000000000000000000,"needAddrTag":0,"status":"Listed","displayCurrency":"BTC","inAssetsDisplay":1,"perpetual":0,"stableCoin":0,"assetsPrecision":8},
|
|
969
|
+
// {"currency":"USD","name":"USD","code":2,"valueScale":4,"minValueEv":1,"maxValueEv":5000000000000000000,"needAddrTag":0,"status":"Listed","displayCurrency":"USD","inAssetsDisplay":1,"perpetual":0,"stableCoin":0,"assetsPrecision":2},
|
|
970
|
+
// {"currency":"USDT","name":"TetherUS","code":3,"valueScale":8,"minValueEv":1,"maxValueEv":5000000000000000000,"needAddrTag":0,"status":"Listed","displayCurrency":"USDT","inAssetsDisplay":1,"perpetual":2,"stableCoin":1,"assetsPrecision":8},
|
|
896
971
|
// ],
|
|
897
972
|
// ...
|
|
898
973
|
// }
|
|
@@ -905,6 +980,7 @@ class phemex extends phemex$1 {
|
|
|
905
980
|
const id = this.safeString(currency, 'currency');
|
|
906
981
|
const name = this.safeString(currency, 'name');
|
|
907
982
|
const code = this.safeCurrencyCode(id);
|
|
983
|
+
const status = this.safeString(currency, 'status');
|
|
908
984
|
const valueScaleString = this.safeString(currency, 'valueScale');
|
|
909
985
|
const valueScale = parseInt(valueScaleString);
|
|
910
986
|
const minValueEv = this.safeString(currency, 'minValueEv');
|
|
@@ -923,7 +999,7 @@ class phemex extends phemex$1 {
|
|
|
923
999
|
'info': currency,
|
|
924
1000
|
'code': code,
|
|
925
1001
|
'name': name,
|
|
926
|
-
'active':
|
|
1002
|
+
'active': status === 'Listed',
|
|
927
1003
|
'deposit': undefined,
|
|
928
1004
|
'withdraw': undefined,
|
|
929
1005
|
'fee': undefined,
|