MQL4 iCustom Indicator EA

使用 MT4 の驚くべき強みは、オンラインで入手可能な何百ものカスタムインジケーターの使用と統合です。 カスタム インジケーターをカスタム インジケーター ウィンドウからチャートにドラッグ アンド ドロップすることで、多くの人が簡単に使用できます。 この MQL4 iCustom Indicator EA の記事で、エキスパートアドバイザーをプログラムしてカスタムインジケーターまたはオシレーターを使って取引する方法を学びましょう。


エキスパートアドバイザーのカスタムインジケーターを使用するには、知っておく必要のあることがいくつかあります。

EA で使用するカスタム インジケーターは、インジケーター ディレクトリ (MT4 の標準インストールの場合、C:\Program Files\MetaTrader 4\experts\indicators) に配置する必要があります。 EA が実行されると、インジケーター ディレクトリでコンパイルされたインジケーター (.ex4 ファイル) が検索されます。


iCustom() というカスタム インジケーターを操作するための組み込み関数があります。 iCustom() は、コードを最初から書き直すことなく、エキスパートアドバイザーまたはカスタムインジケーターコードで外部インジケーターを使用できるようにする MQL4 関数です。


この関数の構文は次のとおりです。


double iCustom(string Symbol 、 int Timeframe 、 string IndicatorName、 int Indicator Parameters、 int Mode、 int Shift);


パラメータの説明

シンボルは次の目的で使用されます。インジケーターのデータシンボルを計算します。 NULL は現在のシンボルを意味します。

制限時間 制限時間。 任意の時間範囲の列挙値を指定できます。

(0) を選択して現在の時間範囲を表示するか、次のいずれかを選択します: (1、5、15、30、60、240、1440、10080、43200) {すべて分以内}

IndicatorName これは、ナビゲーター ウィンドウのカスタム インジケーターのリストに表示されるインジケーター ファイルの名前です。 たとえば、「NonLagMA_v7.1.1」です。

インジケーター

パラメータ [カスタム インジケーター プロパティ] ウィンドウの [入力] タブには、カスタム インジケーターのパラメーターが表示されます。 渡されるパラメーターとその順序は、カスタム インジケーターの宣言順序と外部変数の型に対応する必要があります。 それらはすべてカンマで区切る必要があります。

モードラインインデックス。 0 ~ 7 の値を指定でき、SetIndexBuffer 関数のいずれかで使用されるインデックスに対応する必要があります。

シフト インデックス インジケーター バッファーから取得された値のインデックス (現在のバーに対して指定期間前にシフト)。

上記の 6 つのパラメータのうち、最初の 3 つと最後のパラメータが最も理解しやすいです。 シンボルとタイムフレームについては、以前の記事ですでに説明しました。 インジケーターの名前も非常にシンプルです。これは、ナビゲーター ウィンドウのカスタム インジケーターのリストに表示されるインジケーターの名前であり、相場相場で囲まれています。 例: ウィンドウに NonLagMA_v7.1 という名前のインジケーターが表示された場合は、インジケーター名パラメーターに「NonLagMA_v7.1」と書き込みます。


最後のパラメータ Shfit についても前の記事で説明しましたが、ここでは単なる復習です。 Shift は、インジケーターが計算されているバーを示します。 チャート上で時間を遡ると、バーには 0、1、2、3、4、5... の番号が付けられます。 移動オプションの変更は、インジケーター ラインを未来または過去に移動するのと似ています。 1 つシフトすると、前のバーの値が取得されます。 0 によるオフセットは、現在のバーの値を取得します。


合計:


shift = 0 で現在のバーのインジケーター値を取得します(形成前のバーの値はまだです)


shift = 1


shift =前のバーの前のバーの 2 の値


3 番目のパラメーター インジケーター パラメーターと 4 番目のパラメーター パターンを EA で検出して実装するのは難しい場合があります。


インジケーター パラメーターの検出

