for文の構成要素(初期化式・条件式・反復式)を覚えても、実際に自分のインジケーターやEAでどう使えばいいのか分からない——という人向けの記事です。この記事では、for文の基本に加えて、実際にMetaEditorでコンパイルして確認できるサンプルコードを紹介します。
for文

for文とは、指定した回数だけ処理を繰り返すときに使用されます。
毎回同じ処理をするのに同じ文章を書くのは大変なので、
for文を活用することで処理を回数指定さえすれば何度も繰り返すので便利です。
for文の宣言
for文の宣言は以下のように記述します。
for (初期化式; 条件式; 反復式) {
// 条件式がtrueのときに繰り返す処理文
}
初期化式
for文はまず最初に初期化式を一度だけ実行します。
ここで変数を宣言するとその変数はfor文内で使用することができます。
for文が終了するとその変数は使用できなくなります。
変数名は基本的に何でも良いですが、基本的には「i」という1文字が使用されます。
変数iのように1回のループ毎に値を1つ増やす変数をループカウンタと言います。
ループカウンタは多くの場合でループの終了条件の判定のためにも使用されます。
条件式
条件式とは、判定結果が真の場合にブロック内の文を実行する式です。
この条件式では、繰り返しを継続するための条件を記述します。
文
文は、条件式が真の場合に実行されます。
初期化式内で変数を宣言している場合、ここでその変数を使用できます。
反復式
反復式とは、文の実行が終わると最後に実行されてカウントを増やします。
変数iの値をひとつ増やしています。
実際にコンパイルして確認する
過去10本のローソク足を1本ずつ調べ、陽線と陰線がそれぞれ何本あるかをカウントして表示するインジケーターで、for文の動きを確認してみましょう。
//+------------------------------------------------------------------+
//| ForStatement.mq4 |
//| Copyright 2020, FX-EA System Project Creator |
//| https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link "https://creator.fx-ea-system-project.com/"
#property version "1.00"
#property strict
#property indicator_chart_window
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
Comment("");
}
void OnTick()
{
int up_count = 0;//陽線の本数
int down_count = 0;//陰線の本数
for(int i = 0; i < 10; i++)//初期化式:i=0、条件式:i<10、反復式:i++
{
if(Close[i] > Open[i])
{
up_count++;//終値が始値より高い=陽線
}
else if(Close[i] < Open[i])
{
down_count++;//終値が始値より低い=陰線
}
}
Comment("直近10本:陽線", up_count, "本 / 陰線", down_count, "本");
}
//+------------------------------------------------------------------+
for(int i = 0; i < 10; i++)の部分が「初期化式(i=0)」「条件式(i<10)」「反復式(i++)」の3点セットです。iは0から始まり、9まで(10回)ループしたあと、i<10がfalseになってループが終了します。
まとめ
for文はプログラムを作る上で頻繁に活用されます。
しっかりとfor文を理解してプログラムのベースである繰り返しをマスターしましょう。
初期化式:最初に一度だけ実行される
条件式:判定結果が真の場合にブロック内の文を実行する
文:条件式が真の場合に文が実行される
反復式:文の実行が終わると最後に実行されてカウントを増やす
コメント