WHILE演算子の妙な挙動 - ページ 4

 
lord_hiro:


以上です。

恥ずかしながら... :-)

さらに、WHILEを使うのは初めてではないのですが、逆に考え始めてしまい、自分のループから抜け出せなくなってしまいました :-/。

そして、deVriesの提案した、||を&&に置き換えるというのは正解でした。

このトピックのおかげで、IF( == )がうまくいくかどうかなど、他にも気をつけるべきことがたくさん出てきました。

皆さん、私に理解させるために時間を費やしていただき、ありがとうございました。

みんな似たようなことやってるんですね(笑)

デブリーズが言ったようにすることもできますし、オブジェクトを描画した後にwhileループから抜け出すためにbreakを追加することもできます。

とはいえ、breakを使えば、最初のwhile条件が不要になるので、もう少し効率的なコードが作れます。

また、GumRaiが言ったように、iHigh()を呼ぶよりもEMPTY_VALUEを 呼ぶ方が比較値として優れています。

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