Странное поведение оператора WHILE - страница 4

 
lord_hiro:


Вот и все!

Как мне не стыдно... :-)

Более того, я не в первый раз использую WHILE, но я начал думать в обратном направлении и так и не вышел из СВОЕГО цикла :-/

Так что предложение deVries о замене || на && оказывается верным.

Из этой темы вытекает много других вещей, на которые следует обратить внимание, например, как работает IF( == ).

Спасибо всем за ваше терпение и время, потраченное на то, чтобы я понял.

Мы все делали похожие вещи lol...

Да, вы можете сделать так, как сказал deVries, или вы можете просто добавить break, чтобы выйти из цикла while после того, как он нарисует объект.

Однако, если вы используете break, вы можете сделать немного более эффективный код, потому что не будет необходимости в первом условии while.

Также, как сказал GumRai, вызов EMPTY_VALUE является лучшим значением сравнения, чем вызов 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);
  }