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倍の領域を使用するもどうかと・・・。