ccxt 4.4.96 → 4.4.98
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 +15 -15
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +2 -1
- package/dist/cjs/src/base/Exchange.js +63 -15
- package/dist/cjs/src/base/errors.js +8 -1
- package/dist/cjs/src/base/functions/number.js +30 -9
- package/dist/cjs/src/binance.js +95 -34
- package/dist/cjs/src/binancecoinm.js +5 -1
- package/dist/cjs/src/binanceus.js +3 -1
- package/dist/cjs/src/binanceusdm.js +3 -1
- package/dist/cjs/src/bingx.js +1 -1
- package/dist/cjs/src/bitget.js +18 -2
- package/dist/cjs/src/coinmetro.js +2 -3
- package/dist/cjs/src/cryptocom.js +77 -1
- package/dist/cjs/src/exmo.js +1 -1
- package/dist/cjs/src/foxbit.js +1 -1
- package/dist/cjs/src/gate.js +1 -2
- package/dist/cjs/src/hashkey.js +39 -0
- package/dist/cjs/src/hyperliquid.js +42 -27
- package/dist/cjs/src/independentreserve.js +35 -0
- package/dist/cjs/src/indodax.js +34 -0
- package/dist/cjs/src/kucoin.js +2 -1
- package/dist/cjs/src/latoken.js +42 -0
- package/dist/cjs/src/luno.js +36 -0
- package/dist/cjs/src/mercado.js +34 -0
- package/dist/cjs/src/mexc.js +3 -25
- package/dist/cjs/src/ndax.js +8 -0
- package/dist/cjs/src/okx.js +1 -0
- package/dist/cjs/src/phemex.js +36 -31
- package/dist/cjs/src/pro/binancecoinm.js +3 -1
- package/dist/cjs/src/pro/binanceus.js +3 -1
- package/dist/cjs/src/pro/binanceusdm.js +3 -1
- package/dist/cjs/src/pro/bybit.js +33 -0
- package/js/ccxt.d.ts +3 -3
- package/js/ccxt.js +3 -3
- package/js/src/abstract/binance.d.ts +3 -0
- package/js/src/abstract/binancecoinm.d.ts +3 -0
- package/js/src/abstract/binanceus.d.ts +3 -0
- package/js/src/abstract/binanceusdm.d.ts +3 -0
- package/js/src/abstract/phemex.d.ts +1 -0
- package/js/src/base/Exchange.d.ts +11 -3
- package/js/src/base/Exchange.js +63 -15
- package/js/src/base/errorHierarchy.d.ts +1 -0
- package/js/src/base/errorHierarchy.js +1 -0
- package/js/src/base/errors.d.ts +5 -1
- package/js/src/base/errors.js +8 -2
- package/js/src/base/functions/number.js +30 -9
- package/js/src/binance.d.ts +1 -0
- package/js/src/binance.js +95 -34
- package/js/src/binancecoinm.js +5 -1
- package/js/src/binanceus.js +3 -1
- package/js/src/binanceusdm.js +3 -1
- package/js/src/bingx.js +1 -1
- package/js/src/bitget.js +18 -2
- package/js/src/coinmetro.js +2 -3
- package/js/src/cryptocom.d.ts +12 -1
- package/js/src/cryptocom.js +77 -1
- package/js/src/exmo.js +1 -1
- package/js/src/foxbit.js +1 -1
- package/js/src/gate.js +1 -2
- package/js/src/hashkey.js +39 -0
- package/js/src/hyperliquid.js +42 -27
- package/js/src/independentreserve.js +35 -0
- package/js/src/indodax.js +34 -0
- package/js/src/kucoin.js +2 -1
- package/js/src/latoken.js +42 -0
- package/js/src/luno.js +36 -0
- package/js/src/mercado.js +34 -0
- package/js/src/mexc.d.ts +0 -1
- package/js/src/mexc.js +3 -25
- package/js/src/ndax.js +8 -0
- package/js/src/okx.js +2 -1
- package/js/src/phemex.js +36 -31
- package/js/src/pro/binancecoinm.js +3 -1
- package/js/src/pro/binanceus.js +3 -1
- package/js/src/pro/binanceusdm.js +3 -1
- package/js/src/pro/bybit.d.ts +11 -1
- package/js/src/pro/bybit.js +33 -0
- package/package.json +1 -2
package/js/src/latoken.js
CHANGED
|
@@ -29,6 +29,10 @@ export default class latoken extends Exchange {
|
|
|
29
29
|
'swap': false,
|
|
30
30
|
'future': false,
|
|
31
31
|
'option': false,
|
|
32
|
+
'addMargin': false,
|
|
33
|
+
'borrowCrossMargin': false,
|
|
34
|
+
'borrowIsolatedMargin': false,
|
|
35
|
+
'borrowMargin': false,
|
|
32
36
|
'cancelAllOrders': true,
|
|
33
37
|
'cancelOrder': true,
|
|
34
38
|
'closeAllPositions': false,
|
|
@@ -38,9 +42,14 @@ export default class latoken extends Exchange {
|
|
|
38
42
|
'createStopLimitOrder': true,
|
|
39
43
|
'createStopMarketOrder': false,
|
|
40
44
|
'createStopOrder': true,
|
|
45
|
+
'fetchAllGreeks': false,
|
|
41
46
|
'fetchBalance': true,
|
|
47
|
+
'fetchBorrowInterest': false,
|
|
48
|
+
'fetchBorrowRate': false,
|
|
42
49
|
'fetchBorrowRateHistories': false,
|
|
43
50
|
'fetchBorrowRateHistory': false,
|
|
51
|
+
'fetchBorrowRates': false,
|
|
52
|
+
'fetchBorrowRatesPerSymbol': false,
|
|
44
53
|
'fetchCrossBorrowRate': false,
|
|
45
54
|
'fetchCrossBorrowRates': false,
|
|
46
55
|
'fetchCurrencies': true,
|
|
@@ -55,12 +64,34 @@ export default class latoken extends Exchange {
|
|
|
55
64
|
'fetchFundingRate': false,
|
|
56
65
|
'fetchFundingRateHistory': false,
|
|
57
66
|
'fetchFundingRates': false,
|
|
67
|
+
'fetchGreeks': false,
|
|
68
|
+
'fetchIndexOHLCV': false,
|
|
58
69
|
'fetchIsolatedBorrowRate': false,
|
|
59
70
|
'fetchIsolatedBorrowRates': false,
|
|
71
|
+
'fetchIsolatedPositions': false,
|
|
72
|
+
'fetchLeverage': false,
|
|
73
|
+
'fetchLeverages': false,
|
|
74
|
+
'fetchLeverageTiers': false,
|
|
75
|
+
'fetchLiquidations': false,
|
|
76
|
+
'fetchLongShortRatio': false,
|
|
77
|
+
'fetchLongShortRatioHistory': false,
|
|
78
|
+
'fetchMarginAdjustmentHistory': false,
|
|
60
79
|
'fetchMarginMode': false,
|
|
80
|
+
'fetchMarginModes': false,
|
|
81
|
+
'fetchMarketLeverageTiers': false,
|
|
61
82
|
'fetchMarkets': true,
|
|
83
|
+
'fetchMarkOHLCV': false,
|
|
84
|
+
'fetchMarkPrice': false,
|
|
85
|
+
'fetchMarkPrices': false,
|
|
86
|
+
'fetchMyLiquidations': false,
|
|
87
|
+
'fetchMySettlementHistory': false,
|
|
62
88
|
'fetchMyTrades': true,
|
|
89
|
+
'fetchOpenInterest': false,
|
|
90
|
+
'fetchOpenInterestHistory': false,
|
|
91
|
+
'fetchOpenInterests': false,
|
|
63
92
|
'fetchOpenOrders': true,
|
|
93
|
+
'fetchOption': false,
|
|
94
|
+
'fetchOptionChain': false,
|
|
64
95
|
'fetchOrder': true,
|
|
65
96
|
'fetchOrderBook': true,
|
|
66
97
|
'fetchOrders': true,
|
|
@@ -71,6 +102,8 @@ export default class latoken extends Exchange {
|
|
|
71
102
|
'fetchPositionsForSymbol': false,
|
|
72
103
|
'fetchPositionsHistory': false,
|
|
73
104
|
'fetchPositionsRisk': false,
|
|
105
|
+
'fetchPremiumIndexOHLCV': false,
|
|
106
|
+
'fetchSettlementHistory': false,
|
|
74
107
|
'fetchTicker': true,
|
|
75
108
|
'fetchTickers': true,
|
|
76
109
|
'fetchTime': true,
|
|
@@ -80,6 +113,15 @@ export default class latoken extends Exchange {
|
|
|
80
113
|
'fetchTransactions': 'emulated',
|
|
81
114
|
'fetchTransfer': false,
|
|
82
115
|
'fetchTransfers': true,
|
|
116
|
+
'fetchUnderlyingAssets': false,
|
|
117
|
+
'fetchVolatilityHistory': false,
|
|
118
|
+
'reduceMargin': false,
|
|
119
|
+
'repayCrossMargin': false,
|
|
120
|
+
'repayIsolatedMargin': false,
|
|
121
|
+
'setLeverage': false,
|
|
122
|
+
'setMargin': false,
|
|
123
|
+
'setMarginMode': false,
|
|
124
|
+
'setPositionMode': false,
|
|
83
125
|
'transfer': true,
|
|
84
126
|
},
|
|
85
127
|
'urls': {
|
package/js/src/luno.js
CHANGED
|
@@ -32,6 +32,9 @@ export default class luno extends Exchange {
|
|
|
32
32
|
'future': false,
|
|
33
33
|
'option': false,
|
|
34
34
|
'addMargin': false,
|
|
35
|
+
'borrowCrossMargin': false,
|
|
36
|
+
'borrowIsolatedMargin': false,
|
|
37
|
+
'borrowMargin': false,
|
|
35
38
|
'cancelOrder': true,
|
|
36
39
|
'closeAllPositions': false,
|
|
37
40
|
'closePosition': false,
|
|
@@ -39,48 +42,81 @@ export default class luno extends Exchange {
|
|
|
39
42
|
'createOrder': true,
|
|
40
43
|
'createReduceOnlyOrder': false,
|
|
41
44
|
'fetchAccounts': true,
|
|
45
|
+
'fetchAllGreeks': false,
|
|
42
46
|
'fetchBalance': true,
|
|
47
|
+
'fetchBorrowInterest': false,
|
|
48
|
+
'fetchBorrowRate': false,
|
|
49
|
+
'fetchBorrowRateHistories': false,
|
|
43
50
|
'fetchBorrowRateHistory': false,
|
|
51
|
+
'fetchBorrowRates': false,
|
|
52
|
+
'fetchBorrowRatesPerSymbol': false,
|
|
44
53
|
'fetchClosedOrders': true,
|
|
45
54
|
'fetchCrossBorrowRate': false,
|
|
46
55
|
'fetchCrossBorrowRates': false,
|
|
47
56
|
'fetchCurrencies': true,
|
|
48
57
|
'fetchDepositAddress': true,
|
|
49
58
|
'fetchFundingHistory': false,
|
|
59
|
+
'fetchFundingInterval': false,
|
|
60
|
+
'fetchFundingIntervals': false,
|
|
50
61
|
'fetchFundingRate': false,
|
|
51
62
|
'fetchFundingRateHistory': false,
|
|
52
63
|
'fetchFundingRates': false,
|
|
64
|
+
'fetchGreeks': false,
|
|
53
65
|
'fetchIndexOHLCV': false,
|
|
54
66
|
'fetchIsolatedBorrowRate': false,
|
|
55
67
|
'fetchIsolatedBorrowRates': false,
|
|
68
|
+
'fetchIsolatedPositions': false,
|
|
56
69
|
'fetchLedger': true,
|
|
57
70
|
'fetchLeverage': false,
|
|
71
|
+
'fetchLeverages': false,
|
|
58
72
|
'fetchLeverageTiers': false,
|
|
73
|
+
'fetchLiquidations': false,
|
|
74
|
+
'fetchLongShortRatio': false,
|
|
75
|
+
'fetchLongShortRatioHistory': false,
|
|
76
|
+
'fetchMarginAdjustmentHistory': false,
|
|
59
77
|
'fetchMarginMode': false,
|
|
78
|
+
'fetchMarginModes': false,
|
|
79
|
+
'fetchMarketLeverageTiers': false,
|
|
60
80
|
'fetchMarkets': true,
|
|
61
81
|
'fetchMarkOHLCV': false,
|
|
82
|
+
'fetchMarkPrice': false,
|
|
83
|
+
'fetchMarkPrices': false,
|
|
84
|
+
'fetchMyLiquidations': false,
|
|
85
|
+
'fetchMySettlementHistory': false,
|
|
62
86
|
'fetchMyTrades': true,
|
|
63
87
|
'fetchOHLCV': true,
|
|
88
|
+
'fetchOpenInterest': false,
|
|
64
89
|
'fetchOpenInterestHistory': false,
|
|
90
|
+
'fetchOpenInterests': false,
|
|
65
91
|
'fetchOpenOrders': true,
|
|
92
|
+
'fetchOption': false,
|
|
93
|
+
'fetchOptionChain': false,
|
|
66
94
|
'fetchOrder': true,
|
|
67
95
|
'fetchOrderBook': true,
|
|
68
96
|
'fetchOrders': true,
|
|
69
97
|
'fetchPosition': false,
|
|
98
|
+
'fetchPositionForSymbolWs': false,
|
|
70
99
|
'fetchPositionHistory': false,
|
|
71
100
|
'fetchPositionMode': false,
|
|
72
101
|
'fetchPositions': false,
|
|
73
102
|
'fetchPositionsForSymbol': false,
|
|
103
|
+
'fetchPositionsForSymbolWs': false,
|
|
74
104
|
'fetchPositionsHistory': false,
|
|
75
105
|
'fetchPositionsRisk': false,
|
|
76
106
|
'fetchPremiumIndexOHLCV': false,
|
|
107
|
+
'fetchSettlementHistory': false,
|
|
77
108
|
'fetchTicker': true,
|
|
78
109
|
'fetchTickers': true,
|
|
79
110
|
'fetchTrades': true,
|
|
80
111
|
'fetchTradingFee': true,
|
|
81
112
|
'fetchTradingFees': false,
|
|
113
|
+
'fetchUnderlyingAssets': false,
|
|
114
|
+
'fetchVolatilityHistory': false,
|
|
82
115
|
'reduceMargin': false,
|
|
116
|
+
'repayCrossMargin': false,
|
|
117
|
+
'repayIsolatedMargin': false,
|
|
83
118
|
'setLeverage': false,
|
|
119
|
+
'setMargin': false,
|
|
84
120
|
'setMarginMode': false,
|
|
85
121
|
'setPositionMode': false,
|
|
86
122
|
},
|
package/js/src/mercado.js
CHANGED
|
@@ -31,6 +31,9 @@ export default class mercado extends Exchange {
|
|
|
31
31
|
'future': false,
|
|
32
32
|
'option': false,
|
|
33
33
|
'addMargin': false,
|
|
34
|
+
'borrowCrossMargin': false,
|
|
35
|
+
'borrowIsolatedMargin': false,
|
|
36
|
+
'borrowMargin': false,
|
|
34
37
|
'cancelOrder': true,
|
|
35
38
|
'closeAllPositions': false,
|
|
36
39
|
'closePosition': false,
|
|
@@ -40,29 +43,54 @@ export default class mercado extends Exchange {
|
|
|
40
43
|
'createStopLimitOrder': false,
|
|
41
44
|
'createStopMarketOrder': false,
|
|
42
45
|
'createStopOrder': false,
|
|
46
|
+
'fetchAllGreeks': false,
|
|
43
47
|
'fetchBalance': true,
|
|
48
|
+
'fetchBorrowInterest': false,
|
|
49
|
+
'fetchBorrowRate': false,
|
|
50
|
+
'fetchBorrowRateHistories': false,
|
|
44
51
|
'fetchBorrowRateHistory': false,
|
|
52
|
+
'fetchBorrowRates': false,
|
|
53
|
+
'fetchBorrowRatesPerSymbol': false,
|
|
45
54
|
'fetchCrossBorrowRate': false,
|
|
46
55
|
'fetchCrossBorrowRates': false,
|
|
47
56
|
'fetchDepositAddress': false,
|
|
48
57
|
'fetchDepositAddresses': false,
|
|
49
58
|
'fetchDepositAddressesByNetwork': false,
|
|
50
59
|
'fetchFundingHistory': false,
|
|
60
|
+
'fetchFundingInterval': false,
|
|
61
|
+
'fetchFundingIntervals': false,
|
|
51
62
|
'fetchFundingRate': false,
|
|
52
63
|
'fetchFundingRateHistory': false,
|
|
53
64
|
'fetchFundingRates': false,
|
|
65
|
+
'fetchGreeks': false,
|
|
54
66
|
'fetchIndexOHLCV': false,
|
|
55
67
|
'fetchIsolatedBorrowRate': false,
|
|
56
68
|
'fetchIsolatedBorrowRates': false,
|
|
69
|
+
'fetchIsolatedPositions': false,
|
|
57
70
|
'fetchLeverage': false,
|
|
71
|
+
'fetchLeverages': false,
|
|
58
72
|
'fetchLeverageTiers': false,
|
|
73
|
+
'fetchLiquidations': false,
|
|
74
|
+
'fetchLongShortRatio': false,
|
|
75
|
+
'fetchLongShortRatioHistory': false,
|
|
76
|
+
'fetchMarginAdjustmentHistory': false,
|
|
59
77
|
'fetchMarginMode': false,
|
|
78
|
+
'fetchMarginModes': false,
|
|
79
|
+
'fetchMarketLeverageTiers': false,
|
|
60
80
|
'fetchMarkets': true,
|
|
61
81
|
'fetchMarkOHLCV': false,
|
|
82
|
+
'fetchMarkPrice': false,
|
|
83
|
+
'fetchMarkPrices': false,
|
|
84
|
+
'fetchMyLiquidations': false,
|
|
85
|
+
'fetchMySettlementHistory': false,
|
|
62
86
|
'fetchMyTrades': 'emulated',
|
|
63
87
|
'fetchOHLCV': true,
|
|
88
|
+
'fetchOpenInterest': false,
|
|
64
89
|
'fetchOpenInterestHistory': false,
|
|
90
|
+
'fetchOpenInterests': false,
|
|
65
91
|
'fetchOpenOrders': true,
|
|
92
|
+
'fetchOption': false,
|
|
93
|
+
'fetchOptionChain': false,
|
|
66
94
|
'fetchOrder': true,
|
|
67
95
|
'fetchOrderBook': true,
|
|
68
96
|
'fetchOrders': true,
|
|
@@ -74,13 +102,19 @@ export default class mercado extends Exchange {
|
|
|
74
102
|
'fetchPositionsHistory': false,
|
|
75
103
|
'fetchPositionsRisk': false,
|
|
76
104
|
'fetchPremiumIndexOHLCV': false,
|
|
105
|
+
'fetchSettlementHistory': false,
|
|
77
106
|
'fetchTicker': true,
|
|
78
107
|
'fetchTickers': false,
|
|
79
108
|
'fetchTrades': true,
|
|
80
109
|
'fetchTradingFee': false,
|
|
81
110
|
'fetchTradingFees': false,
|
|
111
|
+
'fetchUnderlyingAssets': false,
|
|
112
|
+
'fetchVolatilityHistory': false,
|
|
82
113
|
'reduceMargin': false,
|
|
114
|
+
'repayCrossMargin': false,
|
|
115
|
+
'repayIsolatedMargin': false,
|
|
83
116
|
'setLeverage': false,
|
|
117
|
+
'setMargin': false,
|
|
84
118
|
'setMarginMode': false,
|
|
85
119
|
'setPositionMode': false,
|
|
86
120
|
'withdraw': true,
|
package/js/src/mexc.d.ts
CHANGED
|
@@ -100,7 +100,6 @@ export default class mexc extends Exchange {
|
|
|
100
100
|
*/
|
|
101
101
|
fetchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
102
102
|
parseTrade(trade: Dict, market?: Market): Trade;
|
|
103
|
-
syntheticTradeId(market?: any, timestamp?: any, side?: any, amount?: any, price?: any, orderType?: any, takerOrMaker?: any): string;
|
|
104
103
|
/**
|
|
105
104
|
* @method
|
|
106
105
|
* @name mexc#fetchOHLCV
|
package/js/src/mexc.js
CHANGED
|
@@ -437,6 +437,7 @@ export default class mexc extends Exchange {
|
|
|
437
437
|
},
|
|
438
438
|
},
|
|
439
439
|
},
|
|
440
|
+
'useCcxtTradeId': true,
|
|
440
441
|
'timeframes': {
|
|
441
442
|
'spot': {
|
|
442
443
|
'1m': '1m',
|
|
@@ -1717,8 +1718,8 @@ export default class mexc extends Exchange {
|
|
|
1717
1718
|
}
|
|
1718
1719
|
}
|
|
1719
1720
|
}
|
|
1720
|
-
if (id === undefined) {
|
|
1721
|
-
id = this.
|
|
1721
|
+
if (id === undefined && this.safeBool(this.options, 'useCcxtTradeId', true)) {
|
|
1722
|
+
id = this.createCcxtTradeId(timestamp, side, amountString, priceString, takerOrMaker);
|
|
1722
1723
|
}
|
|
1723
1724
|
return this.safeTrade({
|
|
1724
1725
|
'id': id,
|
|
@@ -1736,29 +1737,6 @@ export default class mexc extends Exchange {
|
|
|
1736
1737
|
'info': trade,
|
|
1737
1738
|
}, market);
|
|
1738
1739
|
}
|
|
1739
|
-
syntheticTradeId(market = undefined, timestamp = undefined, side = undefined, amount = undefined, price = undefined, orderType = undefined, takerOrMaker = undefined) {
|
|
1740
|
-
// TODO: can be unified method? this approach is being used by multiple exchanges (mexc, woo-coinsbit, dydx, ...)
|
|
1741
|
-
let id = '';
|
|
1742
|
-
if (timestamp !== undefined) {
|
|
1743
|
-
id = this.numberToString(timestamp) + '-' + this.safeString(market, 'id', '_');
|
|
1744
|
-
if (side !== undefined) {
|
|
1745
|
-
id += '-' + side;
|
|
1746
|
-
}
|
|
1747
|
-
if (amount !== undefined) {
|
|
1748
|
-
id += '-' + this.numberToString(amount);
|
|
1749
|
-
}
|
|
1750
|
-
if (price !== undefined) {
|
|
1751
|
-
id += '-' + this.numberToString(price);
|
|
1752
|
-
}
|
|
1753
|
-
if (takerOrMaker !== undefined) {
|
|
1754
|
-
id += '-' + takerOrMaker;
|
|
1755
|
-
}
|
|
1756
|
-
if (orderType !== undefined) {
|
|
1757
|
-
id += '-' + orderType;
|
|
1758
|
-
}
|
|
1759
|
-
}
|
|
1760
|
-
return id;
|
|
1761
|
-
}
|
|
1762
1740
|
/**
|
|
1763
1741
|
* @method
|
|
1764
1742
|
* @name mexc#fetchOHLCV
|
package/js/src/ndax.js
CHANGED
|
@@ -32,6 +32,9 @@ export default class ndax extends Exchange {
|
|
|
32
32
|
'future': false,
|
|
33
33
|
'option': false,
|
|
34
34
|
'addMargin': false,
|
|
35
|
+
'borrowCrossMargin': false,
|
|
36
|
+
'borrowIsolatedMargin': false,
|
|
37
|
+
'borrowMargin': false,
|
|
35
38
|
'cancelAllOrders': true,
|
|
36
39
|
'cancelOrder': true,
|
|
37
40
|
'closeAllPositions': false,
|
|
@@ -44,6 +47,7 @@ export default class ndax extends Exchange {
|
|
|
44
47
|
'createStopOrder': true,
|
|
45
48
|
'editOrder': true,
|
|
46
49
|
'fetchAccounts': true,
|
|
50
|
+
'fetchAllGreeks': false,
|
|
47
51
|
'fetchBalance': true,
|
|
48
52
|
'fetchBorrowInterest': false,
|
|
49
53
|
'fetchBorrowRate': false,
|
|
@@ -74,12 +78,15 @@ export default class ndax extends Exchange {
|
|
|
74
78
|
'fetchLeverages': false,
|
|
75
79
|
'fetchLeverageTiers': false,
|
|
76
80
|
'fetchLiquidations': false,
|
|
81
|
+
'fetchLongShortRatio': false,
|
|
82
|
+
'fetchLongShortRatioHistory': false,
|
|
77
83
|
'fetchMarginAdjustmentHistory': false,
|
|
78
84
|
'fetchMarginMode': false,
|
|
79
85
|
'fetchMarginModes': false,
|
|
80
86
|
'fetchMarketLeverageTiers': false,
|
|
81
87
|
'fetchMarkets': true,
|
|
82
88
|
'fetchMarkOHLCV': false,
|
|
89
|
+
'fetchMarkPrice': false,
|
|
83
90
|
'fetchMarkPrices': false,
|
|
84
91
|
'fetchMyLiquidations': false,
|
|
85
92
|
'fetchMySettlementHistory': false,
|
|
@@ -87,6 +94,7 @@ export default class ndax extends Exchange {
|
|
|
87
94
|
'fetchOHLCV': true,
|
|
88
95
|
'fetchOpenInterest': false,
|
|
89
96
|
'fetchOpenInterestHistory': false,
|
|
97
|
+
'fetchOpenInterests': false,
|
|
90
98
|
'fetchOpenOrders': true,
|
|
91
99
|
'fetchOption': false,
|
|
92
100
|
'fetchOptionChain': false,
|
package/js/src/okx.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
import Exchange from './abstract/okx.js';
|
|
9
|
-
import { ExchangeError, ExchangeNotAvailable, OnMaintenance, ArgumentsRequired, BadRequest, AccountSuspended, InvalidAddress, DDoSProtection, PermissionDenied, InsufficientFunds, InvalidNonce, InvalidOrder, OrderNotFound, AuthenticationError, RequestTimeout, BadSymbol, RateLimitExceeded, NetworkError, CancelPending, NotSupported, AccountNotEnabled, ContractUnavailable, ManualInteractionNeeded, OperationRejected } from './base/errors.js';
|
|
9
|
+
import { ExchangeError, ExchangeNotAvailable, OnMaintenance, ArgumentsRequired, BadRequest, AccountSuspended, InvalidAddress, DDoSProtection, PermissionDenied, InsufficientFunds, InvalidNonce, InvalidOrder, OrderNotFound, AuthenticationError, RequestTimeout, BadSymbol, RateLimitExceeded, NetworkError, CancelPending, NotSupported, AccountNotEnabled, ContractUnavailable, ManualInteractionNeeded, OperationRejected, RestrictedLocation } from './base/errors.js';
|
|
10
10
|
import { Precise } from './base/Precise.js';
|
|
11
11
|
import { TICK_SIZE } from './base/functions/number.js';
|
|
12
12
|
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
@@ -739,6 +739,7 @@ export default class okx extends Exchange {
|
|
|
739
739
|
'51137': InvalidOrder,
|
|
740
740
|
'51138': InvalidOrder,
|
|
741
741
|
'51139': InvalidOrder,
|
|
742
|
+
'51155': RestrictedLocation,
|
|
742
743
|
'51156': BadRequest,
|
|
743
744
|
'51159': BadRequest,
|
|
744
745
|
'51162': InvalidOrder,
|
package/js/src/phemex.js
CHANGED
|
@@ -268,6 +268,7 @@ export default class phemex extends Exchange {
|
|
|
268
268
|
// swap
|
|
269
269
|
'orders/replace': 1,
|
|
270
270
|
'g-orders/replace': 1,
|
|
271
|
+
'g-orders/create': 1,
|
|
271
272
|
'positions/leverage': 5,
|
|
272
273
|
'g-positions/leverage': 5,
|
|
273
274
|
'g-positions/switch-pos-mode-sync': 5,
|
|
@@ -1222,7 +1223,8 @@ export default class phemex extends Exchange {
|
|
|
1222
1223
|
// 'id': 123456789, // optional request id
|
|
1223
1224
|
};
|
|
1224
1225
|
let response = undefined;
|
|
1225
|
-
|
|
1226
|
+
const isStableSettled = (market['settle'] === 'USDT') || (market['settle'] === 'USDC');
|
|
1227
|
+
if (market['linear'] && isStableSettled) {
|
|
1226
1228
|
response = await this.v2GetMdV2Orderbook(this.extend(request, params));
|
|
1227
1229
|
}
|
|
1228
1230
|
else {
|
|
@@ -1366,7 +1368,8 @@ export default class phemex extends Exchange {
|
|
|
1366
1368
|
};
|
|
1367
1369
|
const until = this.safeInteger2(params, 'until', 'to');
|
|
1368
1370
|
params = this.omit(params, ['until']);
|
|
1369
|
-
const
|
|
1371
|
+
const isStableSettled = (market['settle'] === 'USDT') || (market['settle'] === 'USDC');
|
|
1372
|
+
const usesSpecialFromToEndpoint = ((market['linear'] || isStableSettled)) && ((since !== undefined) || (until !== undefined));
|
|
1370
1373
|
let maxLimit = 1000;
|
|
1371
1374
|
if (usesSpecialFromToEndpoint) {
|
|
1372
1375
|
maxLimit = 2000;
|
|
@@ -1376,7 +1379,7 @@ export default class phemex extends Exchange {
|
|
|
1376
1379
|
}
|
|
1377
1380
|
request['limit'] = Math.min(limit, maxLimit);
|
|
1378
1381
|
let response = undefined;
|
|
1379
|
-
if (market['linear'] ||
|
|
1382
|
+
if (market['linear'] || isStableSettled) {
|
|
1380
1383
|
if ((until !== undefined) || (since !== undefined)) {
|
|
1381
1384
|
const candleDuration = this.parseTimeframe(timeframe);
|
|
1382
1385
|
if (since !== undefined) {
|
|
@@ -1651,7 +1654,8 @@ export default class phemex extends Exchange {
|
|
|
1651
1654
|
// 'id': 123456789, // optional request id
|
|
1652
1655
|
};
|
|
1653
1656
|
let response = undefined;
|
|
1654
|
-
|
|
1657
|
+
const isStableSettled = (market['settle'] === 'USDT') || (market['settle'] === 'USDC');
|
|
1658
|
+
if (market['linear'] && isStableSettled) {
|
|
1655
1659
|
response = await this.v2GetMdV2Trade(this.extend(request, params));
|
|
1656
1660
|
}
|
|
1657
1661
|
else {
|
|
@@ -1896,7 +1900,7 @@ export default class phemex extends Exchange {
|
|
|
1896
1900
|
}
|
|
1897
1901
|
id = this.safeString2(trade, 'execId', 'execID');
|
|
1898
1902
|
orderId = this.safeString(trade, 'orderID');
|
|
1899
|
-
if (market['settle'] === 'USDT') {
|
|
1903
|
+
if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
|
|
1900
1904
|
const sideId = this.safeStringLower(trade, 'side');
|
|
1901
1905
|
if ((sideId === 'buy') || (sideId === 'sell')) {
|
|
1902
1906
|
side = sideId;
|
|
@@ -2671,6 +2675,7 @@ export default class phemex extends Exchange {
|
|
|
2671
2675
|
const stopLossDefined = (stopLoss !== undefined);
|
|
2672
2676
|
const takeProfit = this.safeValue(params, 'takeProfit');
|
|
2673
2677
|
const takeProfitDefined = (takeProfit !== undefined);
|
|
2678
|
+
const isStableSettled = (market['settle'] === 'USDT') || (market['settle'] === 'USDC');
|
|
2674
2679
|
if (clientOrderId === undefined) {
|
|
2675
2680
|
const brokerId = this.safeString(this.options, 'brokerId', 'CCXT123456');
|
|
2676
2681
|
if (brokerId !== undefined) {
|
|
@@ -2683,7 +2688,7 @@ export default class phemex extends Exchange {
|
|
|
2683
2688
|
}
|
|
2684
2689
|
const triggerPrice = this.safeStringN(params, ['stopPx', 'stopPrice', 'triggerPrice']);
|
|
2685
2690
|
if (triggerPrice !== undefined) {
|
|
2686
|
-
if (
|
|
2691
|
+
if (isStableSettled) {
|
|
2687
2692
|
request['stopPxRp'] = this.priceToPrecision(symbol, triggerPrice);
|
|
2688
2693
|
}
|
|
2689
2694
|
else {
|
|
@@ -2750,7 +2755,7 @@ export default class phemex extends Exchange {
|
|
|
2750
2755
|
}
|
|
2751
2756
|
posSide = this.capitalize(posSide);
|
|
2752
2757
|
request['posSide'] = posSide;
|
|
2753
|
-
if (
|
|
2758
|
+
if (isStableSettled) {
|
|
2754
2759
|
request['orderQtyRq'] = amount;
|
|
2755
2760
|
}
|
|
2756
2761
|
else {
|
|
@@ -2789,7 +2794,7 @@ export default class phemex extends Exchange {
|
|
|
2789
2794
|
if (stopLossTriggerPrice === undefined) {
|
|
2790
2795
|
throw new InvalidOrder(this.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order');
|
|
2791
2796
|
}
|
|
2792
|
-
if (
|
|
2797
|
+
if (isStableSettled) {
|
|
2793
2798
|
request['stopLossRp'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
|
|
2794
2799
|
}
|
|
2795
2800
|
else {
|
|
@@ -2809,7 +2814,7 @@ export default class phemex extends Exchange {
|
|
|
2809
2814
|
if (takeProfitTriggerPrice === undefined) {
|
|
2810
2815
|
throw new InvalidOrder(this.id + ' createOrder() requires a trigger price in params["takeProfit"]["triggerPrice"] for a take profit order');
|
|
2811
2816
|
}
|
|
2812
|
-
if (
|
|
2817
|
+
if (isStableSettled) {
|
|
2813
2818
|
request['takeProfitRp'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
|
|
2814
2819
|
}
|
|
2815
2820
|
else {
|
|
@@ -2827,7 +2832,7 @@ export default class phemex extends Exchange {
|
|
|
2827
2832
|
}
|
|
2828
2833
|
}
|
|
2829
2834
|
if ((type === 'Limit') || (type === 'StopLimit') || (type === 'LimitIfTouched')) {
|
|
2830
|
-
if (
|
|
2835
|
+
if (isStableSettled) {
|
|
2831
2836
|
request['priceRp'] = this.priceToPrecision(symbol, price);
|
|
2832
2837
|
}
|
|
2833
2838
|
else {
|
|
@@ -2837,7 +2842,7 @@ export default class phemex extends Exchange {
|
|
|
2837
2842
|
}
|
|
2838
2843
|
const takeProfitPrice = this.safeString(params, 'takeProfitPrice');
|
|
2839
2844
|
if (takeProfitPrice !== undefined) {
|
|
2840
|
-
if (
|
|
2845
|
+
if (isStableSettled) {
|
|
2841
2846
|
request['takeProfitRp'] = this.priceToPrecision(symbol, takeProfitPrice);
|
|
2842
2847
|
}
|
|
2843
2848
|
else {
|
|
@@ -2847,7 +2852,7 @@ export default class phemex extends Exchange {
|
|
|
2847
2852
|
}
|
|
2848
2853
|
const stopLossPrice = this.safeString(params, 'stopLossPrice');
|
|
2849
2854
|
if (stopLossPrice !== undefined) {
|
|
2850
|
-
if (
|
|
2855
|
+
if (isStableSettled) {
|
|
2851
2856
|
request['stopLossRp'] = this.priceToPrecision(symbol, stopLossPrice);
|
|
2852
2857
|
}
|
|
2853
2858
|
else {
|
|
@@ -2856,7 +2861,7 @@ export default class phemex extends Exchange {
|
|
|
2856
2861
|
params = this.omit(params, 'stopLossPrice');
|
|
2857
2862
|
}
|
|
2858
2863
|
let response = undefined;
|
|
2859
|
-
if (
|
|
2864
|
+
if (isStableSettled) {
|
|
2860
2865
|
response = await this.privatePostGOrders(this.extend(request, params));
|
|
2861
2866
|
}
|
|
2862
2867
|
else if (market['contract']) {
|
|
@@ -2967,7 +2972,7 @@ export default class phemex extends Exchange {
|
|
|
2967
2972
|
};
|
|
2968
2973
|
const clientOrderId = this.safeString2(params, 'clientOrderId', 'clOrdID');
|
|
2969
2974
|
params = this.omit(params, ['clientOrderId', 'clOrdID']);
|
|
2970
|
-
const
|
|
2975
|
+
const isStableSettled = (market['settle'] === 'USDT') || (market['settle'] === 'USDC');
|
|
2971
2976
|
if (clientOrderId !== undefined) {
|
|
2972
2977
|
request['clOrdID'] = clientOrderId;
|
|
2973
2978
|
}
|
|
@@ -2975,7 +2980,7 @@ export default class phemex extends Exchange {
|
|
|
2975
2980
|
request['orderID'] = id;
|
|
2976
2981
|
}
|
|
2977
2982
|
if (price !== undefined) {
|
|
2978
|
-
if (
|
|
2983
|
+
if (isStableSettled) {
|
|
2979
2984
|
request['priceRp'] = this.priceToPrecision(market['symbol'], price);
|
|
2980
2985
|
}
|
|
2981
2986
|
else {
|
|
@@ -2989,7 +2994,7 @@ export default class phemex extends Exchange {
|
|
|
2989
2994
|
request['baseQtyEV'] = finalQty;
|
|
2990
2995
|
}
|
|
2991
2996
|
else if (amount !== undefined) {
|
|
2992
|
-
if (
|
|
2997
|
+
if (isStableSettled) {
|
|
2993
2998
|
request['orderQtyRq'] = this.amountToPrecision(market['symbol'], amount);
|
|
2994
2999
|
}
|
|
2995
3000
|
else {
|
|
@@ -2998,7 +3003,7 @@ export default class phemex extends Exchange {
|
|
|
2998
3003
|
}
|
|
2999
3004
|
const triggerPrice = this.safeStringN(params, ['triggerPrice', 'stopPx', 'stopPrice']);
|
|
3000
3005
|
if (triggerPrice !== undefined) {
|
|
3001
|
-
if (
|
|
3006
|
+
if (isStableSettled) {
|
|
3002
3007
|
request['stopPxRp'] = this.priceToPrecision(symbol, triggerPrice);
|
|
3003
3008
|
}
|
|
3004
3009
|
else {
|
|
@@ -3007,7 +3012,7 @@ export default class phemex extends Exchange {
|
|
|
3007
3012
|
}
|
|
3008
3013
|
params = this.omit(params, ['triggerPrice', 'stopPx', 'stopPrice']);
|
|
3009
3014
|
let response = undefined;
|
|
3010
|
-
if (
|
|
3015
|
+
if (isStableSettled) {
|
|
3011
3016
|
const posSide = this.safeString(params, 'posSide');
|
|
3012
3017
|
if (posSide === undefined) {
|
|
3013
3018
|
request['posSide'] = 'Merged';
|
|
@@ -3052,7 +3057,7 @@ export default class phemex extends Exchange {
|
|
|
3052
3057
|
request['orderID'] = id;
|
|
3053
3058
|
}
|
|
3054
3059
|
let response = undefined;
|
|
3055
|
-
if (market['settle'] === 'USDT') {
|
|
3060
|
+
if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
|
|
3056
3061
|
const posSide = this.safeString(params, 'posSide');
|
|
3057
3062
|
if (posSide === undefined) {
|
|
3058
3063
|
request['posSide'] = 'Merged';
|
|
@@ -3094,7 +3099,7 @@ export default class phemex extends Exchange {
|
|
|
3094
3099
|
request['untriggerred'] = trigger;
|
|
3095
3100
|
}
|
|
3096
3101
|
let response = undefined;
|
|
3097
|
-
if (market['settle'] === 'USDT') {
|
|
3102
|
+
if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
|
|
3098
3103
|
response = await this.privateDeleteGOrdersAll(this.extend(request, params));
|
|
3099
3104
|
//
|
|
3100
3105
|
// {
|
|
@@ -3160,7 +3165,7 @@ export default class phemex extends Exchange {
|
|
|
3160
3165
|
request['orderID'] = id;
|
|
3161
3166
|
}
|
|
3162
3167
|
let response = undefined;
|
|
3163
|
-
if (market['settle'] === 'USDT') {
|
|
3168
|
+
if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
|
|
3164
3169
|
response = await this.privateGetApiDataGFuturesOrdersByOrderId(this.extend(request, params));
|
|
3165
3170
|
}
|
|
3166
3171
|
else if (market['spot']) {
|
|
@@ -3216,7 +3221,7 @@ export default class phemex extends Exchange {
|
|
|
3216
3221
|
request['limit'] = limit;
|
|
3217
3222
|
}
|
|
3218
3223
|
let response = undefined;
|
|
3219
|
-
if (market['settle'] === 'USDT') {
|
|
3224
|
+
if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
|
|
3220
3225
|
request['currency'] = market['settle'];
|
|
3221
3226
|
response = await this.privateGetExchangeOrderV2OrderList(this.extend(request, params));
|
|
3222
3227
|
}
|
|
@@ -3255,7 +3260,7 @@ export default class phemex extends Exchange {
|
|
|
3255
3260
|
};
|
|
3256
3261
|
let response = undefined;
|
|
3257
3262
|
try {
|
|
3258
|
-
if (market['settle'] === 'USDT') {
|
|
3263
|
+
if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
|
|
3259
3264
|
response = await this.privateGetGOrdersActiveList(this.extend(request, params));
|
|
3260
3265
|
}
|
|
3261
3266
|
else if (market['swap']) {
|
|
@@ -4120,8 +4125,8 @@ export default class phemex extends Exchange {
|
|
|
4120
4125
|
request['limit'] = limit;
|
|
4121
4126
|
}
|
|
4122
4127
|
let response = undefined;
|
|
4123
|
-
const
|
|
4124
|
-
if (
|
|
4128
|
+
const isStableSettled = market['settle'] === 'USDT' || market['settle'] === 'USDC';
|
|
4129
|
+
if (isStableSettled) {
|
|
4125
4130
|
response = await this.privateGetApiDataGFuturesFundingFees(this.extend(request, params));
|
|
4126
4131
|
}
|
|
4127
4132
|
else {
|
|
@@ -4174,8 +4179,8 @@ export default class phemex extends Exchange {
|
|
|
4174
4179
|
return value;
|
|
4175
4180
|
}
|
|
4176
4181
|
// it was confirmed by phemex support, that USDT contracts use direct amounts in funding fees, while USD & INVERSE needs 'valueScale'
|
|
4177
|
-
const
|
|
4178
|
-
if (!
|
|
4182
|
+
const isStableSettled = market['settle'] === 'USDT' || market['settle'] === 'USDC';
|
|
4183
|
+
if (!isStableSettled) {
|
|
4179
4184
|
const currency = this.safeCurrency(currencyCode);
|
|
4180
4185
|
const scale = this.safeString(currency['info'], 'valueScale');
|
|
4181
4186
|
const tickPrecision = this.parsePrecision(scale);
|
|
@@ -4374,8 +4379,8 @@ export default class phemex extends Exchange {
|
|
|
4374
4379
|
}
|
|
4375
4380
|
await this.loadMarkets();
|
|
4376
4381
|
const market = this.market(symbol);
|
|
4377
|
-
if (!market['swap'] || market['settle'] === 'USDT') {
|
|
4378
|
-
throw new BadSymbol(this.id + ' setMarginMode() supports swap (non USDT based) contracts only');
|
|
4382
|
+
if (!market['swap'] || market['settle'] === 'USDT' || market['settle'] === 'USDC') {
|
|
4383
|
+
throw new BadSymbol(this.id + ' setMarginMode() supports swap (non USDT/USDC based) contracts only');
|
|
4379
4384
|
}
|
|
4380
4385
|
marginMode = marginMode.toLowerCase();
|
|
4381
4386
|
if (marginMode !== 'isolated' && marginMode !== 'cross') {
|
|
@@ -4631,7 +4636,7 @@ export default class phemex extends Exchange {
|
|
|
4631
4636
|
'symbol': market['id'],
|
|
4632
4637
|
};
|
|
4633
4638
|
let response = undefined;
|
|
4634
|
-
if (market['settle'] === 'USDT') {
|
|
4639
|
+
if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
|
|
4635
4640
|
if (!isHedged && longLeverageRr === undefined && shortLeverageRr === undefined) {
|
|
4636
4641
|
request['leverageRr'] = leverage;
|
|
4637
4642
|
}
|
|
@@ -4873,7 +4878,7 @@ export default class phemex extends Exchange {
|
|
|
4873
4878
|
}
|
|
4874
4879
|
await this.loadMarkets();
|
|
4875
4880
|
const market = this.market(symbol);
|
|
4876
|
-
const isUsdtSettled = market['settle'] === 'USDT';
|
|
4881
|
+
const isUsdtSettled = market['settle'] === 'USDT' || market['settle'] === 'USDC';
|
|
4877
4882
|
if (!market['swap']) {
|
|
4878
4883
|
throw new BadRequest(this.id + ' fetchFundingRateHistory() supports swap contracts only');
|
|
4879
4884
|
}
|