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

【MQL】パーフェクトオーダー時にエントリーするEA【中級編】

MQL MT4 移動平均線 パーフェクトオーダー EAMT4EA作成

パーフェクトオーダー時にエントリーするEA

パーフェクトオーダー時にエントリーするEAを作成したいと思います。

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

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

パラメーターを記述する

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

input int TakeProfit = 5;//利確
input double Lots = 0.01;//ロット数
input int MagicNumber = 12345;//マジックナンバー
input int MA_Short_Period =25;//短期足MA
input int MA_Middle_Period =50;//中期足MA
input int MA_Long_Period =200;//長期足MA
Copy

OnTick()関数を記述する

OnTick()関数を記述しましょう。まず、変数を3つ用意します。

double Short_MA,Middle_MA,Long_MA;

次にそれぞれの変数にiMA関数の値を代入していきます。

   Short_MA = iMA(NULL,0,MA_Short_Bars,0,MODE_SMA,PRICE_CLOSE,1);//短期足MA
   Middle_MA = iMA(NULL,0,MA_Middle_Bars,0,MODE_SMA,PRICE_CLOSE,1);//中期足MA
   Long_MA = iMA(NULL,0,MA_Long_Bars,0,MODE_SMA,PRICE_CLOSE,1);//長期足MA

OrderTotal()が0で、上昇パーフェクトオーダー時に

if(OrdersTotal() == 0 && Short_MA > Middle_MA && Middle_MA > Long_MA && Close[1] > Short_MA)

ロングのポジションを持ちます。

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

ショートも同様にOrderTotal()が0で、下降パーフェクトオーダー時に

if(OrdersTotal() == 0 && Short_MA < Middle_MA && Middle_MA < Long_MA && Close[1] < Short_MA)

ショートのポジションを持ちます。

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

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

   double Short_MA,Middle_MA,Long_MA;//変数
   
   Short_MA = iMA(NULL,0,MA_Short_Bars,0,MODE_SMA,PRICE_CLOSE,1);//短期足MA
   Middle_MA = iMA(NULL,0,MA_Middle_Bars,0,MODE_SMA,PRICE_CLOSE,1);//中期足MA
   Long_MA = iMA(NULL,0,MA_Long_Bars,0,MODE_SMA,PRICE_CLOSE,1);//長期足MA
   
   if(OrdersTotal() == 0 && Short_MA > Middle_MA && Middle_MA > Long_MA && Close[1] > Short_MA)//上昇パーフェクトオーダー時
   {
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point*10,"Order Long",MagicNumber,0,Red);//ロングエントリー
   }
   if(OrdersTotal() == 0 && Short_MA < Middle_MA && Middle_MA < Long_MA && Close[1] < Short_MA)//下降パーフェクトオーダー時
   {
    OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point*10,"Order Short",MagicNumber,0,Blue);//ショートエントリー
   }
Copy

コンパイルする

コンパイルして実際の動きを確認して動いていたら完了です。

ソースコード全体

//+------------------------------------------------------------------+
//|                                             Perfect-Order-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;//マジックナンバー
input int MA_Short_Period =25;//短期足MA
input int MA_Middle_Period =50;//中期足MA
input int MA_Long_Period =200;//長期足MA
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double Short_MA,Middle_MA,Long_MA;//変数
   
   Short_MA = iMA(NULL,0,MA_Short_Period,0,MODE_SMA,PRICE_CLOSE,1);//短期足MA
   Middle_MA = iMA(NULL,0,MA_Middle_Period,0,MODE_SMA,PRICE_CLOSE,1);//中期足MA
   Long_MA = iMA(NULL,0,MA_Long_Period,0,MODE_SMA,PRICE_CLOSE,1);//長期足MA
   
   if(OrdersTotal() == 0 && Short_MA > Middle_MA && Middle_MA > Long_MA && Close[1] > Short_MA)//上昇パーフェクトオーダー時
   {
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point*10,"Order Long",MagicNumber,0,Red);//ロングエントリー
   }
   if(OrdersTotal() == 0 && Short_MA < Middle_MA && Middle_MA < Long_MA && Close[1] < Short_MA)//下降パーフェクトオーダー時
   {
    OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point*10,"Order Short",MagicNumber,0,Blue);//ショートエントリー
   }
  }
//+------------------------------------------------------------------+
Copy

まとめ

これでパーフェクトオーダー時でトレードできるEAが完成しましたね。

さらにここに移動平均線の角度や本数を増やすことで精度が上がったりします。

コメント

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