
前回の記事では、カスタム インディケータを iCustom 関数に変換するプロセスを説明しました。これは、Expert Advisor にデプロイする前に必要な最初のステップです。 iCustom 関数の 6 つの異なるパラメーターを定義し、最後の 3 つであるインジケーター パラメーター、モード、シフトに特に注意を払います。
複雑なカスタム インジケーター NonLagMA_7.1 を iCustom インジケーター関数に変換する例を使用し、そのインジケーター パラメーターとモードを見つける方法を紹介しました。プロセス。
こちら MQL4
a> カスタム インジケーター EA の例の記事では、NonLagMA_7.1 の例を続けて、iCustom 関数をさまざまな Expert Advisor に組み込むさまざまな方法を検討します。 NonLagMA カスタム インジケーターがどのようなものかを忘れた場合、または表示されない場合は、スクリーンショットを確認してください:以前、iCustom 関数のモード パラメーター (ライン/信号) を検出する調査作業について説明したときに、赤で強調表示されたデータシートが視覚的な手がかりを提供することを指摘しました。 NonLagMA は線自体で表される最初のモード (mode=0)、Up は青い線で表される 2 番目のモード (mode=1)、Dn は青い線で表される 3 番目のモード (mode= 2) であると推測します。 ) レッドライン。 トレンドの 4 番目のモード (モード = 3) は、ここでは視覚的に表現されていませんが、コード自体で表現されています。ロジックは、トレンド == 1 の場合、トレンドは上昇しており、トレンド = -1 の場合、トレンドは上昇しています。下。
これで、 NonLagMA カスタム インジケーターの 4 つのモード。異なるモードに応じて少なくとも 3 種類のエキスパート アドバイザを作成できます。
MA ライン自体を使用(モード=0) クロスオーバーのように連携して動作する EA。
上向きの青いライン (モード = 1) と下りの赤いライン (モード = 2) で動作する EA。NonLagMA が青になったら購入します。赤くなったら売ります。
トレンド シグナル (モード=3) を使用する EA。上昇トレンドのときに買い、下降トレンドのときに売ります。
3 つの EA はすべて、次の同じ外部変数を共有します:
外部価格 = 0;
external length = 150;
external intdisplacement = 0; //DispLace または Shift
external double PctFilter = 0; //10 進動的フィルター
external color = 1; //カラーモードの切り替え(1色)
external int ColorBarBack = 1; //カラーモードに戻る
external double偏差 = 0; //上下偏差
外部警告モード = 0; //サウンドアラームスイッチ (0-オフ、1-オン)
external int WarningMode = 0 ; // 警告音スイッチ (0-オフ、1-オン)
external switch = 1;
前回の投稿上記のインジケーターのパラメーターの発見については記事でレビューされていますが、私もレビューします。 最も簡単な方法は、インジケーターのソース コードから外部変数をコピーしてエキスパート アドバイザーに貼り付け、iCustom 関数インジケーターに上記の識別子を入力して、3 番目のパラメーター (インジケーター名) と最後の 2 つのパラメーターの後に来るようにすることです。 (モードとシフト)。
したがって、iCustom インジケーターを次のように変換します。
Double ma = iCustom( NULL,0,"NonLagMA_v7.1",0,0,Shift);
これについて:
< br/>
< p>double ma = iCustom (NULL、0、「NonLagMA_v7.1」、価格、長さ、変位、PctFilter、色、ColorBarBack、偏差、AlertMode、WarningMode、0、Shift)。注: この特定のインジケーターには 9 つのインジケーター パラメーターがありますが、最も重要なのは長さであることに注意してください。 移動平均と同じように、長さを変更すると NonLagMA の基本構造が変わります。 他のパラメータはデフォルト値の 0 のままでかまいません。
NonLagMA EA #1: MA ライン信号を使用する (mode=0)
< /p>
double macurrent = iCustom(NULL, 0, “NonLagMA_v7.1”, Price, Length, Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode, 0,Shift) を呼び出します。
double maprevious = iCustom(NULL, 0, “NonLagMA_v7.1”, Price, FastLen, Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode, 0,Shift+1)。
Double close_current = iClose (NULL,0,Shift);
double close_previous = iClose (NULL,0,Shift+1) ;
BuyCond if (close_current >= macurrent && close_previous <= maprevious)
SellCond if (close_current < = macurrent && close_previous >= maprevious)
説明:
ここではありません説明することがたくさんあります。 この NonLagMA クロスオーバーは、MA クロスオーバーとほぼ同じ方法で使用します。 高速な NonLagMA が低速な NonLagMA を上回った/下回ったことを意味する可能性もありますが、説明のために、現在の終値が NonLagMA の下/上にあることを意味しているだけです。 最終的な結果は多かれ少なかれ似たものになります。
インジケーター呼び出しでは、iCustom インジケーター関数 (最後から 2 番目) のモード パラメーターが 0 に設定されていることに注意してください。 上で見たように、0 は NonLagMA ライン自体を指します。
現在の終値と前の終値を表すときは、iClose 関数を使用することに注意してください。 iClose 関数は、別の時間枠、通貨記号、またはオフセット値の終値を使用する場合に便利です。 Close または Bid を使用する場合は、現在のシンボルの現在の価格のみを参照します。 私の場合、現在の終値 (Shift) と前の終値 (Shift+1) という異なるシフト値を使用したいので、変数を作成する必要があります。close_previous = iClose (NULL,0, Shift+1)。
NonLagMA EA #2: 青 UP と赤 Dn カラー バリエーション (モード 1 および 3)
p>
NonLagMA ラインの色の変更
意図 //買い: 現在のラインが青、前のラインが赤の場合
//売り: 現在のラインが下降して赤、前のラインが上昇して青の場合
インジケータ
Call double buy_macurrent = iCustom(NULL, 0 、「NonLagMA_v7.1」、価格、FastLen、ディスプレイス、PctFilter、カラー、ColorBarBack、偏差、アラートモード、警告モード、1、シフト)。
double buy_maprevious = iCustom(NULL, 0, “NonLagMA_v7.1”, 価格, FastLen, ディスプレイス, PctFilter, カラー, ColorBarBack, 偏差, AlertMode, WarningMode, 1,Shift+1)。
double sell_macurrent = iCustom(NULL, 0, “NonLagMA_v7.1”, Price, FastLen, Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode 、2、シフト)。
double sell_maprevious = iCustom(NULL, 0, “NonLagMA_v7.1”, Price, FastLen, Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode 、2、Shift+1)。
BuyCond if (sell_maprevious!=EMPTY_VALUE && sell_macurrent==EMPTY_VALUE && buy_macurrent!=EMPTY_VALUE)
SellCond if(buy_maprevious!=EMPTY_VALUE && buy_macurrrent==EMPTY_VALUE && sell_macurrent!=EMPTY_VALUE)
説明:
インジケーター呼び出しセクションでは、buy_ma (青い線) と sell_ma (赤い線) に対して作成された変数が表示され、最後のパラメーター Shift:current (Shift ) と Previous ( Shift+1)。 buy_ma と sell_ma の違いは、最後から 2 番目のパラメータである mode パラメータです。 buy_ma のモードは 1、つまり青い (UP) ラインで、sell_ma のモードは 2、つまり赤い (Dn) ラインです。
入力条件を見て、最初に奇妙に感じるのは、EMPTY_VALUE という単語と感嘆符です。 EMPTY_VALUE をすべて使って何をしたのかと頭を悩ませているかもしれません。
内部的には、専門用語で EMPTY_VALUE は関数を指します。
p>
void SetIndexEmptyValue(int index, double value)
この関数は、プロット ラインを空の値に設定します。 Null 値はデータ ウィンドウにプロットまたは表示されません。 デフォルトでは、空の値は EMPTY_VALUE です。
平易な英語では、EMPTY_VALUE は、データ ウィンドウにその線/信号/矢印に対して何も表示されないことを意味します。 NonLagMA の場合、ラインが青色の場合は常に、データ ウィンドウの UP 行にはインジケーター データ値が表示されますが、データ ウィンドウの Dn 行には何も表示されず、空の値が表示されます。 逆に、線が赤色の場合、データ ウィンドウの Dn 行にはインジケーター データ値が表示されますが、Up 行には何も表示されず、空の値が表示されます。
ここで、 buy_macurrent = EMPTY_VALUE と言うとき、青い線はまったく必要ないと言いたいのです(青い線は必要です)。値なし)。 buy_macurrent! = EMPTY_VALUE とすると、感嘆符 (!) は「不要」を意味します。したがって、青い線には値が存在しないようにする必要があります。つまり、青い線を表現する必要があります。価値のあるもの。
買いの条件を分かりやすく言うと、前の赤い線が存在するとき (sell_maprevious!=EMPTY_VALUE)、そして今は買うということになります。存在しません (sell_macurrent=EMPTY_VALUE) が、青い線は存在します (buy_macurrent!=EMPTY_VALUE)。
逆に、売り条件では、前の青い線が存在したとき (buy_maprevious!=EMPTY_VALUE) に買うつもりであり、今はそうなります。存在しません (buy_macurrent=EMPTY_VALUE) が、赤い線 (sell_macurrent!=EMPTY_VALUE) があります。
NonLagMA EA #3: トレンド変化 (モード 4)
非ラグ移動平均トレンド
購入意図 //購入: 現在のトレンドが上昇しており、以前のトレンドが下降している場合
p >
//売り: 現在のトレンドが上昇し、前のトレンドが下降の場合
インジケーター
Call double Trend_macurrent = iCustom(NULL, 0,"NonLagMA_v7.1 "、価格、FastLen、ディスプレイス、PctFilter、色、ColorBarBack、偏差、アラートモード、警告モード、3、シフト)。
double Trend_maprevious = iCustom(NULL, 0, NonLagMA_v7.1″,Price,FastLen,Displace,PctFilter,Color,ColorBarBack,Deviation,AlertMode,WarningMode,3,Shift+1)。
(trend_macurrent==1 && Trend_maprevious==-1) の場合は売買契約を結ぶ
(trend_macurrent==-1 && 場合は売買契約を結ぶ) trend_maprevious==1)
説明
上記 2 つの EA の Trend_ma と以前のタイプバージョン間の違いは、最後から 2 番目のパラメータであるモードです。モードは 3 で、発見したように、トレンド シグナルを指します。トレンド シグナルは、前のモードのようにデータ ウィンドウに表示されませんが、表示されます。インジケーターのコード内:
Trend[shift]=Trend[shift+1];
/ p>
if(MABuffer[shift]-MABuffer[shift+1] > フィルタ) トレンド[shift]= 1;
if(MABuffer[shift+1]-MABuffer[shift] > ; Filter) Trend[shift]=-1;
このコードは、トレンドがどのように形成されるかを計算します。簡単に言うと、trend = 1 の場合、トレンドは次のようになります。ロング、トレンド = -1 の場合、トレンドはショートです。
上記を 1 つのエントリー条件にまとめるのは非常に簡単です。買い条件については、現在のトレンドが上昇 (trend_current==1) し、前のトレンドが下降 (trend_previous==-1) であることを伝える必要があるだけです。売り条件については、現在のトレンドが必要であると言うだけです。下降傾向 (trend_current== -1) で、前のトレンドは上昇中 (trend_previous==1) です。
