MQL4でインジケーターを作成している際、パラメーター指定時にキーボードのキーをプルダウンで選択させるようにさせたいケースが有るかと思います。
少々躓いたので、方法を記載しておこうと思います。
- MQL4で作成したインジケーターのパラメータ指定時に、キーボードのキーをプルダウンで選択できるようになること
- プルダウン選択時の参考画像は以下の通り

キーコードを定義したENUMを作成
まずはキーコードを定義したENUMを作成します。
ポイントとしてはインジケーター等のメインとなるソースファイルとは分けることです。
ENUM専用のソースファイルを別で用意しておくと良いでしょう。
なので通常の「.mq4」ファイルではなく「.mqh」ファイルを作成することになります。
こうすることで、インジケーター等のメインとなるソースファイルからインクルードして使うことができるようになります。
ちなみに、「.mqh」ファイルの配置先は「Include」フォルダ配下になります。
サンプルコードは以下のとおりです。
// キーコード
enum ENUM_KEY_CODE // ENUM名
{
ENUM_KEY_CODE_LEFT = 37 // ←
, ENUM_KEY_CODE_UP = 38 // ↑
, ENUM_KEY_CODE_RIGHT = 39 // →
, ENUM_KEY_CODE_DOWN = 40 // ↓
, ENUM_KEY_CODE_ZERO = 48 // 0
, ENUM_KEY_CODE_ONE = 49 // 1
, ENUM_KEY_CODE_TWO = 50 // 2
, ENUM_KEY_CODE_THREE = 51 // 3
, ENUM_KEY_CODE_FOUR = 52 // 4
, ENUM_KEY_CODE_FIVE = 53 // 5
, ENUM_KEY_CODE_SIX = 54 // 6
, ENUM_KEY_CODE_SEVEN = 55 // 7
, ENUM_KEY_CODE_EIGHT = 56 // 8
, ENUM_KEY_CODE_NINE = 57 // 9
, ENUM_KEY_CODE_A = 65 // A
, ENUM_KEY_CODE_B = 66 // B
, ENUM_KEY_CODE_C = 67 // C
, ENUM_KEY_CODE_D = 68 // D
, ENUM_KEY_CODE_E = 69 // E
, ENUM_KEY_CODE_F = 70 // F
, ENUM_KEY_CODE_G = 71 // G
, ENUM_KEY_CODE_H = 72 // H
, ENUM_KEY_CODE_I = 73 // I
, ENUM_KEY_CODE_J = 74 // J
, ENUM_KEY_CODE_K = 75 // K
, ENUM_KEY_CODE_L = 76 // L
, ENUM_KEY_CODE_M = 77 // M
, ENUM_KEY_CODE_N = 78 // N
, ENUM_KEY_CODE_O = 79 // O
, ENUM_KEY_CODE_P = 80 // P
, ENUM_KEY_CODE_Q = 81 // Q
, ENUM_KEY_CODE_R = 82 // R
, ENUM_KEY_CODE_S = 83 // S
, ENUM_KEY_CODE_T = 84 // T
, ENUM_KEY_CODE_U = 85 // U
, ENUM_KEY_CODE_V = 86 // V
, ENUM_KEY_CODE_W = 87 // W
, ENUM_KEY_CODE_X = 88 // X
, ENUM_KEY_CODE_Y = 89 // Y
, ENUM_KEY_CODE_Z = 90 // Z
, ENUM_KEY_CODE_COLON = 186 // :
, ENUM_KEY_CODE_SEMICOLON = 187 // ;
, ENUM_KEY_CODE_COMMA = 188 // ,
, ENUM_KEY_CODE_HYPHEN = 189 // -
, ENUM_KEY_CODE_PERIOD = 190 // .
, ENUM_KEY_CODE_SLASH = 191 // /
, ENUM_KEY_CODE_AT = 192 // @
, ENUM_KEY_CODE_KAKKO1 = 219 // [
, ENUM_KEY_CODE_YEN = 220 // \
, ENUM_KEY_CODE_KAKKO2 = 221 // ]
, ENUM_KEY_CODE_HATT = 222 // ^
, ENUM_KEY_CODE_UNDER = 226 // _
};
ちなみにキーコードは上記が全てではないので、足りない部分がある場合は適宜追加していってください。
メイン(ENUM参照元)となるソースファイルの作成
ENUMを定義したファイルを作成し終わったら、次はメインとなるファイルを作成することになります。
ここではインクルード方法とパラメーターとして指定できるようにする方法を解説いたします。
まずはソースコードの全体像です。
#property copyright "エンジニア投資家の記録"
#property link "https://engistor.com/"
#property version "1.00"
#property description "サンプルソースです。"
#property strict
#property indicator_chart_window
// ライブラリ読み込み
#include <Enums.mqh>
// 外部パラメータ
input ENUM_KEY_CODE KEY = ENUM_KEY_CODE_UP;
インクルード方法
インクルードは以下の部分で行っております。
// ライブラリ読み込み
#include <Enums.mqh>
ENUMを定義しているファイルのパスが「Include/Enums.mqh」となっている場合は上記の方法でインクルードが可能です。
もし「Include」配下にフォルダを作っていて、その配下にENUMを定義したファイルを入れている場合は、記載の方法が変わりますのでご注意ください。
例) 「Include/Sample/Enums.mqh」 というパスの場合は以下のようになる。
// ライブラリ読み込み
#include <Sample/Enums.mqh>
パラメーターとして指定できるようにする方法
続いてパラメーターとして指定できるようにしている部分の実装は以下のとおりです。
// 外部パラメータ
input ENUM_KEY_CODE KEY = ENUM_KEY_CODE_UP;
ENUM_KEY_CODE KEYの部分はENUMを定義したときの名称(ENUM名)と一致させています。
ENUM_KEY_CODE_UPの部分は初期値になります。
したがって、このインジケーターを使用する場合、「↑」がプルダウンの初期値として設定されていることになります。
まとめ
いかがでしたでしょうか。
以下の手順をご紹介いたしました。
- キーコードを定義したENUMを作成
- メイン(ENUM参照元)となるソースファイルの作成
ポイントとしてはENUMを定義するファイルを「.mqh」ファイルとして用意することで、使い回しが可能になるという点です。
これを応用すれば、同じようなコードを書いている場合、1箇所にまとめることで生産性を高めることができます。
ぜひご活用ください。
コメント