ccxt 4.4.40 → 4.4.42
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 +4 -4
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ace.js +1 -1
- package/dist/cjs/src/alpaca.js +0 -1
- package/dist/cjs/src/ascendex.js +0 -1
- package/dist/cjs/src/base/Exchange.js +41 -19
- package/dist/cjs/src/bigone.js +0 -1
- package/dist/cjs/src/binance.js +27 -24
- package/dist/cjs/src/bingx.js +6 -1
- package/dist/cjs/src/bitfinex.js +124 -1
- package/dist/cjs/src/bitget.js +1 -0
- package/dist/cjs/src/bitmart.js +254 -1
- package/dist/cjs/src/blofin.js +16 -7
- package/dist/cjs/src/bybit.js +8 -8
- package/dist/cjs/src/cex.js +1 -1
- package/dist/cjs/src/coinbase.js +8 -9
- package/dist/cjs/src/coinbaseexchange.js +5 -6
- package/dist/cjs/src/coinbaseinternational.js +7 -8
- package/dist/cjs/src/coincatch.js +0 -1
- package/dist/cjs/src/coincheck.js +0 -1
- package/dist/cjs/src/coinex.js +91 -6
- package/dist/cjs/src/coinlist.js +3 -4
- package/dist/cjs/src/coinmate.js +1 -3
- package/dist/cjs/src/coinmetro.js +4 -5
- package/dist/cjs/src/coinone.js +0 -1
- package/dist/cjs/src/coinsph.js +7 -8
- package/dist/cjs/src/cryptocom.js +3 -0
- package/dist/cjs/src/currencycom.js +3 -4
- package/dist/cjs/src/defx.js +6 -7
- package/dist/cjs/src/deribit.js +1 -3
- package/dist/cjs/src/digifinex.js +0 -1
- package/dist/cjs/src/ellipx.js +0 -2
- package/dist/cjs/src/exmo.js +63 -6
- package/dist/cjs/src/gate.js +2 -3
- package/dist/cjs/src/gemini.js +4 -5
- package/dist/cjs/src/hashkey.js +79 -83
- package/dist/cjs/src/hitbtc.js +49 -5
- package/dist/cjs/src/hollaex.js +4 -6
- package/dist/cjs/src/htx.js +2 -4
- package/dist/cjs/src/huobijp.js +0 -1
- package/dist/cjs/src/hyperliquid.js +65 -1
- package/dist/cjs/src/idex.js +8 -8
- package/dist/cjs/src/independentreserve.js +0 -1
- package/dist/cjs/src/indodax.js +0 -1
- package/dist/cjs/src/kraken.js +192 -29
- package/dist/cjs/src/krakenfutures.js +75 -3
- package/dist/cjs/src/kucoin.js +7 -4
- package/dist/cjs/src/kucoinfutures.js +10 -9
- package/dist/cjs/src/kuna.js +1 -3
- package/dist/cjs/src/latoken.js +1 -3
- package/dist/cjs/src/lbank.js +0 -1
- package/dist/cjs/src/luno.js +0 -1
- package/dist/cjs/src/lykke.js +0 -1
- package/dist/cjs/src/mercado.js +0 -1
- package/dist/cjs/src/mexc.js +6 -7
- package/dist/cjs/src/ndax.js +1 -1
- package/dist/cjs/src/novadax.js +4 -6
- package/dist/cjs/src/oceanex.js +0 -1
- package/dist/cjs/src/okcoin.js +1 -3
- package/dist/cjs/src/okx.js +7 -4
- package/dist/cjs/src/onetrading.js +1 -3
- package/dist/cjs/src/p2b.js +1 -1
- package/dist/cjs/src/paradex.js +5 -7
- package/dist/cjs/src/phemex.js +8 -10
- package/dist/cjs/src/poloniex.js +1 -3
- package/dist/cjs/src/poloniexfutures.js +6 -6
- package/dist/cjs/src/probit.js +0 -1
- package/dist/cjs/src/timex.js +0 -1
- package/dist/cjs/src/tokocrypto.js +11 -14
- package/dist/cjs/src/tradeogre.js +1 -1
- package/dist/cjs/src/upbit.js +0 -1
- package/dist/cjs/src/wavesexchange.js +4 -5
- package/dist/cjs/src/whitebit.js +8 -9
- package/dist/cjs/src/woo.js +99 -13
- package/dist/cjs/src/woofipro.js +96 -15
- package/dist/cjs/src/xt.js +8 -4
- package/dist/cjs/src/yobit.js +0 -1
- package/dist/cjs/src/zaif.js +0 -1
- package/dist/cjs/src/zonda.js +1 -2
- package/js/ccxt.d.ts +3 -3
- package/js/ccxt.js +1 -1
- 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/bitmart.d.ts +2 -0
- package/js/src/abstract/okx.d.ts +5 -0
- package/js/src/ace.js +1 -1
- package/js/src/alpaca.js +0 -1
- package/js/src/ascendex.js +0 -1
- package/js/src/base/Exchange.d.ts +12 -9
- package/js/src/base/Exchange.js +41 -19
- package/js/src/base/types.d.ts +2 -0
- package/js/src/bigone.js +0 -1
- package/js/src/binance.js +27 -24
- package/js/src/bingx.js +6 -1
- package/js/src/bitfinex.d.ts +11 -1
- package/js/src/bitfinex.js +124 -1
- package/js/src/bitget.js +1 -0
- package/js/src/bitmart.d.ts +52 -1
- package/js/src/bitmart.js +254 -1
- package/js/src/blofin.d.ts +1 -1
- package/js/src/blofin.js +16 -7
- package/js/src/bybit.js +8 -8
- package/js/src/cex.js +1 -1
- package/js/src/coinbase.js +8 -9
- package/js/src/coinbaseexchange.js +5 -6
- package/js/src/coinbaseinternational.d.ts +1 -1
- package/js/src/coinbaseinternational.js +7 -8
- package/js/src/coincatch.js +0 -1
- package/js/src/coincheck.js +0 -1
- package/js/src/coinex.js +91 -6
- package/js/src/coinlist.js +3 -4
- package/js/src/coinmate.js +1 -3
- package/js/src/coinmetro.js +4 -5
- package/js/src/coinone.js +0 -1
- package/js/src/coinsph.js +7 -8
- package/js/src/cryptocom.js +3 -0
- package/js/src/currencycom.js +3 -4
- package/js/src/defx.js +6 -7
- package/js/src/deribit.js +1 -3
- package/js/src/digifinex.js +0 -1
- package/js/src/ellipx.js +0 -2
- package/js/src/exmo.d.ts +36 -1
- package/js/src/exmo.js +63 -6
- package/js/src/gate.d.ts +1 -1
- package/js/src/gate.js +2 -3
- package/js/src/gemini.js +4 -5
- package/js/src/hashkey.js +79 -83
- package/js/src/hitbtc.d.ts +11 -1
- package/js/src/hitbtc.js +49 -5
- package/js/src/hollaex.js +4 -6
- package/js/src/htx.js +2 -4
- package/js/src/huobijp.js +0 -1
- package/js/src/hyperliquid.d.ts +20 -1
- package/js/src/hyperliquid.js +65 -1
- package/js/src/idex.js +8 -8
- package/js/src/independentreserve.js +0 -1
- package/js/src/indodax.js +0 -1
- package/js/src/kraken.d.ts +15 -9
- package/js/src/kraken.js +192 -29
- package/js/src/krakenfutures.d.ts +2 -2
- package/js/src/krakenfutures.js +75 -3
- package/js/src/kucoin.js +7 -4
- package/js/src/kucoinfutures.d.ts +5 -4
- package/js/src/kucoinfutures.js +10 -9
- package/js/src/kuna.js +1 -3
- package/js/src/latoken.js +1 -3
- package/js/src/lbank.js +0 -1
- package/js/src/luno.js +0 -1
- package/js/src/lykke.js +0 -1
- package/js/src/mercado.js +0 -1
- package/js/src/mexc.js +6 -7
- package/js/src/ndax.js +1 -1
- package/js/src/novadax.js +4 -6
- package/js/src/oceanex.js +0 -1
- package/js/src/okcoin.js +1 -3
- package/js/src/okx.js +7 -4
- package/js/src/onetrading.js +1 -3
- package/js/src/p2b.js +1 -1
- package/js/src/paradex.d.ts +1 -1
- package/js/src/paradex.js +5 -7
- package/js/src/phemex.js +8 -10
- package/js/src/poloniex.js +1 -3
- package/js/src/poloniexfutures.js +6 -6
- package/js/src/probit.js +0 -1
- package/js/src/timex.js +0 -1
- package/js/src/tokocrypto.js +11 -14
- package/js/src/tradeogre.js +1 -1
- package/js/src/upbit.js +0 -1
- package/js/src/wavesexchange.d.ts +1 -1
- package/js/src/wavesexchange.js +4 -5
- package/js/src/whitebit.js +8 -9
- package/js/src/woo.d.ts +1 -1
- package/js/src/woo.js +99 -13
- package/js/src/woofipro.js +96 -15
- package/js/src/xt.d.ts +2 -1
- package/js/src/xt.js +8 -4
- package/js/src/yobit.js +0 -1
- package/js/src/zaif.js +0 -1
- package/js/src/zonda.js +1 -2
- package/package.json +2 -2
package/dist/cjs/ccxt.js
CHANGED
|
@@ -200,7 +200,7 @@ var xt$1 = require('./src/pro/xt.js');
|
|
|
200
200
|
|
|
201
201
|
//-----------------------------------------------------------------------------
|
|
202
202
|
// this is updated by vss.js when building
|
|
203
|
-
const version = '4.4.
|
|
203
|
+
const version = '4.4.42';
|
|
204
204
|
Exchange["default"].ccxtVersion = version;
|
|
205
205
|
const exchanges = {
|
|
206
206
|
'ace': ace,
|
package/dist/cjs/src/ace.js
CHANGED
package/dist/cjs/src/alpaca.js
CHANGED
|
@@ -1211,7 +1211,6 @@ class alpaca extends alpaca$1 {
|
|
|
1211
1211
|
'postOnly': undefined,
|
|
1212
1212
|
'side': this.safeString(order, 'side'),
|
|
1213
1213
|
'price': this.safeNumber(order, 'limit_price'),
|
|
1214
|
-
'stopPrice': this.safeNumber(order, 'stop_price'),
|
|
1215
1214
|
'triggerPrice': this.safeNumber(order, 'stop_price'),
|
|
1216
1215
|
'cost': undefined,
|
|
1217
1216
|
'average': this.safeNumber(order, 'filled_avg_price'),
|
package/dist/cjs/src/ascendex.js
CHANGED
|
@@ -1444,6 +1444,7 @@ class Exchange {
|
|
|
1444
1444
|
'fetchOHLCV': undefined,
|
|
1445
1445
|
'fetchOHLCVWs': undefined,
|
|
1446
1446
|
'fetchOpenInterest': undefined,
|
|
1447
|
+
'fetchOpenInterests': undefined,
|
|
1447
1448
|
'fetchOpenInterestHistory': undefined,
|
|
1448
1449
|
'fetchOpenOrder': undefined,
|
|
1449
1450
|
'fetchOpenOrders': undefined,
|
|
@@ -2278,6 +2279,9 @@ class Exchange {
|
|
|
2278
2279
|
async fetchOpenInterest(symbol, params = {}) {
|
|
2279
2280
|
throw new errors.NotSupported(this.id + ' fetchOpenInterest() is not supported yet');
|
|
2280
2281
|
}
|
|
2282
|
+
async fetchOpenInterests(symbols = undefined, params = {}) {
|
|
2283
|
+
throw new errors.NotSupported(this.id + ' fetchOpenInterests() is not supported yet');
|
|
2284
|
+
}
|
|
2281
2285
|
async signIn(params = {}) {
|
|
2282
2286
|
throw new errors.NotSupported(this.id + ' signIn() is not supported yet');
|
|
2283
2287
|
}
|
|
@@ -4462,10 +4466,15 @@ class Exchange {
|
|
|
4462
4466
|
}
|
|
4463
4467
|
handleOptionAndParams2(params, methodName1, optionName1, optionName2, defaultValue = undefined) {
|
|
4464
4468
|
let value = undefined;
|
|
4465
|
-
[value, params] = this.handleOptionAndParams(params, methodName1, optionName1
|
|
4469
|
+
[value, params] = this.handleOptionAndParams(params, methodName1, optionName1);
|
|
4470
|
+
if (value !== undefined) {
|
|
4471
|
+
// omit optionName2 too from params
|
|
4472
|
+
params = this.omit(params, optionName2);
|
|
4473
|
+
return [value, params];
|
|
4474
|
+
}
|
|
4466
4475
|
// if still undefined, try optionName2
|
|
4467
4476
|
let value2 = undefined;
|
|
4468
|
-
[value2, params] = this.handleOptionAndParams(params, methodName1, optionName2,
|
|
4477
|
+
[value2, params] = this.handleOptionAndParams(params, methodName1, optionName2, defaultValue);
|
|
4469
4478
|
return [value2, params];
|
|
4470
4479
|
}
|
|
4471
4480
|
handleOption(methodName, optionName, defaultValue = undefined) {
|
|
@@ -5520,52 +5529,52 @@ class Exchange {
|
|
|
5520
5529
|
const query = this.extend(params, { 'reduceOnly': true });
|
|
5521
5530
|
return await this.createOrderWs(symbol, type, side, amount, price, query);
|
|
5522
5531
|
}
|
|
5523
|
-
async createStopOrder(symbol, type, side, amount, price = undefined,
|
|
5532
|
+
async createStopOrder(symbol, type, side, amount, price = undefined, triggerPrice = undefined, params = {}) {
|
|
5524
5533
|
if (!this.has['createStopOrder']) {
|
|
5525
5534
|
throw new errors.NotSupported(this.id + ' createStopOrder() is not supported yet');
|
|
5526
5535
|
}
|
|
5527
|
-
if (
|
|
5536
|
+
if (triggerPrice === undefined) {
|
|
5528
5537
|
throw new errors.ArgumentsRequired(this.id + ' create_stop_order() requires a stopPrice argument');
|
|
5529
5538
|
}
|
|
5530
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5539
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5531
5540
|
return await this.createOrder(symbol, type, side, amount, price, query);
|
|
5532
5541
|
}
|
|
5533
|
-
async createStopOrderWs(symbol, type, side, amount, price = undefined,
|
|
5542
|
+
async createStopOrderWs(symbol, type, side, amount, price = undefined, triggerPrice = undefined, params = {}) {
|
|
5534
5543
|
if (!this.has['createStopOrderWs']) {
|
|
5535
5544
|
throw new errors.NotSupported(this.id + ' createStopOrderWs() is not supported yet');
|
|
5536
5545
|
}
|
|
5537
|
-
if (
|
|
5546
|
+
if (triggerPrice === undefined) {
|
|
5538
5547
|
throw new errors.ArgumentsRequired(this.id + ' createStopOrderWs() requires a stopPrice argument');
|
|
5539
5548
|
}
|
|
5540
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5549
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5541
5550
|
return await this.createOrderWs(symbol, type, side, amount, price, query);
|
|
5542
5551
|
}
|
|
5543
|
-
async createStopLimitOrder(symbol, side, amount, price,
|
|
5552
|
+
async createStopLimitOrder(symbol, side, amount, price, triggerPrice, params = {}) {
|
|
5544
5553
|
if (!this.has['createStopLimitOrder']) {
|
|
5545
5554
|
throw new errors.NotSupported(this.id + ' createStopLimitOrder() is not supported yet');
|
|
5546
5555
|
}
|
|
5547
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5556
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5548
5557
|
return await this.createOrder(symbol, 'limit', side, amount, price, query);
|
|
5549
5558
|
}
|
|
5550
|
-
async createStopLimitOrderWs(symbol, side, amount, price,
|
|
5559
|
+
async createStopLimitOrderWs(symbol, side, amount, price, triggerPrice, params = {}) {
|
|
5551
5560
|
if (!this.has['createStopLimitOrderWs']) {
|
|
5552
5561
|
throw new errors.NotSupported(this.id + ' createStopLimitOrderWs() is not supported yet');
|
|
5553
5562
|
}
|
|
5554
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5563
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5555
5564
|
return await this.createOrderWs(symbol, 'limit', side, amount, price, query);
|
|
5556
5565
|
}
|
|
5557
|
-
async createStopMarketOrder(symbol, side, amount,
|
|
5566
|
+
async createStopMarketOrder(symbol, side, amount, triggerPrice, params = {}) {
|
|
5558
5567
|
if (!this.has['createStopMarketOrder']) {
|
|
5559
5568
|
throw new errors.NotSupported(this.id + ' createStopMarketOrder() is not supported yet');
|
|
5560
5569
|
}
|
|
5561
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5570
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5562
5571
|
return await this.createOrder(symbol, 'market', side, amount, undefined, query);
|
|
5563
5572
|
}
|
|
5564
|
-
async createStopMarketOrderWs(symbol, side, amount,
|
|
5573
|
+
async createStopMarketOrderWs(symbol, side, amount, triggerPrice, params = {}) {
|
|
5565
5574
|
if (!this.has['createStopMarketOrderWs']) {
|
|
5566
5575
|
throw new errors.NotSupported(this.id + ' createStopMarketOrderWs() is not supported yet');
|
|
5567
5576
|
}
|
|
5568
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5577
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5569
5578
|
return await this.createOrderWs(symbol, 'market', side, amount, undefined, query);
|
|
5570
5579
|
}
|
|
5571
5580
|
safeCurrencyCode(currencyId, currency = undefined) {
|
|
@@ -5733,6 +5742,14 @@ class Exchange {
|
|
|
5733
5742
|
}
|
|
5734
5743
|
return result;
|
|
5735
5744
|
}
|
|
5745
|
+
parseOpenInterests(response, market = undefined) {
|
|
5746
|
+
const result = {};
|
|
5747
|
+
for (let i = 0; i < response.length; i++) {
|
|
5748
|
+
const parsed = this.parseOpenInterest(response[i], market);
|
|
5749
|
+
result[parsed['symbol']] = parsed;
|
|
5750
|
+
}
|
|
5751
|
+
return result;
|
|
5752
|
+
}
|
|
5736
5753
|
parseLongShortRatio(info, market = undefined) {
|
|
5737
5754
|
throw new errors.NotSupported(this.id + ' parseLongShortRatio() is not supported yet');
|
|
5738
5755
|
}
|
|
@@ -5842,7 +5859,7 @@ class Exchange {
|
|
|
5842
5859
|
parseOpenInterest(interest, market = undefined) {
|
|
5843
5860
|
throw new errors.NotSupported(this.id + ' parseOpenInterest () is not supported yet');
|
|
5844
5861
|
}
|
|
5845
|
-
|
|
5862
|
+
parseOpenInterestsHistory(response, market = undefined, since = undefined, limit = undefined) {
|
|
5846
5863
|
const interests = [];
|
|
5847
5864
|
for (let i = 0; i < response.length; i++) {
|
|
5848
5865
|
const entry = response[i];
|
|
@@ -6194,7 +6211,7 @@ class Exchange {
|
|
|
6194
6211
|
}
|
|
6195
6212
|
return [maxEntriesPerRequest, params];
|
|
6196
6213
|
}
|
|
6197
|
-
async fetchPaginatedCallDynamic(method, symbol = undefined, since = undefined, limit = undefined, params = {}, maxEntriesPerRequest = undefined) {
|
|
6214
|
+
async fetchPaginatedCallDynamic(method, symbol = undefined, since = undefined, limit = undefined, params = {}, maxEntriesPerRequest = undefined, removeRepeated = true) {
|
|
6198
6215
|
let maxCalls = undefined;
|
|
6199
6216
|
[maxCalls, params] = this.handleOptionAndParams(params, method, 'paginationCalls', 10);
|
|
6200
6217
|
let maxRetries = undefined;
|
|
@@ -6202,6 +6219,8 @@ class Exchange {
|
|
|
6202
6219
|
let paginationDirection = undefined;
|
|
6203
6220
|
[paginationDirection, params] = this.handleOptionAndParams(params, method, 'paginationDirection', 'backward');
|
|
6204
6221
|
let paginationTimestamp = undefined;
|
|
6222
|
+
let removeRepeatedOption = removeRepeated;
|
|
6223
|
+
[removeRepeatedOption, params] = this.handleOptionAndParams(params, method, 'removeRepeated', removeRepeated);
|
|
6205
6224
|
let calls = 0;
|
|
6206
6225
|
let result = [];
|
|
6207
6226
|
let errors$1 = 0;
|
|
@@ -6272,7 +6291,10 @@ class Exchange {
|
|
|
6272
6291
|
}
|
|
6273
6292
|
}
|
|
6274
6293
|
}
|
|
6275
|
-
|
|
6294
|
+
let uniqueResults = result;
|
|
6295
|
+
if (removeRepeatedOption) {
|
|
6296
|
+
uniqueResults = this.removeRepeatedElementsFromArray(result);
|
|
6297
|
+
}
|
|
6276
6298
|
const key = (method === 'fetchOHLCV') ? 0 : 'timestamp';
|
|
6277
6299
|
return this.filterBySinceLimit(uniqueResults, since, limit, key);
|
|
6278
6300
|
}
|
package/dist/cjs/src/bigone.js
CHANGED
package/dist/cjs/src/binance.js
CHANGED
|
@@ -634,6 +634,8 @@ class binance extends binance$1 {
|
|
|
634
634
|
'portfolio/bnb-transfer': 150,
|
|
635
635
|
'portfolio/repay-futures-switch': 150,
|
|
636
636
|
'portfolio/repay-futures-negative-balance': 150,
|
|
637
|
+
'portfolio/mint': 20,
|
|
638
|
+
'portfolio/redeem': 20,
|
|
637
639
|
'lending/auto-invest/plan/add': 0.1,
|
|
638
640
|
'lending/auto-invest/plan/edit': 0.1,
|
|
639
641
|
'lending/auto-invest/plan/edit-status': 0.1,
|
|
@@ -962,6 +964,7 @@ class binance extends binance$1 {
|
|
|
962
964
|
'block/order/orders': 5,
|
|
963
965
|
'block/order/execute': 5,
|
|
964
966
|
'block/user-trades': 5,
|
|
967
|
+
'blockTrades': 5,
|
|
965
968
|
},
|
|
966
969
|
'post': {
|
|
967
970
|
'order': 1,
|
|
@@ -5229,8 +5232,8 @@ class binance extends binance$1 {
|
|
|
5229
5232
|
uppercaseType = 'LIMIT_MAKER';
|
|
5230
5233
|
}
|
|
5231
5234
|
request['type'] = uppercaseType;
|
|
5232
|
-
const
|
|
5233
|
-
if (
|
|
5235
|
+
const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
|
|
5236
|
+
if (triggerPrice !== undefined) {
|
|
5234
5237
|
if (uppercaseType === 'MARKET') {
|
|
5235
5238
|
uppercaseType = 'STOP_LOSS';
|
|
5236
5239
|
}
|
|
@@ -5241,7 +5244,7 @@ class binance extends binance$1 {
|
|
|
5241
5244
|
const validOrderTypes = this.safeList(market['info'], 'orderTypes');
|
|
5242
5245
|
if (!this.inArray(uppercaseType, validOrderTypes)) {
|
|
5243
5246
|
if (initialUppercaseType !== uppercaseType) {
|
|
5244
|
-
throw new errors.InvalidOrder(this.id + '
|
|
5247
|
+
throw new errors.InvalidOrder(this.id + ' triggerPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders');
|
|
5245
5248
|
}
|
|
5246
5249
|
else {
|
|
5247
5250
|
throw new errors.InvalidOrder(this.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market');
|
|
@@ -5262,7 +5265,7 @@ class binance extends binance$1 {
|
|
|
5262
5265
|
request['newOrderRespType'] = this.safeValue(this.options['newOrderRespType'], type, 'RESULT'); // 'ACK' for order id, 'RESULT' for full order or 'FULL' for order with fills
|
|
5263
5266
|
let timeInForceIsRequired = false;
|
|
5264
5267
|
let priceIsRequired = false;
|
|
5265
|
-
let
|
|
5268
|
+
let triggerPriceIsRequired = false;
|
|
5266
5269
|
let quantityIsRequired = false;
|
|
5267
5270
|
if (uppercaseType === 'MARKET') {
|
|
5268
5271
|
const quoteOrderQty = this.safeBool(this.options, 'quoteOrderQty', true);
|
|
@@ -5292,12 +5295,12 @@ class binance extends binance$1 {
|
|
|
5292
5295
|
quantityIsRequired = true;
|
|
5293
5296
|
}
|
|
5294
5297
|
else if ((uppercaseType === 'STOP_LOSS') || (uppercaseType === 'TAKE_PROFIT')) {
|
|
5295
|
-
|
|
5298
|
+
triggerPriceIsRequired = true;
|
|
5296
5299
|
quantityIsRequired = true;
|
|
5297
5300
|
}
|
|
5298
5301
|
else if ((uppercaseType === 'STOP_LOSS_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
|
|
5299
5302
|
quantityIsRequired = true;
|
|
5300
|
-
|
|
5303
|
+
triggerPriceIsRequired = true;
|
|
5301
5304
|
priceIsRequired = true;
|
|
5302
5305
|
timeInForceIsRequired = true;
|
|
5303
5306
|
}
|
|
@@ -5317,12 +5320,12 @@ class binance extends binance$1 {
|
|
|
5317
5320
|
if (timeInForceIsRequired && (this.safeString(params, 'timeInForce') === undefined)) {
|
|
5318
5321
|
request['timeInForce'] = this.options['defaultTimeInForce']; // 'GTC' = Good To Cancel (default), 'IOC' = Immediate Or Cancel
|
|
5319
5322
|
}
|
|
5320
|
-
if (
|
|
5321
|
-
if (
|
|
5322
|
-
throw new errors.InvalidOrder(this.id + ' editOrder() requires a
|
|
5323
|
+
if (triggerPriceIsRequired) {
|
|
5324
|
+
if (triggerPrice === undefined) {
|
|
5325
|
+
throw new errors.InvalidOrder(this.id + ' editOrder() requires a triggerPrice extra param for a ' + type + ' order');
|
|
5323
5326
|
}
|
|
5324
5327
|
else {
|
|
5325
|
-
request['stopPrice'] = this.priceToPrecision(symbol,
|
|
5328
|
+
request['stopPrice'] = this.priceToPrecision(symbol, triggerPrice);
|
|
5326
5329
|
}
|
|
5327
5330
|
}
|
|
5328
5331
|
request['cancelReplaceMode'] = 'STOP_ON_FAILURE'; // If the cancel request fails, the new order placement will not be attempted.
|
|
@@ -5986,7 +5989,7 @@ class binance extends binance$1 {
|
|
|
5986
5989
|
type = 'limit';
|
|
5987
5990
|
}
|
|
5988
5991
|
const stopPriceString = this.safeString(order, 'stopPrice');
|
|
5989
|
-
const
|
|
5992
|
+
const triggerPrice = this.parseNumber(this.omitZero(stopPriceString));
|
|
5990
5993
|
const feeCost = this.safeNumber(order, 'fee');
|
|
5991
5994
|
let fee = undefined;
|
|
5992
5995
|
if (feeCost !== undefined) {
|
|
@@ -6011,7 +6014,7 @@ class binance extends binance$1 {
|
|
|
6011
6014
|
'reduceOnly': this.safeBool(order, 'reduceOnly'),
|
|
6012
6015
|
'side': side,
|
|
6013
6016
|
'price': price,
|
|
6014
|
-
'triggerPrice':
|
|
6017
|
+
'triggerPrice': triggerPrice,
|
|
6015
6018
|
'amount': amount,
|
|
6016
6019
|
'cost': cost,
|
|
6017
6020
|
'average': average,
|
|
@@ -6330,7 +6333,7 @@ class binance extends binance$1 {
|
|
|
6330
6333
|
const validOrderTypes = this.safeList(market['info'], 'orderTypes');
|
|
6331
6334
|
if (!this.inArray(uppercaseType, validOrderTypes)) {
|
|
6332
6335
|
if (initialUppercaseType !== uppercaseType) {
|
|
6333
|
-
throw new errors.InvalidOrder(this.id + '
|
|
6336
|
+
throw new errors.InvalidOrder(this.id + ' triggerPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders');
|
|
6334
6337
|
}
|
|
6335
6338
|
else {
|
|
6336
6339
|
throw new errors.InvalidOrder(this.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market');
|
|
@@ -6385,7 +6388,7 @@ class binance extends binance$1 {
|
|
|
6385
6388
|
const closePosition = this.safeBool(params, 'closePosition', false);
|
|
6386
6389
|
let timeInForceIsRequired = false;
|
|
6387
6390
|
let priceIsRequired = false;
|
|
6388
|
-
let
|
|
6391
|
+
let triggerPriceIsRequired = false;
|
|
6389
6392
|
let quantityIsRequired = false;
|
|
6390
6393
|
//
|
|
6391
6394
|
// spot/margin
|
|
@@ -6440,7 +6443,7 @@ class binance extends binance$1 {
|
|
|
6440
6443
|
quantityIsRequired = true;
|
|
6441
6444
|
}
|
|
6442
6445
|
else if ((uppercaseType === 'STOP_LOSS') || (uppercaseType === 'TAKE_PROFIT')) {
|
|
6443
|
-
|
|
6446
|
+
triggerPriceIsRequired = true;
|
|
6444
6447
|
quantityIsRequired = true;
|
|
6445
6448
|
if (market['linear'] || market['inverse']) {
|
|
6446
6449
|
priceIsRequired = true;
|
|
@@ -6448,7 +6451,7 @@ class binance extends binance$1 {
|
|
|
6448
6451
|
}
|
|
6449
6452
|
else if ((uppercaseType === 'STOP_LOSS_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
|
|
6450
6453
|
quantityIsRequired = true;
|
|
6451
|
-
|
|
6454
|
+
triggerPriceIsRequired = true;
|
|
6452
6455
|
priceIsRequired = true;
|
|
6453
6456
|
timeInForceIsRequired = true;
|
|
6454
6457
|
}
|
|
@@ -6458,14 +6461,14 @@ class binance extends binance$1 {
|
|
|
6458
6461
|
}
|
|
6459
6462
|
else if (uppercaseType === 'STOP') {
|
|
6460
6463
|
quantityIsRequired = true;
|
|
6461
|
-
|
|
6464
|
+
triggerPriceIsRequired = true;
|
|
6462
6465
|
priceIsRequired = true;
|
|
6463
6466
|
}
|
|
6464
6467
|
else if ((uppercaseType === 'STOP_MARKET') || (uppercaseType === 'TAKE_PROFIT_MARKET')) {
|
|
6465
6468
|
if (!closePosition) {
|
|
6466
6469
|
quantityIsRequired = true;
|
|
6467
6470
|
}
|
|
6468
|
-
|
|
6471
|
+
triggerPriceIsRequired = true;
|
|
6469
6472
|
}
|
|
6470
6473
|
else if (uppercaseType === 'TRAILING_STOP_MARKET') {
|
|
6471
6474
|
if (!closePosition) {
|
|
@@ -6504,16 +6507,16 @@ class binance extends binance$1 {
|
|
|
6504
6507
|
request['price'] = this.parseToNumeric(price); // some options don't have the precision available
|
|
6505
6508
|
}
|
|
6506
6509
|
}
|
|
6507
|
-
if (
|
|
6510
|
+
if (triggerPriceIsRequired) {
|
|
6508
6511
|
if (market['contract']) {
|
|
6509
6512
|
if (stopPrice === undefined) {
|
|
6510
|
-
throw new errors.InvalidOrder(this.id + ' createOrder() requires a
|
|
6513
|
+
throw new errors.InvalidOrder(this.id + ' createOrder() requires a triggerPrice extra param for a ' + type + ' order');
|
|
6511
6514
|
}
|
|
6512
6515
|
}
|
|
6513
6516
|
else {
|
|
6514
6517
|
// check for delta price as well
|
|
6515
6518
|
if (trailingDelta === undefined && stopPrice === undefined && trailingPercent === undefined) {
|
|
6516
|
-
throw new errors.InvalidOrder(this.id + ' createOrder() requires a
|
|
6519
|
+
throw new errors.InvalidOrder(this.id + ' createOrder() requires a triggerPrice, trailingDelta or trailingPercent param for a ' + type + ' order');
|
|
6517
6520
|
}
|
|
6518
6521
|
}
|
|
6519
6522
|
if (stopPrice !== undefined) {
|
|
@@ -11637,7 +11640,7 @@ class binance extends binance$1 {
|
|
|
11637
11640
|
let paginate = false;
|
|
11638
11641
|
[paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');
|
|
11639
11642
|
if (paginate) {
|
|
11640
|
-
return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params);
|
|
11643
|
+
return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params, undefined, false);
|
|
11641
11644
|
}
|
|
11642
11645
|
let type = undefined;
|
|
11643
11646
|
let subType = undefined;
|
|
@@ -12819,7 +12822,7 @@ class binance extends binance$1 {
|
|
|
12819
12822
|
// ...
|
|
12820
12823
|
// ]
|
|
12821
12824
|
//
|
|
12822
|
-
return this.
|
|
12825
|
+
return this.parseOpenInterestsHistory(response, market, since, limit);
|
|
12823
12826
|
}
|
|
12824
12827
|
/**
|
|
12825
12828
|
* @method
|
|
@@ -12888,7 +12891,7 @@ class binance extends binance$1 {
|
|
|
12888
12891
|
//
|
|
12889
12892
|
if (market['option']) {
|
|
12890
12893
|
symbol = market['symbol'];
|
|
12891
|
-
const result = this.
|
|
12894
|
+
const result = this.parseOpenInterestsHistory(response, market);
|
|
12892
12895
|
for (let i = 0; i < result.length; i++) {
|
|
12893
12896
|
const item = result[i];
|
|
12894
12897
|
if (item['symbol'] === symbol) {
|
package/dist/cjs/src/bingx.js
CHANGED
|
@@ -48,6 +48,7 @@ class bingx extends bingx$1 {
|
|
|
48
48
|
'createTrailingAmountOrder': true,
|
|
49
49
|
'createTrailingPercentOrder': true,
|
|
50
50
|
'createTriggerOrder': true,
|
|
51
|
+
'editOrder': true,
|
|
51
52
|
'fetchBalance': true,
|
|
52
53
|
'fetchCanceledOrders': true,
|
|
53
54
|
'fetchClosedOrders': true,
|
|
@@ -70,6 +71,7 @@ class bingx extends bingx$1 {
|
|
|
70
71
|
'fetchMarkPrice': true,
|
|
71
72
|
'fetchMarkPrices': true,
|
|
72
73
|
'fetchMyLiquidations': true,
|
|
74
|
+
'fetchMyTrades': true,
|
|
73
75
|
'fetchOHLCV': true,
|
|
74
76
|
'fetchOpenInterest': true,
|
|
75
77
|
'fetchOpenOrders': true,
|
|
@@ -1037,7 +1039,7 @@ class bingx extends bingx$1 {
|
|
|
1037
1039
|
};
|
|
1038
1040
|
request['interval'] = this.safeString(this.timeframes, timeframe, timeframe);
|
|
1039
1041
|
if (since !== undefined) {
|
|
1040
|
-
request['startTime'] = since;
|
|
1042
|
+
request['startTime'] = Math.max(since - 1, 0);
|
|
1041
1043
|
}
|
|
1042
1044
|
if (limit !== undefined) {
|
|
1043
1045
|
request['limit'] = limit;
|
|
@@ -5596,6 +5598,9 @@ class bingx extends bingx$1 {
|
|
|
5596
5598
|
request['endTs'] = now;
|
|
5597
5599
|
}
|
|
5598
5600
|
if (market['spot']) {
|
|
5601
|
+
if (limit !== undefined) {
|
|
5602
|
+
request['limit'] = limit; // default 500, maximum 1000
|
|
5603
|
+
}
|
|
5599
5604
|
response = await this.spotV1PrivateGetTradeMyTrades(this.extend(request, params));
|
|
5600
5605
|
const data = this.safeDict(response, 'data', {});
|
|
5601
5606
|
fills = this.safeList(data, 'fills', []);
|
package/dist/cjs/src/bitfinex.js
CHANGED
|
@@ -82,6 +82,7 @@ class bitfinex extends bitfinex$1 {
|
|
|
82
82
|
'fetchOHLCV': true,
|
|
83
83
|
'fetchOpenInterest': true,
|
|
84
84
|
'fetchOpenInterestHistory': true,
|
|
85
|
+
'fetchOpenInterests': true,
|
|
85
86
|
'fetchOpenOrder': true,
|
|
86
87
|
'fetchOpenOrders': true,
|
|
87
88
|
'fetchOrder': true,
|
|
@@ -401,6 +402,75 @@ class bitfinex extends bitfinex$1 {
|
|
|
401
402
|
'TETHERUSE': 'ERC20',
|
|
402
403
|
},
|
|
403
404
|
},
|
|
405
|
+
'features': {
|
|
406
|
+
'default': {
|
|
407
|
+
'sandbox': false,
|
|
408
|
+
'createOrder': {
|
|
409
|
+
'marginMode': true,
|
|
410
|
+
'triggerPrice': true,
|
|
411
|
+
'triggerPriceType': undefined,
|
|
412
|
+
'triggerDirection': false,
|
|
413
|
+
'stopLossPrice': true,
|
|
414
|
+
'takeProfitPrice': true,
|
|
415
|
+
'attachedStopLossTakeProfit': undefined,
|
|
416
|
+
'timeInForce': {
|
|
417
|
+
'IOC': true,
|
|
418
|
+
'FOK': true,
|
|
419
|
+
'PO': true,
|
|
420
|
+
'GTD': false,
|
|
421
|
+
},
|
|
422
|
+
'hedged': false,
|
|
423
|
+
'trailing': true, // todo: unify
|
|
424
|
+
// todo: leverage unify
|
|
425
|
+
},
|
|
426
|
+
'createOrders': {
|
|
427
|
+
'max': 75,
|
|
428
|
+
},
|
|
429
|
+
'fetchMyTrades': {
|
|
430
|
+
'marginMode': false,
|
|
431
|
+
'limit': 2500,
|
|
432
|
+
'daysBack': undefined,
|
|
433
|
+
'untilDays': 100000, // todo: implement
|
|
434
|
+
},
|
|
435
|
+
'fetchOrder': {
|
|
436
|
+
'marginMode': false,
|
|
437
|
+
'trigger': false,
|
|
438
|
+
'trailing': false,
|
|
439
|
+
},
|
|
440
|
+
'fetchOpenOrders': {
|
|
441
|
+
'marginMode': false,
|
|
442
|
+
'limit': undefined,
|
|
443
|
+
'trigger': false,
|
|
444
|
+
'trailing': false,
|
|
445
|
+
},
|
|
446
|
+
'fetchOrders': undefined,
|
|
447
|
+
'fetchClosedOrders': {
|
|
448
|
+
'marginMode': false,
|
|
449
|
+
'limit': undefined,
|
|
450
|
+
'daysBackClosed': undefined,
|
|
451
|
+
'daysBackCanceled': undefined,
|
|
452
|
+
'untilDays': 100000,
|
|
453
|
+
'trigger': false,
|
|
454
|
+
'trailing': false,
|
|
455
|
+
},
|
|
456
|
+
'fetchOHLCV': {
|
|
457
|
+
'limit': 10000,
|
|
458
|
+
},
|
|
459
|
+
},
|
|
460
|
+
'spot': {
|
|
461
|
+
'extends': 'default',
|
|
462
|
+
},
|
|
463
|
+
'swap': {
|
|
464
|
+
'linear': {
|
|
465
|
+
'extends': 'default',
|
|
466
|
+
},
|
|
467
|
+
'inverse': undefined,
|
|
468
|
+
},
|
|
469
|
+
'future': {
|
|
470
|
+
'linear': undefined,
|
|
471
|
+
'inverse': undefined,
|
|
472
|
+
},
|
|
473
|
+
},
|
|
404
474
|
'exceptions': {
|
|
405
475
|
'exact': {
|
|
406
476
|
'11010': errors.RateLimitExceeded,
|
|
@@ -3245,6 +3315,59 @@ class bitfinex extends bitfinex$1 {
|
|
|
3245
3315
|
'previousFundingDatetime': undefined,
|
|
3246
3316
|
};
|
|
3247
3317
|
}
|
|
3318
|
+
/**
|
|
3319
|
+
* @method
|
|
3320
|
+
* @name bitfinex#fetchOpenInterests
|
|
3321
|
+
* @description Retrieves the open interest for a list of symbols
|
|
3322
|
+
* @see https://docs.bitfinex.com/reference/rest-public-derivatives-status
|
|
3323
|
+
* @param {string[]} [symbols] a list of unified CCXT market symbols
|
|
3324
|
+
* @param {object} [params] exchange specific parameters
|
|
3325
|
+
* @returns {object[]} a list of [open interest structures]{@link https://docs.ccxt.com/#/?id=open-interest-structure}
|
|
3326
|
+
*/
|
|
3327
|
+
async fetchOpenInterests(symbols = undefined, params = {}) {
|
|
3328
|
+
await this.loadMarkets();
|
|
3329
|
+
symbols = this.marketSymbols(symbols);
|
|
3330
|
+
let marketIds = ['ALL'];
|
|
3331
|
+
if (symbols !== undefined) {
|
|
3332
|
+
marketIds = this.marketIds(symbols);
|
|
3333
|
+
}
|
|
3334
|
+
const request = {
|
|
3335
|
+
'keys': marketIds.join(','),
|
|
3336
|
+
};
|
|
3337
|
+
const response = await this.publicGetStatusDeriv(this.extend(request, params));
|
|
3338
|
+
//
|
|
3339
|
+
// [
|
|
3340
|
+
// [
|
|
3341
|
+
// "tXRPF0:USTF0", // market id
|
|
3342
|
+
// 1706256986000, // millisecond timestamp
|
|
3343
|
+
// null,
|
|
3344
|
+
// 0.512705, // derivative mid price
|
|
3345
|
+
// 0.512395, // underlying spot mid price
|
|
3346
|
+
// null,
|
|
3347
|
+
// 37671483.04, // insurance fund balance
|
|
3348
|
+
// null,
|
|
3349
|
+
// 1706284800000, // timestamp of next funding
|
|
3350
|
+
// 0.00002353, // accrued funding for next period
|
|
3351
|
+
// 317, // next funding step
|
|
3352
|
+
// null,
|
|
3353
|
+
// 0, // current funding
|
|
3354
|
+
// null,
|
|
3355
|
+
// null,
|
|
3356
|
+
// 0.5123016, // mark price
|
|
3357
|
+
// null,
|
|
3358
|
+
// null,
|
|
3359
|
+
// 2233562.03115, // open interest in contracts
|
|
3360
|
+
// null,
|
|
3361
|
+
// null,
|
|
3362
|
+
// null,
|
|
3363
|
+
// 0.0005, // average spread without funding payment
|
|
3364
|
+
// 0.0025 // funding payment cap
|
|
3365
|
+
// ]
|
|
3366
|
+
// ]
|
|
3367
|
+
//
|
|
3368
|
+
const result = this.parseOpenInterests(response);
|
|
3369
|
+
return this.filterByArray(result, 'symbol', symbols);
|
|
3370
|
+
}
|
|
3248
3371
|
/**
|
|
3249
3372
|
* @method
|
|
3250
3373
|
* @name bitfinex#fetchOpenInterest
|
|
@@ -3356,7 +3479,7 @@ class bitfinex extends bitfinex$1 {
|
|
|
3356
3479
|
// ],
|
|
3357
3480
|
// ]
|
|
3358
3481
|
//
|
|
3359
|
-
return this.
|
|
3482
|
+
return this.parseOpenInterestsHistory(response, market, since, limit);
|
|
3360
3483
|
}
|
|
3361
3484
|
parseOpenInterest(interest, market = undefined) {
|
|
3362
3485
|
//
|
package/dist/cjs/src/bitget.js
CHANGED
|
@@ -1243,6 +1243,7 @@ class bitget extends bitget$1 {
|
|
|
1243
1243
|
'41103': errors.InvalidOrder,
|
|
1244
1244
|
'41114': errors.OnMaintenance,
|
|
1245
1245
|
'43011': errors.InvalidOrder,
|
|
1246
|
+
'43001': errors.OrderNotFound,
|
|
1246
1247
|
'43012': errors.InsufficientFunds,
|
|
1247
1248
|
'43025': errors.InvalidOrder,
|
|
1248
1249
|
'43115': errors.OnMaintenance,
|