システムトレード 게시글

MT4用の2つの移動平均クロスEAの作成方法

첨부파일
34176.zip (2.06 KB, 다운로드 0회)

こんにちは、トレーダーの皆さん!今日はMT4用の移動平均クロスを利用したエキスパートアドバイザー(EA)の作成方法についてお話しします。このEAは、シンプルながらも効果的なトレーディング戦略を提供します。それでは、早速始めましょう!

1. 入力変数の定義

まずは、EAを作成するために必要な入力変数を定義します。以下のコードを参考にしてください。

//--- 入力パラメータ
input    int      period_ma_fast = 8;  //速い移動平均の期間
input    int      period_ma_slow = 20; //遅い移動平均の期間

input    double   takeProfit  = 20.0;  //利益確定(pips)
input    double   stopLoss    = 20.0  //損切り(pips)

input    double   lotSize     = 0.10;  //ロットサイズ
input    double   minEquity   = 100.0; //最小資金($)

input    int Slippage = 3;       //スリッページ
input    int MagicNumber = 889;  //マジックナンバー

2. グローバル変数の定義

次に、グローバル変数を定義します。これにより、すべての関数からアクセス可能な変数を作成します。

//グローバル変数
double   myPoint    = 0.0;
int      mySlippage = 0;
int      BuyTicket   = 0;
int      SellTicket  = 0;

3. 初期化関数 OnInit()

EAが実行されると、最初に実行されるのが OnInit() 関数です。この関数を利用して、グローバル変数の初期化や入力データの検証を行います。

int OnInit()
{
   //初期データの検証
   if (period_ma_fast >= period_ma_slow || takeProfit < 0.0 || stopLoss < 0.0 || lotSize < 0.01 || minEquity < 10){
      Alert("警告 - 入力データが無効です");
      return (INIT_PARAMETERS_INCORRECT);
   }

   myPoint = GetPipPoint(Symbol());
   mySlippage = GetSlippage(Symbol(), Slippage);

   return(INIT_SUCCEEDED);
}

4. 市場の動きに応じた OnTick() 関数

市場価格が動くと、OnTick() 関数が呼び出され、すべての命令が実行されます。この関数内では、取引資金の adequacy を確認し、新しいキャンドルが形成されたときに通知します。

void OnTick()
{
   if (cekMinEquity()){
       int signal = -1;
      bool isNewCandle = NewCandle(Period(), Symbol());
      
      signal = getSignal(isNewCandle);
      transaction(isNewCandle, signal);
      setTPSL();
      
   }else{
      //資金不足で取引を停止
      Print("EA は資金が不足しているため停止します");
   }
}

5. 取引の設定を行う setTPSL() 関数

この関数では、取引の利益確定と損切りの設定を行います。

void setTPSL(){
   int   tOrder = 0;
   string   pair = Symbol();
   double sl = 0.0, tp = 0.0;

   tOrder = OrdersTotal();
   for (int i=tOrder-1; i>=0; i--){
      bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderType() == OP_BUY && (OrderTakeProfit() == 0 || OrderStopLoss() == 0)){
         tp = OrderOpenPrice() + (takeProfit * myPoint);
         sl = OrderOpenPrice() - (stopLoss * myPoint);
         if (OrderTakeProfit() != tp || OrderStopLoss() != sl) {
           if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrBlue)){
            Print("注文の修正に成功しました");
         }
       }
     }
   }
}

このEAは、シンプルでありながら強力なトレーディングツールです。移動平均のクロスを利用して、エントリーとエグジットのポイントを自動で判断してくれます。ぜひ試してみてください!

もしこの内容が役に立ったと思ったら、ぜひ友達にも教えてあげてくださいね。今後も役立つ情報をお届けしますので、お楽しみに!

トレーディングに役立つアプリをお探しの方は、ぜひ私たちのSignalForexアプリをダウンロードしてみてください!

こちらからダウンロード

연관 포스트

댓글 (0)