Скачать MetaTrader 5

Возможно ли избегнуть много "или" (||) в условиях, вызывающих одно и то же действие?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Boris
3947
Boris  

Ни один из операторов не подходит. Может, есть какой-нибудь другой способ без if(A || B || C || D || E) Action;?

Прошу модераторов не отправлять в общую ветку вопрошающих ввиду важности вопроса, над которым думаю и не могу найти более рационального решения! Спасибо!

Avals
3182
Avals  

можно просто в булевских переменных, например

X=A || B;

X=X || C || D; 

X=X || E;

if (X) Action;

Boris
3947
Boris  
Avals:

можно просто в булевских переменных, например

X=A || B;

X=X || C || D; 

X=X || E;

if (X) Action;

Спасибо за отклик! И эти bool'и могут быть достаточно сложные, включающие много параметров, зависящих от постоянно меняющихся условий рынка?
Avals
3182
Avals  
borilunad:
Спасибо за отклик! И эти bool'и могут быть достаточно сложные, зависящие от постоянно меняющихся условий рынка?


конечно

Boris
3947
Boris  
Avals:


конечно

Ещё раз спасибо! Сейчас попробую!

Посмотрел в Доке и увидел:

bool a = true;
bool b = false;
bool c = 1;

а = (isCloseLastPosByTake() == True && Profit > ProClo / clo - GetProfitCloseLastPosByTake() * clo);
Разве можно булёвой а дать это значение?

Victor Nikolaev
Модератор
15088
Victor Nikolaev  
borilunad:

Ещё раз спасибо! Сейчас попробую!

Посмотрел в Доке и увидел:


Можно, только скорость работы сильно падает
Boris
3947
Boris  
Vinin:

Можно, только скорость работы сильно падает
А на скорости не отражаются эти "или" в if()?
Victor Nikolaev
Модератор
15088
Victor Nikolaev  
borilunad:
А на скорости не отражаются эти "или" в if()?

Отражаются конечно. Проверять надо. 
Boris
3947
Boris  
Vinin:

Отражаются конечно. Проверять надо. 
Но если нет возможности найти что-то быстрое, тогда остаюсь с if()! Я уже заметно уменьшил торможение, убрав во всех функциях лишние проверки для меня. Большое спасибо за внимание! Рад буду узнать и проверить все возможные варианты!
TarasBY
1740
TarasBY  

Можно ещё таким способом оптимизировать вычисления:

    bool M = false;

    if (A) M = true; else if (B) M = true; else if (C) M = true; else if (D) M = true; else if (E) M = true;
    if (M) Action;
TarasBY
1740
TarasBY  

или таким:

    bool M = true;

    if (!A) if (!B) if (!C) if (!D) if (!E) M = false;
    if (M) Action; 
12345678...10
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий