WHILE操作符的奇怪行为 - 页 4

 
lord_hiro:


就这样吧!

我很惭愧... :-)

此外,这不是我第一次使用WHILE,但我开始反向思考,从未走出自己的循环:-/。

所以deVries的建议是用&&代替||,结果是正确的。

从这个话题中,我们还发现了很多其他需要注意的地方,比如说,IF( == )的工作原理。

谢谢你们的耐心和花时间让我明白。

我们都做过类似的事情,笑一笑。

是的,你可以像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);
  }