Не работает elif после if

У нас есть библиотека tradingview_ta

По задача код должен запускать цикл while true дальше проходимся по словарю и берем значение монет и проверяем его на условие. Если выйдет значение "BUY" либо же "STRONG_BUY" он должен купить и ждать пока следующее условие не поменяется на "SELL" либо же "STRONG_SELL" и продавать монету. Код не должен покупать новую валюту пока не продаст уже купленную. И когда из словаря берет монету и нету условия на покупку он должен переходить к следующей монете пока условия на покупку не совпадут.

Но в моем коде. Срабатывает первое условие (if) на покупку и он не ждет пока выйдет условия (elif) на продажу а постоянно покупает новые и новые валюты. Видимо я условие на продажу поставил не правильно. Помогите разобраться и поставить правильное условие:

from tradingview_ta import TA_Handler, Interval, Exchange

last_order = {
'TRBUSDT': 'sell',
'ALGOUSDT': 'sell',
'COTIUSDT': 'sell'}
 
while True:
    for key, values in last_order.items():
        tesla = TA_Handler(
            symbol=key,
            exchange="BINANCE",
            screener="CRYPTO",
            interval=Interval.INTERVAL_1_MINUTE,
        )
        rec = tesla.get_analysis().moving_averages["RECOMMENDATION"]                                    
     
        if "STRONG_BUY" in rec and values == "sell" or "BUY" in rec and values == "sell":
            values = "buy"
            
        elif "SELL" in rec and values == "buy" or "STRONG_SELL" in rec and values == "buy":
            values = "sell"

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

rec - в виде dict выдает 5 значений(STRONG_BUY, BUY, STRONG_SELL, SELL, NEUTRAL) введите сюда описание изображения

введите сюда описание изображения


Ответы (1 шт):

Автор решения: CrazyElf

Если я правильно понял, вы хотите менять значения в словаре last_order, но делаете это через переменную цикла values, которая не имеет обратной связи со словарём. Чтобы поменять значение в словаре, вам его нужно явно туда записать по ключу. Ну и ещё можно чуть сократить повторяющиеся условия:

    for key, values in last_order.items():

        ...
     
        if values == "sell" and ("STRONG_BUY" in rec or "BUY" in rec):
            last_order[key] = "buy"
            
        elif values == "buy" and ("SELL" in rec or "STRONG_SELL" in rec):
            last_order[key] = "sell"
→ Ссылка