Comportamiento extraño del operador WHILE - página 4

 
lord_hiro:


¡Eso es todo!

Qué vergüenza... :-)

Además no es la primera vez que uso WHILE pero me puse a pensar al revés y nunca salí de MI PROPIO bucle :-/

Y así la sugerencia deVries de sustituir || por && resulta acertada.

De este tema salieron un montón de cosas más a tener en cuenta, por ejemplo donde funciona el IF( == ).

Gracias a todos por vuestra paciencia y el tiempo que habéis dedicado a hacerme entender.

Todos hemos hecho cosas similares lol...

Sí, puedes hacer lo que dijo deVries o simplemente añadir un break para salir del bucle while después de que dibuje el objeto.

Dicho esto si usas el break podrías hacer un código un poco más eficiente porque no habría necesidad de la primera condición del while.

También como dijo GumRai, llamar a EMPTY_VALUE es un mejor valor de comparación que llamar a iHigh().

extern int SwingBarCount=100;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   int SwingHighShift=0;
   string StringHighStatus="False";
   int SwingHigh=0;
   while(SwingHighShift<=SwingBarCount)
     {
      if(iFractals(NULL,0,MODE_UPPER,SwingHighShift)!=EMPTY_VALUE && iFractals(NULL,0,MODE_UPPER,SwingHighShift)>Close[0])
        {
         StringHighStatus="True";
         SwingHigh=SwingHighShift;
         ObjectDelete("SwingHigh");
         ObjectCreate("SwingHigh",OBJ_VLINE,0,Time[SwingHigh],0);
         ObjectSet("SwingHigh",OBJPROP_COLOR,Red);
         break;
        }
      else SwingHighShift++;
     }
   return(0);
  }