まず、カスタム インジケーター パラメーターを検出する方法を調べてみましょう。 ほとんどの場合、カスタム インジケーターでは 1 つまたは 2 つのインジケーター パラメーターが使用されますが、一部のインジケーター パラメーターは 3 つ以上のインジケーター パラメーターを使用するため、検出プロセスがより困難になります。 カスタム インジケーター NonLagMA_7.1 は、9 つ​​のインジケーター パラメーターを使用したより複雑なインジケーターの例です。


注: パラメーターはインジケーターの値を変更する入力であり、カスタム インジケーターに最適な設定を設定するために使用する変数です。 NonLagMA_v7.1 をダウンロードできます。


カスタム インジケーターのプロパティ ウィンドウの [入力] タブに移動すると、NonLagMA_v7.1 カスタム インジケーターのパラメーターが表示されます:

上の画像には 6 つの入力が表示されていますが、実際には 9 つの入力またはインジケーター パラメーターがあります。 異なる入力を持つ 9 つのインジケーター パラメーターがあり、その値を変更して最適な設定を得ることができます。そのうちの 1 つはインジケーター (長さ) の形成に重要です。


インジケーター パラメーターを見つけるより良い方法は、ソース コードからパラメーターをコピーして貼り付けることです。 カスタム インジケーターを右クリックして [変更] をクリックすると、MetaEditor でインジケーターのソース コードを確認できます。 インジケーターが灰色の場合は、mq4 コードがなく、ex4 しかないことを意味します。逆コンパイルする方法を見つける必要があるか、上記の方法を使用してプロパティ ウィンドウからパラメーターを推測することができます。


mq4 コードを持っていて、それを開くことができれば幸運です。 次に、インジケーターのソース コードの先頭にある外部変数を確認します。 インジケーターのパラメーター、データ型、デフォルト値がここにリストされます。外部コードをコピーしてエキスパートアドバイザーの外部変数セクションに貼り付けるだけです。


NonLagMA インジケーターを使用すると、次の外部変数が表示されます。


// —— 入力パラメータ

externalprice = 0;

external length = 9; //NonLagMA 期間

external intdisplacement = 0; //DispLace または Shift

外部 double PctFilter = 0; //10 進ダイナミック フィルター

external color = 1; //カラー モードの切り替え (1 色)

external int ColorBarBack = 1; // カラー モードを返す

外部二重バイアス = 0; // 上下バイアス

外部アラーム モード = 0; // サウンド アラーム スイッチ (0-オフ 、 1-on)

external int WarningMode = 0; // 警告音スイッチ (0-off,1-on)


Keepパラメーターは 9 つありますが、インジケーターの本質を変えるのは 1 つのパラメーターの長さだけであることに注意してください。 ほとんどの場合 0 である Color を除いて、その他はデフォルト値のままにすることができます。 最後の 2 つのパラメーターのモードとシフトのデフォルト値を 0 にすると、上記を使用して iCustom NonLagMA インジケーターのアイデンティティを構築できます。


iCustom (NULL) 、0、「NonLagMA_v7.1」、価格、長さ、変位、PctFilter、色、ColorBarBack、偏差、AlertMode、WarningMode、0,0)。


最適化の目的で、より良い値を得るために変更または最適化する必要があるのは、上記の 9 つのパラメータのうち 1 つである長さだけです。通貨記号と時間枠に応じて最適な NonLagMA を見つけます。 その他はデフォルトのままになります。 通常、カスタムインジケーターのパラメータとして長さを考慮すると、それは戦略の形成において、したがってその後の操作にとって最も重要なパラメータになります。


上記のカスタム インジケーターは効果的にコンパイルされるはずですが、それを戦略に組み込むには、最後の 2 つのパラメーター、mode と shift の使用方法を知る必要があります。 。


ディスカバリー モード (ライン/信号)

モードは、0 ~ 7 の範囲のライン インデックスです。 MT4 では、カスタム インジケーターごとに最大 8 つのインジケーター ライン (バッファー) が許可されます。 これらの行 (バッファー) は、インジケーター コード内の SetIndexBuffer 行の 1 つによって使用されるインデックスに対応する必要があります。


これを視覚化すると役立ちます。インジケーターには、異なる色の最大 8 つのライン/シグナル (または矢印) があります。 各行には出力があり、各行には値があります。 モードを使用すると、EA (8 番目) の目的のライン (信号) を選択できます。 ほとんどの場合、インジケーターにはライン/信号が 1 つしかないため、mode=0 を使用する必要があります。


パターンに関する注意: MT4 のインデックスは 0 ~ 7 であるため、パターンは 0 ~ 7 の値を取ります。 したがって、最初の信号のモード = 0 (1 ではなく) になります。 インジケーターに 3 つのインジケーター ライン/シグナルがあり、最初のラインの値を取得したい場合は、mode=0 を使用します。mode=1 の 2 番目のライン/シグナルの値は、mode=2 で 3 番目のシグナルの値を取得します。 。


それでは、EA にどのモードを使用するかをどのように決定すればよいでしょうか?


このモードの秘密はインジケーター バッファーです。


基本的に、コード内でモードラインとなるバッファを探す必要があります。 バッファが 3 つあると仮定します区:


iCustom(Symbol(),Timefram e,"CUSOMT INDI NAME",すべてのパラメータはカンマで区切られます (BUFFER,SHIFT);


現在のバーの 3 つのバッファの値を取得したい場合は、次のように記述します。 :


iCustom(Symbol(),Timeframe e,"カスタム インディ名"、すべてのパラメータはカンマ、0、0) で区切られます。


iCustom(Symbol(),Timeframe e,"カスタム インディ名"、すべてのパラメータはカンマ、1、0 で区切られます);


iCustom(Symbol(),Timeframe e,"カスタム インディ名"、すべてのパラメータはカンマ、2、0 で区切られます);


OK、では、このバッファー構文の例と、それがコード内のどこに記述されるかを見てみましょう。


NonLagMA インジケーターの初期化関数の下に、以下に示すように多数のインジケーター バッファーが表示されます。


インジケーター バッファー (6);


SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0, MABuffer) );

SetIndexStyle(1,DRAW_LINE);

SetIndexBuffer(1,UpBuffer);

SetIndexStyle(2,DRAW_LINE);

p>SetIndexBuffer(2,DnBuffer);

SetIndexBuffer(3, トレンド);

SetIndexBuffer(4,Del);

SetIndexBuffer(5,AvgDel) ) ;

文字列の短縮名;


SetIndexStyle は、3 つの行 (DRAW_LINE) があることを示します。 下,SetIn

 

赤で強調表示したデータシートは、モード (ライン/信号) の機能を推測するための手がかりを提供します。 NonLagMA は最初のモード (mode = 0) であり、これはライン自体であると推測できます。 バーの上にマウスを置くと、そのバーの NonLagMA 行のデータ読み出しが表示されます。 上は 2 番目のモード (mode=1) で、青い線であると推測できます。


下に青い線のあるバーの上にカーソルを置くと、データ読み取り値が表示されずに上昇していることがわかります。下流線。 Dn は 3 番目のモード (mode = 2) であり、それが赤い線であると推測できます。 赤い線のあるバーの上にマウスを置くと、Dn 行のデータが読み取られますが、Up 行のデータは読み取られないことがわかります。


トレンドの 4 番目のモード (モード = 3) はデータ ウィンドウに表示されませんが、コードから次のように記述されていることがわかります。現在のトレンド シグナル == 1 の場合、トレンドは強気であり、現在のトレンド シグナル == -1 の場合、トレンドは弱気です。


NonLagMA カスタム インジケーターの 4 つのモードの概要を理解したので、少なくとも 3 種類の EA 条件を作成できます。

< p>

クロスオーバー (モード = 0) など、MA ライン自体で動作する EA;


使用Up (青) と Dn (赤) シグナル。NonLagMA が青に変わったら買い、赤に変わったら売ります (パターン = 1 およびパターン = 2)。


トレンドシグナルを使用して、トレンドが上昇しているときに買い、トレンドが下降しているときに売るEA (パターン = 3)。


次の記事では、これらの EA の組み合わせをそれぞれ検討します: カスタム インジケーターを使用した戦略の構築