ccxt 4.4.9 → 4.4.11
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 +131 -131
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ascendex.js +2 -1
- package/dist/cjs/src/binance.js +6 -9
- package/dist/cjs/src/bingx.js +19 -20
- package/dist/cjs/src/bitfinex2.js +5 -16
- package/dist/cjs/src/bitget.js +6 -5
- package/dist/cjs/src/bitmart.js +1 -0
- package/dist/cjs/src/bitmex.js +4 -3
- package/dist/cjs/src/blofin.js +4 -13
- package/dist/cjs/src/bybit.js +16 -14
- package/dist/cjs/src/coinex.js +15 -1
- package/dist/cjs/src/delta.js +2 -1
- package/dist/cjs/src/deribit.js +1 -0
- package/dist/cjs/src/digifinex.js +15 -1
- package/dist/cjs/src/gate.js +30 -9
- package/dist/cjs/src/hashkey.js +2 -2
- package/dist/cjs/src/hitbtc.js +2 -1
- package/dist/cjs/src/htx.js +26 -3
- package/dist/cjs/src/hyperliquid.js +6 -1
- package/dist/cjs/src/kraken.js +41 -13
- package/dist/cjs/src/krakenfutures.js +3 -2
- package/dist/cjs/src/kucoinfutures.js +11 -0
- package/dist/cjs/src/mexc.js +12 -4
- package/dist/cjs/src/oceanex.js +83 -3
- package/dist/cjs/src/okx.js +15 -0
- package/dist/cjs/src/oxfun.js +4 -4
- package/dist/cjs/src/phemex.js +1 -0
- package/dist/cjs/src/poloniexfutures.js +11 -0
- package/dist/cjs/src/pro/deribit.js +122 -1
- package/dist/cjs/src/pro/exmo.js +31 -1
- package/dist/cjs/src/pro/gate.js +1 -1
- package/dist/cjs/src/pro/okx.js +1 -1
- package/dist/cjs/src/vertex.js +2 -1
- package/dist/cjs/src/whitebit.js +10 -9
- package/dist/cjs/src/woo.js +42 -17
- package/dist/cjs/src/woofipro.js +15 -2
- package/dist/cjs/src/xt.js +2 -0
- 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/oceanex.d.ts +5 -0
- package/js/src/ascendex.d.ts +3 -21
- package/js/src/ascendex.js +2 -1
- package/js/src/base/Exchange.d.ts +3 -3
- package/js/src/base/types.d.ts +1 -0
- package/js/src/binance.d.ts +4 -40
- package/js/src/binance.js +6 -9
- package/js/src/bingx.d.ts +4 -40
- package/js/src/bingx.js +19 -20
- package/js/src/bitfinex2.d.ts +3 -22
- package/js/src/bitfinex2.js +5 -16
- package/js/src/bitget.d.ts +3 -39
- package/js/src/bitget.js +6 -5
- package/js/src/bitmart.d.ts +3 -39
- package/js/src/bitmart.js +1 -0
- package/js/src/bitmex.d.ts +3 -21
- package/js/src/bitmex.js +4 -3
- package/js/src/blofin.d.ts +3 -39
- package/js/src/blofin.js +4 -13
- package/js/src/bybit.d.ts +3 -21
- package/js/src/bybit.js +16 -14
- package/js/src/coinex.d.ts +5 -40
- package/js/src/coinex.js +15 -1
- package/js/src/delta.d.ts +4 -40
- package/js/src/delta.js +2 -1
- package/js/src/deribit.d.ts +3 -39
- package/js/src/deribit.js +1 -0
- package/js/src/digifinex.d.ts +4 -21
- package/js/src/digifinex.js +15 -1
- package/js/src/gate.d.ts +6 -41
- package/js/src/gate.js +30 -9
- package/js/src/hashkey.d.ts +4 -40
- package/js/src/hashkey.js +2 -2
- package/js/src/hitbtc.d.ts +4 -40
- package/js/src/hitbtc.js +2 -1
- package/js/src/htx.d.ts +5 -40
- package/js/src/htx.js +26 -3
- package/js/src/hyperliquid.js +6 -1
- package/js/src/kraken.js +41 -13
- package/js/src/krakenfutures.d.ts +3 -21
- package/js/src/krakenfutures.js +3 -2
- package/js/src/kucoinfutures.d.ts +3 -20
- package/js/src/kucoinfutures.js +11 -0
- package/js/src/mexc.d.ts +3 -39
- package/js/src/mexc.js +12 -4
- package/js/src/oceanex.d.ts +9 -1
- package/js/src/oceanex.js +83 -3
- package/js/src/okx.d.ts +4 -39
- package/js/src/okx.js +16 -1
- package/js/src/oxfun.d.ts +3 -21
- package/js/src/oxfun.js +4 -4
- package/js/src/phemex.d.ts +3 -39
- package/js/src/phemex.js +1 -0
- package/js/src/poloniexfutures.d.ts +3 -20
- package/js/src/poloniexfutures.js +11 -0
- package/js/src/pro/deribit.d.ts +5 -1
- package/js/src/pro/deribit.js +122 -1
- package/js/src/pro/exmo.d.ts +2 -1
- package/js/src/pro/exmo.js +31 -1
- package/js/src/pro/gate.js +1 -1
- package/js/src/pro/okx.js +1 -1
- package/js/src/vertex.d.ts +4 -40
- package/js/src/vertex.js +2 -1
- package/js/src/whitebit.d.ts +4 -21
- package/js/src/whitebit.js +10 -9
- package/js/src/woo.d.ts +4 -40
- package/js/src/woo.js +42 -17
- package/js/src/woofipro.d.ts +5 -40
- package/js/src/woofipro.js +15 -2
- package/js/src/xt.d.ts +3 -39
- package/js/src/xt.js +2 -0
- package/package.json +1 -1
package/js/src/mexc.js
CHANGED
|
@@ -3862,6 +3862,7 @@ export default class mexc extends Exchange {
|
|
|
3862
3862
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
3863
3863
|
* @param {int} [limit] the maximum number of trades structures to retrieve
|
|
3864
3864
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3865
|
+
* @param {int} [params.until] the latest time in ms to fetch trades for
|
|
3865
3866
|
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
3866
3867
|
*/
|
|
3867
3868
|
if (symbol === undefined) {
|
|
@@ -3869,19 +3870,25 @@ export default class mexc extends Exchange {
|
|
|
3869
3870
|
}
|
|
3870
3871
|
await this.loadMarkets();
|
|
3871
3872
|
const market = this.market(symbol);
|
|
3872
|
-
|
|
3873
|
+
let marketType = undefined;
|
|
3874
|
+
[marketType, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
|
|
3873
3875
|
const request = {
|
|
3874
3876
|
'symbol': market['id'],
|
|
3875
3877
|
};
|
|
3876
3878
|
let trades = undefined;
|
|
3877
3879
|
if (marketType === 'spot') {
|
|
3878
3880
|
if (since !== undefined) {
|
|
3879
|
-
request['
|
|
3881
|
+
request['startTime'] = since;
|
|
3880
3882
|
}
|
|
3881
3883
|
if (limit !== undefined) {
|
|
3882
3884
|
request['limit'] = limit;
|
|
3883
3885
|
}
|
|
3884
|
-
|
|
3886
|
+
const until = this.safeInteger(params, 'until');
|
|
3887
|
+
if (until !== undefined) {
|
|
3888
|
+
params = this.omit(params, 'until');
|
|
3889
|
+
request['endTime'] = until;
|
|
3890
|
+
}
|
|
3891
|
+
trades = await this.spotPrivateGetMyTrades(this.extend(request, params));
|
|
3885
3892
|
//
|
|
3886
3893
|
// spot
|
|
3887
3894
|
//
|
|
@@ -3915,7 +3922,7 @@ export default class mexc extends Exchange {
|
|
|
3915
3922
|
if (limit !== undefined) {
|
|
3916
3923
|
request['page_size'] = limit;
|
|
3917
3924
|
}
|
|
3918
|
-
const response = await this.contractPrivateGetOrderListOrderDeals(this.extend(request,
|
|
3925
|
+
const response = await this.contractPrivateGetOrderListOrderDeals(this.extend(request, params));
|
|
3919
3926
|
//
|
|
3920
3927
|
// {
|
|
3921
3928
|
// "success": true,
|
|
@@ -4217,6 +4224,7 @@ export default class mexc extends Exchange {
|
|
|
4217
4224
|
'previousFundingRate': undefined,
|
|
4218
4225
|
'previousFundingTimestamp': undefined,
|
|
4219
4226
|
'previousFundingDatetime': undefined,
|
|
4227
|
+
'interval': undefined,
|
|
4220
4228
|
};
|
|
4221
4229
|
}
|
|
4222
4230
|
async fetchFundingRate(symbol, params = {}) {
|
package/js/src/oceanex.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/oceanex.js';
|
|
2
|
-
import type { Balances, Dict, Dictionary, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, int } from './base/types.js';
|
|
2
|
+
import type { Balances, Currency, Dict, Dictionary, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, int } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class oceanex
|
|
5
5
|
* @augments Exchange
|
|
@@ -32,6 +32,14 @@ export default class oceanex extends Exchange {
|
|
|
32
32
|
cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
|
|
33
33
|
cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<Order[]>;
|
|
34
34
|
cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
|
|
35
|
+
fetchDepositAddressesByNetwork(code: string, params?: {}): Promise<{}>;
|
|
36
|
+
parseDepositAddress(depositAddress: any, currency?: Currency): {
|
|
37
|
+
info: any;
|
|
38
|
+
currency: string;
|
|
39
|
+
address: string;
|
|
40
|
+
tag: string;
|
|
41
|
+
network: string;
|
|
42
|
+
};
|
|
35
43
|
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
36
44
|
url: string;
|
|
37
45
|
method: string;
|
package/js/src/oceanex.js
CHANGED
|
@@ -50,9 +50,9 @@ export default class oceanex extends Exchange {
|
|
|
50
50
|
'fetchClosedOrders': true,
|
|
51
51
|
'fetchCrossBorrowRate': false,
|
|
52
52
|
'fetchCrossBorrowRates': false,
|
|
53
|
-
'fetchDepositAddress':
|
|
54
|
-
'fetchDepositAddresses':
|
|
55
|
-
'fetchDepositAddressesByNetwork':
|
|
53
|
+
'fetchDepositAddress': 'emulated',
|
|
54
|
+
'fetchDepositAddresses': undefined,
|
|
55
|
+
'fetchDepositAddressesByNetwork': true,
|
|
56
56
|
'fetchIsolatedBorrowRate': false,
|
|
57
57
|
'fetchIsolatedBorrowRates': false,
|
|
58
58
|
'fetchMarkets': true,
|
|
@@ -113,6 +113,11 @@ export default class oceanex extends Exchange {
|
|
|
113
113
|
'order/delete',
|
|
114
114
|
'order/delete/multi',
|
|
115
115
|
'orders/clear',
|
|
116
|
+
'/withdraws/special/new',
|
|
117
|
+
'/deposit_address',
|
|
118
|
+
'/deposit_addresses',
|
|
119
|
+
'/deposit_history',
|
|
120
|
+
'/withdraw_history',
|
|
116
121
|
],
|
|
117
122
|
},
|
|
118
123
|
},
|
|
@@ -913,6 +918,81 @@ export default class oceanex extends Exchange {
|
|
|
913
918
|
const data = this.safeList(response, 'data');
|
|
914
919
|
return this.parseOrders(data);
|
|
915
920
|
}
|
|
921
|
+
async fetchDepositAddressesByNetwork(code, params = {}) {
|
|
922
|
+
/**
|
|
923
|
+
* @method
|
|
924
|
+
* @name oceanex#fetchDepositAddressesByNetwork
|
|
925
|
+
* @description fetch the deposit addresses for a currency associated with this account
|
|
926
|
+
* @see https://api.oceanex.pro/doc/v1/#deposit-addresses-post
|
|
927
|
+
* @param {string} code unified currency code
|
|
928
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
929
|
+
* @returns {object} a dictionary [address structures]{@link https://docs.ccxt.com/#/?id=address-structure}, indexed by the network
|
|
930
|
+
*/
|
|
931
|
+
await this.loadMarkets();
|
|
932
|
+
const currency = this.currency(code);
|
|
933
|
+
const request = {
|
|
934
|
+
'currency': currency['id'],
|
|
935
|
+
};
|
|
936
|
+
const response = await this.privatePostDepositAddresses(this.extend(request, params));
|
|
937
|
+
//
|
|
938
|
+
// {
|
|
939
|
+
// code: '0',
|
|
940
|
+
// message: 'Operation successful',
|
|
941
|
+
// data: {
|
|
942
|
+
// data: {
|
|
943
|
+
// currency_id: 'usdt',
|
|
944
|
+
// display_name: 'USDT',
|
|
945
|
+
// num_of_resources: '3',
|
|
946
|
+
// resources: [
|
|
947
|
+
// {
|
|
948
|
+
// chain_name: 'TRC20',
|
|
949
|
+
// currency_id: 'usdt',
|
|
950
|
+
// address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
|
|
951
|
+
// memo: '',
|
|
952
|
+
// deposit_status: 'enabled'
|
|
953
|
+
// },
|
|
954
|
+
// ...
|
|
955
|
+
// ]
|
|
956
|
+
// }
|
|
957
|
+
// }
|
|
958
|
+
// }
|
|
959
|
+
//
|
|
960
|
+
const data = this.safeDict(response, 'data', {});
|
|
961
|
+
const data2 = this.safeDict(data, 'data', {});
|
|
962
|
+
const resources = this.safeList(data2, 'resources', []);
|
|
963
|
+
const result = {};
|
|
964
|
+
for (let i = 0; i < resources.length; i++) {
|
|
965
|
+
const resource = resources[i];
|
|
966
|
+
const enabled = this.safeString(resource, 'deposit_status');
|
|
967
|
+
if (enabled === 'enabled') {
|
|
968
|
+
const parsedAddress = this.parseDepositAddress(resource, currency);
|
|
969
|
+
result[parsedAddress['currency']] = parsedAddress;
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
return result;
|
|
973
|
+
}
|
|
974
|
+
parseDepositAddress(depositAddress, currency = undefined) {
|
|
975
|
+
//
|
|
976
|
+
// {
|
|
977
|
+
// chain_name: 'TRC20',
|
|
978
|
+
// currency_id: 'usdt',
|
|
979
|
+
// address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
|
|
980
|
+
// memo: '',
|
|
981
|
+
// deposit_status: 'enabled'
|
|
982
|
+
// }
|
|
983
|
+
//
|
|
984
|
+
const address = this.safeString(depositAddress, 'address');
|
|
985
|
+
this.checkAddress(address);
|
|
986
|
+
const currencyId = this.safeString(depositAddress, 'currency_id');
|
|
987
|
+
const networkId = this.safeString(depositAddress, 'chain_name');
|
|
988
|
+
return {
|
|
989
|
+
'info': depositAddress,
|
|
990
|
+
'currency': this.safeCurrencyCode(currencyId, currency),
|
|
991
|
+
'address': address,
|
|
992
|
+
'tag': this.safeString(depositAddress, 'memo'),
|
|
993
|
+
'network': this.networkIdToCode(networkId),
|
|
994
|
+
};
|
|
995
|
+
}
|
|
916
996
|
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
917
997
|
let url = this.urls['api']['rest'] + '/' + this.version + '/' + this.implodeParams(path, params);
|
|
918
998
|
const query = this.omit(params, this.extractParams(path));
|
package/js/src/okx.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/okx.js';
|
|
2
|
-
import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Str, Transaction, Ticker, OrderBook, Balances, Tickers, Market, Greeks, Strings, MarketInterface, Currency, Leverage, Num, Account, OptionChain, Option, MarginModification, TradingFeeInterface, Currencies, Conversion, CancellationRequest, Dict, Position, CrossBorrowRate, CrossBorrowRates, LeverageTier, int, LedgerEntry } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Str, Transaction, Ticker, OrderBook, Balances, Tickers, Market, Greeks, Strings, MarketInterface, Currency, Leverage, Num, Account, OptionChain, Option, MarginModification, TradingFeeInterface, Currencies, Conversion, CancellationRequest, Dict, Position, CrossBorrowRate, CrossBorrowRates, LeverageTier, int, LedgerEntry, FundingRate } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class okx
|
|
5
5
|
* @augments Exchange
|
|
@@ -88,44 +88,9 @@ export default class okx extends Exchange {
|
|
|
88
88
|
body: any;
|
|
89
89
|
headers: any;
|
|
90
90
|
};
|
|
91
|
-
parseFundingRate(contract: any, market?: Market):
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
markPrice: any;
|
|
95
|
-
indexPrice: any;
|
|
96
|
-
interestRate: number;
|
|
97
|
-
estimatedSettlePrice: any;
|
|
98
|
-
timestamp: any;
|
|
99
|
-
datetime: any;
|
|
100
|
-
fundingRate: number;
|
|
101
|
-
fundingTimestamp: number;
|
|
102
|
-
fundingDatetime: string;
|
|
103
|
-
nextFundingRate: number;
|
|
104
|
-
nextFundingTimestamp: number;
|
|
105
|
-
nextFundingDatetime: string;
|
|
106
|
-
previousFundingRate: any;
|
|
107
|
-
previousFundingTimestamp: any;
|
|
108
|
-
previousFundingDatetime: any;
|
|
109
|
-
};
|
|
110
|
-
fetchFundingRate(symbol: string, params?: {}): Promise<{
|
|
111
|
-
info: any;
|
|
112
|
-
symbol: string;
|
|
113
|
-
markPrice: any;
|
|
114
|
-
indexPrice: any;
|
|
115
|
-
interestRate: number;
|
|
116
|
-
estimatedSettlePrice: any;
|
|
117
|
-
timestamp: any;
|
|
118
|
-
datetime: any;
|
|
119
|
-
fundingRate: number;
|
|
120
|
-
fundingTimestamp: number;
|
|
121
|
-
fundingDatetime: string;
|
|
122
|
-
nextFundingRate: number;
|
|
123
|
-
nextFundingTimestamp: number;
|
|
124
|
-
nextFundingDatetime: string;
|
|
125
|
-
previousFundingRate: any;
|
|
126
|
-
previousFundingTimestamp: any;
|
|
127
|
-
previousFundingDatetime: any;
|
|
128
|
-
}>;
|
|
91
|
+
parseFundingRate(contract: any, market?: Market): FundingRate;
|
|
92
|
+
parseFundingInterval(interval: any): string;
|
|
93
|
+
fetchFundingRate(symbol: string, params?: {}): Promise<FundingRate>;
|
|
129
94
|
fetchFundingHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<FundingHistory[]>;
|
|
130
95
|
setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
|
|
131
96
|
fetchPositionMode(symbol?: Str, params?: {}): Promise<{
|
package/js/src/okx.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
import Exchange from './abstract/okx.js';
|
|
9
|
-
import { ExchangeError, ExchangeNotAvailable, OnMaintenance, ArgumentsRequired, BadRequest, AccountSuspended, InvalidAddress, DDoSProtection, PermissionDenied, InsufficientFunds, InvalidNonce, InvalidOrder, OrderNotFound, AuthenticationError, RequestTimeout, BadSymbol, RateLimitExceeded, NetworkError, CancelPending, NotSupported, AccountNotEnabled, ContractUnavailable } from './base/errors.js';
|
|
9
|
+
import { ExchangeError, ExchangeNotAvailable, OnMaintenance, ArgumentsRequired, BadRequest, AccountSuspended, InvalidAddress, DDoSProtection, PermissionDenied, InsufficientFunds, InvalidNonce, InvalidOrder, OrderNotFound, AuthenticationError, RequestTimeout, BadSymbol, RateLimitExceeded, NetworkError, CancelPending, NotSupported, AccountNotEnabled, ContractUnavailable, ManualInteractionNeeded } from './base/errors.js';
|
|
10
10
|
import { Precise } from './base/Precise.js';
|
|
11
11
|
import { TICK_SIZE } from './base/functions/number.js';
|
|
12
12
|
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
@@ -578,6 +578,7 @@ export default class okx extends Exchange {
|
|
|
578
578
|
// General Class
|
|
579
579
|
'1': ExchangeError,
|
|
580
580
|
'2': ExchangeError,
|
|
581
|
+
'4088': ManualInteractionNeeded,
|
|
581
582
|
'50000': BadRequest,
|
|
582
583
|
'50001': OnMaintenance,
|
|
583
584
|
'50002': BadRequest,
|
|
@@ -6052,6 +6053,9 @@ export default class okx extends Exchange {
|
|
|
6052
6053
|
const symbol = this.safeSymbol(marketId, market);
|
|
6053
6054
|
const nextFundingRate = this.safeNumber(contract, 'nextFundingRate');
|
|
6054
6055
|
const fundingTime = this.safeInteger(contract, 'fundingTime');
|
|
6056
|
+
const fundingTimeString = this.safeString(contract, 'fundingTime');
|
|
6057
|
+
const nextFundingTimeString = this.safeString(contract, 'nextFundingRate');
|
|
6058
|
+
const millisecondsInterval = Precise.stringSub(nextFundingTimeString, fundingTimeString);
|
|
6055
6059
|
// https://www.okx.com/support/hc/en-us/articles/360053909272-Ⅸ-Introduction-to-perpetual-swap-funding-fee
|
|
6056
6060
|
// > The current interest is 0.
|
|
6057
6061
|
return {
|
|
@@ -6072,8 +6076,19 @@ export default class okx extends Exchange {
|
|
|
6072
6076
|
'previousFundingRate': undefined,
|
|
6073
6077
|
'previousFundingTimestamp': undefined,
|
|
6074
6078
|
'previousFundingDatetime': undefined,
|
|
6079
|
+
'interval': this.parseFundingInterval(millisecondsInterval),
|
|
6075
6080
|
};
|
|
6076
6081
|
}
|
|
6082
|
+
parseFundingInterval(interval) {
|
|
6083
|
+
const intervals = {
|
|
6084
|
+
'3600000': '1h',
|
|
6085
|
+
'14400000': '4h',
|
|
6086
|
+
'28800000': '8h',
|
|
6087
|
+
'57600000': '16h',
|
|
6088
|
+
'86400000': '24h',
|
|
6089
|
+
};
|
|
6090
|
+
return this.safeString(intervals, interval, interval);
|
|
6091
|
+
}
|
|
6077
6092
|
async fetchFundingRate(symbol, params = {}) {
|
|
6078
6093
|
/**
|
|
6079
6094
|
* @method
|
package/js/src/oxfun.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/oxfun.js';
|
|
2
|
-
import type { Account, Balances, Currencies, Currency, Int, Market, Num, OHLCV, Order, OrderBook, OrderType, OrderSide, OrderRequest, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry } from './base/types.js';
|
|
2
|
+
import type { Account, Balances, Currencies, Currency, Int, Market, Num, OHLCV, Order, OrderBook, OrderType, OrderSide, OrderRequest, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry, FundingRate, FundingRates } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class oxfun
|
|
5
5
|
* @augments Exchange
|
|
@@ -16,26 +16,8 @@ export default class oxfun extends Exchange {
|
|
|
16
16
|
fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
17
17
|
parseOHLCV(ohlcv: any, market?: Market): OHLCV;
|
|
18
18
|
fetchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
19
|
-
fetchFundingRates(symbols?: Strings, params?: {}): Promise<
|
|
20
|
-
parseFundingRate(fundingRate: any, market?: Market):
|
|
21
|
-
info: any;
|
|
22
|
-
symbol: string;
|
|
23
|
-
markPrice: any;
|
|
24
|
-
indexPrice: any;
|
|
25
|
-
interestRate: number;
|
|
26
|
-
estimatedSettlePrice: any;
|
|
27
|
-
timestamp: number;
|
|
28
|
-
datetime: string;
|
|
29
|
-
fundingRate: number;
|
|
30
|
-
fundingTimestamp: any;
|
|
31
|
-
fundingDatetime: any;
|
|
32
|
-
nextFundingRate: any;
|
|
33
|
-
nextFundingTimestamp: any;
|
|
34
|
-
nextFundingDatetime: any;
|
|
35
|
-
previousFundingRate: any;
|
|
36
|
-
previousFundingTimestamp: any;
|
|
37
|
-
previousFundingDatetime: any;
|
|
38
|
-
};
|
|
19
|
+
fetchFundingRates(symbols?: Strings, params?: {}): Promise<FundingRates>;
|
|
20
|
+
parseFundingRate(fundingRate: any, market?: Market): FundingRate;
|
|
39
21
|
fetchFundingRateHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").FundingRateHistory[]>;
|
|
40
22
|
parseFundingRateHistory(info: any, market?: Market): {
|
|
41
23
|
info: any;
|
package/js/src/oxfun.js
CHANGED
|
@@ -70,7 +70,7 @@ export default class oxfun extends Exchange {
|
|
|
70
70
|
'fetchDepositWithdrawFee': false,
|
|
71
71
|
'fetchDepositWithdrawFees': false,
|
|
72
72
|
'fetchFundingHistory': true,
|
|
73
|
-
'fetchFundingRate':
|
|
73
|
+
'fetchFundingRate': 'emulated',
|
|
74
74
|
'fetchFundingRateHistory': true,
|
|
75
75
|
'fetchFundingRates': true,
|
|
76
76
|
'fetchIndexOHLCV': false,
|
|
@@ -1004,8 +1004,8 @@ export default class oxfun extends Exchange {
|
|
|
1004
1004
|
/**
|
|
1005
1005
|
* @method
|
|
1006
1006
|
* @name oxfun#fetchFundingRates
|
|
1007
|
+
* @description fetch the current funding rates for multiple markets
|
|
1007
1008
|
* @see https://docs.ox.fun/?json#get-v3-funding-estimates
|
|
1008
|
-
* @description fetch the current funding rates
|
|
1009
1009
|
* @param {string[]} symbols unified market symbols
|
|
1010
1010
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1011
1011
|
* @returns {Order[]} an array of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
|
|
@@ -1041,8 +1041,7 @@ export default class oxfun extends Exchange {
|
|
|
1041
1041
|
// "marketCode": "OX-USD-SWAP-LIN",
|
|
1042
1042
|
// "fundingAt": "1715515200000",
|
|
1043
1043
|
// "estFundingRate": "0.000200000"
|
|
1044
|
-
// }
|
|
1045
|
-
//
|
|
1044
|
+
// }
|
|
1046
1045
|
//
|
|
1047
1046
|
const symbol = this.safeString(fundingRate, 'marketCode');
|
|
1048
1047
|
market = this.market(symbol);
|
|
@@ -1065,6 +1064,7 @@ export default class oxfun extends Exchange {
|
|
|
1065
1064
|
'previousFundingRate': undefined,
|
|
1066
1065
|
'previousFundingTimestamp': undefined,
|
|
1067
1066
|
'previousFundingDatetime': undefined,
|
|
1067
|
+
'interval': undefined,
|
|
1068
1068
|
};
|
|
1069
1069
|
}
|
|
1070
1070
|
async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
package/js/src/phemex.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/phemex.js';
|
|
2
|
-
import type { TransferEntry, Balances, Currency, FundingHistory, FundingRateHistory, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, MarginModification, Currencies, Dict, LeverageTier, LeverageTiers, int } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, Balances, Currency, FundingHistory, FundingRateHistory, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, MarginModification, Currencies, Dict, LeverageTier, LeverageTiers, int, FundingRate } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class phemex
|
|
5
5
|
* @augments Exchange
|
|
@@ -62,44 +62,8 @@ export default class phemex extends Exchange {
|
|
|
62
62
|
parsePosition(position: Dict, market?: Market): import("./base/types.js").Position;
|
|
63
63
|
fetchFundingHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<FundingHistory[]>;
|
|
64
64
|
parseFundingFeeToPrecision(value: any, market?: Market, currencyCode?: Str): any;
|
|
65
|
-
fetchFundingRate(symbol: string, params?: {}): Promise<
|
|
66
|
-
|
|
67
|
-
symbol: string;
|
|
68
|
-
markPrice: any;
|
|
69
|
-
indexPrice: any;
|
|
70
|
-
interestRate: any;
|
|
71
|
-
estimatedSettlePrice: any;
|
|
72
|
-
timestamp: number;
|
|
73
|
-
datetime: string;
|
|
74
|
-
fundingRate: any;
|
|
75
|
-
fundingTimestamp: any;
|
|
76
|
-
fundingDatetime: any;
|
|
77
|
-
nextFundingRate: any;
|
|
78
|
-
nextFundingTimestamp: any;
|
|
79
|
-
nextFundingDatetime: any;
|
|
80
|
-
previousFundingRate: any;
|
|
81
|
-
previousFundingTimestamp: any;
|
|
82
|
-
previousFundingDatetime: any;
|
|
83
|
-
}>;
|
|
84
|
-
parseFundingRate(contract: any, market?: Market): {
|
|
85
|
-
info: any;
|
|
86
|
-
symbol: string;
|
|
87
|
-
markPrice: any;
|
|
88
|
-
indexPrice: any;
|
|
89
|
-
interestRate: any;
|
|
90
|
-
estimatedSettlePrice: any;
|
|
91
|
-
timestamp: number;
|
|
92
|
-
datetime: string;
|
|
93
|
-
fundingRate: any;
|
|
94
|
-
fundingTimestamp: any;
|
|
95
|
-
fundingDatetime: any;
|
|
96
|
-
nextFundingRate: any;
|
|
97
|
-
nextFundingTimestamp: any;
|
|
98
|
-
nextFundingDatetime: any;
|
|
99
|
-
previousFundingRate: any;
|
|
100
|
-
previousFundingTimestamp: any;
|
|
101
|
-
previousFundingDatetime: any;
|
|
102
|
-
};
|
|
65
|
+
fetchFundingRate(symbol: string, params?: {}): Promise<FundingRate>;
|
|
66
|
+
parseFundingRate(contract: any, market?: Market): FundingRate;
|
|
103
67
|
setMargin(symbol: string, amount: number, params?: {}): Promise<MarginModification>;
|
|
104
68
|
parseMarginStatus(status: any): string;
|
|
105
69
|
parseMarginModification(data: Dict, market?: Market): MarginModification;
|
package/js/src/phemex.js
CHANGED
|
@@ -4131,6 +4131,7 @@ export default class phemex extends Exchange {
|
|
|
4131
4131
|
'previousFundingRate': undefined,
|
|
4132
4132
|
'previousFundingTimestamp': undefined,
|
|
4133
4133
|
'previousFundingDatetime': undefined,
|
|
4134
|
+
'interval': undefined,
|
|
4134
4135
|
};
|
|
4135
4136
|
}
|
|
4136
4137
|
async setMargin(symbol, amount, params = {}) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/poloniexfutures.js';
|
|
2
|
-
import type { Balances, Dict, FundingHistory, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, int } from './base/types.js';
|
|
2
|
+
import type { Balances, Dict, FundingHistory, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, int, FundingRate } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class poloniexfutures
|
|
5
5
|
* @augments Exchange
|
|
@@ -55,25 +55,8 @@ export default class poloniexfutures extends Exchange {
|
|
|
55
55
|
fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
56
56
|
fetchOrder(id?: Str, symbol?: Str, params?: {}): Promise<Order>;
|
|
57
57
|
parseOrder(order: Dict, market?: Market): Order;
|
|
58
|
-
fetchFundingRate(symbol: string, params?: {}): Promise<
|
|
59
|
-
|
|
60
|
-
symbol: string;
|
|
61
|
-
markPrice: any;
|
|
62
|
-
indexPrice: any;
|
|
63
|
-
interestRate: any;
|
|
64
|
-
estimatedSettlePrice: any;
|
|
65
|
-
timestamp: any;
|
|
66
|
-
datetime: any;
|
|
67
|
-
fundingRate: number;
|
|
68
|
-
fundingTimestamp: any;
|
|
69
|
-
fundingDatetime: any;
|
|
70
|
-
nextFundingRate: any;
|
|
71
|
-
nextFundingTimestamp: any;
|
|
72
|
-
nextFundingDatetime: any;
|
|
73
|
-
previousFundingRate: number;
|
|
74
|
-
previousFundingTimestamp: number;
|
|
75
|
-
previousFundingDatetime: string;
|
|
76
|
-
}>;
|
|
58
|
+
fetchFundingRate(symbol: string, params?: {}): Promise<FundingRate>;
|
|
59
|
+
parseFundingInterval(interval: any): string;
|
|
77
60
|
fetchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
78
61
|
setMarginMode(marginMode: string, symbol?: Str, params?: {}): Promise<any>;
|
|
79
62
|
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
@@ -1658,8 +1658,19 @@ export default class poloniexfutures extends Exchange {
|
|
|
1658
1658
|
'previousFundingRate': this.safeNumber(data, 'value'),
|
|
1659
1659
|
'previousFundingTimestamp': fundingTimestamp,
|
|
1660
1660
|
'previousFundingDatetime': this.iso8601(fundingTimestamp),
|
|
1661
|
+
'interval': this.parseFundingInterval(this.safeString(data, 'interval')),
|
|
1661
1662
|
};
|
|
1662
1663
|
}
|
|
1664
|
+
parseFundingInterval(interval) {
|
|
1665
|
+
const intervals = {
|
|
1666
|
+
'3600000': '1h',
|
|
1667
|
+
'14400000': '4h',
|
|
1668
|
+
'28800000': '8h',
|
|
1669
|
+
'57600000': '16h',
|
|
1670
|
+
'86400000': '24h',
|
|
1671
|
+
};
|
|
1672
|
+
return this.safeString(intervals, interval, interval);
|
|
1673
|
+
}
|
|
1663
1674
|
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1664
1675
|
/**
|
|
1665
1676
|
* @method
|
package/js/src/pro/deribit.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import deribitRest from '../deribit.js';
|
|
2
|
-
import type { Int, Str, OrderBook, Order, Trade, Ticker, OHLCV, Balances } from '../base/types.js';
|
|
2
|
+
import type { Int, Str, OrderBook, Order, Trade, Ticker, OHLCV, Balances, Strings, Tickers } from '../base/types.js';
|
|
3
3
|
import Client from '../base/ws/Client.js';
|
|
4
4
|
export default class deribit extends deribitRest {
|
|
5
5
|
describe(): any;
|
|
@@ -7,7 +7,11 @@ export default class deribit extends deribitRest {
|
|
|
7
7
|
watchBalance(params?: {}): Promise<Balances>;
|
|
8
8
|
handleBalance(client: Client, message: any): void;
|
|
9
9
|
watchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
10
|
+
watchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
10
11
|
handleTicker(client: Client, message: any): void;
|
|
12
|
+
watchBidsAsks(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
13
|
+
handleBidAsk(client: Client, message: any): void;
|
|
14
|
+
parseWsBidAsk(ticker: any, market?: any): Ticker;
|
|
11
15
|
watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
12
16
|
watchTradesForSymbols(symbols: string[], since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
13
17
|
handleTrades(client: Client, message: any): void;
|
package/js/src/pro/deribit.js
CHANGED
|
@@ -17,7 +17,8 @@ export default class deribit extends deribitRest {
|
|
|
17
17
|
'ws': true,
|
|
18
18
|
'watchBalance': true,
|
|
19
19
|
'watchTicker': true,
|
|
20
|
-
'watchTickers':
|
|
20
|
+
'watchTickers': true,
|
|
21
|
+
'watchBidsAsks': true,
|
|
21
22
|
'watchTrades': true,
|
|
22
23
|
'watchTradesForSymbols': true,
|
|
23
24
|
'watchMyTrades': true,
|
|
@@ -188,6 +189,48 @@ export default class deribit extends deribitRest {
|
|
|
188
189
|
const request = this.deepExtend(message, params);
|
|
189
190
|
return await this.watch(url, channel, request, channel, request);
|
|
190
191
|
}
|
|
192
|
+
async watchTickers(symbols = undefined, params = {}) {
|
|
193
|
+
/**
|
|
194
|
+
* @method
|
|
195
|
+
* @name deribit#watchTickers
|
|
196
|
+
* @see https://docs.deribit.com/#ticker-instrument_name-interval
|
|
197
|
+
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
198
|
+
* @param {string[]} [symbols] unified symbol of the market to fetch the ticker for
|
|
199
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
200
|
+
* @param {str} [params.interval] specify aggregation and frequency of notifications. Possible values: 100ms, raw
|
|
201
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
202
|
+
*/
|
|
203
|
+
await this.loadMarkets();
|
|
204
|
+
symbols = this.marketSymbols(symbols, undefined, false);
|
|
205
|
+
const url = this.urls['api']['ws'];
|
|
206
|
+
const interval = this.safeString(params, 'interval', '100ms');
|
|
207
|
+
params = this.omit(params, 'interval');
|
|
208
|
+
await this.loadMarkets();
|
|
209
|
+
if (interval === 'raw') {
|
|
210
|
+
await this.authenticate();
|
|
211
|
+
}
|
|
212
|
+
const channels = [];
|
|
213
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
214
|
+
const market = this.market(symbols[i]);
|
|
215
|
+
channels.push('ticker.' + market['id'] + '.' + interval);
|
|
216
|
+
}
|
|
217
|
+
const message = {
|
|
218
|
+
'jsonrpc': '2.0',
|
|
219
|
+
'method': 'public/subscribe',
|
|
220
|
+
'params': {
|
|
221
|
+
'channels': channels,
|
|
222
|
+
},
|
|
223
|
+
'id': this.requestId(),
|
|
224
|
+
};
|
|
225
|
+
const request = this.deepExtend(message, params);
|
|
226
|
+
const newTickers = await this.watchMultiple(url, channels, request, channels, request);
|
|
227
|
+
if (this.newUpdates) {
|
|
228
|
+
const tickers = {};
|
|
229
|
+
tickers[newTickers['symbol']] = newTickers;
|
|
230
|
+
return tickers;
|
|
231
|
+
}
|
|
232
|
+
return this.filterByArray(this.tickers, 'symbol', symbols);
|
|
233
|
+
}
|
|
191
234
|
handleTicker(client, message) {
|
|
192
235
|
//
|
|
193
236
|
// {
|
|
@@ -227,6 +270,83 @@ export default class deribit extends deribitRest {
|
|
|
227
270
|
this.tickers[symbol] = ticker;
|
|
228
271
|
client.resolve(ticker, messageHash);
|
|
229
272
|
}
|
|
273
|
+
async watchBidsAsks(symbols = undefined, params = {}) {
|
|
274
|
+
/**
|
|
275
|
+
* @method
|
|
276
|
+
* @name deribit#watchBidsAsks
|
|
277
|
+
* @see https://docs.deribit.com/#quote-instrument_name
|
|
278
|
+
* @description watches best bid & ask for symbols
|
|
279
|
+
* @param {string[]} [symbols] unified symbol of the market to fetch the ticker for
|
|
280
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
281
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
282
|
+
*/
|
|
283
|
+
await this.loadMarkets();
|
|
284
|
+
symbols = this.marketSymbols(symbols, undefined, false);
|
|
285
|
+
const url = this.urls['api']['ws'];
|
|
286
|
+
const channels = [];
|
|
287
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
288
|
+
const market = this.market(symbols[i]);
|
|
289
|
+
channels.push('quote.' + market['id']);
|
|
290
|
+
}
|
|
291
|
+
const message = {
|
|
292
|
+
'jsonrpc': '2.0',
|
|
293
|
+
'method': 'public/subscribe',
|
|
294
|
+
'params': {
|
|
295
|
+
'channels': channels,
|
|
296
|
+
},
|
|
297
|
+
'id': this.requestId(),
|
|
298
|
+
};
|
|
299
|
+
const request = this.deepExtend(message, params);
|
|
300
|
+
const newTickers = await this.watchMultiple(url, channels, request, channels, request);
|
|
301
|
+
if (this.newUpdates) {
|
|
302
|
+
const tickers = {};
|
|
303
|
+
tickers[newTickers['symbol']] = newTickers;
|
|
304
|
+
return tickers;
|
|
305
|
+
}
|
|
306
|
+
return this.filterByArray(this.bidsasks, 'symbol', symbols);
|
|
307
|
+
}
|
|
308
|
+
handleBidAsk(client, message) {
|
|
309
|
+
//
|
|
310
|
+
// {
|
|
311
|
+
// "jsonrpc": "2.0",
|
|
312
|
+
// "method": "subscription",
|
|
313
|
+
// "params": {
|
|
314
|
+
// "channel": "quote.BTC_USDT",
|
|
315
|
+
// "data": {
|
|
316
|
+
// "best_bid_amount": 0.026,
|
|
317
|
+
// "best_ask_amount": 0.026,
|
|
318
|
+
// "best_bid_price": 63908,
|
|
319
|
+
// "best_ask_price": 63940,
|
|
320
|
+
// "instrument_name": "BTC_USDT",
|
|
321
|
+
// "timestamp": 1727765131750
|
|
322
|
+
// }
|
|
323
|
+
// }
|
|
324
|
+
// }
|
|
325
|
+
//
|
|
326
|
+
const params = this.safeDict(message, 'params', {});
|
|
327
|
+
const data = this.safeDict(params, 'data', {});
|
|
328
|
+
const ticker = this.parseWsBidAsk(data);
|
|
329
|
+
const symbol = ticker['symbol'];
|
|
330
|
+
this.bidsasks[symbol] = ticker;
|
|
331
|
+
const messageHash = this.safeString(params, 'channel');
|
|
332
|
+
client.resolve(ticker, messageHash);
|
|
333
|
+
}
|
|
334
|
+
parseWsBidAsk(ticker, market = undefined) {
|
|
335
|
+
const marketId = this.safeString(ticker, 'instrument_name');
|
|
336
|
+
market = this.safeMarket(marketId, market);
|
|
337
|
+
const symbol = this.safeString(market, 'symbol');
|
|
338
|
+
const timestamp = this.safeInteger(ticker, 'timestamp');
|
|
339
|
+
return this.safeTicker({
|
|
340
|
+
'symbol': symbol,
|
|
341
|
+
'timestamp': timestamp,
|
|
342
|
+
'datetime': this.iso8601(timestamp),
|
|
343
|
+
'ask': this.safeString(ticker, 'best_ask_price'),
|
|
344
|
+
'askVolume': this.safeString(ticker, 'best_ask_amount'),
|
|
345
|
+
'bid': this.safeString(ticker, 'best_bid_price'),
|
|
346
|
+
'bidVolume': this.safeString(ticker, 'best_bid_amount'),
|
|
347
|
+
'info': ticker,
|
|
348
|
+
}, market);
|
|
349
|
+
}
|
|
230
350
|
async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
231
351
|
/**
|
|
232
352
|
* @method
|
|
@@ -872,6 +992,7 @@ export default class deribit extends deribitRest {
|
|
|
872
992
|
};
|
|
873
993
|
const handlers = {
|
|
874
994
|
'ticker': this.handleTicker,
|
|
995
|
+
'quote': this.handleBidAsk,
|
|
875
996
|
'book': this.handleOrderBook,
|
|
876
997
|
'trades': this.handleTrades,
|
|
877
998
|
'chart': this.handleOHLCV,
|