MT4インディケーター作成講座4 繰り返し処理 For文


ループ処理とは、同じことを何度も同じ処理を繰り返すことです。
MT4のインディケーターやEAを作るうえで、とても重要な処理なのでしっかり覚えておきましょう!

今回作っているインディケーターはこちら→owarine_1.mq4

なぜループにするのか

今回は終値をサブウインドウに表示するインディケータを作ります。
そのためには、過去の終値情報を取得し、表示用の配列に保存していく必要があります。

今回のコードでいくと、MQLウィザードが生成した、29行目のowarineBuffer[];という配列に過去の終値の値を格納していきます

ow1

では実際にループさせている所のソースをみてみましょう。

コメントを入れているので長く見えますが、実際には3行程度です。

forから始まっているところがループです。

MQLのFor文

For文の形は

で表示することができます。 for() のあとの波かっこ間を繰り返します。

例えば、同じ処理を3回繰り返したい場合は次のように記入します。

これを詳しくみていくと、
最初iの値を0にして、1週毎にiの数を1ずつ増やし、iが3未満のあいだ処理を繰り返すということになります。
ちなみに、「i++」と記述しているのは、「i+1」と同じで、iの数をひとつ増やしています。 わかりずらければ、i+1と書いてもかまいません。 逆に「i–」でiの数を1ずつ減らしていくこともできます。

ちなみに比較演算子は次のようにあらわせます
a < b    aよりbが小さい
a>b      aよりbが大きい
a<=b  aよりbが小さいまたは等しい a > b // aよりbが大きい
a>=b  aよりbが大きいまたは等しい

実際のコードをみてみる

実際のコードのループ条件は

となっています。 これを日本語に読み直すと、
iにlimitという変数を入れて、ループのたびにiを1ずつ引いていき、 iが0より大きい場合はループを回し続ける

という指示です。
ちなみにMT4は最新のバーを0として、過去にさかのぼるにつれ1、2、3と数えていきます。
limitという変数は、ループ文の前に

このようなコードで変数を作っています。
この記述が何をしているかというと、MQLで最初から定義されている Barsという関数とIndicatorCounted()
という変数を引いた数をlimitとしています。

Barsとはチャートウインドウに表示されているバーの本数を調べることができます。

IndicatorCountedはインディケーターを起動した後、変化していないバーの本数を数えています

つまり、チャートにインディケーターを挿入した時点ではチャートのバーの総数がlimtの数になり、
その後は変化したバーの数だけがlimitになります。

こう記述しておくことで、余分な計算を減らしコンピューターに負荷をかけないようにしています。

ループ内の処理

今回のインディケーターのループ内では

次のようなコードで、owarineBufferという配列に過去の終値を順番に格納していっています。

次回はこのコードでも使っている配列を覚えましょう!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です