Estoy tratando de obtener un volumen promedio dentro de cierto intervalo de tiempo usando la API de Binance. Por ejemplo, quiero tener un average volume donde el rango de tiempo se defina así (pseudocódigo):
startTime = now() - 24h - 20 min endTime = now() - 20 min Y tengo que hacer esto para 200 pares comerciales (por ejemplo, todos los pares comerciales relacionados con USDT ).
Sé que puedo hacer una llamada API por símbolo ( https://github.com/binance/binance-spot-api-docs/blob/master/rest-api.md#klinecandlestick-data ) para obtener estos datos usando REST , como esto:
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; } Pero como tengo que hacer esto cada minuto, serían 200 llamadas a la API por minuto. Y ya estoy usando sockets para obtener datos de velas cada dos segundos para 200 pares.
Así que supongo que usar REST api/v3/klines no es eficaz o una forma de hacerlo aquí. Quiero decir, sé que esta solicitud tiene un weight de solicitud que es igual a 1 , y probablemente estaría bien con restricciones y límites, pero, ¿hay alguna otra forma de obtener el volumen promedio dentro de cierto intervalo para varias monedas como en una sola solicitud? , o de alguna otra manera que no sea hacer tantas llamadas a la API cada minuto?
Como ya está utilizando socket para 200 pares, no necesita ninguna otra llamada API. Esta es la respuesta del socket para 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 } }para que tengas todos los datos que necesitas. Puede guardar todas las velas del websocket y calcular la media de los volúmenes. De esta manera, si tiene que calcular el volumen medio en 24 horas, debe esperar la recopilación de datos de 24 horas; de lo contrario, puede crear un primer método de configuración que se llame primero y calcule los datos históricos de los 200 símbolos con el cálculo del peso. Si 150 llamadas es mayor que el peso máximo que tiene que esperar unos minutos para otras 50 llamadas.
Desafortunadamente, binance no admite llamadas de símbolos múltiples