移動平均線クロスでエントリーするEA(フリーEA)

EA
Tadeasik / Pixabay

FXトレードで使用されているテクニカル分析には様々なものがありますが、その中で最も人気があるのは移動平均線と言ってもいいでしょう。移動平均線は過去の価格の動きを平均してチャート上にプロットしたものなので未来を予測することの出来る優れものではありませんが、過去の価格の動きの傾向を知る上でなくてはならない存在です。

MT4でも標準のインディケーターとして移動平均線が用意されており、トレンドの判断をするために使用している人も多いのではないでしょうか。

そんな大人気の移動平均線を使った戦略の一つに短期線と長期線の交差(クロス)を利用したものがあります。いわゆる移動平均線クロスというやつですね。これはFXを覚え始めの頃に読んだ超入門書に載っていたのですぐに覚えました。デッドクロスとかゴールンデクロスとかの名前はグランビルの法則を覚えるずっと前に元OLの書いた本に教えてもらったのでバッチリです。あのOLのお姉さん最近見かけないけどどうしているのでしょうか(笑)

移動平均線クロスを使ったEAはシンプルなのですが、ちょっと最適化すると右肩上がりの収益曲線が簡単にでき上がります。あくまでバックテストの結果が右肩上がりになるだけなので、フォワードテストでも通用する実践的なEAではないかもしれません。ただ、移動平均線だけで簡単に右肩上がりのEAを作れるのって楽しいですよね。移動平均線クロスを考案してくれた先人の知恵に感謝です。

ドル円でバックテストしていますが、トレンドが発生しやすい通貨ペアなら他にも色々と通用しそうな予感がします。様々な通貨ペアを試して確認して良さげなセッティングを見つけたらコメント欄でそっと教えてくださいね~(^_^)

ドル円1時間足

このEAのソースコード(mql4)です。

シンプルなコードなのですがトレンドが発生している状況ではかなり実用的なのではないかと感じています。レンジ相場??聞かないでください(笑)

//+------------------------------------------------------------------+
//|                                                   MACrossEA.mq4  |
//|                                             Created by Pineapple |
//|                                            https://mt4trader.net |                                                                  
//|                                              Copyright 2025      |
//+------------------------------------------------------------------+

#property copyright ""
#property link      ""
#property version   "1.00"
#property description "MACrossEA"
#property description "移動平均線クロスを利用したEAです"
#property strict

// 入力パラメータ
input double LotSize = 0.1;        // ロットサイズ
input int ShortMAPeriod = 10;      // 短期移動平均線の期間
input int LongMAPeriod = 50;       // 長期移動平均線の期間
input int StopLoss = 30;          // ストップロス(pips)
input int TakeProfit = 50;        // テイクプロフィット(pips)
input int Slippage = 3;            // スリッページ(ポイント)

// グローバル変数
double PointValue;                 // ポイント値の調整用

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   // ブローカーの桁数に応じてPoint値を調整
   if(Digits == 5 || Digits == 3)
      PointValue = Point * 10;
   else
      PointValue = Point;
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   // 既存の注文がある場合は処理しない
   if(OrdersTotal() > 0) return;
   
   // 移動平均線の値を取得(現在のバーと前のバー)
   double shortMACurrent = iMA(NULL, 0, ShortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
   double shortMAPrevious = iMA(NULL, 0, ShortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
   double longMACurrent = iMA(NULL, 0, LongMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
   double longMAPrevious = iMA(NULL, 0, LongMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
   
   // 買いエントリー:短期MAが長期MAを下から上にクロス
   if(shortMAPrevious < longMAPrevious && shortMACurrent > longMACurrent)
   {
      double sl = Ask - StopLoss * PointValue;
      double tp = Ask + TakeProfit * PointValue;
      
      int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, 
                           sl, tp, "MA Cross Buy", 0, 0, clrGreen);
      
      if(ticket < 0)
         Print("OrderSend failed with error #", GetLastError());
   }
   
   // 売りエントリー:短期MAが長期MAを上から下にクロス
   if(shortMAPrevious > longMAPrevious && shortMACurrent < longMACurrent)
   {
      double sl = Bid + StopLoss * PointValue;
      double tp = Bid - TakeProfit * PointValue;
      
      int ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, 
                           sl, tp, "MA Cross Sell", 0, 0, clrRed);
      
      if(ticket < 0)
         Print("OrderSend failed with error #", GetLastError());
   }
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // 終了時の処理(必要に応じて追加)
}

//+------------------------------------------------------------------+

 

Share this content:

コメント

  1. 李相勳 より:

    移動平均線クロスでエントリーするEA(フリーEA)に関して教えてください
    パラメーターの入力の変数の意味をそれぞれ教えていただけますでしょうか。

    ダウンロードして試しているところですが変数の意味があまり分からなく困ってます。

    もちろん、初心者でFX歴がありません。
    お忙しいところ恐縮ですが教えていただけますでしょうか。

  2. ユーロファイター より:

    李相勳さん、こんにちは。

    MA_Short:短期の移動平均線の期間
    MA_Long:長期の移動平均線の期間
    StopLoss:ストップロスの設定(pips)
    TakeProfit:テイクプロフィットの設定(pips)
    UseBreakEven:ブレイクイーブンを使用する場合はtrueに変更
    BreakEven_points:ブレイクイーブンの設定(pips)
    MagicNumber:マジックナンバー
    TradeSize:トレードするロットの設定
    MaxSlippage:スリッペイジの設定

    MA_ShortがMA_Longを下から上に抜けたら買いエントリー
    MA_ShortがMA_Longを上から下に抜けたら売りエントリー

    こんな感じです。

  3. たか より:

    移動平均線クロスでエントリーするEA(フリーEA)に関して教えてください
    時間足はどうやったら選べるのでしょうか?
    1時間足と4時間足ではクロスのタイミングが違いますし、、。
    お教えいただけますでしょうか?

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