English

MQL5の書き方(for MQL4デザイナー)

 

MQL5の配列の活用法

配列

MQL4は配列を使用しなくても大半のコードを書くことができます。しかしMQL5では配列を利用するシーンが非常に多くあります。ここでは配列の基本的な使い方から、動的配列、静的配列、多次元配列の使い方、そして実際のMQL5での配列利用例を紹介します。

配列について

配列は、連続したデータを保存するための特別な種類の変数です。
変数に0から始まる数値を割り当てて値を代入したり参照したりできます。
配列は同じ種類のデータをまとめて扱う場合に役立ちます。例えば、配列を使用してリストを表現することができます。また、要素の追加や削除、検索、ソートなどの操作を簡単にすることができます。

静的配列使用例

 

int MyArray[3] = {5, 6, 7};
for (int i = 0; i < 3; i++) Print(MyArray [i]);
解説

1行目 3つの要素を格納する配列MyArrayを宣言しています。
MyArray [3]を宣言した場合インデックスは[0]~[2]まで用意されます。
MyArray [0]に5、MyArray [1]に6、MyArray [2]に7が代入されます。

2行目 forループを使用してMyArray [0]からMyArray [2]までを表示しています。

静的配列と動的配列

前述の例は配列のサイズを3として固定で宣言しました。このような、あらかじめサイズが固定された配列を「静的配列」と呼びます。一方で、サイズを変更することが可能な配列を「動的配列」と呼びます。

動的配列の使用例

int MyArray []; //動的配列の宣言
ArrayResize(MyArray, 2);//配列サイズを2に変更
MyArray [0] = 5;
MyArray [1] = 6;
Print(ArraySize(MyArray));//配列サイズの表示:2
ArrayResize(MyArray, 3); //配列サイズを3に変更
MyArray [2] = 10;
Print(ArraySize(MyArray));//配列サイズの表示:3
解説

1行目 動的配列MyArrayを宣言しています。配列を動的にするためにはインデックス[]にサイズを指定せず宣言します。

※int MyArray []={1,2}; のようにインデックス[]にサイズを指定しなくても宣言時に値を入れると静的配列になります。

5行目 ArraySize()関数を使用して配列のサイズを取得しています。
この時点では配列のサイズは2の為、2が表示されます。

6行目 ArrayResize()関数を使用して配列のサイズを3に拡大しています。
静的配列に対してこの操作を行うとエラーが発生します。

8行目 再度ArraySize()関数を使用して配列のサイズを確認しています。配列のサイズが3に増えているため、3が表示されます。

以上のように動的配列はサイズを自由に変更することができます。

多次元配列

多次元配列とは、2つ以上のインデックスを使ってデータにアクセスする配列のことを指します。たとえば、2次元配列は2つのインデックスを使って表やグリッド、または行列をイメージしたデータとして扱うことができます。

多次元配列の例

int MyArray [2][2] = {1, 2, 3, 4};
Print(MyArray[0][0], MyArray[0][1], MyArray[1][0], MyArray [1][1]);
//結果: 1 2 3 4

1行目 2×2の多次元配列MyArrayを宣言し値を代入しています。
{1 , 2 , 3 , 4}の各値はMyArray[0][0]に1 、MyArray[0][1]に2、MyArray[1][0]に3、MyArray [1][1]に4が代入されます。
2行目 それぞれのインデックスに代入された値を出力し、結果を確認しています。

配列とソート

配列の利点はデータのソートが簡単にできることです。
以下に、配列のソート機能とその使い方を示します。

使用例

int MyArray[] = {9, 1, 6, 5};

for(int i = 0; i < ArraySize(MyArray); i++)Print(MyArray[i]);
//結果 9 1 6 5

ArraySort(MyArray);//ソート
for(int i = 0; i < ArraySize(MyArray); i++)Print(MyArray[i]);
//結果 1 5 6 9

ArrayReverse(MyArray);//反転
for(int i = 0; i < ArraySize(MyArray); i++)Print(MyArray[i]);
//結果: 9 6 5 1

1行目 MyArrayという配列を宣言し、値に9,1,6,5を順に代入しています。
この時点の配列の中身は以下のようになります。
MyArray[0] = 9
MyArray[1] = 1
MyArray[2] = 6
MyArray[3] = 5

forループを使用して配列MyArrayの各要素を表示します。
forループの終了条件の値をArraySize()関数を使用して取得しています。この関数を利用することで、コーディング中に配列のサイズを変更した場合でも簡単に対応することができます。

6行目 ArraySort()関数を使用してMyArrayの値を昇順にソートしています。
配列の中身は以下のように変更されます。
MyArray[0] = 1
MyArray[1] = 5
MyArray[2] = 6
MyArray[3] = 9

10行目 ArrayReverse()関数を使用して配列の要素の順番を反転(降順ソート)しています。
MyArray[0] = 9
MyArray[1] = 6
MyArray[2] = 5
MyArray[3] = 1

配列を理解し活用することで、データの管理や操作を格段に効率化することができます。

静的配列と動的配列の違いを理解し、それぞれの特性に合った状況で適切に使用することが重要です。また、多次元配列を用いることで、より複雑なデータ構造を扱うことも可能になります。

配列のソート機能は、データを整理し分析する上で非常に便利なツールです。これを利用することで、データの中から特定のパターンを見つけ出すことや、データの傾向を把握するのが容易になります。

配列を使いこなして高度な分析を行い、より優れた取引戦略を開発しましょう。

 

執筆者
林貴晴

林 貴晴(AMSER株式会社代表取締役)

内資系薬品会社で約10年勤務の後、
外資系製薬会社(現IQVIA及びGSK)で合計約10年を勤務
その後EA AMSERを開発し、その成績を評価され、株式会社ゴゴジャンの部長として抜擢。
現在はAMSER株式会社代表取締役、株式会社トリロジー他で役員を兼任。