English

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

 

列挙型の理解と作成方法

列挙型

列挙型(Enumeration types)を使うことで事前に定義された値のみのリストを使用することができます。
期待しない値が設定されることを避け、エラーを防ぐ助けとなります。
また、値をアルファベットで表現することで、コードを読みやすくすることができます。

MQL5には多くの列挙型が定義されており、
有名なものでは時間軸を表す'PERIOD_M1'や色を示す'clrRed'などがあります。
また、新たに列挙型を作成することも可能です。

列挙型の宣言と値

列挙型の宣言

enum 列挙型名
{
リスト①,
リスト②,
・・・
};

列挙型名は、一般的に大文字で’ENUM_XXX’の形式で書かれます。
列挙型名、リストは共にアルファベット、数字と一部の記号が使用できます。
ただし、列挙型名の最初の文字はアルファベットである必要があり、リストの最初の文字に数字は使用することはできません。

各リストには0から順番に番号が割り当てられますが、’=’を用いて指定することも可能です。

使用例

enum ENUM_TEST{APPLE,ORANGE,BANANA,TOMATO=10};
int OnInit()
{
Print(APPLE);
Print(ORANGE);
Print(BANANA);
Print(TOMATO);
//結果:0,1,2,10
return INIT_SUCCEEDED;
}

解説
1行目 ENUM_TESTという列挙型を宣言しています。
APPLE、ORANGE、BANANAは値を指定しなかったため、0,1,2という値が順番に割り当てられます。一方、TOMATOには10と明示的に値を指定しています。

その後、確認の為Print()関数でそれぞれの値を表示しています。
結果は0,1,2,10が正しく表示されています。

列挙型を用いたパラメータの表示
input変数を使用することで、メニューに列挙型リストを表示することが可能です。

input変数の使用例

enum ENUM_TEST{APPLE,ORANGE,BANANA,TOMATO=10};
input ENUM_TEST FOOD=APPLE;

解説
1行目 列挙型ENUM_TESTを宣言しています。
2行目 input変数を用いてENUM_TEST型のFOOD変数を宣言し、初期値としてAPPLEを設定しています。

表示例

以上の設定により、パラメータの入力時に、利用者はプルダウンメニューから選択することができます。これにより、ユーザーにとって理解しやすく、さらに宣言されていない値を入力することができないため、エラー発生のリスクも低減します。

不規則な数値による最適化

通常、最適化のパラメータはスタートからストップまでの範囲で一定のステップ幅でテストが行われます。不規則な数値群の最適化をすることはできませんが、列挙型を利用することで特定の値のみを対象とした最適化が可能となります。

列挙型を用いて不規則な数値群を最適化するコードの例

enum ENUM_TEST{test1=1,test3=3,test7=7,test100=100};
input ENUM_TEST IRREGULAR=test1;

表示されるパラメータ

1,3,7,100という不規則な任意の数値を列挙型にして最適化をしています。
input変数に列挙型を渡したときにはステップは表示されず列挙された順にスタートからストップまで最適化をします。
不規則な値である1、3、7、100を列挙型で定義し、最適化の対象としています。input変数に列挙型を渡した場合、ステップは表示されず、列挙された値がスタートからストップまでの順序で最適化が行われます。
この方法を活用すれば、例えば1、10、100といった累乗や、1、2、3、5、8といったフィボナッチ数だけを対象とした最適化など、特定のパターンの数値についてのみ最適化を行うことが可能となります。

列挙型を利用することで、コードの可読性と安全性を向上させ、さらには特定の値だけに焦点を絞った最適化など、高度な機能を実現することができます。
また、利用者がより理解しやすいパラメータを作ることができます。
列挙型を活用して一歩進んだコーディングをしましょう。

 

執筆者
林貴晴

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

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