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
|
@@ -3,7 +3,7 @@ import { // eslint-disable-line object-curly-newline
|
|
|
3
3
|
ExchangeError, AuthenticationError, DDoSProtection, RequestTimeout, ExchangeNotAvailable, RateLimitExceeded } from "./errors.js";
|
|
4
4
|
import WsClient from './ws/WsClient.js';
|
|
5
5
|
import { OrderBook as WsOrderBook, IndexedOrderBook, CountedOrderBook } from './ws/OrderBook.js';
|
|
6
|
-
import type { Market, Trade, Ticker, OHLCV, OHLCVC, Order, OrderBook, Balance, Balances, Dictionary, Transaction, DepositAddressResponse, Currency, MinMax, IndexType, Int, OrderType, OrderSide, Position, FundingRate, DepositWithdrawFeeNetwork, LedgerEntry, BorrowInterest, OpenInterest, LeverageTier, TransferEntry, FundingRateHistory, Liquidation, FundingHistory, OrderRequest, MarginMode, Tickers, Greeks, Option, OptionChain, Str, Num, MarketInterface, CurrencyInterface, BalanceAccount, MarginModes, MarketType, Leverage, Leverages, LastPrice, LastPrices, Account, Strings, MarginModification, TradingFeeInterface, Currencies, TradingFees, Conversion, CancellationRequest, IsolatedBorrowRate, IsolatedBorrowRates, CrossBorrowRates, CrossBorrowRate, Dict, FundingRates, LeverageTiers, Bool, int, DepositAddress, LongShortRatio } from './types.js';
|
|
6
|
+
import type { Market, Trade, Ticker, OHLCV, OHLCVC, Order, OrderBook, Balance, Balances, Dictionary, Transaction, DepositAddressResponse, Currency, MinMax, IndexType, Int, OrderType, OrderSide, Position, FundingRate, DepositWithdrawFeeNetwork, LedgerEntry, BorrowInterest, OpenInterest, LeverageTier, TransferEntry, FundingRateHistory, Liquidation, FundingHistory, OrderRequest, MarginMode, Tickers, Greeks, Option, OptionChain, Str, Num, MarketInterface, CurrencyInterface, BalanceAccount, MarginModes, MarketType, Leverage, Leverages, LastPrice, LastPrices, Account, Strings, MarginModification, TradingFeeInterface, Currencies, TradingFees, Conversion, CancellationRequest, IsolatedBorrowRate, IsolatedBorrowRates, CrossBorrowRates, CrossBorrowRate, Dict, FundingRates, LeverageTiers, Bool, int, DepositAddress, LongShortRatio, OpenInterests } from './types.js';
|
|
7
7
|
export type { Market, Trade, Fee, Ticker, OHLCV, OHLCVC, Order, OrderBook, Balance, Balances, Dictionary, Transaction, DepositAddressResponse, Currency, MinMax, IndexType, Int, Bool, OrderType, OrderSide, Position, LedgerEntry, BorrowInterest, OpenInterest, LeverageTier, TransferEntry, CrossBorrowRate, FundingRateHistory, Liquidation, FundingHistory, OrderRequest, MarginMode, Tickers, Greeks, Option, OptionChain, Str, Num, MarketInterface, CurrencyInterface, BalanceAccount, MarginModes, MarketType, Leverage, Leverages, LastPrice, LastPrices, Account, Strings, Conversion, DepositAddress, LongShortRatio } from './types.js';
|
|
8
8
|
import { ArrayCache, ArrayCacheByTimestamp } from './ws/Cache.js';
|
|
9
9
|
import { OrderBook as Ob } from './ws/OrderBook.js';
|
|
@@ -531,6 +531,7 @@ export default class Exchange {
|
|
|
531
531
|
fetchOHLCV: any;
|
|
532
532
|
fetchOHLCVWs: any;
|
|
533
533
|
fetchOpenInterest: any;
|
|
534
|
+
fetchOpenInterests: any;
|
|
534
535
|
fetchOpenInterestHistory: any;
|
|
535
536
|
fetchOpenOrder: any;
|
|
536
537
|
fetchOpenOrders: any;
|
|
@@ -815,6 +816,7 @@ export default class Exchange {
|
|
|
815
816
|
fetchDepositAddressesByNetwork(code: string, params?: {}): Promise<DepositAddress[]>;
|
|
816
817
|
fetchOpenInterestHistory(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OpenInterest[]>;
|
|
817
818
|
fetchOpenInterest(symbol: string, params?: {}): Promise<OpenInterest>;
|
|
819
|
+
fetchOpenInterests(symbols?: Strings, params?: {}): Promise<OpenInterests>;
|
|
818
820
|
signIn(params?: {}): Promise<{}>;
|
|
819
821
|
fetchPaymentMethods(params?: {}): Promise<{}>;
|
|
820
822
|
parseToInt(number: any): number;
|
|
@@ -1103,12 +1105,12 @@ export default class Exchange {
|
|
|
1103
1105
|
createPostOnlyOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
|
|
1104
1106
|
createReduceOnlyOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
|
|
1105
1107
|
createReduceOnlyOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
|
|
1106
|
-
createStopOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num,
|
|
1107
|
-
createStopOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num,
|
|
1108
|
-
createStopLimitOrder(symbol: string, side: OrderSide, amount: number, price: number,
|
|
1109
|
-
createStopLimitOrderWs(symbol: string, side: OrderSide, amount: number, price: number,
|
|
1110
|
-
createStopMarketOrder(symbol: string, side: OrderSide, amount: number,
|
|
1111
|
-
createStopMarketOrderWs(symbol: string, side: OrderSide, amount: number,
|
|
1108
|
+
createStopOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, triggerPrice?: Num, params?: {}): Promise<Order>;
|
|
1109
|
+
createStopOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, triggerPrice?: Num, params?: {}): Promise<Order>;
|
|
1110
|
+
createStopLimitOrder(symbol: string, side: OrderSide, amount: number, price: number, triggerPrice: number, params?: {}): Promise<Order>;
|
|
1111
|
+
createStopLimitOrderWs(symbol: string, side: OrderSide, amount: number, price: number, triggerPrice: number, params?: {}): Promise<Order>;
|
|
1112
|
+
createStopMarketOrder(symbol: string, side: OrderSide, amount: number, triggerPrice: number, params?: {}): Promise<Order>;
|
|
1113
|
+
createStopMarketOrderWs(symbol: string, side: OrderSide, amount: number, triggerPrice: number, params?: {}): Promise<Order>;
|
|
1112
1114
|
safeCurrencyCode(currencyId: Str, currency?: Currency): string;
|
|
1113
1115
|
filterBySymbolSinceLimit(array: any, symbol?: Str, since?: Int, limit?: Int, tail?: boolean): any;
|
|
1114
1116
|
filterByCurrencySinceLimit(array: any, code?: any, since?: Int, limit?: Int, tail?: boolean): any;
|
|
@@ -1124,6 +1126,7 @@ export default class Exchange {
|
|
|
1124
1126
|
safeSymbol(marketId: Str, market?: Market, delimiter?: Str, marketType?: Str): string;
|
|
1125
1127
|
parseFundingRate(contract: string, market?: Market): FundingRate;
|
|
1126
1128
|
parseFundingRates(response: any, market?: Market): FundingRates;
|
|
1129
|
+
parseOpenInterests(response: any, market?: Market): OpenInterests;
|
|
1127
1130
|
parseLongShortRatio(info: Dict, market?: Market): LongShortRatio;
|
|
1128
1131
|
parseLongShortRatioHistory(response: any, market?: any, since?: Int, limit?: Int): LongShortRatio[];
|
|
1129
1132
|
handleTriggerAndParams(params: any): any[];
|
|
@@ -1136,7 +1139,7 @@ export default class Exchange {
|
|
|
1136
1139
|
fetchTradingFee(symbol: string, params?: {}): Promise<TradingFeeInterface>;
|
|
1137
1140
|
fetchConvertCurrencies(params?: {}): Promise<Currencies>;
|
|
1138
1141
|
parseOpenInterest(interest: any, market?: Market): OpenInterest;
|
|
1139
|
-
|
|
1142
|
+
parseOpenInterestsHistory(response: any, market?: any, since?: Int, limit?: Int): OpenInterest[];
|
|
1140
1143
|
fetchFundingRate(symbol: string, params?: {}): Promise<FundingRate>;
|
|
1141
1144
|
fetchFundingInterval(symbol: string, params?: {}): Promise<FundingRate>;
|
|
1142
1145
|
fetchMarkOHLCV(symbol: any, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
@@ -1159,7 +1162,7 @@ export default class Exchange {
|
|
|
1159
1162
|
filterByArrayTickers(objects: any, key: IndexType, values?: any, indexed?: boolean): Dictionary<Ticker>;
|
|
1160
1163
|
createOHLCVObject(symbol: string, timeframe: string, data: any): Dictionary<Dictionary<OHLCV[]>>;
|
|
1161
1164
|
handleMaxEntriesPerRequestAndParams(method: string, maxEntriesPerRequest?: Int, params?: {}): [Int, any];
|
|
1162
|
-
fetchPaginatedCallDynamic(method: string, symbol?: Str, since?: Int, limit?: Int, params?: {}, maxEntriesPerRequest?: Int): Promise<any>;
|
|
1165
|
+
fetchPaginatedCallDynamic(method: string, symbol?: Str, since?: Int, limit?: Int, params?: {}, maxEntriesPerRequest?: Int, removeRepeated?: boolean): Promise<any>;
|
|
1163
1166
|
safeDeterministicCall(method: string, symbol?: Str, since?: Int, limit?: Int, timeframe?: Str, params?: {}): Promise<any>;
|
|
1164
1167
|
fetchPaginatedCallDeterministic(method: string, symbol?: Str, since?: Int, limit?: Int, timeframe?: Str, params?: {}, maxEntriesPerRequest?: any): Promise<any>;
|
|
1165
1168
|
fetchPaginatedCallCursor(method: string, symbol?: Str, since?: any, limit?: any, params?: {}, cursorReceived?: any, cursorSent?: any, cursorIncrement?: any, maxEntriesPerRequest?: any): Promise<any>;
|
package/js/src/base/Exchange.js
CHANGED
|
@@ -1427,6 +1427,7 @@ export default class Exchange {
|
|
|
1427
1427
|
'fetchOHLCV': undefined,
|
|
1428
1428
|
'fetchOHLCVWs': undefined,
|
|
1429
1429
|
'fetchOpenInterest': undefined,
|
|
1430
|
+
'fetchOpenInterests': undefined,
|
|
1430
1431
|
'fetchOpenInterestHistory': undefined,
|
|
1431
1432
|
'fetchOpenOrder': undefined,
|
|
1432
1433
|
'fetchOpenOrders': undefined,
|
|
@@ -2261,6 +2262,9 @@ export default class Exchange {
|
|
|
2261
2262
|
async fetchOpenInterest(symbol, params = {}) {
|
|
2262
2263
|
throw new NotSupported(this.id + ' fetchOpenInterest() is not supported yet');
|
|
2263
2264
|
}
|
|
2265
|
+
async fetchOpenInterests(symbols = undefined, params = {}) {
|
|
2266
|
+
throw new NotSupported(this.id + ' fetchOpenInterests() is not supported yet');
|
|
2267
|
+
}
|
|
2264
2268
|
async signIn(params = {}) {
|
|
2265
2269
|
throw new NotSupported(this.id + ' signIn() is not supported yet');
|
|
2266
2270
|
}
|
|
@@ -4445,10 +4449,15 @@ export default class Exchange {
|
|
|
4445
4449
|
}
|
|
4446
4450
|
handleOptionAndParams2(params, methodName1, optionName1, optionName2, defaultValue = undefined) {
|
|
4447
4451
|
let value = undefined;
|
|
4448
|
-
[value, params] = this.handleOptionAndParams(params, methodName1, optionName1
|
|
4452
|
+
[value, params] = this.handleOptionAndParams(params, methodName1, optionName1);
|
|
4453
|
+
if (value !== undefined) {
|
|
4454
|
+
// omit optionName2 too from params
|
|
4455
|
+
params = this.omit(params, optionName2);
|
|
4456
|
+
return [value, params];
|
|
4457
|
+
}
|
|
4449
4458
|
// if still undefined, try optionName2
|
|
4450
4459
|
let value2 = undefined;
|
|
4451
|
-
[value2, params] = this.handleOptionAndParams(params, methodName1, optionName2,
|
|
4460
|
+
[value2, params] = this.handleOptionAndParams(params, methodName1, optionName2, defaultValue);
|
|
4452
4461
|
return [value2, params];
|
|
4453
4462
|
}
|
|
4454
4463
|
handleOption(methodName, optionName, defaultValue = undefined) {
|
|
@@ -5503,52 +5512,52 @@ export default class Exchange {
|
|
|
5503
5512
|
const query = this.extend(params, { 'reduceOnly': true });
|
|
5504
5513
|
return await this.createOrderWs(symbol, type, side, amount, price, query);
|
|
5505
5514
|
}
|
|
5506
|
-
async createStopOrder(symbol, type, side, amount, price = undefined,
|
|
5515
|
+
async createStopOrder(symbol, type, side, amount, price = undefined, triggerPrice = undefined, params = {}) {
|
|
5507
5516
|
if (!this.has['createStopOrder']) {
|
|
5508
5517
|
throw new NotSupported(this.id + ' createStopOrder() is not supported yet');
|
|
5509
5518
|
}
|
|
5510
|
-
if (
|
|
5519
|
+
if (triggerPrice === undefined) {
|
|
5511
5520
|
throw new ArgumentsRequired(this.id + ' create_stop_order() requires a stopPrice argument');
|
|
5512
5521
|
}
|
|
5513
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5522
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5514
5523
|
return await this.createOrder(symbol, type, side, amount, price, query);
|
|
5515
5524
|
}
|
|
5516
|
-
async createStopOrderWs(symbol, type, side, amount, price = undefined,
|
|
5525
|
+
async createStopOrderWs(symbol, type, side, amount, price = undefined, triggerPrice = undefined, params = {}) {
|
|
5517
5526
|
if (!this.has['createStopOrderWs']) {
|
|
5518
5527
|
throw new NotSupported(this.id + ' createStopOrderWs() is not supported yet');
|
|
5519
5528
|
}
|
|
5520
|
-
if (
|
|
5529
|
+
if (triggerPrice === undefined) {
|
|
5521
5530
|
throw new ArgumentsRequired(this.id + ' createStopOrderWs() requires a stopPrice argument');
|
|
5522
5531
|
}
|
|
5523
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5532
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5524
5533
|
return await this.createOrderWs(symbol, type, side, amount, price, query);
|
|
5525
5534
|
}
|
|
5526
|
-
async createStopLimitOrder(symbol, side, amount, price,
|
|
5535
|
+
async createStopLimitOrder(symbol, side, amount, price, triggerPrice, params = {}) {
|
|
5527
5536
|
if (!this.has['createStopLimitOrder']) {
|
|
5528
5537
|
throw new NotSupported(this.id + ' createStopLimitOrder() is not supported yet');
|
|
5529
5538
|
}
|
|
5530
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5539
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5531
5540
|
return await this.createOrder(symbol, 'limit', side, amount, price, query);
|
|
5532
5541
|
}
|
|
5533
|
-
async createStopLimitOrderWs(symbol, side, amount, price,
|
|
5542
|
+
async createStopLimitOrderWs(symbol, side, amount, price, triggerPrice, params = {}) {
|
|
5534
5543
|
if (!this.has['createStopLimitOrderWs']) {
|
|
5535
5544
|
throw new NotSupported(this.id + ' createStopLimitOrderWs() is not supported yet');
|
|
5536
5545
|
}
|
|
5537
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5546
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5538
5547
|
return await this.createOrderWs(symbol, 'limit', side, amount, price, query);
|
|
5539
5548
|
}
|
|
5540
|
-
async createStopMarketOrder(symbol, side, amount,
|
|
5549
|
+
async createStopMarketOrder(symbol, side, amount, triggerPrice, params = {}) {
|
|
5541
5550
|
if (!this.has['createStopMarketOrder']) {
|
|
5542
5551
|
throw new NotSupported(this.id + ' createStopMarketOrder() is not supported yet');
|
|
5543
5552
|
}
|
|
5544
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5553
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5545
5554
|
return await this.createOrder(symbol, 'market', side, amount, undefined, query);
|
|
5546
5555
|
}
|
|
5547
|
-
async createStopMarketOrderWs(symbol, side, amount,
|
|
5556
|
+
async createStopMarketOrderWs(symbol, side, amount, triggerPrice, params = {}) {
|
|
5548
5557
|
if (!this.has['createStopMarketOrderWs']) {
|
|
5549
5558
|
throw new NotSupported(this.id + ' createStopMarketOrderWs() is not supported yet');
|
|
5550
5559
|
}
|
|
5551
|
-
const query = this.extend(params, { 'stopPrice':
|
|
5560
|
+
const query = this.extend(params, { 'stopPrice': triggerPrice });
|
|
5552
5561
|
return await this.createOrderWs(symbol, 'market', side, amount, undefined, query);
|
|
5553
5562
|
}
|
|
5554
5563
|
safeCurrencyCode(currencyId, currency = undefined) {
|
|
@@ -5716,6 +5725,14 @@ export default class Exchange {
|
|
|
5716
5725
|
}
|
|
5717
5726
|
return result;
|
|
5718
5727
|
}
|
|
5728
|
+
parseOpenInterests(response, market = undefined) {
|
|
5729
|
+
const result = {};
|
|
5730
|
+
for (let i = 0; i < response.length; i++) {
|
|
5731
|
+
const parsed = this.parseOpenInterest(response[i], market);
|
|
5732
|
+
result[parsed['symbol']] = parsed;
|
|
5733
|
+
}
|
|
5734
|
+
return result;
|
|
5735
|
+
}
|
|
5719
5736
|
parseLongShortRatio(info, market = undefined) {
|
|
5720
5737
|
throw new NotSupported(this.id + ' parseLongShortRatio() is not supported yet');
|
|
5721
5738
|
}
|
|
@@ -5825,7 +5842,7 @@ export default class Exchange {
|
|
|
5825
5842
|
parseOpenInterest(interest, market = undefined) {
|
|
5826
5843
|
throw new NotSupported(this.id + ' parseOpenInterest () is not supported yet');
|
|
5827
5844
|
}
|
|
5828
|
-
|
|
5845
|
+
parseOpenInterestsHistory(response, market = undefined, since = undefined, limit = undefined) {
|
|
5829
5846
|
const interests = [];
|
|
5830
5847
|
for (let i = 0; i < response.length; i++) {
|
|
5831
5848
|
const entry = response[i];
|
|
@@ -6177,7 +6194,7 @@ export default class Exchange {
|
|
|
6177
6194
|
}
|
|
6178
6195
|
return [maxEntriesPerRequest, params];
|
|
6179
6196
|
}
|
|
6180
|
-
async fetchPaginatedCallDynamic(method, symbol = undefined, since = undefined, limit = undefined, params = {}, maxEntriesPerRequest = undefined) {
|
|
6197
|
+
async fetchPaginatedCallDynamic(method, symbol = undefined, since = undefined, limit = undefined, params = {}, maxEntriesPerRequest = undefined, removeRepeated = true) {
|
|
6181
6198
|
let maxCalls = undefined;
|
|
6182
6199
|
[maxCalls, params] = this.handleOptionAndParams(params, method, 'paginationCalls', 10);
|
|
6183
6200
|
let maxRetries = undefined;
|
|
@@ -6185,6 +6202,8 @@ export default class Exchange {
|
|
|
6185
6202
|
let paginationDirection = undefined;
|
|
6186
6203
|
[paginationDirection, params] = this.handleOptionAndParams(params, method, 'paginationDirection', 'backward');
|
|
6187
6204
|
let paginationTimestamp = undefined;
|
|
6205
|
+
let removeRepeatedOption = removeRepeated;
|
|
6206
|
+
[removeRepeatedOption, params] = this.handleOptionAndParams(params, method, 'removeRepeated', removeRepeated);
|
|
6188
6207
|
let calls = 0;
|
|
6189
6208
|
let result = [];
|
|
6190
6209
|
let errors = 0;
|
|
@@ -6255,7 +6274,10 @@ export default class Exchange {
|
|
|
6255
6274
|
}
|
|
6256
6275
|
}
|
|
6257
6276
|
}
|
|
6258
|
-
|
|
6277
|
+
let uniqueResults = result;
|
|
6278
|
+
if (removeRepeatedOption) {
|
|
6279
|
+
uniqueResults = this.removeRepeatedElementsFromArray(result);
|
|
6280
|
+
}
|
|
6259
6281
|
const key = (method === 'fetchOHLCV') ? 0 : 'timestamp';
|
|
6260
6282
|
return this.filterBySinceLimit(uniqueResults, since, limit, key);
|
|
6261
6283
|
}
|
package/js/src/base/types.d.ts
CHANGED
package/js/src/bigone.js
CHANGED
|
@@ -1378,7 +1378,6 @@ export default class bigone extends Exchange {
|
|
|
1378
1378
|
'postOnly': this.safeBool(order, 'post_only'),
|
|
1379
1379
|
'side': side,
|
|
1380
1380
|
'price': price,
|
|
1381
|
-
'stopPrice': triggerPrice,
|
|
1382
1381
|
'triggerPrice': triggerPrice,
|
|
1383
1382
|
'amount': amount,
|
|
1384
1383
|
'cost': cost,
|
package/js/src/binance.js
CHANGED
|
@@ -637,6 +637,8 @@ export default class binance extends Exchange {
|
|
|
637
637
|
'portfolio/bnb-transfer': 150,
|
|
638
638
|
'portfolio/repay-futures-switch': 150,
|
|
639
639
|
'portfolio/repay-futures-negative-balance': 150,
|
|
640
|
+
'portfolio/mint': 20,
|
|
641
|
+
'portfolio/redeem': 20,
|
|
640
642
|
'lending/auto-invest/plan/add': 0.1,
|
|
641
643
|
'lending/auto-invest/plan/edit': 0.1,
|
|
642
644
|
'lending/auto-invest/plan/edit-status': 0.1,
|
|
@@ -965,6 +967,7 @@ export default class binance extends Exchange {
|
|
|
965
967
|
'block/order/orders': 5,
|
|
966
968
|
'block/order/execute': 5,
|
|
967
969
|
'block/user-trades': 5,
|
|
970
|
+
'blockTrades': 5,
|
|
968
971
|
},
|
|
969
972
|
'post': {
|
|
970
973
|
'order': 1,
|
|
@@ -5232,8 +5235,8 @@ export default class binance extends Exchange {
|
|
|
5232
5235
|
uppercaseType = 'LIMIT_MAKER';
|
|
5233
5236
|
}
|
|
5234
5237
|
request['type'] = uppercaseType;
|
|
5235
|
-
const
|
|
5236
|
-
if (
|
|
5238
|
+
const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
|
|
5239
|
+
if (triggerPrice !== undefined) {
|
|
5237
5240
|
if (uppercaseType === 'MARKET') {
|
|
5238
5241
|
uppercaseType = 'STOP_LOSS';
|
|
5239
5242
|
}
|
|
@@ -5244,7 +5247,7 @@ export default class binance extends Exchange {
|
|
|
5244
5247
|
const validOrderTypes = this.safeList(market['info'], 'orderTypes');
|
|
5245
5248
|
if (!this.inArray(uppercaseType, validOrderTypes)) {
|
|
5246
5249
|
if (initialUppercaseType !== uppercaseType) {
|
|
5247
|
-
throw new InvalidOrder(this.id + '
|
|
5250
|
+
throw new InvalidOrder(this.id + ' triggerPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders');
|
|
5248
5251
|
}
|
|
5249
5252
|
else {
|
|
5250
5253
|
throw new InvalidOrder(this.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market');
|
|
@@ -5265,7 +5268,7 @@ export default class binance extends Exchange {
|
|
|
5265
5268
|
request['newOrderRespType'] = this.safeValue(this.options['newOrderRespType'], type, 'RESULT'); // 'ACK' for order id, 'RESULT' for full order or 'FULL' for order with fills
|
|
5266
5269
|
let timeInForceIsRequired = false;
|
|
5267
5270
|
let priceIsRequired = false;
|
|
5268
|
-
let
|
|
5271
|
+
let triggerPriceIsRequired = false;
|
|
5269
5272
|
let quantityIsRequired = false;
|
|
5270
5273
|
if (uppercaseType === 'MARKET') {
|
|
5271
5274
|
const quoteOrderQty = this.safeBool(this.options, 'quoteOrderQty', true);
|
|
@@ -5295,12 +5298,12 @@ export default class binance extends Exchange {
|
|
|
5295
5298
|
quantityIsRequired = true;
|
|
5296
5299
|
}
|
|
5297
5300
|
else if ((uppercaseType === 'STOP_LOSS') || (uppercaseType === 'TAKE_PROFIT')) {
|
|
5298
|
-
|
|
5301
|
+
triggerPriceIsRequired = true;
|
|
5299
5302
|
quantityIsRequired = true;
|
|
5300
5303
|
}
|
|
5301
5304
|
else if ((uppercaseType === 'STOP_LOSS_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
|
|
5302
5305
|
quantityIsRequired = true;
|
|
5303
|
-
|
|
5306
|
+
triggerPriceIsRequired = true;
|
|
5304
5307
|
priceIsRequired = true;
|
|
5305
5308
|
timeInForceIsRequired = true;
|
|
5306
5309
|
}
|
|
@@ -5320,12 +5323,12 @@ export default class binance extends Exchange {
|
|
|
5320
5323
|
if (timeInForceIsRequired && (this.safeString(params, 'timeInForce') === undefined)) {
|
|
5321
5324
|
request['timeInForce'] = this.options['defaultTimeInForce']; // 'GTC' = Good To Cancel (default), 'IOC' = Immediate Or Cancel
|
|
5322
5325
|
}
|
|
5323
|
-
if (
|
|
5324
|
-
if (
|
|
5325
|
-
throw new InvalidOrder(this.id + ' editOrder() requires a
|
|
5326
|
+
if (triggerPriceIsRequired) {
|
|
5327
|
+
if (triggerPrice === undefined) {
|
|
5328
|
+
throw new InvalidOrder(this.id + ' editOrder() requires a triggerPrice extra param for a ' + type + ' order');
|
|
5326
5329
|
}
|
|
5327
5330
|
else {
|
|
5328
|
-
request['stopPrice'] = this.priceToPrecision(symbol,
|
|
5331
|
+
request['stopPrice'] = this.priceToPrecision(symbol, triggerPrice);
|
|
5329
5332
|
}
|
|
5330
5333
|
}
|
|
5331
5334
|
request['cancelReplaceMode'] = 'STOP_ON_FAILURE'; // If the cancel request fails, the new order placement will not be attempted.
|
|
@@ -5989,7 +5992,7 @@ export default class binance extends Exchange {
|
|
|
5989
5992
|
type = 'limit';
|
|
5990
5993
|
}
|
|
5991
5994
|
const stopPriceString = this.safeString(order, 'stopPrice');
|
|
5992
|
-
const
|
|
5995
|
+
const triggerPrice = this.parseNumber(this.omitZero(stopPriceString));
|
|
5993
5996
|
const feeCost = this.safeNumber(order, 'fee');
|
|
5994
5997
|
let fee = undefined;
|
|
5995
5998
|
if (feeCost !== undefined) {
|
|
@@ -6014,7 +6017,7 @@ export default class binance extends Exchange {
|
|
|
6014
6017
|
'reduceOnly': this.safeBool(order, 'reduceOnly'),
|
|
6015
6018
|
'side': side,
|
|
6016
6019
|
'price': price,
|
|
6017
|
-
'triggerPrice':
|
|
6020
|
+
'triggerPrice': triggerPrice,
|
|
6018
6021
|
'amount': amount,
|
|
6019
6022
|
'cost': cost,
|
|
6020
6023
|
'average': average,
|
|
@@ -6333,7 +6336,7 @@ export default class binance extends Exchange {
|
|
|
6333
6336
|
const validOrderTypes = this.safeList(market['info'], 'orderTypes');
|
|
6334
6337
|
if (!this.inArray(uppercaseType, validOrderTypes)) {
|
|
6335
6338
|
if (initialUppercaseType !== uppercaseType) {
|
|
6336
|
-
throw new InvalidOrder(this.id + '
|
|
6339
|
+
throw new InvalidOrder(this.id + ' triggerPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders');
|
|
6337
6340
|
}
|
|
6338
6341
|
else {
|
|
6339
6342
|
throw new InvalidOrder(this.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market');
|
|
@@ -6388,7 +6391,7 @@ export default class binance extends Exchange {
|
|
|
6388
6391
|
const closePosition = this.safeBool(params, 'closePosition', false);
|
|
6389
6392
|
let timeInForceIsRequired = false;
|
|
6390
6393
|
let priceIsRequired = false;
|
|
6391
|
-
let
|
|
6394
|
+
let triggerPriceIsRequired = false;
|
|
6392
6395
|
let quantityIsRequired = false;
|
|
6393
6396
|
//
|
|
6394
6397
|
// spot/margin
|
|
@@ -6443,7 +6446,7 @@ export default class binance extends Exchange {
|
|
|
6443
6446
|
quantityIsRequired = true;
|
|
6444
6447
|
}
|
|
6445
6448
|
else if ((uppercaseType === 'STOP_LOSS') || (uppercaseType === 'TAKE_PROFIT')) {
|
|
6446
|
-
|
|
6449
|
+
triggerPriceIsRequired = true;
|
|
6447
6450
|
quantityIsRequired = true;
|
|
6448
6451
|
if (market['linear'] || market['inverse']) {
|
|
6449
6452
|
priceIsRequired = true;
|
|
@@ -6451,7 +6454,7 @@ export default class binance extends Exchange {
|
|
|
6451
6454
|
}
|
|
6452
6455
|
else if ((uppercaseType === 'STOP_LOSS_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
|
|
6453
6456
|
quantityIsRequired = true;
|
|
6454
|
-
|
|
6457
|
+
triggerPriceIsRequired = true;
|
|
6455
6458
|
priceIsRequired = true;
|
|
6456
6459
|
timeInForceIsRequired = true;
|
|
6457
6460
|
}
|
|
@@ -6461,14 +6464,14 @@ export default class binance extends Exchange {
|
|
|
6461
6464
|
}
|
|
6462
6465
|
else if (uppercaseType === 'STOP') {
|
|
6463
6466
|
quantityIsRequired = true;
|
|
6464
|
-
|
|
6467
|
+
triggerPriceIsRequired = true;
|
|
6465
6468
|
priceIsRequired = true;
|
|
6466
6469
|
}
|
|
6467
6470
|
else if ((uppercaseType === 'STOP_MARKET') || (uppercaseType === 'TAKE_PROFIT_MARKET')) {
|
|
6468
6471
|
if (!closePosition) {
|
|
6469
6472
|
quantityIsRequired = true;
|
|
6470
6473
|
}
|
|
6471
|
-
|
|
6474
|
+
triggerPriceIsRequired = true;
|
|
6472
6475
|
}
|
|
6473
6476
|
else if (uppercaseType === 'TRAILING_STOP_MARKET') {
|
|
6474
6477
|
if (!closePosition) {
|
|
@@ -6507,16 +6510,16 @@ export default class binance extends Exchange {
|
|
|
6507
6510
|
request['price'] = this.parseToNumeric(price); // some options don't have the precision available
|
|
6508
6511
|
}
|
|
6509
6512
|
}
|
|
6510
|
-
if (
|
|
6513
|
+
if (triggerPriceIsRequired) {
|
|
6511
6514
|
if (market['contract']) {
|
|
6512
6515
|
if (stopPrice === undefined) {
|
|
6513
|
-
throw new InvalidOrder(this.id + ' createOrder() requires a
|
|
6516
|
+
throw new InvalidOrder(this.id + ' createOrder() requires a triggerPrice extra param for a ' + type + ' order');
|
|
6514
6517
|
}
|
|
6515
6518
|
}
|
|
6516
6519
|
else {
|
|
6517
6520
|
// check for delta price as well
|
|
6518
6521
|
if (trailingDelta === undefined && stopPrice === undefined && trailingPercent === undefined) {
|
|
6519
|
-
throw new InvalidOrder(this.id + ' createOrder() requires a
|
|
6522
|
+
throw new InvalidOrder(this.id + ' createOrder() requires a triggerPrice, trailingDelta or trailingPercent param for a ' + type + ' order');
|
|
6520
6523
|
}
|
|
6521
6524
|
}
|
|
6522
6525
|
if (stopPrice !== undefined) {
|
|
@@ -11640,7 +11643,7 @@ export default class binance extends Exchange {
|
|
|
11640
11643
|
let paginate = false;
|
|
11641
11644
|
[paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');
|
|
11642
11645
|
if (paginate) {
|
|
11643
|
-
return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params);
|
|
11646
|
+
return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params, undefined, false);
|
|
11644
11647
|
}
|
|
11645
11648
|
let type = undefined;
|
|
11646
11649
|
let subType = undefined;
|
|
@@ -12822,7 +12825,7 @@ export default class binance extends Exchange {
|
|
|
12822
12825
|
// ...
|
|
12823
12826
|
// ]
|
|
12824
12827
|
//
|
|
12825
|
-
return this.
|
|
12828
|
+
return this.parseOpenInterestsHistory(response, market, since, limit);
|
|
12826
12829
|
}
|
|
12827
12830
|
/**
|
|
12828
12831
|
* @method
|
|
@@ -12891,7 +12894,7 @@ export default class binance extends Exchange {
|
|
|
12891
12894
|
//
|
|
12892
12895
|
if (market['option']) {
|
|
12893
12896
|
symbol = market['symbol'];
|
|
12894
|
-
const result = this.
|
|
12897
|
+
const result = this.parseOpenInterestsHistory(response, market);
|
|
12895
12898
|
for (let i = 0; i < result.length; i++) {
|
|
12896
12899
|
const item = result[i];
|
|
12897
12900
|
if (item['symbol'] === symbol) {
|
package/js/src/bingx.js
CHANGED
|
@@ -51,6 +51,7 @@ export default class bingx extends Exchange {
|
|
|
51
51
|
'createTrailingAmountOrder': true,
|
|
52
52
|
'createTrailingPercentOrder': true,
|
|
53
53
|
'createTriggerOrder': true,
|
|
54
|
+
'editOrder': true,
|
|
54
55
|
'fetchBalance': true,
|
|
55
56
|
'fetchCanceledOrders': true,
|
|
56
57
|
'fetchClosedOrders': true,
|
|
@@ -73,6 +74,7 @@ export default class bingx extends Exchange {
|
|
|
73
74
|
'fetchMarkPrice': true,
|
|
74
75
|
'fetchMarkPrices': true,
|
|
75
76
|
'fetchMyLiquidations': true,
|
|
77
|
+
'fetchMyTrades': true,
|
|
76
78
|
'fetchOHLCV': true,
|
|
77
79
|
'fetchOpenInterest': true,
|
|
78
80
|
'fetchOpenOrders': true,
|
|
@@ -1040,7 +1042,7 @@ export default class bingx extends Exchange {
|
|
|
1040
1042
|
};
|
|
1041
1043
|
request['interval'] = this.safeString(this.timeframes, timeframe, timeframe);
|
|
1042
1044
|
if (since !== undefined) {
|
|
1043
|
-
request['startTime'] = since;
|
|
1045
|
+
request['startTime'] = Math.max(since - 1, 0);
|
|
1044
1046
|
}
|
|
1045
1047
|
if (limit !== undefined) {
|
|
1046
1048
|
request['limit'] = limit;
|
|
@@ -5599,6 +5601,9 @@ export default class bingx extends Exchange {
|
|
|
5599
5601
|
request['endTs'] = now;
|
|
5600
5602
|
}
|
|
5601
5603
|
if (market['spot']) {
|
|
5604
|
+
if (limit !== undefined) {
|
|
5605
|
+
request['limit'] = limit; // default 500, maximum 1000
|
|
5606
|
+
}
|
|
5602
5607
|
response = await this.spotV1PrivateGetTradeMyTrades(this.extend(request, params));
|
|
5603
5608
|
const data = this.safeDict(response, 'data', {});
|
|
5604
5609
|
fills = this.safeList(data, 'fills', []);
|
package/js/src/bitfinex.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/bitfinex.js';
|
|
2
|
-
import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderBook, Str, Transaction, Ticker, Balances, Tickers, Strings, Currency, Market, OpenInterest, Liquidation, OrderRequest, Num, MarginModification, Currencies, TradingFees, Dict, LedgerEntry, FundingRate, FundingRates, DepositAddress } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderBook, Str, Transaction, Ticker, Balances, Tickers, Strings, Currency, Market, OpenInterest, Liquidation, OrderRequest, Num, MarginModification, Currencies, TradingFees, Dict, LedgerEntry, FundingRate, FundingRates, DepositAddress, OpenInterests } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class bitfinex
|
|
5
5
|
* @augments Exchange
|
|
@@ -416,6 +416,16 @@ export default class bitfinex extends Exchange {
|
|
|
416
416
|
previousFundingTimestamp: any;
|
|
417
417
|
previousFundingDatetime: any;
|
|
418
418
|
};
|
|
419
|
+
/**
|
|
420
|
+
* @method
|
|
421
|
+
* @name bitfinex#fetchOpenInterests
|
|
422
|
+
* @description Retrieves the open interest for a list of symbols
|
|
423
|
+
* @see https://docs.bitfinex.com/reference/rest-public-derivatives-status
|
|
424
|
+
* @param {string[]} [symbols] a list of unified CCXT market symbols
|
|
425
|
+
* @param {object} [params] exchange specific parameters
|
|
426
|
+
* @returns {object[]} a list of [open interest structures]{@link https://docs.ccxt.com/#/?id=open-interest-structure}
|
|
427
|
+
*/
|
|
428
|
+
fetchOpenInterests(symbols?: Strings, params?: {}): Promise<OpenInterests>;
|
|
419
429
|
/**
|
|
420
430
|
* @method
|
|
421
431
|
* @name bitfinex#fetchOpenInterest
|
package/js/src/bitfinex.js
CHANGED
|
@@ -85,6 +85,7 @@ export default class bitfinex extends Exchange {
|
|
|
85
85
|
'fetchOHLCV': true,
|
|
86
86
|
'fetchOpenInterest': true,
|
|
87
87
|
'fetchOpenInterestHistory': true,
|
|
88
|
+
'fetchOpenInterests': true,
|
|
88
89
|
'fetchOpenOrder': true,
|
|
89
90
|
'fetchOpenOrders': true,
|
|
90
91
|
'fetchOrder': true,
|
|
@@ -404,6 +405,75 @@ export default class bitfinex extends Exchange {
|
|
|
404
405
|
'TETHERUSE': 'ERC20',
|
|
405
406
|
},
|
|
406
407
|
},
|
|
408
|
+
'features': {
|
|
409
|
+
'default': {
|
|
410
|
+
'sandbox': false,
|
|
411
|
+
'createOrder': {
|
|
412
|
+
'marginMode': true,
|
|
413
|
+
'triggerPrice': true,
|
|
414
|
+
'triggerPriceType': undefined,
|
|
415
|
+
'triggerDirection': false,
|
|
416
|
+
'stopLossPrice': true,
|
|
417
|
+
'takeProfitPrice': true,
|
|
418
|
+
'attachedStopLossTakeProfit': undefined,
|
|
419
|
+
'timeInForce': {
|
|
420
|
+
'IOC': true,
|
|
421
|
+
'FOK': true,
|
|
422
|
+
'PO': true,
|
|
423
|
+
'GTD': false,
|
|
424
|
+
},
|
|
425
|
+
'hedged': false,
|
|
426
|
+
'trailing': true, // todo: unify
|
|
427
|
+
// todo: leverage unify
|
|
428
|
+
},
|
|
429
|
+
'createOrders': {
|
|
430
|
+
'max': 75,
|
|
431
|
+
},
|
|
432
|
+
'fetchMyTrades': {
|
|
433
|
+
'marginMode': false,
|
|
434
|
+
'limit': 2500,
|
|
435
|
+
'daysBack': undefined,
|
|
436
|
+
'untilDays': 100000, // todo: implement
|
|
437
|
+
},
|
|
438
|
+
'fetchOrder': {
|
|
439
|
+
'marginMode': false,
|
|
440
|
+
'trigger': false,
|
|
441
|
+
'trailing': false,
|
|
442
|
+
},
|
|
443
|
+
'fetchOpenOrders': {
|
|
444
|
+
'marginMode': false,
|
|
445
|
+
'limit': undefined,
|
|
446
|
+
'trigger': false,
|
|
447
|
+
'trailing': false,
|
|
448
|
+
},
|
|
449
|
+
'fetchOrders': undefined,
|
|
450
|
+
'fetchClosedOrders': {
|
|
451
|
+
'marginMode': false,
|
|
452
|
+
'limit': undefined,
|
|
453
|
+
'daysBackClosed': undefined,
|
|
454
|
+
'daysBackCanceled': undefined,
|
|
455
|
+
'untilDays': 100000,
|
|
456
|
+
'trigger': false,
|
|
457
|
+
'trailing': false,
|
|
458
|
+
},
|
|
459
|
+
'fetchOHLCV': {
|
|
460
|
+
'limit': 10000,
|
|
461
|
+
},
|
|
462
|
+
},
|
|
463
|
+
'spot': {
|
|
464
|
+
'extends': 'default',
|
|
465
|
+
},
|
|
466
|
+
'swap': {
|
|
467
|
+
'linear': {
|
|
468
|
+
'extends': 'default',
|
|
469
|
+
},
|
|
470
|
+
'inverse': undefined,
|
|
471
|
+
},
|
|
472
|
+
'future': {
|
|
473
|
+
'linear': undefined,
|
|
474
|
+
'inverse': undefined,
|
|
475
|
+
},
|
|
476
|
+
},
|
|
407
477
|
'exceptions': {
|
|
408
478
|
'exact': {
|
|
409
479
|
'11010': RateLimitExceeded,
|
|
@@ -3248,6 +3318,59 @@ export default class bitfinex extends Exchange {
|
|
|
3248
3318
|
'previousFundingDatetime': undefined,
|
|
3249
3319
|
};
|
|
3250
3320
|
}
|
|
3321
|
+
/**
|
|
3322
|
+
* @method
|
|
3323
|
+
* @name bitfinex#fetchOpenInterests
|
|
3324
|
+
* @description Retrieves the open interest for a list of symbols
|
|
3325
|
+
* @see https://docs.bitfinex.com/reference/rest-public-derivatives-status
|
|
3326
|
+
* @param {string[]} [symbols] a list of unified CCXT market symbols
|
|
3327
|
+
* @param {object} [params] exchange specific parameters
|
|
3328
|
+
* @returns {object[]} a list of [open interest structures]{@link https://docs.ccxt.com/#/?id=open-interest-structure}
|
|
3329
|
+
*/
|
|
3330
|
+
async fetchOpenInterests(symbols = undefined, params = {}) {
|
|
3331
|
+
await this.loadMarkets();
|
|
3332
|
+
symbols = this.marketSymbols(symbols);
|
|
3333
|
+
let marketIds = ['ALL'];
|
|
3334
|
+
if (symbols !== undefined) {
|
|
3335
|
+
marketIds = this.marketIds(symbols);
|
|
3336
|
+
}
|
|
3337
|
+
const request = {
|
|
3338
|
+
'keys': marketIds.join(','),
|
|
3339
|
+
};
|
|
3340
|
+
const response = await this.publicGetStatusDeriv(this.extend(request, params));
|
|
3341
|
+
//
|
|
3342
|
+
// [
|
|
3343
|
+
// [
|
|
3344
|
+
// "tXRPF0:USTF0", // market id
|
|
3345
|
+
// 1706256986000, // millisecond timestamp
|
|
3346
|
+
// null,
|
|
3347
|
+
// 0.512705, // derivative mid price
|
|
3348
|
+
// 0.512395, // underlying spot mid price
|
|
3349
|
+
// null,
|
|
3350
|
+
// 37671483.04, // insurance fund balance
|
|
3351
|
+
// null,
|
|
3352
|
+
// 1706284800000, // timestamp of next funding
|
|
3353
|
+
// 0.00002353, // accrued funding for next period
|
|
3354
|
+
// 317, // next funding step
|
|
3355
|
+
// null,
|
|
3356
|
+
// 0, // current funding
|
|
3357
|
+
// null,
|
|
3358
|
+
// null,
|
|
3359
|
+
// 0.5123016, // mark price
|
|
3360
|
+
// null,
|
|
3361
|
+
// null,
|
|
3362
|
+
// 2233562.03115, // open interest in contracts
|
|
3363
|
+
// null,
|
|
3364
|
+
// null,
|
|
3365
|
+
// null,
|
|
3366
|
+
// 0.0005, // average spread without funding payment
|
|
3367
|
+
// 0.0025 // funding payment cap
|
|
3368
|
+
// ]
|
|
3369
|
+
// ]
|
|
3370
|
+
//
|
|
3371
|
+
const result = this.parseOpenInterests(response);
|
|
3372
|
+
return this.filterByArray(result, 'symbol', symbols);
|
|
3373
|
+
}
|
|
3251
3374
|
/**
|
|
3252
3375
|
* @method
|
|
3253
3376
|
* @name bitfinex#fetchOpenInterest
|
|
@@ -3359,7 +3482,7 @@ export default class bitfinex extends Exchange {
|
|
|
3359
3482
|
// ],
|
|
3360
3483
|
// ]
|
|
3361
3484
|
//
|
|
3362
|
-
return this.
|
|
3485
|
+
return this.parseOpenInterestsHistory(response, market, since, limit);
|
|
3363
3486
|
}
|
|
3364
3487
|
parseOpenInterest(interest, market = undefined) {
|
|
3365
3488
|
//
|