初めてお越しの方へ

一部のコンテンツはMTPlaceメールマガジンに登録していただくことで閲覧/ダウンロード可能となります。もちろん登録は無料、解除も簡単にできますのでMTPlaceメールマガジン登録よりお気軽にご登録下さい。記事の一覧はサイトマップを御覧ください。

Categories: MQL4の基本

MQL4での制御構造(while文による繰り返し処理)

今回は前回に引き続き、プログラミングを楽にする while文 の解説をして行きたいと思います。私なりにfor文とwhile文の使い分けについても記事の後半で書いていますので、初心者のかたは参考にされてみて下さい。
・前回作成した複数行の文字をチャートに出力するソース TestIndicator
今回は、while文 の解説になりますが、機能的にはfor文と大変良く似たものですので、練習として前回と全く同じ機能のインジケーターを作ってみましょう。

以下は前回作成したstart関数です。

int start()
  {
   string moziretu = "";
   for(int i = 0; i < 5; i++)
   {
      moziretu = moziretu + "Hello MQL4\n";
   }
   Comment(moziretu);
   return(0);
  }

これを修正していきます。まずwhile文の形式についてお話しておきます。

while(継続条件)
{
   // 繰り返し処理の内容
}

for文に比べてシンプルですね。
前回for文で繰り返し処理を行なっていた部分をwhile文で書き直すと次のようになります。

int start()
  {
   string moziretu = "";
   int i = 0;
   while(i < 5)
   {
      moziretu = moziretu + "Hello MQL4\n";
      i++;
   }
   Comment(moziretu);
   return(0);
  }

for文では、カウンタ変数の初期化、継続条件、カウンタのアップが1行で表現されていました。
while文では、それが3行に分かれた形になります。
35行目でカウンタ変数iを宣言、そして0で初期化しています。
36行目で、カウンタ変数iが5未満である間、”{“~”}”の中の処理を繰り返し実行することになります。
38行目が繰り返されるたびに、変数”moziretu”の末尾に”Hello MQL4\n”が追加されていきます。
39行目でカウンタ変数iを1プラスしています。この表現は、for文中で使用された”i++”同様、変数iに1を加算するという表現です。
もちろん、”i = i + 1;” と書いても正しいです。

以上で、前回と全く同じ表示となるインジケーターが出来ました。
for文よりwhile文のほうがシンプルで分かりやすいという方もいらっしゃるかもしれませんね。
時と場合に応じて、ご自分が理解しやすい方を使用すれば良いかと思います。

ただ、やはりどういうふうに使い分けるのか疑問に思う方もいると思います。
絶対にこっちでなければダメというものではないと思いますが、参考までに私なりのfor文とwhile文の使い分けについて書いておこうと思います。
今回の例のように、あらかじめ繰り返す回数が決まっている場合はfor文を使うことが多いです。for文はカウンタ変数の初期化、継続条件、カウンタのアップが1行で表現されますから、繰り返しの条件が1箇所に集まっていてぱっと見でわかりやすいからです。
逆にそれ以外ではwhile文を使用します。while文はfor文に比べると複雑な条件に対応しやすいのです。
この辺りは少し複雑な話になってきますので、はじめのうちは「for文で対処できない繰り返し処理はwhile文で対処する」こんな感じのスタンスで良いかと思います。

for文とwhile文の使い分け
あらかじめ繰り返す回数が決まっている場合はfor文を使い、for文で対処できない繰り返し処理はwhile文で対処する

・今回作成した複数行の文字をチャートに出力するソース TestIndicator

だいご