Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1682

 
Refez-se um pouco, agora faz-se ao invés do principal para o loop, mas ainda não ocorreu a primeira condição no segundo loop aninhado!
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 #:

Realmente?!))

Você já tentou?

Há muito tempo que a mudança de cor funciona assim, mas não na linha, embora não deva fazer diferença

                     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. Olhando para meu outro código, ele muda a cor da linha ali

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

Há muito tempo que a mudança de cor funciona assim, mas não na linha, embora não deva fazer diferença

PS. Olhando para meu outro código, ele muda a cor da linha

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

Muda toda a linha, não a seção desejada

 
MakarFX #:

Muda a linha inteira, não a seção correta

Bem, ele escreveu que você tem que mudar toda a linha

 
Então, eu adaptei o código para o teste, tente executá-lo e você terá um loop infinito na segunda ordem :(
Arquivos anexados:
 
Nerd Trader #:
Então, eu adaptei o código para o teste, tente executá-lo e você terá um loop infinito na segunda ordem :(

Eu me pergunto! Por quê?

Por que isto, que significado sagrado tem?

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;
}

---

Você está procurando por número, portanto, procure por número.

Se você tiver 2 mandados, ele irá passar por eles, mas não consegue encontrar o 3º, ou o 23º.

---

Você não parece ser muito claro sobre a tarefa, então essa é a solução.

 
Nerd Trader #:

o laço não está ajustado corretamente:

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

deveria ser assim:

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

o laço não está ajustado corretamente:

deveria ser assim:

Sim! Funciona! Mas por que mais cedo ainda entrou o segundo para loop e se eu inserir a próxima linha Imprimir() - será executado (infinitamente) mas não irá mais longe? Em qualquer caso, obrigado, agora eu posso ao menos dormir.
 
Vitaly Muzichenko #:

Eu me pergunto! Por quê?

Por que isto, que significado sagrado tem?

---

Você está procurando por número, portanto, procure por número.

Se você tiver 2 mandados, ele irá passar por eles, mas não consegue encontrar o 3º, ou o 23º.

---

Você não parece ser muito claro sobre a tarefa, então essa é a solução.

É só que o majik deve ser único, ou seja, não deve ter uma correspondência com os outros.
 
Aleksei Stepanenko #:

o laço não está ajustado corretamente:

deveria ser assim:

Qual é a diferença? E a numeração dos pedidos não é de zero em vez de um?

Razão: