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

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

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);
   }
}

コメント

トシ
2021/04/03 22:30

日本語の外部パラメータを利用する方法
上記を試しましたが日本語化出来ませんでした。
どうすれば出来るでしょうか?

GogoJungle
2021/04/05 00:26

日本語の外部パラメーターをご利用の場合は #property strict を記述する必要がございます。
下記のようにプロパティを追加後、再度コンパイルしてご確認いただければ幸いでございます。

変更前

#property copyright ""
#property link ""

変更後

#property copyright ""
#property link ""
#property strict
トシ
2021/04/09 08:34

日本語化やってみたのですがエラーで出来ませんでした。
何が悪いでしょうか?

スクリーンショット (90).zip
GogoJungle
2021/04/09 19:29

undeclared indetifier のエラーが表示されている状況でございました。
お手数ですが、該当箇所について、下記のように修正をお願いいたします。

修正前

for(i = 0;

修正後

for(int i = 0;

トシ
2021/04/09 21:48

ご回答ありがとうございます。
しかしながらコンパイルできませんでした。
再度お願いします。
WEB版だと問題おきないのでしょうか?

スクリーンショット (91).zip
GogoJungle
2021/04/10 15:11

undeclared indetifier のエラーが表示されている状況でございました。
お手数ですが、該当箇所について、下記のように修正をお願いいたします。

修正前

bool OC(int magic){
   double pos = CurrentOrders(magic);

修正後

bool OC(int magic){
   int type;
   double pos = CurrentOrders(magic);

本修正でコンパイルできるかと存じます。大変お手数をおかけしました。

なお、EAつくーるWeb版の場合は、#property strict の記述がございますので
差し支えなければ、Web版をご利用いただければ幸いでございます。

TEMPLE
2021/11/26 21:48

ご質問失礼いたします。
画像のTralingStopとNanpinの項目を日本語化したいのですがエラーとなってしまいます。
どの部分を編集したら日本語化できますか?

GogoJungle
2021/11/27 14:04

画像が参照でない状況で恐れ入りますが
Web版をご利用いただければ日本語化が可能でございます。

ご参考いただけますと幸いです。何卒よろしくお願い申し上げます。

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。