Ошибки, баги, вопросы - страница 3129

 
Vitaly Muzichenko #:

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

Верно?

Верно, так делать не надо.
 
Vitaly Muzichenko #:

Проверьте

А кто вам сказал, что «а» из условия выше всегда будет false?

 
x572intraday #:

 Вообще, я случайно наткнулся на эту особенность. А хотел совсем другого...

либо

Тягомотина в том, что n может быть достаточно велико, поэтому эту длинную цепочку условий захотелось завернуть в компактный for. Попробовал так:

но вышла какая-то шляпа. Ну хотя бы потому, что h_plus при таком алгоритме будет вынужден принять всю сумму проверяемых условий, включая условие с проверкой массива с избыточным индексом, до чего дело не доходило в первом развёрнутом if, без for который. Ну и прочие варнинги картину портят.

 Стоит ли такое вообще хотеть? Возможно ли такое за-for'ить?

Вот в этом коде я совершенно ничего не понял

for(int i=start; i<rates_total-3 && !IsStopped(); i++)
{
   bool h_plus=true; //false?
   for(int increment=1; increment<=n; increment++)
      h_plus&=high[i]>high[i+increment];
   if(h_plus) {...}
   ...
}

Что означает выделенное & в этом коде? И в каком цикле должно выполняться if(h_plus)? Вы не пропустили кривые скобки?

 
Alexey Viktorov #:

Вот в этом коде я совершенно ничего не понял

Что означает выделенное & в этом коде? И в каком цикле должно выполняться if(h_plus)? Вы не пропустили кривые скобки?

MQL bool истинно, если больше 0, в других языках логическое значение истинно, только если == 1

 
Alexey Viktorov #:

Вот в этом коде я совершенно ничего не понял

Что означает выделенное & в этом коде? И в каком цикле должно выполняться if(h_plus)? Вы не пропустили кривые скобки?

 bool h_plus=true; //false?
   for(int increment=1; increment<=n; increment++)
      h_plus&=high[i]>high[i+increment];
   if(h_plus) {...}
   ...


 
x572intraday #:

 Вообще, я случайно наткнулся на эту особенность. А хотел совсем другого...

либо

Тягомотина в том, что n может быть достаточно велико, поэтому эту длинную цепочку условий захотелось завернуть в компактный for. Попробовал так:

но вышла какая-то шляпа. Ну хотя бы потому, что h_plus при таком алгоритме будет вынужден принять всю сумму проверяемых условий, включая условие с проверкой массива с избыточным индексом, до чего дело не доходило в первом развёрнутом if, без for который. Ну и прочие варнинги картину портят.

 Стоит ли такое вообще хотеть? Возможно ли такое за-for'ить?

Что-то типа того:

for(int i=start; i<rates_total-3 && !IsStopped(); i++)
{
   bool h_plus=true; //false?
   for(int increment=1; increment<=n; increment++)
     {
      h_plus&=high[i]>high[i+increment];
      if(!h_plus)break;
     }
   if(h_plus) {...}
   ...
}
 
Lilita Bogachkova #:


Побитовая операция И двоичных представлений y и x      y &= x;

https://www.mql5.com/ru/docs/basis/operations/assign

Документация по MQL5: Основы языка / Операции и выражения / Операции присваивания
Документация по MQL5: Основы языка / Операции и выражения / Операции присваивания
  • www.mql5.com
Операции присваивания - Операции и выражения - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Lilita Bogachkova #:


В какой строке вашего снимка есть &=

 
JRandomTrader #:

Побитовая операция И двоичных представлений y и x      y &= x;

https://www.mql5.com/ru/docs/basis/operations/assign

Понятно. Это не для самоучек… Лениво было туда посмотреть…
 
Alexey Viktorov #:

Вот в этом коде я совершенно ничего не понял

Что означает выделенное & в этом коде?

 Могу ответить только за &= сразу:

Справочник MQL5 / Основы языка / Операции и выражения / Операции присваивания:

Побитовая операция И двоичных представлений y и x y &= x;

по аналогии с накопительной переменной y:

Увеличение значения переменной у на x y += x;


Но это мой первый опыт использования &=, так что могу ошибаться.

И в каком цикле должно выполняться if(h_plus)? Вы не пропустили кривые скобки?

 Нет. Сперва (по задумке) в накопительную h_plus суммируются внутри for все логические условия, а получившаяся bool-сумма подставляется в if, который к внутреннему for отношения не имеет.