7.配列とは

配列とは、同じデータ型の変数を複数まとめて管理する仕組みです。

例えば5個のレートを扱う場合、double型の変数が5個必要になります。
以下のようになります。

double rate1 = 1.00001;
double rate2 = 1.00002;
double rate3 = 1.00003;
double rate4 = 1.00004;
double rate5 = 1.00005;

Print(rate1);

配列を使って書くと以下のようになります。

double rates[5];
rates[0] = 1.00001;
rates[1] = 1.00002;
rates[2] = 1.00003;
rates[3] = 1.00004;
rates[4] = 1.00005;

Print(rates[0]);

これだと配列のメリットがほとんど伝わりませんが、ひとまず記述の仕方について確認しておきましょう。

配列変数の宣言

配列変数の宣言は通常の変数宣言と少し異なります。

データ型 変数名[要素数];

変数名の後ろの”[]”を付けて、その中に要素数を書きます。要素数というのは、何個の配列か、です。

1行目の、

double rates[5];

で、5つの要素を持つdouble型の配列変数を宣言しています。

配列変数1つ1つの中身にアクセスするためには、インデックス(番号)を使用します。
番号は0から割り振られます。
配列の1番目にデータを代入したい場合は、

rates[0] = 1.00001;

となります。

また通常の変数と同様に、宣言と同時にデータを代入することが可能です。

double rates[5] = {1.00001, 1.00002, 1.00003, 1.00004, 1.00005};
Print(rates[0]);

このように”{}”の中にカンマ区切りでデータを書くと、配列の0番目から順にデータが代入されます。

MQL4で使用できる配列

チャートは数値データの連続ですので、これらのデータはまさに列になって並んでいます。
MQL4では、プログラムの中で使用できる配列データが既にいくつか用意されています。
私たちは以下のデータを、変数として宣言したりせず直ぐに使う事ができます。

変数名 格納データ
Open 表示しているチャートの各バーの始値配列
Close 表示しているチャートの各バーの終値配列
High 表示しているチャートの各バーの高値配列
Low 表示しているチャートの各バーの安値配列
Time 表示しているチャートの各バーの時間配列
Volume 表示しているチャートの各バーの出来高配列

これらは全て配列です。
インデックス0番が最新のバーに対応しています。
最新のバーの始値を表示するなら、

Print(Open[0]);

1本前のバーの終値を表示するなら、

Print(Close[1]);

となります。

ちなみに、MQL5ではこれら定義済みの配列は無くなっており、四本値などを確認するには別の手段が必要になります。

配列の要素数に注意

配列には要素数があり、これを超えることはできません。
例えば、以下のような記述をすると配列の要素数を超えることになります。

int numbers[3];
numbers[0] = 100;
numbers[1] = 200;
numbers[2] = 300;
numbers[3] = 400;

5行目で、要素数が3の配列に対して、4番目のインデックスを用いてデータを代入しようとしています。
このような記述があると、プログラムの実行中にエラーが発生し、EAが強制終了します。

処理の中で配列の要素数を超えてしまうのは、プログラマのミスによるものがほとんどです。
プログラムを書く際は、このようなミスが起こらないように注意するのはもちろんですが、ミスしにくくする工夫も必要です。
前回の記事で触れた「マジックナンバーの使用をなるべく避ける」というのも工夫の一つです。

また配列は、ループ処理と非常に相性が良いのですが、これはまた次章以降で触れていきます。

次回は、制御構文と言われるもののひとつ「条件分岐」について解説します。

コメントを残す

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

コメントする