Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1682

 
Se ha retocado un poco, ahora se hace un while en lugar del bucle for principal, pero sigue sin aparecer la primera condición en el segundo bucle anidado!
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 #:

¿En serio?))

¿Lo has probado?

Hace tiempo que el cambio de color funciona así, pero no en la línea, aunque no debería haber diferencia

                     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. Mirado mi otro código, cambia el color de la línea allí

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

Hace tiempo que tengo un cambio de color que funciona así, pero no en la línea, aunque no debería haber diferencia

PS. Mirando mi otro código, cambia el color de la línea

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

Cambia toda la línea, no la sección deseada

 
MakarFX #:

Cambia toda la línea, no la sección derecha

Bueno, escribió que hay que cambiar toda la línea

 
Así que he adaptado el código para la prueba, prueba a ejecutarlo y te sale un bucle infinito en la segunda orden :(
Archivos adjuntos:
 
Nerd Trader #:
Así que he adaptado el código para la prueba, prueba a ejecutarlo y te sale un bucle infinito en la segunda orden :(

¡Me pregunto! ¿Por qué?

¿Por qué esto, qué significado sagrado tiene?

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

---

Estás buscando por número, así que busca por número.

Si tienes 2 órdenes de arresto, las revisará, pero no podrá encontrar la 3ª, o la 23ª.

---

Parece que no tienes muy clara la tarea, así que esa es la solución.

 
Nerd Trader #:

el bucle no está ajustado correctamente:

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

debería ser así:

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

el bucle no está ajustado correctamente:

debería ser así:

¡Sí! ¡Funciona! Pero, ¿por qué antes todavía entró en el segundo bucle for y si inserto la siguiente línea Print() - se ejecutará (infinitamente) pero no irá más allá? Gracias de todos modos, ahora al menos puedo ir a dormir.
 
Vitaly Muzichenko #:

¡Me pregunto! ¿Por qué?

¿Por qué esto, qué significado sagrado tiene?

---

Estás buscando por número, así que busca por número.

Si tienes 2 órdenes de arresto, las revisará, pero no podrá encontrar la 3ª, o la 23ª.

---

Parece que no tienes muy clara la tarea, así que esa es la solución.

Es que el majik debe ser único, es decir, no debe coincidir con los demás.
 
Aleksei Stepanenko #:

el bucle no está ajustado correctamente:

debería ser así:

¿Cuál es la diferencia? ¿Y la numeración de los pedidos no es a partir de cero y no de uno?

Razón de la queja: