恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

MQLの列挙型(enum)

MT4用のインディケーター等を作っていると、特定の機能のONとOFFを切り替えたい場面があると思います。これをパラメーターに反映する時、今まではbool型を使って true または false を選ぶようにしていました。

 

しかし、自分以外の人が使うインディケーターの場合は ON と OFF という表示の方が分かりやすいと思い、enum を使うことにしました。

 

仮に ON と OFF を切り替える項目が3つあるのなら以下のような感じですね。

enum hoge {OFF, ON};



input hoge item1; // サーバー時刻の表示

input hoge item2; // ローカル時刻の表示

input hoge item3; // GMTの表示

こうすると、パラメーター設定画面で「サーバー時刻の表示」「ローカル時刻の表示」「GMTの表示」という項目を ON と OFF で切り替えることができるようになります。

 

C言語とMQL4で違う点

C言語ですと、定義したenum型を元に変数を宣言する場合、以下のようになります。

// enum hoge型 の変数を3つ宣言

enum hoge item1, item2, item3;

C++では、先頭のenumを書いても略してもよいことになっているので、以下の書き方もアリです。

hoge item1, item2, item3;

 

MQL4ではどうなっているのかなと試してみたところ、次のような結果になりました。

input hoge item1;      // コンパイルが通りました。

input enum hoge item1; // コンパイルが通りませんでした。

どうやら、MQL4では enum を略して記述することになっているようです。

 

余談

パラメーターの設定画面では ON と OFF という表示をした方が分かりやすいのですが、自分しか使わないインディケーターなら今後もbool型を使う予定です。

というのも、bool型の方がメモリを節約できるからです。

列挙型(enum)は実質的に整数型なので、MT4の場合 4 バイトです。
一方、bool型は 1 バイトです。

 

ON か OFF の表示のために4倍の領域を使用するもどうかと・・・。