EA(エキスパートアドバイザー)を自作する際に避けて通れないのが「パラメータ設定」です。
ロットサイズや使用時間足、機能の有無などをユーザーが簡単に設定できるようにするために、input
や extern
を使います。
本記事では、MQL4のパラメータ設定について
input
パラメータの使い方extern
との違い- 実用的なコード例
を、初心者から中級者まで理解できるように整理して解説します。
MQL4で使えるinputパラメータの型
input
を使うと、EAやインジケーターの「パラメータ入力ダイアログ」に設定項目を表示できます。
データ型 | UI上の見た目 | 用途例 |
---|---|---|
input int | 数値入力 | 時間、回数、カウントなど |
input double | 小数付き数値入力 | ロットサイズなど |
input bool | 選択(true/false) | ON/OFF設定 |
input color | 色選択ドロップダウン | ラインやインジの色 |
input ENUM | プルダウンメニュー | 複数候補から1つを選択 |
input string | 文字列入力 | コメント、ファイル名、時間設定など |
パラメータ名を日本語で表示する方法(#property strict)
EAやインジケーターのパラメータ名を日本語にしたい場合は、#property strict
をソースコードの先頭に書きます。こうする事で、『//マジックナンバー』といたコメント部分がパラメータ設定で表示されるようになります。
例:
#property strict
input int MAGIC_NO = 100; //マジックナンバー
input double LOTS = 0.1; //ロット数
input bool STOC_CLOSE_ONOFF = true; //決済のON/OFF
input color long_trandColor = clrSkyBlue; //決済ラインカラー(ロング)
input EnumPERIOD STC_KESSAI_TIME = PE_M15; //決済時チェック時間足
input string Arear_sound = "alert.wav"; //決済時の通知音
このように #property strict
を明記すれば、
パラメータ入力ダイアログに「トレーリングストップを使う」と日本語で表示できます。
ただし、コード中の変数名は英語 にしておく方が安全で、
ユーザーに見せる「コメント部分」だけ日本語を使うのがおすすめです。
⚠️ #property strict
を明記すると厳格モードとなり、ソースコードが曖昧だと警告メッセージが出るようになるため注意が必要です
#property strictについての詳細はこちら👇
▶ #property strictとは?【EA初心者向け】
MQL4はチェックボックスが存在しない
MQL4にはチェックボックスが存在しません。
かわりに、input bool
でtrue/falseで「ON/OFFを切り替える」として使います。

色の設定を活用する
色を直感的に設定したい場合は input color
を使います。

📜 ENUMでプルダウンメニューを作る
複数の選択肢から1つを選ばせたい場合には enum
を定義し、それを input
として利用します。
enum EnumPERIOD
{
PE_M1, // 1分足
PE_M5, // 5分足
PE_M15, // 15分足
PE_M30, // 30分足
PE_H1, // 1時間足
PE_H4, // 4時間足
PE_D1, // 日足
PE_W1, // 週足
PE_MN1 // 月足
};
input EnumPERIOD MA_CHECK_TIME = PE_H1; // MAのチェック時間足
設定画面にプルダウンメニューが表示され、ユーザーが選択できるようになります。

特に時間足系はプルダウンメニューにしておくとかっこいいのでおすすめです!
時間足コードを返す関数の例
選ばれた EnumPERIOD
を実際の時間足コード(例:PERIOD_H1
)や日本語表記に変換すると便利です。
// 時間足コードと名前を返す関数
void GetTimeFrame(EnumPERIOD periodEnum, int &timeframe, string &timeframeName)
{
switch(periodEnum)
{
case PE_M1: timeframe = PERIOD_M1; timeframeName = "1分足"; break;
case PE_M5: timeframe = PERIOD_M5; timeframeName = "5分足"; break;
case PE_M15: timeframe = PERIOD_M15; timeframeName = "15分足"; break;
case PE_M30: timeframe = PERIOD_M30; timeframeName = "30分足"; break;
case PE_H1: timeframe = PERIOD_H1; timeframeName = "1時間足"; break;
case PE_H4: timeframe = PERIOD_H4; timeframeName = "4時間足"; break;
case PE_D1: timeframe = PERIOD_D1; timeframeName = "日足"; break;
case PE_W1: timeframe = PERIOD_W1; timeframeName = "週足"; break;
case PE_MN1: timeframe = PERIOD_MN1; timeframeName = "月足"; break;
default: timeframe = -1; timeframeName = "未設定"; break;
}
}
使用例:
int tf;
string tf_name;
GetTimeFrame(MA_CHECK_TIME, tf, tf_name);
Print("設定された時間足は:", tf_name, "(コード:", tf, ")");
時間設定をまとめて入力する方法
EAを自作していると、「取引開始時間」と「終了時間」等もパラメータ追加したくなりますよね。
もちろん、以下のような感じで1つずつintで作るのもありです。
input int TradeTime1_Start_HOUR = 8; //取引時間(開始時)
input int TradeTime1_Start_MIN = 0; //取引時間(開始分)
input int TradeTime1_End_HOUR = 20; //取引終了時間(終了時)
input int TradeTime1_End_MIN = 00; //取引終了時間(終了分)
ただこれだとパラメータ設定が増えてしまうので、1つの文字列(例:09:00
)として入力させる方法もあります。
input string TradeTime1_Start = "08:00"; // 取引時間 開始
input string TradeTime1_End = "20:00"; // 取引時間 終了
// 文字列を解析して「時・分」に分解
void ParseTimeString(string timeStr, int &hour, int &minute)
{
string parts[];
StringSplit(timeStr, ':', parts);
if (ArraySize(parts) == 2)
{
hour = StrToInteger(parts[0]);
minute = StrToInteger(parts[1]);
}
else { hour = 0; minute = 0; }
}
この形式にしておくと、初心者でも直感的に時間を設定しやすいです。
※設定する際はしっかりこの「08:00」フォーマットで入力する必要があります
🔄 inputとexternの違い
MQL4ではパラメータを宣言する方法として input
と extern
の2種類があります。
両方とも設定ダイアログに表示されますが、挙動に違いがあります。
項目 | input | extern |
---|---|---|
定義方法 | input int Lots = 1; | extern int Lots = 1; |
値の変更 | 可能 | 可能 |
コード内で再代入 | ❌(定数扱い) | ✅(再代入可能) |
最適化 | 可能 | 可能 |
推奨度 | 高(MQL4では主流) | 特殊ケースで利用 |
使い分けの目安
- inputを使うケース
- EA内部では変更しない固定パラメータ
- 例:ロットサイズ、時間足、閾値など
- externを使うケース
- 内部で値を変更したい場合
- 例:ユーザーが設定した数値を基準に、途中で書き換えるロジック
結論
結論として、
input
を使う推奨です。
MQL4の公式ドキュメントや最新記事でも input
が主流であり、可読性も高くなります。
✅ まとめ
- ON/OFFの切り替え →
input bool
- 複数の選択肢から選ばせたい →
input ENUM
- 時刻設定は文字列形式(09:00など)が直感的でおすすめ
extern
は内部で値を変更したい場合のみ利用、基本はinput
を使う
EAを自作するときは、ユーザーが迷わず設定できるように「UIとしてわかりやすい形」でパラメータを設計することが大切です。
✅EA開発初心者の方はこちらもチェック!
MT4やMQL4の知識がなくても大丈夫!
当サイトでは、プログラミング未経験者でも分かるEA開発の基本から、サンプルコードを使った実践的なチュートリアルまで多数ご用意しています。
ChatGPTやEAつくーるでのEAの作り方に興味がある方は是非参考にしてください。
コメント