Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1383

 
JRandomTrader #:

Можно так:

Или как-то так:

А вот первая конструкция - какое поведение кода будет при условиях (0, 1, 0, 1)?

Могли бы Вы пожалуйста пояснить тело условия If

 
qadexys #:

А вот первая конструкция - какое поведение кода будет при условиях (0, 1, 0, 1)?

Могли бы Вы пожалуйста пояснить тело условия If

Тут всё очень просто. Если F1==false, то ( !F1 || f1) будет true независимо от условия f1.

Т.е., если Fn==true, то условие fn проверяется, а если Fn==false, условие fn не проверяется.

Соответственно, для (0, 1, 0, 1) будут проверяться только условия f2 и f4, и если они оба выполняются, будет выполнен код open_pos()

 
JRandomTrader #:

Тут всё очень просто. Если F1==false, то ( !F1 || f1) будет true независимо от условия f1.

Т.е., если Fn==true, то условие fn проверяется, а если Fn==false, условие fn не проверяется.

Соответственно, для (0, 1, 0, 1) будут проверяться только условия f2 и f4, и если они оба выполняются, будет выполнен код open_pos()

А вот для случая когда f1 и другие не только 0 или 1. Подумал что если условие f1 выполняется для короткой позиции, тогда возвращается единица. Если для длинной - то 2. Если условие не выполняется вовсе - 0. 

Но в такой конструкции вероятно не стоит рассчитывать на такое разнообразие значений параметров и формулировать условие как то иначе?

 
qadexys #:

А вот для случая когда f1 и другие не только 0 или 1. Подумал что если условие f1 выполняется для короткой позиции, тогда возвращается единица. Если для длинной - то 2. Если условие не выполняется вовсе - 0. 

Но в такой конструкции вероятно не стоит рассчитывать на такое разнообразие значений параметров и формулировать условие как то иначе?

У меня наборы условий на открытие в лонг и в шорт рассматриваются отдельно.

Т.е., например, так:

 ...
   if(  ( !F1 || f1==1 )
      &&( !F2 || f2==1 )
      &&( !F3 || f3==1 )
      &&( !F4 || f4==1 )
     )
     {
      open_short();
     }
   else if(  ( !F1 || f1==2 )
           &&( !F2 || f2==2 )
           &&( !F3 || f3==2 )
           &&( !F4 || f4==2 )
          )
     {
      open_long();
     }
 ...

Я даже спалю кусок своего реального кода, благо, без информации о "боевых" значениях переменных и условиях сопровождения позиций он никакого ноу-хау не раскроет.

Тут можно фактически задать один из 224 вариантов:

   if(true
      && ((OpenMode & MODE_St1)==0 || St_Buf[St_Rq-1]>80)
      && ((OpenMode & MODE_St2)==0 || St_Buf2[St_Rq-1]>80)
      && ((OpenMode & MODE_BB1)==0 || last_tick.bid > bb[BandsReq-1].U)
      && ((OpenMode & MODE_BB2)==0 || last_tick.bid > bb2[BandsReq-1].U)
      && ((OpenMode & MODE_D1)==0  || rt[RtReq-1].high<rt[RtReq-2].high) 
     )
     {
      switch(OpenMode & (MODE_VR|MODE_OR|MODE_A))
        {
         case 0 :
         case MODE_A :
           res=-2;
           break;
         case MODE_VR :
           if((1/VR)>VRO)
             res=-2;
           break;
         case MODE_OR :
           if((1/OR)>VRO)
             res=-2;
           break;
         case MODE_VR|MODE_A :
           if((1/AVR)>VRO)
             res=-2;
           break;
         case MODE_OR|MODE_A :
           if((1/AOR)>VRO)
             res=-2;
           break;
         case MODE_VR|MODE_OR :
           if((1/VR)>VRO && (1/OR)>VRO)
             res=-2;
           break;
         case MODE_VR|MODE_OR|MODE_A :
           if((1/AVR)>VRO && (1/AOR)>VRO)
             res=-2;
           break;
        }
 
JRandomTrader #:

У меня наборы условий на открытие в лонг и в шорт рассматриваются отдельно.

Т.е., например, так:

Благодарю, буду пробовать

 
JRandomTrader #:

У меня наборы условий на открытие в лонг и в шорт рассматриваются отдельно.

Т.е., например, так:

Я даже спалю кусок своего реального кода, благо, без информации о "боевых" значениях переменных и условиях сопровождения позиций он никакого ноу-хау не раскроет.

Тут можно фактически задать один из 224 вариантов:

Интересна возможность учитывать так много вариантов в одном коде.

В расширенном ответе выражения под case (VRO и прочее) - тоже набор условий, по которым принимается решение?

И Mode и Mode_... и VRP AVR?

Немножко запутался в коде

 
qadexys #:

Интересна возможность учитывать так много вариантов в одном коде.

В расширенном ответе выражения под case (VRO и прочее) - тоже набор условий, по которым принимается решение?

И Mode и Mode_... и VRP AVR?

Немножко запутался в коде

В блоке условий if - каждый флаг определяет проверку своего условия, а в блоке switch конкретное проверяемое условие определяется не одним флагом, а комбинацией из трёх.

 
JRandomTrader #:

   if(  ( !F1 || f1==1 )
      &&( !F2 || f2==1 )
      &&( !F3 || f3==1 )
      &&( !F4 || f4==1 )

А я правильно понимаю, что в Вашем случае f1, ..., fn не обязательно bool? Понимаю что вариантов может быть много, но интересно как вы поступаете.

 
qadexys #:

А я правильно понимаю, что в Вашем случае f1, ..., fn не обязательно bool? Понимаю что вариантов может быть много, но интересно как вы поступаете.

Естественно. fn - любые, их результаты с чем-то сравниваются (и тоже не обязательно с константой), и вот результат этого сравнения - bool.

 
Подскажите пожалуйста: OBJ_RECTANGLE_LABEL позволяет добавлять в него текст? Или мне нужно OBJ_LABEL накладывать поверх OBJ_RECTANGLE_LABEL, если хочу текст в непрозрачном окне.