使用套接字或 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 不支持多品种调用