繰り返しはプログラミングの基礎中の基礎です。しっかり理解しましょう!
繰り返しとは?
MQLプログラミングでは、全く同じ処理を、何度も繰り返し実行できると、とても便利です。
たとえば、「100個のポジションを決済する」という処理を考えると、100回同じ処理をしなければなりません。
そのような、全く同じ処理を繰り返し行うことができる機能があります。
それが、「for文」と「while文」です。
そこで今回は、for文とwhile文の書き方を解説します。
for文の書き方
for文は「〇〇という条件に当てはまる限り、××を実行し続ける」というイメージで書きます。
〇〇は条件式と呼ばれ、if文にも同様の条件式が使われます。
一般的には以下のようにプログラミングします。
for(変数の初期化; 条件式; 変数の更新)
{
繰り返し行いたい処理内容
}
for文の()内は、3つに分割されます。
・変数の初期化
・条件式
・変数の更新
それぞれ解説します。
変数の初期化
その名の通り、変数を初期化します。
たとえば、「int i = 0;」と書き、iという変数を0に初期化します。
もし、iという変数を、for文より上で宣言しているなら、「i = 0;」だけでOKです。
変数を初期化する理由は、次の条件式で、この変数を使うからです。
条件式
条件式を記述するのですが、ポイントとしては、上記の変数を条件式に含めることです。
たとえば、「i < 100;」と書き、この条件式が正しい(true)の場合、{}内のプログラムを実行します。
ここだけみると、if文の考え方と同じですね。
iを条件式に含める理由は、条件式が正しい(ture)のままだと、無限に繰り返しが起こり、for文が終了しなくなるため、条件式を誤り(false)になるようにさせたいからです。
iを更新することによって、条件式を誤りにさせるようにできます。
変数の更新
変数を更新します。
for文は繰り返し実行されますので、変数の更新も繰り返し行われます。
ここで変数を更新することによって、条件式が誤り(false)となり、for文を終了することができるようになります。
たとえば、「i++」と書きます。
これは、iの値を1増やすという処理です。「i = i + 1」と書いても同様の処理になります。
for文のプログラム例
上記の例をまとめると、以下のようにプログラムできます。
for(int i = 0; i < 100; i++)
{
i が 0~100 まで増え続け、合計で100回実行される
}
「変数の初期化」「条件式」「変数の更新」を適切に設計することで、自由自在に繰り返しをさせることができます。
慣れるまでは、プログラム例をコピペして、使ってみると良いでしょう。
while文の書き方
繰り返しは、for文以外にも「while文」があります。
while文の考え方は、for文と似た感じですが、書き方が大きく異なります。
「変数の初期化」「変数の更新」は()内ではなく、{}に書きます。
一般的には以下のようにプログラムします。
変数の初期化
while(条件式)
{
繰り返し行いたい処理内容
変数の更新
}
for文と違い、()内には条件式だけ書きます。
注意点としては、変数の更新を書き忘れることがあります。
書き忘れると、無限ループが発生するので、処理が思うように進まない可能性があります。
また、エラーも出ないので、無限ループが発生している箇所を探すのが大変です。
そのため、私はfor文を使うことをオススメします。
while文のプログラム例
int i = 0; //変数の初期化
while(i < 100) //条件式
{
i++; //変数の更新
}
「変数の更新」を書き忘れると無限ループが発生します。
while文を書くときには注意しましょう。
サンプルプログラム
for文とwhile文のサンプルプログラムです。
for文の繰り返しは、チャート上に表示されます。
while文の繰り返しは、ログに表示されます。
下記のプログラムをコピペすることで利用可能ですが、ダウンロードもできます。
//+------------------------------------------------------------------+
//| SampleMQL_for&while.mq4 |
//| Copyright 2020, 朝日奈りさFXchannel |
//| https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, 朝日奈りさFXchannel"
#property link "https://mql-programing.com/"
#property version "1.00"
#property strict
//大域変数を宣言
int j = 0; //while文用の変数
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//for文の例
for(int i = 0; i < 100; i++)
{
Comment("これはfor文の ",i+1," 回目の繰り返しです。");
}
//while文の例
while(j < 100)
{
Print("これはwhile文の ",j+1," 回目の繰り返しです。");
j++;
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
実行結果は以下のようになります。
〇for文の実行結果
〇while文の結果
まとめ
MQLプログラミング基礎として、繰り返し文(for文、while文)を解説しました。
ポイントは以下の3点です。
・変数の初期化
・条件式
・変数の更新
これらをうまく設計することで、繰り返しを自由自在に使うことができるようになります。
サンプルプログラムのパラメータを変更して、繰り返しの便利さを体験してみてください!
コメント