MQL4で外部パラメータを用意する方法

MetaTrader 4
GogoJungle
2019/11/10 18:00
70

MQL4プログラミングでは、ロット数やマジックナンバーに関する変数の値をユーザーに設定して欲しい場面があります。
これらの変数は外部パラメータとして用意することで、EAやインジケーターのプロパティウィンドウからユーザーが自由に変更が可能となります。

外部パラメータの使い方

外部パラメータを利用するには変数宣言時に、型名の前に「extern」を付けます。

extern int    MagicNumber = 123456;
extern double Lots        = 0.1;
extern double SLpips      = 100;
extern double TPpips      = 100;
extern int    Slippage    = 1;

動作サンプル画像

日本語の外部パラメータを利用する方法

変数は基本的にアルファベットで入力しますが、日本語ユーザー向けにパラメータ名を日本語で設定したい場合があります。
外部パラメータを宣言した行の最後に「//」でコメントを付ける事で、パラメータ名を変更することが可能です。

extern int    MagicNumber = 123456; //マジックナンバー
extern double Lots        = 0.1;    //ロット数
extern double SLpips      = 100;    //損切り
extern double TPpips      = 100;    //利食い
extern int    Slippage    = 1;      //スリッページ

動作サンプル画像

外部パラメータにオリジナルの選択肢を利用する方法

外部パラメータをユーザーに利用してもらう際、誤った入力を避けるために用意した候補の中から選択してもらいたい場合などがあります。
「enum」を利用して列挙型の宣言を行うことで作成することが可能です。

//新しい列挙型の作成
enum currency{
   USD  = 0,
   JPY  = 1,
   EUR  = 2
};

//初期値を定数の名前で指定
extern currency currency_1 = USD;

//初期値を割り振った数値で指定
extern currency currency_2 = 1;

//パラメータ名を日本語へ
extern currency currency_3 = 2;//通貨3

動作サンプル画像

列挙型の外部パラメータの選択肢を日本語化することも可能です。
日本語化するには定数を宣言した行の最後に「//」でコメントとして付けます。

enum currency{
   USD  = 0, //ドル
   JPY  = 1, //円
   EUR  = 2  //ユーロ
};

extern currency currency_1 = USD;

externとinputの違い

externの代わりにinputをつけることでもユーザーに設定可能な外部パラメータとして表示されます。

input int    MagicNumber = 123456; //マジックナンバー
input double Lots        = 0.1;    //ロット数
input double SLpips      = 100;    //損切り
input double TPpips      = 100;    //利食い
input int    Slippage    = 1;      //スリッページ

この二つには違いがあります。
externで作成した外部パラメータは、プログラム内の処理によって変更可能です。
例えば以下の処理では入力されたロット数をプログラム内で変更しております。
パラメータに0を指定して実行すると、Lotsの値が0.01に修正されます。

extern double Lots = 0.1;    //ロット数

void OnTick(){
   if(Lots < 0.01){
      Lots = 0.01;
      Comment(Lots);
   }
}

inputを使用した外部パラメータの値は変更ができません。
先ほどの例と同じ処理をinputで作成しますと、コンパイルエラーが発生します。

input double Lots = 0.1;    //ロット数

void OnTick(){
   if(Lots < 0.01){
      Lots = 0.01; //外部パラメータの値を変更しているのでエラーとなる
      Comment(Lots);
   }
}

コメント

関連項目

検索結果がありません。