FX-EA System Projectはこちら公式ラインに登録して
プレゼントをもらう

【MQL】iCustom関数を活用してカスタムインジケーターをEA化する【中級編】

MQL MT4 iCustom関数 インジケーター EAMT4EA作成

iCustom関数を活用してカスタムインジケーターをEA化する

iCustom関数を活用してカスタムインジケーターをEA化させていきましょう。

iCustom関数とは指定したカスタムインジケーターの値を返す関数です。

【MQL】指定したカスタムインジケーターの値を返す『iCustom関数』についてわかりやすく説明してみた
iCustom関数 iCustom関数は、指定したカスタムインジケーターの値を返す関数です。 iCustom関数は、独自インジケーターを組み込む際に利用することが多いです。 また、EAを作る際に外部のサインを出すインジケーター...

iCustom関数を活用して以前ゴールデンクロス・デッドクロスのインジケーターを自動売買させましょう。

【MQL】移動平均線のゴールデンクロス・デッドクロス時にシグナルを表示するインジケーター【中級編】
移動平均線のゴールデンクロス・デッドクロス時にシグナルを表示するインジケーター 移動平均線のゴールデンクロス・デッドクロス時に シグナルを表示するインジケーターを作成していきたいと思います。 2つの移動平均線を表示する ...

メタエディタ(MetaEditor)を立ち上げる

メタエディタ(MetaEditor)を立ち上げましょう。今回は名前を「iCustom-EA」で作成します。

パラメーターを記述する

パラメーターを記述しましょう。

input int TakeProfit = 5;//利確
input double Lots = 0.01;//ロット数
input int MagicNumber = 12345;//マジックナンバー

OnTick()関数を記述する

OnTick()関数を記述しましょう。

まず最初にiCustom関数を活用してカスタムインジケーターの矢印の配列を変数に代入します。

   double UPArrow = iCustom(NULL,0,"GCDC-SIGNAL",2,1);
   double DWNArrow = iCustom(NULL,0,"GCDC-SIGNAL",3,1);

そしてUPArrowがEMPTY_VALUがではなく、DWNArrowがEMPTY_VALUE時に

if(UPArrow != EMPTY_VALUE && DWNArrow == EMPTY_VALUE)

ロングのポジションを持つようにします。

 OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point*10,"Order Long",MagicNumber,0,Red);

今度は逆で、UPArrowがEMPTY_VALUEで、DWNArrowがEMPTY_VALUEではない時に

if(UPArrow == EMPTY_VALUE && DWNArrow != EMPTY_VALUE)

ショートのポジションを持つようにします。

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point*10,"Order Short",MagicNumber,0,Blue);

これでOnTick()関数は完了です。

   double UPArrow = iCustom(NULL,0,"GCDC-SIGNAL",2,1);//上矢印をUPAroowに入れる
   double DWNArrow = iCustom(NULL,0,"GCDC-SIGNAL",3,1);//下矢印をDWArrowに入れる
   
   if(UPArrow != EMPTY_VALUE && DWNArrow == EMPTY_VALUE)/UPAroowが空ではなくDWNArrowが空の場合 
   {
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point*10,"Order Long",MagicNumber,0,Red);//ロングエントリー
   }
  if(UPArrow == EMPTY_VALUE && DWNArrow != EMPTY_VALUE)//UPAroowが空でDWNArrowが空ではない場合 
  {
   OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point*10,"Order Short",MagicNumber,0,Blue); //ショートエントリー
  }
Copy

コンパイル

コンパイルしましょう。しっかりと条件通りに動いていれば完了です。

ソースコード全体

//+------------------------------------------------------------------+
//|                                                   iCustom-EA.mq4 |
//|                     Copyright 2020, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict

/*パラメーター*/
input int TakeProfit = 5;//利確
input double Lots = 0.01;//ロット数
input int MagicNumber = 12345;//マジックナンバー
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double UPArrow = iCustom(NULL,0,"GCDC-SIGNAL",2,1);//上矢印をUPAroowに入れる
   double DWNArrow = iCustom(NULL,0,"GCDC-SIGNAL",3,1);//下矢印をDWArrowに入れる
   
   if(UPArrow != EMPTY_VALUE && DWNArrow == EMPTY_VALUE)/UPAroowが空ではなくDWNArrowが空の場合 
   {
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point*10,"Order Long",MagicNumber,0,Red);//ロングエントリー
   }
  if(UPArrow == EMPTY_VALUE && DWNArrow != EMPTY_VALUE)//UPAroowが空でDWNArrowが空ではない場合 
  {
   OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point*10,"Order Short",MagicNumber,0,Blue); //ショートエントリー
  } 
}
//+------------------------------------------------------------------+
Copy

まとめ

iCustom関数を活用すればどのようなカスタムインジケーターでも自動売買化させることができるので、

ソースコードを応用してぜひiCustom関数をマスターしてみてください。

コメント

タイトルとURLをコピーしました