@milltt

Как реализовать расчет определенных индикаторов торговли в реальном времени?

К примеру, есть функция, которая прослушивает вебсокет 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}")
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы