К примеру, есть функция, которая прослушивает вебсокет binance и обрабатывает ивент, который содержит данные о свечах
КОДasync def kline_listener(bsm: BinanceSocketManager, client: AsyncClient, symbol: str):
async with bsm.kline_futures_socket(symbol=symbol, interval=AsyncClient.KLINE_INTERVAL_1MINUTE) as stream:
klines = await client.get_historical_klines(
symbol,
AsyncClient.KLINE_INTERVAL_1MINUTE,
"15 minute ago UTC",
klines_type=HistoricalKlinesType.FUTURES
)
klines = form_kline_from_array(klines)
while True:
response = await stream.recv()
kline = Kline(**response["k"])
length = len(klines)
if kline.is_closed:
if length == 15:
klines.pop(0)
klines.append(kline)
else:
if length == 14:
klines.append(kline)
yield calculate_natr(klines)
elif length == 15:
klines.pop()
klines.append(kline)
yield calculate_natr(klines)
Также binance api позволяет получить абсолютно все тикеры, которые доступны на бирже. Необходимо написать условно цикл, в котором надо пройтись по всем тикерам (на данный момент 2260 штук) и создать asyncio таск на функцию get_natr для каждого тикера, чтобы они работали в фоне и для начала выводили (в данном случае индикатор NATR) в консоль
get_natr()async def get_natr(symbol: str, bsm: BinanceSocketManager, client: AsyncClient):
async for natr in kline_listener(bsm, client, symbol):
logger.info(f"NATR ({symbol}): {natr}")