ccxt 4.2.19 → 4.2.20
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 +98 -98
- package/dist/ccxt.browser.js +67 -133
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +10 -0
- package/dist/cjs/src/binance.js +2 -1
- package/dist/cjs/src/binanceus.js +17 -0
- package/dist/cjs/src/bingx.js +2 -1
- package/dist/cjs/src/bitget.js +25 -31
- package/dist/cjs/src/bitteam.js +1 -1
- package/dist/cjs/src/bybit.js +0 -28
- package/dist/cjs/src/delta.js +0 -18
- package/dist/cjs/src/gate.js +0 -25
- package/dist/cjs/src/kucoinfutures.js +9 -9
- package/dist/cjs/src/okx.js +0 -18
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/binance.d.ts +1 -0
- package/js/src/abstract/binancecoinm.d.ts +1 -0
- package/js/src/abstract/binanceus.d.ts +1 -0
- package/js/src/abstract/binanceusdm.d.ts +1 -0
- package/js/src/abstract/bitpanda.js +11 -0
- package/js/src/base/Exchange.d.ts +3 -0
- package/js/src/base/Exchange.js +10 -0
- package/js/src/binance.js +2 -1
- package/js/src/binanceus.js +17 -0
- package/js/src/bingx.js +2 -1
- package/js/src/bitget.d.ts +1 -1
- package/js/src/bitget.js +25 -31
- package/js/src/bitteam.js +1 -1
- package/js/src/bybit.d.ts +0 -1
- package/js/src/bybit.js +1 -29
- package/js/src/delta.d.ts +0 -1
- package/js/src/delta.js +0 -18
- package/js/src/gate.d.ts +0 -1
- package/js/src/gate.js +0 -25
- package/js/src/kucoinfutures.d.ts +6 -6
- package/js/src/kucoinfutures.js +9 -9
- package/js/src/okx.d.ts +0 -1
- package/js/src/okx.js +0 -18
- package/package.json +1 -1
- package/skip-tests.json +2 -1
package/js/src/bitget.js
CHANGED
|
@@ -58,6 +58,7 @@ export default class bitget extends Exchange {
|
|
|
58
58
|
'fetchBorrowRateHistories': false,
|
|
59
59
|
'fetchBorrowRateHistory': false,
|
|
60
60
|
'fetchCanceledOrders': true,
|
|
61
|
+
'fetchCanceledAndClosedOrders': true,
|
|
61
62
|
'fetchClosedOrders': true,
|
|
62
63
|
'fetchCrossBorrowRate': true,
|
|
63
64
|
'fetchCrossBorrowRates': false,
|
|
@@ -5397,20 +5398,8 @@ export default class bitget extends Exchange {
|
|
|
5397
5398
|
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5398
5399
|
*/
|
|
5399
5400
|
await this.loadMarkets();
|
|
5400
|
-
|
|
5401
|
-
|
|
5402
|
-
market = this.market(symbol);
|
|
5403
|
-
}
|
|
5404
|
-
const response = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
|
|
5405
|
-
const result = [];
|
|
5406
|
-
for (let i = 0; i < response.length; i++) {
|
|
5407
|
-
const entry = response[i];
|
|
5408
|
-
const status = this.parseOrderStatus(this.safeStringN(entry, ['state', 'status', 'planStatus']));
|
|
5409
|
-
if (status === 'closed') {
|
|
5410
|
-
result.push(entry);
|
|
5411
|
-
}
|
|
5412
|
-
}
|
|
5413
|
-
return this.parseOrders(result, market, since, limit);
|
|
5401
|
+
const orders = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
|
|
5402
|
+
return this.filterBy(orders, 'status', 'closed');
|
|
5414
5403
|
}
|
|
5415
5404
|
async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
5416
5405
|
/**
|
|
@@ -5435,22 +5424,26 @@ export default class bitget extends Exchange {
|
|
|
5435
5424
|
* @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5436
5425
|
*/
|
|
5437
5426
|
await this.loadMarkets();
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
market = this.market(symbol);
|
|
5441
|
-
}
|
|
5442
|
-
const response = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
|
|
5443
|
-
const result = [];
|
|
5444
|
-
for (let i = 0; i < response.length; i++) {
|
|
5445
|
-
const entry = response[i];
|
|
5446
|
-
const status = this.parseOrderStatus(this.safeStringN(entry, ['state', 'status', 'planStatus']));
|
|
5447
|
-
if (status === 'canceled') {
|
|
5448
|
-
result.push(entry);
|
|
5449
|
-
}
|
|
5450
|
-
}
|
|
5451
|
-
return this.parseOrders(result, market, since, limit);
|
|
5427
|
+
const orders = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
|
|
5428
|
+
return this.filterBy(orders, 'status', 'canceled');
|
|
5452
5429
|
}
|
|
5453
5430
|
async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
5431
|
+
/**
|
|
5432
|
+
* @method
|
|
5433
|
+
* @name bitget#fetchCanceledAndClosedOrders
|
|
5434
|
+
* @see https://www.bitget.com/api-doc/spot/trade/Get-History-Orders
|
|
5435
|
+
* @see https://www.bitget.com/api-doc/spot/plan/Get-History-Plan-Order
|
|
5436
|
+
* @see https://www.bitget.com/api-doc/contract/trade/Get-Orders-History
|
|
5437
|
+
* @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
|
|
5438
|
+
* @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
|
|
5439
|
+
* @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
|
|
5440
|
+
* @description fetches information on multiple canceled and closed orders made by the user
|
|
5441
|
+
* @param {string} symbol unified market symbol of the market orders were made in
|
|
5442
|
+
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
5443
|
+
* @param {int} [limit] the maximum number of order structures to retrieve
|
|
5444
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5445
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
5446
|
+
*/
|
|
5454
5447
|
await this.loadMarkets();
|
|
5455
5448
|
const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);
|
|
5456
5449
|
let market = undefined;
|
|
@@ -5735,16 +5728,17 @@ export default class bitget extends Exchange {
|
|
|
5735
5728
|
const data = this.safeValue(response, 'data', {});
|
|
5736
5729
|
if (marketType === 'spot') {
|
|
5737
5730
|
if ((marginMode !== undefined) || stop) {
|
|
5738
|
-
return this.safeValue(data, 'orderList', []);
|
|
5731
|
+
return this.parseOrders(this.safeValue(data, 'orderList', []), market, since, limit);
|
|
5739
5732
|
}
|
|
5740
5733
|
}
|
|
5741
5734
|
else {
|
|
5742
|
-
return this.safeValue(data, 'entrustedList', []);
|
|
5735
|
+
return this.parseOrders(this.safeValue(data, 'entrustedList', []), market, since, limit);
|
|
5743
5736
|
}
|
|
5744
5737
|
if (typeof response === 'string') {
|
|
5745
5738
|
response = JSON.parse(response);
|
|
5746
5739
|
}
|
|
5747
|
-
|
|
5740
|
+
const orders = this.safeValue(response, 'data', []);
|
|
5741
|
+
return this.parseOrders(orders, market, since, limit);
|
|
5748
5742
|
}
|
|
5749
5743
|
async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
5750
5744
|
/**
|
package/js/src/bitteam.js
CHANGED
|
@@ -127,7 +127,7 @@ export default class bitteam extends Exchange {
|
|
|
127
127
|
'1d': '1D',
|
|
128
128
|
},
|
|
129
129
|
'urls': {
|
|
130
|
-
'logo': 'https://
|
|
130
|
+
'logo': 'https://github.com/ccxt/ccxt/assets/43336371/cf71fe3d-b8b4-40f2-a906-907661b28793',
|
|
131
131
|
'api': {
|
|
132
132
|
'history': 'https://history.bit.team',
|
|
133
133
|
'public': 'https://bit.team',
|
package/js/src/bybit.d.ts
CHANGED
|
@@ -14,7 +14,6 @@ export default class bybit extends Exchange {
|
|
|
14
14
|
convertExpireDateToMarketIdDate(date: any): any;
|
|
15
15
|
convertMarketIdExpireDate(date: any): string;
|
|
16
16
|
createExpiredOptionMarket(symbol: any): MarketInterface;
|
|
17
|
-
market(symbol: any): any;
|
|
18
17
|
safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
|
|
19
18
|
getBybitType(method: any, market: any, params?: {}): any[];
|
|
20
19
|
fetchTime(params?: {}): Promise<number>;
|
package/js/src/bybit.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
import Exchange from './abstract/bybit.js';
|
|
9
9
|
import { TICK_SIZE } from './base/functions/number.js';
|
|
10
|
-
import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout,
|
|
10
|
+
import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout, MarginModeAlreadySet, NoChange } from './base/errors.js';
|
|
11
11
|
import { Precise } from './base/Precise.js';
|
|
12
12
|
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
13
13
|
import { rsa } from './base/functions/rsa.js';
|
|
@@ -1251,34 +1251,6 @@ export default class bybit extends Exchange {
|
|
|
1251
1251
|
'info': undefined,
|
|
1252
1252
|
};
|
|
1253
1253
|
}
|
|
1254
|
-
market(symbol) {
|
|
1255
|
-
if (this.markets === undefined) {
|
|
1256
|
-
throw new ExchangeError(this.id + ' markets not loaded');
|
|
1257
|
-
}
|
|
1258
|
-
if (typeof symbol === 'string') {
|
|
1259
|
-
if (symbol in this.markets) {
|
|
1260
|
-
return this.markets[symbol];
|
|
1261
|
-
}
|
|
1262
|
-
else if (symbol in this.markets_by_id) {
|
|
1263
|
-
const markets = this.markets_by_id[symbol];
|
|
1264
|
-
let defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');
|
|
1265
|
-
if (defaultType === 'future') {
|
|
1266
|
-
defaultType = 'contract';
|
|
1267
|
-
}
|
|
1268
|
-
for (let i = 0; i < markets.length; i++) {
|
|
1269
|
-
const market = markets[i];
|
|
1270
|
-
if (market[defaultType]) {
|
|
1271
|
-
return market;
|
|
1272
|
-
}
|
|
1273
|
-
}
|
|
1274
|
-
return markets[0];
|
|
1275
|
-
}
|
|
1276
|
-
else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
|
|
1277
|
-
return this.createExpiredOptionMarket(symbol);
|
|
1278
|
-
}
|
|
1279
|
-
}
|
|
1280
|
-
throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
|
|
1281
|
-
}
|
|
1282
1254
|
safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
|
|
1283
1255
|
const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
|
|
1284
1256
|
if (isOption && !(marketId in this.markets_by_id)) {
|
package/js/src/delta.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ export default class delta extends Exchange {
|
|
|
8
8
|
describe(): any;
|
|
9
9
|
convertExpireDate(date: any): string;
|
|
10
10
|
createExpiredOptionMarket(symbol: any): MarketInterface;
|
|
11
|
-
market(symbol: any): any;
|
|
12
11
|
safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
|
|
13
12
|
fetchTime(params?: {}): Promise<number>;
|
|
14
13
|
fetchStatus(params?: {}): Promise<{
|
package/js/src/delta.js
CHANGED
|
@@ -318,24 +318,6 @@ export default class delta extends Exchange {
|
|
|
318
318
|
'info': undefined,
|
|
319
319
|
};
|
|
320
320
|
}
|
|
321
|
-
market(symbol) {
|
|
322
|
-
if (this.markets === undefined) {
|
|
323
|
-
throw new ExchangeError(this.id + ' markets not loaded');
|
|
324
|
-
}
|
|
325
|
-
if (typeof symbol === 'string') {
|
|
326
|
-
if (symbol in this.markets) {
|
|
327
|
-
return this.markets[symbol];
|
|
328
|
-
}
|
|
329
|
-
else if (symbol in this.markets_by_id) {
|
|
330
|
-
const markets = this.markets_by_id[symbol];
|
|
331
|
-
return markets[0];
|
|
332
|
-
}
|
|
333
|
-
else if ((symbol.endsWith('-C')) || (symbol.endsWith('-P')) || (symbol.startsWith('C-')) || (symbol.startsWith('P-'))) {
|
|
334
|
-
return this.createExpiredOptionMarket(symbol);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
|
|
338
|
-
}
|
|
339
321
|
safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
|
|
340
322
|
const isOption = (marketId !== undefined) && ((marketId.endsWith('-C')) || (marketId.endsWith('-P')) || (marketId.startsWith('C-')) || (marketId.startsWith('P-')));
|
|
341
323
|
if (isOption && !(marketId in this.markets_by_id)) {
|
package/js/src/gate.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ export default class gate extends Exchange {
|
|
|
9
9
|
setSandboxMode(enable: any): void;
|
|
10
10
|
convertExpireDate(date: any): string;
|
|
11
11
|
createExpiredOptionMarket(symbol: any): MarketInterface;
|
|
12
|
-
market(symbol: any): any;
|
|
13
12
|
safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
|
|
14
13
|
fetchMarkets(params?: {}): Promise<any>;
|
|
15
14
|
fetchSpotMarkets(params?: {}): Promise<any[]>;
|
package/js/src/gate.js
CHANGED
|
@@ -936,31 +936,6 @@ export default class gate extends Exchange {
|
|
|
936
936
|
'info': undefined,
|
|
937
937
|
};
|
|
938
938
|
}
|
|
939
|
-
market(symbol) {
|
|
940
|
-
if (this.markets === undefined) {
|
|
941
|
-
throw new ExchangeError(this.id + ' markets not loaded');
|
|
942
|
-
}
|
|
943
|
-
if (typeof symbol === 'string') {
|
|
944
|
-
if (symbol in this.markets) {
|
|
945
|
-
return this.markets[symbol];
|
|
946
|
-
}
|
|
947
|
-
else if (symbol in this.markets_by_id) {
|
|
948
|
-
const markets = this.markets_by_id[symbol];
|
|
949
|
-
const defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');
|
|
950
|
-
for (let i = 0; i < markets.length; i++) {
|
|
951
|
-
const market = markets[i];
|
|
952
|
-
if (market[defaultType]) {
|
|
953
|
-
return market;
|
|
954
|
-
}
|
|
955
|
-
}
|
|
956
|
-
return markets[0];
|
|
957
|
-
}
|
|
958
|
-
else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
|
|
959
|
-
return this.createExpiredOptionMarket(symbol);
|
|
960
|
-
}
|
|
961
|
-
}
|
|
962
|
-
throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
|
|
963
|
-
}
|
|
964
939
|
safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
|
|
965
940
|
const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
|
|
966
941
|
if (isOption && !(marketId in this.markets_by_id)) {
|
|
@@ -56,14 +56,14 @@ export default class kucoinfutures extends kucoin {
|
|
|
56
56
|
timestamp: any;
|
|
57
57
|
datetime: any;
|
|
58
58
|
fundingRate: number;
|
|
59
|
-
fundingTimestamp:
|
|
60
|
-
fundingDatetime:
|
|
61
|
-
nextFundingRate:
|
|
59
|
+
fundingTimestamp: number;
|
|
60
|
+
fundingDatetime: string;
|
|
61
|
+
nextFundingRate: number;
|
|
62
62
|
nextFundingTimestamp: any;
|
|
63
63
|
nextFundingDatetime: any;
|
|
64
|
-
previousFundingRate:
|
|
65
|
-
previousFundingTimestamp:
|
|
66
|
-
previousFundingDatetime:
|
|
64
|
+
previousFundingRate: any;
|
|
65
|
+
previousFundingTimestamp: any;
|
|
66
|
+
previousFundingDatetime: any;
|
|
67
67
|
}>;
|
|
68
68
|
parseBalance(response: any): Balances;
|
|
69
69
|
fetchBalance(params?: {}): Promise<Balances>;
|
package/js/src/kucoinfutures.js
CHANGED
|
@@ -1834,7 +1834,7 @@ export default class kucoinfutures extends kucoin {
|
|
|
1834
1834
|
* @method
|
|
1835
1835
|
* @name kucoinfutures#fetchFundingRate
|
|
1836
1836
|
* @description fetch the current funding rate
|
|
1837
|
-
* @see https://www.kucoin.com/docs/rest/futures-trading/
|
|
1837
|
+
* @see https://www.kucoin.com/docs/rest/futures-trading/funding-fees/get-current-funding-rate
|
|
1838
1838
|
* @param {string} symbol unified market symbol
|
|
1839
1839
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1840
1840
|
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
|
|
@@ -1858,7 +1858,7 @@ export default class kucoinfutures extends kucoin {
|
|
|
1858
1858
|
// }
|
|
1859
1859
|
//
|
|
1860
1860
|
const data = this.safeValue(response, 'data');
|
|
1861
|
-
const fundingTimestamp = this.
|
|
1861
|
+
const fundingTimestamp = this.safeInteger(data, 'timePoint');
|
|
1862
1862
|
// the website displayes the previous funding rate as "funding rate"
|
|
1863
1863
|
return {
|
|
1864
1864
|
'info': data,
|
|
@@ -1869,15 +1869,15 @@ export default class kucoinfutures extends kucoin {
|
|
|
1869
1869
|
'estimatedSettlePrice': undefined,
|
|
1870
1870
|
'timestamp': undefined,
|
|
1871
1871
|
'datetime': undefined,
|
|
1872
|
-
'fundingRate': this.safeNumber(data, '
|
|
1873
|
-
'fundingTimestamp':
|
|
1874
|
-
'fundingDatetime':
|
|
1875
|
-
'nextFundingRate':
|
|
1872
|
+
'fundingRate': this.safeNumber(data, 'value'),
|
|
1873
|
+
'fundingTimestamp': fundingTimestamp,
|
|
1874
|
+
'fundingDatetime': this.iso8601(fundingTimestamp),
|
|
1875
|
+
'nextFundingRate': this.safeNumber(data, 'predictedValue'),
|
|
1876
1876
|
'nextFundingTimestamp': undefined,
|
|
1877
1877
|
'nextFundingDatetime': undefined,
|
|
1878
|
-
'previousFundingRate':
|
|
1879
|
-
'previousFundingTimestamp':
|
|
1880
|
-
'previousFundingDatetime':
|
|
1878
|
+
'previousFundingRate': undefined,
|
|
1879
|
+
'previousFundingTimestamp': undefined,
|
|
1880
|
+
'previousFundingDatetime': undefined,
|
|
1881
1881
|
};
|
|
1882
1882
|
}
|
|
1883
1883
|
parseBalance(response) {
|
package/js/src/okx.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ export default class okx extends Exchange {
|
|
|
10
10
|
convertToInstrumentType(type: any): string;
|
|
11
11
|
convertExpireDate(date: any): string;
|
|
12
12
|
createExpiredOptionMarket(symbol: any): MarketInterface;
|
|
13
|
-
market(symbol: any): any;
|
|
14
13
|
safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
|
|
15
14
|
fetchStatus(params?: {}): Promise<{
|
|
16
15
|
updated: any;
|
package/js/src/okx.js
CHANGED
|
@@ -1155,24 +1155,6 @@ export default class okx extends Exchange {
|
|
|
1155
1155
|
'info': undefined,
|
|
1156
1156
|
};
|
|
1157
1157
|
}
|
|
1158
|
-
market(symbol) {
|
|
1159
|
-
if (this.markets === undefined) {
|
|
1160
|
-
throw new ExchangeError(this.id + ' markets not loaded');
|
|
1161
|
-
}
|
|
1162
|
-
if (typeof symbol === 'string') {
|
|
1163
|
-
if (symbol in this.markets) {
|
|
1164
|
-
return this.markets[symbol];
|
|
1165
|
-
}
|
|
1166
|
-
else if (symbol in this.markets_by_id) {
|
|
1167
|
-
const markets = this.markets_by_id[symbol];
|
|
1168
|
-
return markets[0];
|
|
1169
|
-
}
|
|
1170
|
-
else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
|
|
1171
|
-
return this.createExpiredOptionMarket(symbol);
|
|
1172
|
-
}
|
|
1173
|
-
}
|
|
1174
|
-
throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
|
|
1175
|
-
}
|
|
1176
1158
|
safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
|
|
1177
1159
|
const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
|
|
1178
1160
|
if (isOption && !(marketId in this.markets_by_id)) {
|
package/package.json
CHANGED
package/skip-tests.json
CHANGED