MQL4 EA作成に必須!パラメータ設定の基本|inputとexternの違いと使い方

EA作成入門
記事内に商品プロモーションを含む場合があります
スポンサーリンク

EA(エキスパートアドバイザー)を自作する際に避けて通れないのが「パラメータ設定」です。
ロットサイズや使用時間足、機能の有無などをユーザーが簡単に設定できるようにするために、inputextern を使います。

本記事では、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 bool設定

色の設定を活用する

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

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のチェック時間足

設定画面にプルダウンメニューが表示され、ユーザーが選択できるようになります。

input EnumPERIOD設定

特に時間足系はプルダウンメニューにしておくとかっこいいのでおすすめです!

時間足コードを返す関数の例

選ばれた 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ではパラメータを宣言する方法として inputextern の2種類があります。
両方とも設定ダイアログに表示されますが、挙動に違いがあります。

項目inputextern
定義方法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の作り方に興味がある方は是非参考にしてください。

コメント