ccxt 4.3.18 → 4.3.19
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 +7 -5
- package/dist/cjs/ccxt.js +6 -1
- package/dist/cjs/src/abstract/woofipro.js +9 -0
- package/dist/cjs/src/ascendex.js +3 -4
- package/dist/cjs/src/base/Exchange.js +42 -2
- package/dist/cjs/src/base/functions/crypto.js +10 -3
- package/dist/cjs/src/base/functions/encode.js +6 -3
- package/dist/cjs/src/base/functions/number.js +8 -5
- package/dist/cjs/src/base/functions/rsa.js +5 -5
- package/dist/cjs/src/bigone.js +1 -1
- package/dist/cjs/src/bitfinex.js +25 -1
- package/dist/cjs/src/bitfinex2.js +59 -51
- package/dist/cjs/src/bitget.js +1 -5
- package/dist/cjs/src/bitmart.js +3 -3
- package/dist/cjs/src/bitstamp.js +1 -3
- package/dist/cjs/src/bybit.js +1 -0
- package/dist/cjs/src/coinex.js +321 -537
- package/dist/cjs/src/coinlist.js +1 -2
- package/dist/cjs/src/deribit.js +1 -1
- package/dist/cjs/src/hollaex.js +3 -3
- package/dist/cjs/src/indodax.js +1 -1
- package/dist/cjs/src/latoken.js +1 -1
- package/dist/cjs/src/mexc.js +1 -1
- package/dist/cjs/src/novadax.js +0 -1
- package/dist/cjs/src/okx.js +17 -0
- package/dist/cjs/src/poloniex.js +1 -2
- package/dist/cjs/src/pro/bitget.js +136 -192
- package/dist/cjs/src/pro/coinbaseinternational.js +9 -1
- package/dist/cjs/src/pro/okx.js +85 -0
- package/dist/cjs/src/pro/woofipro.js +1263 -0
- package/dist/cjs/src/wavesexchange.js +2 -2
- package/dist/cjs/src/woo.js +17 -3
- package/dist/cjs/src/woofipro.js +2698 -0
- package/js/ccxt.d.ts +8 -2
- package/js/ccxt.js +6 -2
- package/js/src/abstract/bybit.d.ts +1 -0
- package/js/src/abstract/okx.d.ts +1 -0
- package/js/src/abstract/woofipro.d.ts +122 -0
- package/js/src/abstract/woofipro.js +11 -0
- package/js/src/ace.d.ts +2 -2
- package/js/src/ascendex.d.ts +5 -15
- package/js/src/ascendex.js +3 -4
- package/js/src/base/Exchange.d.ts +26 -17
- package/js/src/base/Exchange.js +42 -2
- package/js/src/base/functions/crypto.d.ts +1 -1
- package/js/src/base/functions/crypto.js +10 -3
- package/js/src/base/functions/encode.d.ts +1 -1
- package/js/src/base/functions/encode.js +6 -3
- package/js/src/base/functions/number.d.ts +1 -1
- package/js/src/base/functions/number.js +8 -5
- package/js/src/base/functions/rsa.js +6 -6
- package/js/src/base/types.d.ts +4 -0
- package/js/src/bigone.d.ts +4 -14
- package/js/src/bigone.js +1 -1
- package/js/src/binance.d.ts +13 -71
- package/js/src/binancecoinm.d.ts +2 -22
- package/js/src/binanceusdm.d.ts +2 -22
- package/js/src/bingx.d.ts +4 -14
- package/js/src/bit2c.d.ts +2 -2
- package/js/src/bitbank.d.ts +2 -2
- package/js/src/bitbns.d.ts +2 -2
- package/js/src/bitfinex.d.ts +6 -16
- package/js/src/bitfinex.js +25 -1
- package/js/src/bitfinex2.d.ts +6 -16
- package/js/src/bitfinex2.js +59 -51
- package/js/src/bitflyer.d.ts +2 -2
- package/js/src/bitget.d.ts +7 -17
- package/js/src/bitget.js +1 -5
- package/js/src/bithumb.d.ts +3 -3
- package/js/src/bitmart.d.ts +5 -14
- package/js/src/bitmart.js +3 -3
- package/js/src/bitmex.d.ts +4 -4
- package/js/src/bitopro.d.ts +2 -2
- package/js/src/bitrue.d.ts +5 -5
- package/js/src/bitso.d.ts +2 -2
- package/js/src/bitstamp.d.ts +3 -3
- package/js/src/bitstamp.js +1 -3
- package/js/src/bitteam.d.ts +2 -2
- package/js/src/bitvavo.d.ts +5 -5
- package/js/src/bl3p.d.ts +2 -2
- package/js/src/blockchaincom.d.ts +2 -2
- package/js/src/blofin.d.ts +4 -14
- package/js/src/btcalpha.d.ts +2 -2
- package/js/src/btcbox.d.ts +2 -2
- package/js/src/btcmarkets.d.ts +2 -2
- package/js/src/btcturk.d.ts +2 -2
- package/js/src/bybit.d.ts +8 -56
- package/js/src/bybit.js +1 -0
- package/js/src/cex.d.ts +2 -2
- package/js/src/coinbase.d.ts +4 -4
- package/js/src/coinbasepro.d.ts +3 -3
- package/js/src/coincheck.d.ts +2 -2
- package/js/src/coinex.d.ts +6 -16
- package/js/src/coinex.js +321 -537
- package/js/src/coinlist.d.ts +5 -15
- package/js/src/coinlist.js +1 -2
- package/js/src/coinmate.d.ts +2 -2
- package/js/src/coinmetro.d.ts +3 -3
- package/js/src/coinone.d.ts +2 -2
- package/js/src/coinsph.d.ts +2 -2
- package/js/src/coinspot.d.ts +2 -2
- package/js/src/cryptocom.d.ts +2 -2
- package/js/src/currencycom.d.ts +3 -3
- package/js/src/delta.d.ts +5 -43
- package/js/src/deribit.d.ts +7 -55
- package/js/src/deribit.js +1 -1
- package/js/src/digifinex.d.ts +5 -15
- package/js/src/exmo.d.ts +2 -2
- package/js/src/gate.d.ts +6 -54
- package/js/src/gemini.d.ts +2 -2
- package/js/src/hitbtc.d.ts +4 -14
- package/js/src/hollaex.d.ts +3 -3
- package/js/src/hollaex.js +3 -3
- package/js/src/htx.d.ts +4 -14
- package/js/src/huobijp.d.ts +4 -4
- package/js/src/hyperliquid.d.ts +1 -1
- package/js/src/idex.d.ts +3 -3
- package/js/src/independentreserve.d.ts +2 -2
- package/js/src/indodax.d.ts +2 -2
- package/js/src/indodax.js +1 -1
- package/js/src/kraken.d.ts +4 -14
- package/js/src/krakenfutures.d.ts +4 -14
- package/js/src/kucoin.d.ts +5 -15
- package/js/src/kucoinfutures.d.ts +4 -14
- package/js/src/kuna.d.ts +2 -2
- package/js/src/latoken.d.ts +5 -15
- package/js/src/latoken.js +1 -1
- package/js/src/lbank.d.ts +2 -2
- package/js/src/luno.d.ts +2 -2
- package/js/src/lykke.d.ts +2 -2
- package/js/src/mercado.d.ts +2 -2
- package/js/src/mexc.d.ts +8 -28
- package/js/src/mexc.js +1 -1
- package/js/src/ndax.d.ts +2 -2
- package/js/src/novadax.d.ts +4 -15
- package/js/src/novadax.js +0 -1
- package/js/src/okcoin.d.ts +4 -14
- package/js/src/okx.d.ts +10 -68
- package/js/src/okx.js +17 -0
- package/js/src/onetrading.d.ts +2 -2
- package/js/src/paymium.d.ts +4 -14
- package/js/src/phemex.d.ts +5 -15
- package/js/src/poloniex.d.ts +3 -13
- package/js/src/poloniex.js +1 -2
- package/js/src/poloniexfutures.d.ts +2 -2
- package/js/src/pro/bitget.js +137 -193
- package/js/src/pro/coinbaseinternational.d.ts +3 -3
- package/js/src/pro/coinbaseinternational.js +9 -1
- package/js/src/pro/okx.d.ts +4 -1
- package/js/src/pro/okx.js +85 -0
- package/js/src/pro/woofipro.d.ts +47 -0
- package/js/src/pro/woofipro.js +1264 -0
- package/js/src/probit.d.ts +3 -3
- package/js/src/timex.d.ts +2 -2
- package/js/src/tokocrypto.d.ts +3 -3
- package/js/src/upbit.d.ts +2 -2
- package/js/src/wavesexchange.d.ts +3 -3
- package/js/src/wavesexchange.js +2 -2
- package/js/src/wazirx.d.ts +2 -2
- package/js/src/whitebit.d.ts +3 -13
- package/js/src/woo.d.ts +7 -17
- package/js/src/woo.js +17 -3
- package/js/src/woofipro.d.ts +131 -0
- package/js/src/woofipro.js +2699 -0
- package/js/src/yobit.d.ts +2 -2
- package/js/src/zaif.d.ts +2 -2
- package/js/src/zonda.d.ts +4 -14
- package/package.json +1 -1
package/dist/cjs/src/coinlist.js
CHANGED
|
@@ -1729,10 +1729,9 @@ class coinlist extends coinlist$1 {
|
|
|
1729
1729
|
*/
|
|
1730
1730
|
await this.loadMarkets();
|
|
1731
1731
|
const currency = this.currency(code);
|
|
1732
|
-
amount = this.currencyToPrecision(code, amount);
|
|
1733
1732
|
const request = {
|
|
1734
1733
|
'asset': currency['id'],
|
|
1735
|
-
'amount': amount,
|
|
1734
|
+
'amount': this.currencyToPrecision(code, amount),
|
|
1736
1735
|
};
|
|
1737
1736
|
const accountsByType = this.safeValue(this.options, 'accountsByType', {});
|
|
1738
1737
|
const fromAcc = this.safeString(accountsByType, fromAccount, fromAccount);
|
package/dist/cjs/src/deribit.js
CHANGED
|
@@ -2887,7 +2887,7 @@ class deribit extends deribit$1 {
|
|
|
2887
2887
|
'id': this.safeString(transfer, 'id'),
|
|
2888
2888
|
'status': this.parseTransferStatus(status),
|
|
2889
2889
|
'amount': this.safeNumber(transfer, 'amount'),
|
|
2890
|
-
'
|
|
2890
|
+
'currency': this.safeCurrencyCode(currencyId, currency),
|
|
2891
2891
|
'fromAccount': direction !== 'payment' ? account : undefined,
|
|
2892
2892
|
'toAccount': direction === 'payment' ? account : undefined,
|
|
2893
2893
|
'timestamp': timestamp,
|
package/dist/cjs/src/hollaex.js
CHANGED
|
@@ -534,12 +534,12 @@ class hollaex extends hollaex$1 {
|
|
|
534
534
|
//
|
|
535
535
|
return this.parseTickers(response, symbols);
|
|
536
536
|
}
|
|
537
|
-
parseTickers(
|
|
537
|
+
parseTickers(tickers, symbols = undefined, params = {}) {
|
|
538
538
|
const result = {};
|
|
539
|
-
const keys = Object.keys(
|
|
539
|
+
const keys = Object.keys(tickers);
|
|
540
540
|
for (let i = 0; i < keys.length; i++) {
|
|
541
541
|
const key = keys[i];
|
|
542
|
-
const ticker =
|
|
542
|
+
const ticker = tickers[key];
|
|
543
543
|
const marketId = this.safeString(ticker, 'symbol', key);
|
|
544
544
|
const market = this.safeMarket(marketId, undefined, '-');
|
|
545
545
|
const symbol = market['symbol'];
|
package/dist/cjs/src/indodax.js
CHANGED
|
@@ -510,7 +510,7 @@ class indodax extends indodax$1 {
|
|
|
510
510
|
// }
|
|
511
511
|
//
|
|
512
512
|
const response = await this.publicGetApiTickerAll(params);
|
|
513
|
-
const tickers = this.
|
|
513
|
+
const tickers = this.safeDict(response, 'tickers', {});
|
|
514
514
|
return this.parseTickers(tickers, symbols);
|
|
515
515
|
}
|
|
516
516
|
parseTrade(trade, market = undefined) {
|
package/dist/cjs/src/latoken.js
CHANGED
|
@@ -616,7 +616,7 @@ class latoken extends latoken$1 {
|
|
|
616
616
|
//
|
|
617
617
|
const marketId = this.safeString(ticker, 'symbol');
|
|
618
618
|
const last = this.safeString(ticker, 'lastPrice');
|
|
619
|
-
const timestamp = this.
|
|
619
|
+
const timestamp = this.safeIntegerOmitZero(ticker, 'updateTimestamp'); // sometimes latoken provided '0' ts from /ticker endpoint
|
|
620
620
|
return this.safeTicker({
|
|
621
621
|
'symbol': this.safeSymbol(marketId, market),
|
|
622
622
|
'timestamp': timestamp,
|
package/dist/cjs/src/mexc.js
CHANGED
|
@@ -4967,7 +4967,7 @@ class mexc extends mexc$1 {
|
|
|
4967
4967
|
'lastUpdateTimestamp': undefined,
|
|
4968
4968
|
});
|
|
4969
4969
|
}
|
|
4970
|
-
async fetchTransfer(id,
|
|
4970
|
+
async fetchTransfer(id, code = undefined, params = {}) {
|
|
4971
4971
|
const [marketType, query] = this.handleMarketTypeAndParams('fetchTransfer', undefined, params);
|
|
4972
4972
|
await this.loadMarkets();
|
|
4973
4973
|
if (marketType === 'spot') {
|
package/dist/cjs/src/novadax.js
CHANGED
package/dist/cjs/src/okx.js
CHANGED
|
@@ -480,6 +480,7 @@ class okx extends okx$1 {
|
|
|
480
480
|
'tradingBot/grid/compute-margin-balance': 1,
|
|
481
481
|
'tradingBot/grid/margin-balance': 1,
|
|
482
482
|
'tradingBot/grid/min-investment': 1,
|
|
483
|
+
'tradingBot/grid/adjust-investment': 1,
|
|
483
484
|
'tradingBot/signal/create-signal': 1,
|
|
484
485
|
'tradingBot/signal/order-algo': 1,
|
|
485
486
|
'tradingBot/signal/stop-order-algo': 1,
|
|
@@ -6010,6 +6011,22 @@ class okx extends okx$1 {
|
|
|
6010
6011
|
// "nextFundingRate": "0.00017",
|
|
6011
6012
|
// "nextFundingTime": "1634284800000"
|
|
6012
6013
|
// }
|
|
6014
|
+
// ws
|
|
6015
|
+
// {
|
|
6016
|
+
// "fundingRate":"0.0001875391284828",
|
|
6017
|
+
// "fundingTime":"1700726400000",
|
|
6018
|
+
// "instId":"BTC-USD-SWAP",
|
|
6019
|
+
// "instType":"SWAP",
|
|
6020
|
+
// "method": "next_period",
|
|
6021
|
+
// "maxFundingRate":"0.00375",
|
|
6022
|
+
// "minFundingRate":"-0.00375",
|
|
6023
|
+
// "nextFundingRate":"0.0002608059239328",
|
|
6024
|
+
// "nextFundingTime":"1700755200000",
|
|
6025
|
+
// "premium": "0.0001233824646391",
|
|
6026
|
+
// "settFundingRate":"0.0001699799259033",
|
|
6027
|
+
// "settState":"settled",
|
|
6028
|
+
// "ts":"1700724675402"
|
|
6029
|
+
// }
|
|
6013
6030
|
//
|
|
6014
6031
|
// in the response above nextFundingRate is actually two funding rates from now
|
|
6015
6032
|
//
|
package/dist/cjs/src/poloniex.js
CHANGED
|
@@ -1846,12 +1846,11 @@ class poloniex extends poloniex$1 {
|
|
|
1846
1846
|
*/
|
|
1847
1847
|
await this.loadMarkets();
|
|
1848
1848
|
const currency = this.currency(code);
|
|
1849
|
-
amount = this.currencyToPrecision(code, amount);
|
|
1850
1849
|
const accountsByType = this.safeValue(this.options, 'accountsByType', {});
|
|
1851
1850
|
const fromId = this.safeString(accountsByType, fromAccount, fromAccount);
|
|
1852
1851
|
const toId = this.safeString(accountsByType, toAccount, fromAccount);
|
|
1853
1852
|
const request = {
|
|
1854
|
-
'amount': amount,
|
|
1853
|
+
'amount': this.currencyToPrecision(code, amount),
|
|
1855
1854
|
'currency': currency['id'],
|
|
1856
1855
|
'fromAccount': fromId,
|
|
1857
1856
|
'toAccount': toId,
|
|
@@ -972,9 +972,9 @@ class bitget extends bitget$1 {
|
|
|
972
972
|
await this.loadMarkets();
|
|
973
973
|
let market = undefined;
|
|
974
974
|
let marketId = undefined;
|
|
975
|
-
|
|
976
|
-
params = this.
|
|
977
|
-
let messageHash = (
|
|
975
|
+
let isTrigger = undefined;
|
|
976
|
+
[isTrigger, params] = this.isTriggerOrder(params);
|
|
977
|
+
let messageHash = (isTrigger) ? 'triggerOrder' : 'order';
|
|
978
978
|
let subscriptionHash = 'order:trades';
|
|
979
979
|
if (symbol !== undefined) {
|
|
980
980
|
market = this.market(symbol);
|
|
@@ -987,19 +987,16 @@ class bitget extends bitget$1 {
|
|
|
987
987
|
if ((type === 'spot') && (symbol === undefined)) {
|
|
988
988
|
throw new errors.ArgumentsRequired(this.id + ' watchOrders requires a symbol argument for ' + type + ' markets.');
|
|
989
989
|
}
|
|
990
|
-
if (isStop && type === 'spot') {
|
|
991
|
-
throw new errors.NotSupported(this.id + ' watchOrders does not support stop orders for ' + type + ' markets.');
|
|
992
|
-
}
|
|
993
990
|
let instType = undefined;
|
|
994
991
|
[instType, params] = this.getInstType(market, params);
|
|
995
992
|
if (type === 'spot') {
|
|
996
993
|
subscriptionHash = subscriptionHash + ':' + symbol;
|
|
997
994
|
}
|
|
998
|
-
if (
|
|
995
|
+
if (isTrigger) {
|
|
999
996
|
subscriptionHash = subscriptionHash + ':stop'; // we don't want to re-use the same subscription hash for stop orders
|
|
1000
997
|
}
|
|
1001
998
|
const instId = (type === 'spot') ? marketId : 'default'; // different from other streams here the 'rest' id is required for spot markets, contract markets require default here
|
|
1002
|
-
let channel =
|
|
999
|
+
let channel = isTrigger ? 'orders-algo' : 'orders';
|
|
1003
1000
|
let marginMode = undefined;
|
|
1004
1001
|
[marginMode, params] = this.handleMarginModeAndParams('watchOrders', params);
|
|
1005
1002
|
if (marginMode !== undefined) {
|
|
@@ -1030,25 +1027,7 @@ class bitget extends bitget$1 {
|
|
|
1030
1027
|
// "action": "snapshot",
|
|
1031
1028
|
// "arg": { "instType": "SPOT", "channel": "orders", "instId": "BTCUSDT" },
|
|
1032
1029
|
// "data": [
|
|
1033
|
-
//
|
|
1034
|
-
// "instId": "BTCUSDT",
|
|
1035
|
-
// "orderId": "1116512721422422017",
|
|
1036
|
-
// "clientOid": "798d1425-d31d-4ada-a51b-ec701e00a1d9",
|
|
1037
|
-
// "price": "35000.00",
|
|
1038
|
-
// "size": "7.0000",
|
|
1039
|
-
// "newSize": "500.0000",
|
|
1040
|
-
// "notional": "7.000000",
|
|
1041
|
-
// "orderType": "limit",
|
|
1042
|
-
// "force": "gtc",
|
|
1043
|
-
// "side": "buy",
|
|
1044
|
-
// "accBaseVolume": "0.0000",
|
|
1045
|
-
// "priceAvg": "0.00",
|
|
1046
|
-
// "status": "live",
|
|
1047
|
-
// "cTime": "1701923297267",
|
|
1048
|
-
// "uTime": "1701923297267",
|
|
1049
|
-
// "feeDetail": [],
|
|
1050
|
-
// "enterPointSource": "WEB"
|
|
1051
|
-
// }
|
|
1030
|
+
// // see all examples in parseWsOrder
|
|
1052
1031
|
// ],
|
|
1053
1032
|
// "ts": 1701923297285
|
|
1054
1033
|
// }
|
|
@@ -1059,98 +1038,18 @@ class bitget extends bitget$1 {
|
|
|
1059
1038
|
// "action": "snapshot",
|
|
1060
1039
|
// "arg": { "instType": "USDT-FUTURES", "channel": "orders", "instId": "default" },
|
|
1061
1040
|
// "data": [
|
|
1062
|
-
//
|
|
1063
|
-
// "accBaseVolume": "0",
|
|
1064
|
-
// "cTime": "1701920553759",
|
|
1065
|
-
// "clientOid": "1116501214318198793",
|
|
1066
|
-
// "enterPointSource": "WEB",
|
|
1067
|
-
// "feeDetail": [{
|
|
1068
|
-
// "feeCoin": "USDT",
|
|
1069
|
-
// "fee": "-0.162003"
|
|
1070
|
-
// }],
|
|
1071
|
-
// "force": "gtc",
|
|
1072
|
-
// "instId": "BTCUSDT",
|
|
1073
|
-
// "leverage": "20",
|
|
1074
|
-
// "marginCoin": "USDT",
|
|
1075
|
-
// "marginMode": "isolated",
|
|
1076
|
-
// "notionalUsd": "105",
|
|
1077
|
-
// "orderId": "1116501214293032964",
|
|
1078
|
-
// "orderType": "limit",
|
|
1079
|
-
// "posMode": "hedge_mode",
|
|
1080
|
-
// "posSide": "long",
|
|
1081
|
-
// "price": "35000",
|
|
1082
|
-
// "reduceOnly": "no",
|
|
1083
|
-
// "side": "buy",
|
|
1084
|
-
// "size": "0.003",
|
|
1085
|
-
// "status": "canceled",
|
|
1086
|
-
// "tradeSide": "open",
|
|
1087
|
-
// "uTime": "1701920595866"
|
|
1088
|
-
// }
|
|
1041
|
+
// // see all examples in parseWsOrder
|
|
1089
1042
|
// ],
|
|
1090
1043
|
// "ts": 1701920595879
|
|
1091
1044
|
// }
|
|
1092
1045
|
//
|
|
1093
|
-
// trigger
|
|
1094
|
-
//
|
|
1095
|
-
// {
|
|
1096
|
-
// "action": "snapshot",
|
|
1097
|
-
// "arg": {
|
|
1098
|
-
// "instType": "USDT-FUTURES",
|
|
1099
|
-
// "channel": "orders-algo",
|
|
1100
|
-
// "instId": "default"
|
|
1101
|
-
// },
|
|
1102
|
-
// "data": [
|
|
1103
|
-
// {
|
|
1104
|
-
// "instId": "BTCUSDT",
|
|
1105
|
-
// "orderId": "1116508960750899201",
|
|
1106
|
-
// "clientOid": "1116508960750899200",
|
|
1107
|
-
// "triggerPrice": "35000.000000000",
|
|
1108
|
-
// "triggerType": "mark_price",
|
|
1109
|
-
// "triggerTime": "1701922464373",
|
|
1110
|
-
// "planType": "pl",
|
|
1111
|
-
// "price": "35000.000000000",
|
|
1112
|
-
// "size": "0.001000000",
|
|
1113
|
-
// "actualSize": "0.000000000",
|
|
1114
|
-
// "orderType": "limit",
|
|
1115
|
-
// "side": "buy",
|
|
1116
|
-
// "tradeSide": "open",
|
|
1117
|
-
// "posSide": "long",
|
|
1118
|
-
// "marginCoin": "USDT",
|
|
1119
|
-
// "status": "cancelled",
|
|
1120
|
-
// "posMode": "hedge_mode",
|
|
1121
|
-
// "enterPointSource": "api",
|
|
1122
|
-
// "stopSurplusTriggerType": "fill_price",
|
|
1123
|
-
// "stopLossTriggerType": "fill_price",
|
|
1124
|
-
// "cTime": "1701922400653",
|
|
1125
|
-
// "uTime": "1701922464373"
|
|
1126
|
-
// }
|
|
1127
|
-
// ],
|
|
1128
|
-
// "ts": 1701922464417
|
|
1129
|
-
// }
|
|
1130
|
-
//
|
|
1131
1046
|
// isolated and cross margin
|
|
1132
1047
|
//
|
|
1133
1048
|
// {
|
|
1134
1049
|
// "action": "snapshot",
|
|
1135
1050
|
// "arg": { "instType": "MARGIN", "channel": "orders-crossed", "instId": "BTCUSDT" },
|
|
1136
1051
|
// "data": [
|
|
1137
|
-
//
|
|
1138
|
-
// "enterPointSource": "web",
|
|
1139
|
-
// "force": "gtc",
|
|
1140
|
-
// "orderType": "limit",
|
|
1141
|
-
// "price": "35000.000000000",
|
|
1142
|
-
// "quoteSize": "10.500000000",
|
|
1143
|
-
// "side": "buy",
|
|
1144
|
-
// "status": "live",
|
|
1145
|
-
// "baseSize": "0.000300000",
|
|
1146
|
-
// "cTime": "1701923982427",
|
|
1147
|
-
// "clientOid": "4902047879864dc980c4840e9906db4e",
|
|
1148
|
-
// "fillPrice": "0.000000000",
|
|
1149
|
-
// "baseVolume": "0.000000000",
|
|
1150
|
-
// "fillTotalAmount": "0.000000000",
|
|
1151
|
-
// "loanType": "auto-loan-and-repay",
|
|
1152
|
-
// "orderId": "1116515595178356737"
|
|
1153
|
-
// }
|
|
1052
|
+
// // see examples in parseWsOrder
|
|
1154
1053
|
// ],
|
|
1155
1054
|
// "ts": 1701923982497
|
|
1156
1055
|
// }
|
|
@@ -1174,8 +1073,9 @@ class bitget extends bitget$1 {
|
|
|
1174
1073
|
this.orders = new Cache.ArrayCacheBySymbolById(limit);
|
|
1175
1074
|
this.triggerOrders = new Cache.ArrayCacheBySymbolById(limit);
|
|
1176
1075
|
}
|
|
1177
|
-
const
|
|
1178
|
-
const
|
|
1076
|
+
const isTrigger = (channel === 'orders-algo') || (channel === 'ordersAlgo');
|
|
1077
|
+
const stored = isTrigger ? this.triggerOrders : this.orders;
|
|
1078
|
+
const messageHash = isTrigger ? 'triggerOrder' : 'order';
|
|
1179
1079
|
const marketSymbols = {};
|
|
1180
1080
|
for (let i = 0; i < data.length; i++) {
|
|
1181
1081
|
const order = data[i];
|
|
@@ -1198,81 +1098,90 @@ class bitget extends bitget$1 {
|
|
|
1198
1098
|
//
|
|
1199
1099
|
// spot
|
|
1200
1100
|
//
|
|
1201
|
-
//
|
|
1202
|
-
//
|
|
1203
|
-
//
|
|
1204
|
-
//
|
|
1205
|
-
//
|
|
1206
|
-
//
|
|
1207
|
-
//
|
|
1208
|
-
//
|
|
1209
|
-
//
|
|
1210
|
-
//
|
|
1211
|
-
//
|
|
1212
|
-
//
|
|
1213
|
-
//
|
|
1214
|
-
//
|
|
1215
|
-
//
|
|
1216
|
-
//
|
|
1217
|
-
//
|
|
1218
|
-
//
|
|
1219
|
-
//
|
|
1101
|
+
// {
|
|
1102
|
+
// instId: 'EOSUSDT',
|
|
1103
|
+
// orderId: '1171779081105780739',
|
|
1104
|
+
// price: '0.81075', // limit price, field not present for market orders
|
|
1105
|
+
// clientOid: 'a2330139-1d04-4d78-98be-07de3cfd1055',
|
|
1106
|
+
// notional: '5.675250', // this is not cost! but notional
|
|
1107
|
+
// newSize: '7.0000', // this is not cost! quanity (for limit order or market sell) or cost (for market buy order)
|
|
1108
|
+
// size: '5.6752', // this is not cost, neither quanity, but notional! this field for "spot" can be ignored at all
|
|
1109
|
+
// // Note: for limit order (even filled) we don't have cost value in response, only in market order
|
|
1110
|
+
// orderType: 'limit', // limit, market
|
|
1111
|
+
// force: 'gtc',
|
|
1112
|
+
// side: 'buy',
|
|
1113
|
+
// accBaseVolume: '0.0000', // in case of 'filled', this would be set (for limit orders, this is the only indicator of the amount filled)
|
|
1114
|
+
// priceAvg: '0.00000', // in case of 'filled', this would be set
|
|
1115
|
+
// status: 'live', // live, filled, partially_filled
|
|
1116
|
+
// cTime: '1715099824215',
|
|
1117
|
+
// uTime: '1715099824215',
|
|
1118
|
+
// feeDetail: [],
|
|
1119
|
+
// enterPointSource: 'API'
|
|
1120
|
+
// #### trigger order has these additional fields: ####
|
|
1121
|
+
// "triggerPrice": "35100",
|
|
1122
|
+
// "price": "35100", // this is same as trigger price
|
|
1123
|
+
// "executePrice": "35123", // this is limit price
|
|
1124
|
+
// "triggerType": "fill_price",
|
|
1125
|
+
// "planType": "amount",
|
|
1126
|
+
// #### in case order had fill: ####
|
|
1127
|
+
// fillPrice: '35123',
|
|
1128
|
+
// tradeId: '1171775539946528779',
|
|
1129
|
+
// baseVolume: '7', // field present in market order
|
|
1130
|
+
// fillTime: '1715098979937',
|
|
1131
|
+
// fillFee: '-0.0069987',
|
|
1132
|
+
// fillFeeCoin: 'BTC',
|
|
1133
|
+
// tradeScope: 'T',
|
|
1134
|
+
// }
|
|
1220
1135
|
//
|
|
1221
1136
|
// contract
|
|
1222
1137
|
//
|
|
1223
1138
|
// {
|
|
1224
|
-
//
|
|
1225
|
-
//
|
|
1226
|
-
//
|
|
1227
|
-
//
|
|
1228
|
-
//
|
|
1139
|
+
// accBaseVolume: '0', // total amount filled during lifetime for order
|
|
1140
|
+
// cTime: '1715065875539',
|
|
1141
|
+
// clientOid: '1171636690041344003',
|
|
1142
|
+
// enterPointSource: 'API',
|
|
1143
|
+
// feeDetail: [ {
|
|
1229
1144
|
// "feeCoin": "USDT",
|
|
1230
1145
|
// "fee": "-0.162003"
|
|
1231
|
-
// }],
|
|
1232
|
-
//
|
|
1233
|
-
//
|
|
1234
|
-
//
|
|
1235
|
-
//
|
|
1236
|
-
//
|
|
1237
|
-
//
|
|
1238
|
-
//
|
|
1239
|
-
//
|
|
1240
|
-
//
|
|
1241
|
-
//
|
|
1242
|
-
//
|
|
1243
|
-
//
|
|
1244
|
-
//
|
|
1245
|
-
//
|
|
1246
|
-
//
|
|
1247
|
-
//
|
|
1248
|
-
//
|
|
1249
|
-
//
|
|
1250
|
-
//
|
|
1251
|
-
//
|
|
1252
|
-
//
|
|
1253
|
-
//
|
|
1254
|
-
//
|
|
1255
|
-
//
|
|
1256
|
-
//
|
|
1257
|
-
//
|
|
1146
|
+
// } ],
|
|
1147
|
+
// force: 'gtc',
|
|
1148
|
+
// instId: 'SEOSSUSDT',
|
|
1149
|
+
// leverage: '10',
|
|
1150
|
+
// marginCoin: 'USDT',
|
|
1151
|
+
// marginMode: 'crossed',
|
|
1152
|
+
// notionalUsd: '10.4468',
|
|
1153
|
+
// orderId: '1171636690028761089',
|
|
1154
|
+
// orderType: 'market',
|
|
1155
|
+
// posMode: 'hedge_mode', // one_way_mode, hedge_mode
|
|
1156
|
+
// posSide: 'short', // short, long, net
|
|
1157
|
+
// price: '0', // zero for market order
|
|
1158
|
+
// reduceOnly: 'no',
|
|
1159
|
+
// side: 'sell',
|
|
1160
|
+
// size: '13', // this is contracts amount
|
|
1161
|
+
// status: 'live', // live, filled, cancelled
|
|
1162
|
+
// tradeSide: 'open',
|
|
1163
|
+
// uTime: '1715065875539'
|
|
1164
|
+
// #### when filled order is incoming, these additional fields are present too: ###
|
|
1165
|
+
// baseVolume: '9', // amount filled for the incoming update/trade
|
|
1166
|
+
// accBaseVolume: '13', // i.e. 9 has been filled from 13 amount (this value is same as 'size')
|
|
1167
|
+
// fillFee: '-0.0062712',
|
|
1168
|
+
// fillFeeCoin: 'SUSDT',
|
|
1169
|
+
// fillNotionalUsd: '10.452',
|
|
1170
|
+
// fillPrice: '0.804',
|
|
1171
|
+
// fillTime: '1715065875605',
|
|
1172
|
+
// pnl: '0',
|
|
1173
|
+
// priceAvg: '0.804',
|
|
1174
|
+
// tradeId: '1171636690314407937',
|
|
1175
|
+
// tradeScope: 'T',
|
|
1176
|
+
// #### trigger order has these additional fields:
|
|
1177
|
+
// "triggerPrice": "0.800000000",
|
|
1178
|
+
// "price": "0.800000000", // <-- this is same as trigger price, actual limit-price is not present in initial response
|
|
1258
1179
|
// "triggerType": "mark_price",
|
|
1259
|
-
// "triggerTime": "
|
|
1180
|
+
// "triggerTime": "1715082796679",
|
|
1260
1181
|
// "planType": "pl",
|
|
1261
|
-
// "price": "35000.000000000",
|
|
1262
|
-
// "size": "0.001000000",
|
|
1263
1182
|
// "actualSize": "0.000000000",
|
|
1264
|
-
// "orderType": "limit",
|
|
1265
|
-
// "side": "buy",
|
|
1266
|
-
// "tradeSide": "open",
|
|
1267
|
-
// "posSide": "long",
|
|
1268
|
-
// "marginCoin": "USDT",
|
|
1269
|
-
// "status": "cancelled",
|
|
1270
|
-
// "posMode": "hedge_mode",
|
|
1271
|
-
// "enterPointSource": "api",
|
|
1272
1183
|
// "stopSurplusTriggerType": "fill_price",
|
|
1273
1184
|
// "stopLossTriggerType": "fill_price",
|
|
1274
|
-
// "cTime": "1701922400653",
|
|
1275
|
-
// "uTime": "1701922464373"
|
|
1276
1185
|
// }
|
|
1277
1186
|
//
|
|
1278
1187
|
// isolated and cross margin
|
|
@@ -1280,6 +1189,7 @@ class bitget extends bitget$1 {
|
|
|
1280
1189
|
// {
|
|
1281
1190
|
// "enterPointSource": "web",
|
|
1282
1191
|
// "force": "gtc",
|
|
1192
|
+
// "feeDetail": [],
|
|
1283
1193
|
// "orderType": "limit",
|
|
1284
1194
|
// "price": "35000.000000000",
|
|
1285
1195
|
// "quoteSize": "10.500000000",
|
|
@@ -1295,6 +1205,8 @@ class bitget extends bitget$1 {
|
|
|
1295
1205
|
// "orderId": "1116515595178356737"
|
|
1296
1206
|
// }
|
|
1297
1207
|
//
|
|
1208
|
+
const isSpot = !('posMode' in order);
|
|
1209
|
+
const isMargin = ('loanType' in order);
|
|
1298
1210
|
const marketId = this.safeString(order, 'instId');
|
|
1299
1211
|
market = this.safeMarket(marketId, market);
|
|
1300
1212
|
const timestamp = this.safeInteger(order, 'cTime');
|
|
@@ -1312,24 +1224,54 @@ class bitget extends bitget$1 {
|
|
|
1312
1224
|
};
|
|
1313
1225
|
}
|
|
1314
1226
|
const triggerPrice = this.safeNumber(order, 'triggerPrice');
|
|
1315
|
-
const
|
|
1227
|
+
const isTriggerOrder = (triggerPrice !== undefined);
|
|
1228
|
+
let price = undefined;
|
|
1229
|
+
if (!isTriggerOrder) {
|
|
1230
|
+
price = this.safeNumber(order, 'price');
|
|
1231
|
+
}
|
|
1232
|
+
else if (isSpot && isTriggerOrder) {
|
|
1233
|
+
// for spot trigger order, limit price is this
|
|
1234
|
+
price = this.safeNumber(order, 'executePrice');
|
|
1235
|
+
}
|
|
1316
1236
|
const avgPrice = this.omitZero(this.safeString2(order, 'priceAvg', 'fillPrice'));
|
|
1317
|
-
let cost = this.safeStringN(order, ['notional', 'notionalUsd', 'quoteSize']);
|
|
1318
1237
|
const side = this.safeString(order, 'side');
|
|
1319
1238
|
const type = this.safeString(order, 'orderType');
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
const
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1239
|
+
const accBaseVolume = this.omitZero(this.safeString(order, 'accBaseVolume'));
|
|
1240
|
+
const newSizeValue = this.omitZero(this.safeString(order, 'newSize'));
|
|
1241
|
+
const isMarketOrder = (type === 'market');
|
|
1242
|
+
const isBuy = (side === 'buy');
|
|
1243
|
+
let totalAmount = undefined;
|
|
1244
|
+
let filledAmount = undefined;
|
|
1245
|
+
let cost = undefined;
|
|
1246
|
+
if (isSpot) {
|
|
1247
|
+
if (isMargin) {
|
|
1248
|
+
filledAmount = this.omitZero(this.safeString(order, 'fillTotalAmount'));
|
|
1249
|
+
totalAmount = this.omitZero(this.safeString(order, 'baseSize')); // for margin trading
|
|
1250
|
+
cost = this.safeString(order, 'quoteSize');
|
|
1251
|
+
}
|
|
1252
|
+
else {
|
|
1253
|
+
filledAmount = this.omitZero(this.safeString2(order, 'accBaseVolume', 'baseVolume'));
|
|
1254
|
+
if (isMarketOrder) {
|
|
1255
|
+
if (isBuy) {
|
|
1256
|
+
totalAmount = accBaseVolume;
|
|
1257
|
+
cost = newSizeValue;
|
|
1258
|
+
}
|
|
1259
|
+
else {
|
|
1260
|
+
totalAmount = newSizeValue;
|
|
1261
|
+
// we don't have cost for market-sell order
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
else {
|
|
1265
|
+
totalAmount = this.safeString(order, 'newSize');
|
|
1266
|
+
// we don't have cost for limit order
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1330
1269
|
}
|
|
1331
|
-
|
|
1332
|
-
amount
|
|
1270
|
+
else {
|
|
1271
|
+
// baseVolume should not be used for "amount" for contracts !
|
|
1272
|
+
filledAmount = this.safeString(order, 'baseVolume');
|
|
1273
|
+
totalAmount = this.safeString(order, 'size');
|
|
1274
|
+
cost = this.safeString(order, 'fillNotionalUsd');
|
|
1333
1275
|
}
|
|
1334
1276
|
return this.safeOrder({
|
|
1335
1277
|
'info': order,
|
|
@@ -1344,12 +1286,11 @@ class bitget extends bitget$1 {
|
|
|
1344
1286
|
'postOnly': undefined,
|
|
1345
1287
|
'side': side,
|
|
1346
1288
|
'price': price,
|
|
1347
|
-
'stopPrice': triggerPrice,
|
|
1348
1289
|
'triggerPrice': triggerPrice,
|
|
1349
|
-
'amount':
|
|
1290
|
+
'amount': totalAmount,
|
|
1350
1291
|
'cost': cost,
|
|
1351
1292
|
'average': avgPrice,
|
|
1352
|
-
'filled':
|
|
1293
|
+
'filled': filledAmount,
|
|
1353
1294
|
'remaining': undefined,
|
|
1354
1295
|
'status': this.parseWsOrderStatus(rawStatus),
|
|
1355
1296
|
'fee': feeObject,
|
|
@@ -1774,6 +1715,9 @@ class bitget extends bitget$1 {
|
|
|
1774
1715
|
'fill': this.handleMyTrades,
|
|
1775
1716
|
'orders': this.handleOrder,
|
|
1776
1717
|
'ordersAlgo': this.handleOrder,
|
|
1718
|
+
'orders-algo': this.handleOrder,
|
|
1719
|
+
'orders-crossed': this.handleOrder,
|
|
1720
|
+
'orders-isolated': this.handleOrder,
|
|
1777
1721
|
'account': this.handleBalance,
|
|
1778
1722
|
'positions': this.handlePositions,
|
|
1779
1723
|
'account-isolated': this.handleBalance,
|
|
@@ -172,7 +172,14 @@ class coinbaseinternational extends coinbaseinternational$1 {
|
|
|
172
172
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
173
173
|
* @returns {object} a dictionary of [funding rates structures]{@link https://docs.ccxt.com/#/?id=funding-rates-structure}, indexe by market symbols
|
|
174
174
|
*/
|
|
175
|
-
|
|
175
|
+
const fundingRate = await this.subscribeMultiple('RISK', symbols, params);
|
|
176
|
+
const symbol = this.safeString(fundingRate, 'symbol');
|
|
177
|
+
if (this.newUpdates) {
|
|
178
|
+
const result = {};
|
|
179
|
+
result[symbol] = fundingRate;
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
return this.filterByArray(this.fundingRates, 'symbol', symbols);
|
|
176
183
|
}
|
|
177
184
|
async watchTicker(symbol, params = {}) {
|
|
178
185
|
/**
|
|
@@ -588,6 +595,7 @@ class coinbaseinternational extends coinbaseinternational$1 {
|
|
|
588
595
|
//
|
|
589
596
|
const channel = this.safeString(message, 'channel');
|
|
590
597
|
const fundingRate = this.parseFundingRate(message);
|
|
598
|
+
this.fundingRates[fundingRate['symbol']] = fundingRate;
|
|
591
599
|
client.resolve(fundingRate, channel + '::' + fundingRate['symbol']);
|
|
592
600
|
}
|
|
593
601
|
handleErrorMessage(client, message) {
|