我正在尝试使用 Binance API
获取特定时间间隔内的平均交易量。例如,我想要一个平均交易量
,其中时间范围的定义如下(伪代码):
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 性能不高,也不是一种可行的方法。我的意思是我知道这个请求的请求 weight
等于 1
,我可能会接受限制和限制,但是,还有其他方法可以实现吗?获取多个代币在一定时间间隔内的平均交易量(例如在一个请求中),或者以除了每分钟进行那么多 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
}
}
这样您就拥有了所需的所有数据。您可以从网络套接字保存所有烛台并计算交易量的平均值。这样,如果您必须计算 24 小时内的交易量平均值,则需要等待 24 小时数据收集,否则您可以创建第一个配置方法,该方法首先调用该方法来计算所有 200 个品种的历史数据并进行权重计算。如果 150 个调用更大,那么您必须等待其他 50 个调用的最大重量。
不幸的是,binance 不支持多品种调用
关于javascript - 使用套接字或 REST 获取一定时间间隔内多个代币的平均交易量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69135405/