Top.Mail.Ru
Ответы

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

Не могу решить следующию проблему:

Код довольно простой. У нас есть библиотека tradingview_ta

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

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

12345678910111213141516171819202122
 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" 
По дате
По рейтингу
Аватар пользователя
Новичок

От того, что ты что-то присвоил values, значение в last_order никак не поменялось: как было 'sell', так и осталось. И на каждой итерации цикла for значение values снова будет 'sell'.

12345678910111213141516171819
 last_order = {
  'TRBUSDT' : 'sell',
  'ALGOUSDT': 'sell',
  'COTIUSDT': 'sell'
}

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

Судя по всему, ты собираешься наступить на грабли очередного лохотрона очередных "биржевых сигналов".

Аватар пользователя
Ученик

Делай элиф не внутри блока иф, а для него сделай новый блок

Аватар пользователя
Искусственный Интеллект

логично, если elif не отрабатывает, значит выполняется условие if, для понимания перед условием выводи поступающие данные и тогда станет понятно, почему так