Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1682

 
Переделал немного, вместо главного цикла for теперь do while, но все равно нет вхождения в первое условие во втором вложенном цикле!
int GetMagic(Order &order)
{
  int magic = 0;
  int unique = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
    if(OrdersTotal()){
      do{
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --){
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            Print( "!!!!!!!!!!!!!!!!!!!");//<----------НЕ ПРИНТУЕТСЯ
            if(magic != OrderMagicNumber())
              unique ++;
          }
        }
      }while(unique < OrdersTotal());
    }else return (magic + 1);
  }
  return magic;
}
 
MakarFX #:

Да ты что?!)))

Пробовал?

У меня так давно работает смена цвета, но не на линии, хотя должно быть без разницы

                     if(SymOpen < SymClose) {
                       CColor=Mirroring?BearBarColor:BullBarColor;
                        SetIndexStyle(32+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?1:WidthOC,CColor); SetIndexLabel(32+(num*8), SubSymbol);
                        SetIndexStyle(33+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?WidthOC:1,CColor); SetIndexLabel(33+(num*8), SubSymbol);
                        SetIndexStyle(34+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?WidthOC:1,CColor); SetIndexLabel(34+(num*8), SubSymbol);
                        SetIndexStyle(35+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?1:WidthOC,CColor); SetIndexLabel(35+(num*8), SubSymbol);

PS. Посмотрел другой свой код, там меняет цвет линии

SetIndexStyle(num,DRAW_LINE,STYLE_SOLID,1,BullColor);
 
Vitaly Muzichenko #:

У меня так давно работает смена цвета, но не на линии, хотя должно быть без разницы

PS. Посмотрел другой свой код, там меняет цвет линии

SetIndexStyle(num,DRAW_LINE,STYLE_SOLID,1,BullColor);

Меняет всю линию, а не нужный участок

 
MakarFX #:

Меняет всю линию, а не нужный участок

Ну так он написал, что нужно менять всю линию

 
Итак, я адаптировал код для теста, попробуйте запустить и вы получите на втором ордере бесконечный цикл :(
Файлы:
 
Nerd Trader #:
Итак, я адаптировал код для теста, попробуйте запустить и вы получите на втором ордере бесконечный цикл :(

Я удивляюсь! Почему?

Зачем это, какой в нём сакральный смысл?

int GetMagic(Order &order)
{
  int magic = 0;
  int unique = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
    if(OrdersTotal()){
      do{
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --){
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            Print( "!!!!!!!!!!!!!!!!!!!");//<----------НЕ ПРИНТУЕТСЯ
            if(magic != OrderMagicNumber())
              unique ++;
          }
        }
      }while(unique < OrdersTotal());
    }else return (magic + 1);
  }
  return magic;
}

---

Вы ведёте поиск по количеству, ну так и ведите.

Если у вас 2 ордера, то по ним он и пройдёт, при этом не сможет отыскать 3-й, или 23-й

---

Видимо, вы не совсем точно излагаете задачу, поэтому такое решение

 
Nerd Trader #:

неправильно задан цикл:

for(int i = OrdersTotal(); i > 0 ; i --){

надо так:

for(int i = OrdersTotal()-1; i >= 0 ; i --){
 
Aleksei Stepanenko #:

неправильно задан цикл:

надо так:

Да! Работает! Но почему ранее все же происходило вхождение в второй цикл for и если вставить следующей строкой Print() - она выполняться будет (бесконечно) но дальше не пойдет? В любом случае спасибо, теперь можно хоть пойти поспать.
 
Vitaly Muzichenko #:

Я удивляюсь! Почему?

Зачем это, какой в нём сакральный смысл?

---

Вы ведёте поиск по количеству, ну так и ведите.

Если у вас 2 ордера, то по ним он и пройдёт, при этом не сможет отыскать 3-й, или 23-й

---

Видимо, вы не совсем точно излагаете задачу, поэтому такое решение

просто маджик должен быть уникальным, то есть не иметь совпадений с остальными.
 
Aleksei Stepanenko #:

неправильно задан цикл:

надо так:

А в чем разница? И разве нумерация ордеров с нуля, а не с единицы?