使用套接字或 REST 在特定时间间隔内获取多个代币的平均交易量
Getting average volume for multiple coins within certain interval using sockets or REST
我正在尝试使用 Binance API
获取特定时间间隔内的平均交易量。例如,我想要一个 average volume
时间范围定义如下(伪代码):
startTime = now() - 24h - 20 min
endTime = now() - 20 min
而且我必须对 200 个交易对(例如所有 USDT
相关交易对)执行此操作。
我知道我可以对每个符号 (https://github.com/binance/binance-spot-api-docs/blob/master/rest-api.md#klinecandlestick-data) 进行一次 API
调用以使用 REST
获取此数据,如下所示:
async function getKline(marketSymbol, timeInterval, limit) {
var url = 'https://api.binance.com/api/v3/klines?symbol=' + marketSymbol
+ '&interval=' + timeInterval
+ '&startTime' + startTime
+ '&endTime' + endTime
+ '&limit=' + limit;
const response = await fetch(url);
const data = await response.json();
return data;
}
但是因为我必须每分钟都这样做,所以每分钟调用 200 API
次。我已经在使用套接字每两秒获取 200 对烛台数据。
所以我想使用 REST
api/v3/klines 不是高效的,也不是一种去这里的方法。我的意思是我知道这个请求有一个等于 1
的请求 weight
,我可能会接受限制和限制,但是,是否有其他方法可以在特定时间间隔内获得平均音量对于多个硬币,例如在一个请求中,或者除了每分钟进行那么多 API
调用之外的任何其他方式?
由于您已经使用了 200 对套接字,因此不需要任何其他 API 调用。这是 klines 的套接字响应:
{
"e": "kline", // Event type
"E": 123456789, // Event time
"s": "BTCUSDT", // Symbol
"k": {
"t": 123400000, // Kline start time
"T": 123460000, // Kline close time
"s": "BTCUSDT", // Symbol
"i": "1m", // Interval
"f": 100, // First trade ID
"L": 200, // Last trade ID
"o": "0.0010", // Open price
"c": "0.0020", // Close price
"h": "0.0025", // High price
"l": "0.0015", // Low price
"v": "1000", // Base asset volume
"n": 100, // Number of trades
"x": false, // Is this kline closed?
"q": "1.0000", // Quote asset volume
"V": "500", // Taker buy base asset volume
"Q": "0.500", // Taker buy quote asset volume
"B": "123456" // Ignore
}
}
因此您拥有所需的所有数据。您可以从 websocket 保存所有烛台并计算交易量的平均值。这样,如果您必须计算 24 小时内的平均交易量,则需要等待 24 小时的数据收集,否则您可以创建第一个配置方法,该方法首先调用所有 200 个交易品种的历史数据并计算权重。如果 150 次呼叫大于最大重量,您必须等待 1 分钟才能进行其他 50 次呼叫。
很遗憾,binance 不支持多品种调用
我正在尝试使用 Binance API
获取特定时间间隔内的平均交易量。例如,我想要一个 average volume
时间范围定义如下(伪代码):
startTime = now() - 24h - 20 min
endTime = now() - 20 min
而且我必须对 200 个交易对(例如所有 USDT
相关交易对)执行此操作。
我知道我可以对每个符号 (https://github.com/binance/binance-spot-api-docs/blob/master/rest-api.md#klinecandlestick-data) 进行一次 API
调用以使用 REST
获取此数据,如下所示:
async function getKline(marketSymbol, timeInterval, limit) {
var url = 'https://api.binance.com/api/v3/klines?symbol=' + marketSymbol
+ '&interval=' + timeInterval
+ '&startTime' + startTime
+ '&endTime' + endTime
+ '&limit=' + limit;
const response = await fetch(url);
const data = await response.json();
return data;
}
但是因为我必须每分钟都这样做,所以每分钟调用 200 API
次。我已经在使用套接字每两秒获取 200 对烛台数据。
所以我想使用 REST
api/v3/klines 不是高效的,也不是一种去这里的方法。我的意思是我知道这个请求有一个等于 1
的请求 weight
,我可能会接受限制和限制,但是,是否有其他方法可以在特定时间间隔内获得平均音量对于多个硬币,例如在一个请求中,或者除了每分钟进行那么多 API
调用之外的任何其他方式?
由于您已经使用了 200 对套接字,因此不需要任何其他 API 调用。这是 klines 的套接字响应:
{
"e": "kline", // Event type
"E": 123456789, // Event time
"s": "BTCUSDT", // Symbol
"k": {
"t": 123400000, // Kline start time
"T": 123460000, // Kline close time
"s": "BTCUSDT", // Symbol
"i": "1m", // Interval
"f": 100, // First trade ID
"L": 200, // Last trade ID
"o": "0.0010", // Open price
"c": "0.0020", // Close price
"h": "0.0025", // High price
"l": "0.0015", // Low price
"v": "1000", // Base asset volume
"n": 100, // Number of trades
"x": false, // Is this kline closed?
"q": "1.0000", // Quote asset volume
"V": "500", // Taker buy base asset volume
"Q": "0.500", // Taker buy quote asset volume
"B": "123456" // Ignore
}
}
因此您拥有所需的所有数据。您可以从 websocket 保存所有烛台并计算交易量的平均值。这样,如果您必须计算 24 小时内的平均交易量,则需要等待 24 小时的数据收集,否则您可以创建第一个配置方法,该方法首先调用所有 200 个交易品种的历史数据并计算权重。如果 150 次呼叫大于最大重量,您必须等待 1 分钟才能进行其他 50 次呼叫。
很遗憾,binance 不支持多品种调用