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が強制終了します。
処理の中で配列の要素数を超えてしまうのは、プログラマのミスによるものがほとんどです。
プログラムを書く際は、このようなミスが起こらないように注意するのはもちろんですが、ミスしにくくする工夫も必要です。
前回の記事で触れた「マジックナンバーの使用をなるべく避ける」というのも工夫の一つです。
また配列は、ループ処理と非常に相性が良いのですが、これはまた次章以降で触れていきます。
次回は、制御構文と言われるもののひとつ「条件分岐」について解説します。