Извлечение значений из объекта генератора и обновление его до переменных для выполнения других функций вне цикла - PullRequest
0 голосов
/ 29 октября 2019

Итак, мне удалось получить доступ к API от брокера. Удалось получить цены в прямом эфире каждые миллисекунды. Эта потоковая передача является объектом-генератором, я передал объекту итератор, чтобы просмотреть каждую строку типа данных str, которая содержит информацию о различных ценах. Затем я использовал функцию split, чтобы разбить str на список и затем передать его в различные переменные, которые впоследствии можно будет использовать в качестве расчетов для условия входа или выхода из сделок.

однако ... Я чувствую, что должен написать всю свою цену, входя и выходя из сделок внутри цикла for. Если я разорву цикл, цена не будет течь ...

Поэтому мой вопрос: как мне упростить этот код, чтобы мне не пришлось писать все в одном цикле for, который генерирует цены в str? тип данных.

Если я просто распечатаю строку из stream_i, являющегося объектом генератора, без разбиения строк, то это то, что я получаю .. данные одной строки.

"1,1| 8063.9 | 8062.3 | 8065.8 | 8061.5 "

Здесь 1,1 - таблица, добавленная из подписки на сервер, остальные - цены, такие как open, close, high, low ...

Итакя разбил строку и затем передал эти цены в переменные .... чтобы иметь возможность выполнять любые расчеты с ценами.


def xtract_price_5m():
    for line in stream_i:
        if "|" in line:
            table, data = line.split("|", 1)
            if table == "1,1":
                a_open, a_close, a_high, a_low = data.split("|", 3)
                index_allprice = len(a_open + a_close + a_high + a_low)
                if index_allprice > 15:
                    print(f"Open: {a_open} - Close: {a_close} - High: {a_high} - Low: {a_low} ")
                    if float(a_close) > float(a_open) and (float(a_close) - float(a_open)) < 10 and (float(a_close) - float(a_open)) > 4:
                        print("BUY BUY BUY !!!!!!")
                    else:
                        print("CANDLE TOO BIG OR TOO SMALL")


Если я просто напечатаю строку из stream_iкоторый является объектом-генератором, без разделения строк, то это то, что я получаю ... данные одной строки.

"1,1 | 8063.9 | 8062.3 | 8065.8 | 8061.5"

Shere 1, 1 - таблица, добавленная из подписки сервера, остальные - цены, такие какopen, close, high, low ...

Итак, я разбил строку вверх и затем передал эти цены в переменные ...., чтобы иметь возможность выполнять любые вычисления с ценами.

Есть ли способ, где я могу циклически пройти по этому объекту-генератору, получить цену, затем обновить ее до переменных вне этого цикла, затем повторить ... затем оттуда я могу выполнять вычисления вне этой итерации. Из-за того, что это живой поток обновления данных, это будет бесконечный цикл, повторяющий каждую обновляемую строку. Поэтому, если я прерву цикл, он прекратит потоковую передачу цен.

, например,

функция, которая разбивает строки и затем получает цены в виде отдельных данных

функция, которая затем использует эти данные для выполнения расчетов условий входа или выхода на рынок

...