Лишние скобки

 

Господа знатоки, подскажите плиз, в чем разница (если можно с объяснением)

в строке проставил лишние скобки (и эффективность сова выросла в разы))):


      if((iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,0) < CCI_Flet) && (iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,1) < CCI_Flet) &&  MA_1_t > MA_2_t + Rastvor_Flet*Point ) 

         { Opn_B=true; comment_Opn="сигнал на Buy-флет"; break; } 

Что происходит из-за скобок обрамляющих  iCCI. Точно знаю что они вносят свою коррекцию, но не пойму какую. И работает ли условие iCCI>0?

 
Volodykaya:

Господа знатоки, подскажите плиз, в чем разница (если можно с объяснением)

в строке проставил лишние скобки (и эффективность сова выросла в разы):

if((iCCI(Symbol(),0,Period_CCI,PRASE_TIPIKAL_,0)>0 )

Что происходит из-за скобок обрамляющих  iCCI. Точно знаю что они вносят свою коррекцию, но не пойму какую. И работает ли условие iCCI>0?

В вашем примере должна быть ошибка при компиляции. Есть левая открывающая скобка "(", а правой закрывающей ")" нет.

 
Volodykaya:

Господа знатоки, подскажите плиз, в чем разница (если можно с объяснением)

в строке проставил лишние скобки (и эффективность сова выросла в разы):

if((iCCI(Symbol(),0,Period_CCI,PRASE_TIPIKAL_,0)>0 )

Что происходит из-за скобок обрамляющих  iCCI. Точно знаю что они вносят свою коррекцию, но не пойму какую. И работает ли условие iCCI>0?

Нужно увидеть, какой код следует после последней закрывающей скобки. Ведь сейчас количество открывающих и закрывающих скобок не одинаково.

P. S. И что такое PRASE_TIPIKAL? )) Знаю только PRICE_TYPICAL...

 
Volodykaya:

Количество скобок одинаково полная строка выглядит так:

if(iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,0) > 0 && iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,1 < 0) &&   MA_1_t > MA_2_t + Rastvor*Point ) 

   {     Opn_B=true; } 

if(iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,0) > 0 && iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,1 < 0) &&   MA_1_t > MA_2_t + Rastvor*Point ) 

   {     Opn_B=true; } 

Ошибка, выделил красным. Не должен компилировать по идее. 

 

Полная строка выглядит так

      if((iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,0) < CCI_Flet) && (iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,1) < CCI_Flet) &&  MA_1_t > MA_2_t + Rastvor_Flet*Point ) 

         { Opn_B=true; comment_Opn="сигнал на Buy-флет"; break; } 

 
Volodykaya:

Полная строка выглядит так

      if((iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,0) < CCI_Flet) && (iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,1) < CCI_Flet) &&  MA_1_t > MA_2_t + Rastvor_Flet*Point ) 

         { Opn_B=true; comment_Opn="сигнал на Buy-флет"; break; } 

Вот теперь другое дело, не вижу тут лишних скобок.

 
Vitalii Ananev:

Вот теперь другое дело, не вижу тут лишних скобок.

Имелось ввиду пара лишних скобок, даже две пары...

(iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,0) < CCI_Flet) &&

 
Alexey Viktorov:

Имелось ввиду пара лишних скобок, даже две пары...

(iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,0) < CCI_Flet) &&

Если вы правы и производительность увеличивается это может быть связано с обработкой логической операции а именно первой операции. Если выражение является ЛОЖЬ - дальнейшее выполнение прекращается. 
 
Lilita Bogachkova:
Если вы правы и производительность увеличивается это может быть связано с обработкой логической операции а именно первой операции. Если выражение является ЛОЖЬ - дальнейшее выполнение прекращается. 
Я всего лишь сказал как я понял вопрос. А если первое выражение ЛОЖЬ то и без скобок дальнейшие условия не проверяются, так утверждают разработчики.
 
Всегда поражаюсь записи в одну строчку, может в редакторе места мало? Или кто-то думает, что программы быстрей работают если пробелы убрать.

if (
        (iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,0) < CCI_Flet) 
        && 
        (iCCI(Symbol(),0,Period_CCI,PRICE_TYPICAL,1) < CCI_Flet) 
        &&  
        MA_1_t > MA_2_t + Rastvor_Flet*Point 
) { 
        Opn_B=true; 
        comment_Opn="сигнал на Buy-флет"; 
        break; 
} 

скобки вокруг операции < и > не нужны и ни на что не влияют, их приоритет больше операции && 

а вот с операцией ИЛИ т.е. ||

есть момент. В старом MQL4 ее приоритет выше чем у &&

и код

if (
        a || b
        && 
        c || d
) { 
        Print("ok");
} 

 Работал бы по другому, чем в strict режиме mql4 и mql5. Поэтому тут скобки нужны для надежности. Но об этом даже компилятор предупреждает (чтобы те, кто переносит код на новую версию обратили внимание).

 
Igor Volodin:
Всегда поражаюсь записи в одну строчку, может в редакторе места мало?

Наверное действительно мало раз в одну строку ставишь круглую и фигурную скобки...

А если пробелы поставить после if будет быстрей работать??? Но после запятой никогда не надо ставить пробел... иначе код вообще работать не будет...

Причина обращения: