MT4で移動平均線×RSIのシンプルEAを自作する手順と考え方

FX自動売買

MT4(MetaTrader4)は、個人投資家でも無料で使える強力なトレードプラットフォームです。その最大の魅力の一つが、EA(Expert Advisor)を使った自動売買機能です。この記事では、移動平均線とRSIという基本インジケーターを組み合わせたシンプルなEAを自分で組む方法を、初心者の方にも分かるように丁寧に解説します。

スポンサーリンク
【DMM FX】入金

MT4自動売買とEAの基本概念

まず前提として、EAとは「MQL4という専用言語で書かれた自動売買プログラム」のことです。トレーダーが決めたルールに従って、チャートを監視し、条件がそろえば自動でエントリーや決済を実行します。

EAを使うと、以下のようなメリットがあります。

  • 感情に左右されず、ルール通りのトレードができる
  • 24時間チャートを見張らなくても良い
  • 検証を通じて、戦略の強み・弱みを数字で把握しやすい

一方で、どんなEAであっても「必ず勝てる」ものではありません。ロジックや資金管理の設計が甘いと、損失が積み上がることもあります。そのため、「考え方」を理解したうえで自作していく姿勢が重要になります。

今回作るEAのコンセプト

今回の記事では、次のようなシンプルなトレンドフォローEAを題材にします。

  • 移動平均線(MA)でトレンド方向を判断
  • RSIで押し目・戻りを狙う
  • 時間足は1時間足(H1)を想定
  • 損切り・利確は固定値で設定し、複雑にしすぎない

イメージとしては、「上昇トレンド中にRSIが一時的に下がったところで買い、トレンド方向へ戻る動きを狙う」といった、教科書的な押し目買い戦略です。まずはこのようなシンプルな戦略から始めることで、EAの仕組みや検証の流れを把握しやすくなります。

MT4とMQL4の準備

最初に、MT4でEAを開発・動かすための基本的な準備を確認します。

1. MT4のインストールとデモ口座

まだMT4をインストールしていない場合は、対応しているFX業者のサイトからMT4をダウンロードしてインストールします。その後、まずはデモ口座を開設し、リアルマネーを使わずに動作確認できる環境を整えます。

2. MetaEditorの起動

MT4を起動したら、メニューの「ツール」→「MetaQuotes Language Editor」を選択するか、ツールバーの「MetaEditor」アイコンをクリックします。これがEAを作成・編集するための開発環境です。

3. 新しいEAファイルの作成

MetaEditorが開いたら、「ファイル」→「新規作成」→「Expert Advisor(テンプレート)」を選びます。名前は例えば「MA_RSI_Simple_EA」としておきます。この時点で、EAのひな型コードが生成されています。

MQL4 EAの基本構造

テンプレートから生成されたコードには、主に次の3つの関数が含まれています。

  • OnInit:EAがチャートにセットされたときに一度だけ呼ばれる初期化処理
  • OnDeinit:EAがチャートから外される時に呼ばれる終了処理
  • OnTick:価格が更新されるたびに呼ばれるメイン処理

自動売買ロジックの中心になるのはOnTick関数です。ここに「どんな条件の時に、どの方向に、どれくらいのロットで発注するか」というルールを書いていきます。また、ポジションの管理(決済条件、トレーリングストップなど)もOnTickの中で制御します。

売買ルールの設計:移動平均線×RSI

次に、今回のEAで使う具体的な売買ルールを文章で整理します。まずはロジックを「人間の言葉」で明確にしてから、コードに落とし込むのがポイントです。

1. インジケーターの設定

  • 移動平均線(MA):期間50、種別はSMA、終値ベース
  • RSI:期間14、レベル30と70を参考

時間足は1時間足(H1)とし、通貨ペアは例としてEURUSDを想定します。もちろん、後からパラメータ化して他の通貨ペア・時間足に応用することもできます。

2. 売買条件の例

今回のEAでは、以下のようなシンプルなルールにします。

買いエントリー条件

  • 現在の終値が50期間移動平均線より上(上昇トレンド)
  • RSIが一度30近辺まで下落したあと、再び30を上抜けたタイミング
  • 既に買いポジションを保有していないこと

売りエントリー条件

  • 現在の終値が50期間移動平均線より下(下降トレンド)
  • RSIが一度70近辺まで上昇したあと、再び70を下抜けたタイミング
  • 既に売りポジションを保有していないこと

損切り(SL)と利確(TP)は、例えば固定のピップス数(SL:30pips、TP:60pipsなど)を設定します。これは後から変更・最適化できるようにパラメータ化しておくと便利です。

実践的なEAコード(MQL4)

それでは、上記のコンセプトを踏まえたシンプルなEAコード例を提示します。実際に運用する前には、必ずデモ口座やストラテジーテスターで動作確認・検証を行ってください。


//+------------------------------------------------------------------+
//|                 MA_RSI_Simple_EA.mq4                            |
//+------------------------------------------------------------------+
#property strict

extern double Lots        = 0.1;
extern int    MagicNumber = 12345;
extern int    Slippage    = 3;
extern int    StopLoss    = 30;   // pips
extern int    TakeProfit  = 60;   // pips

extern int    MAPeriod    = 50;
extern int    RSIPeriod   = 14;
extern int    RSIBuyLevel = 30;
extern int    RSISellLevel= 70;

//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   // 通貨ペア・時間足
   string symbol = Symbol();
   int    tf     = PERIOD_H1;

   // 最新バーのインデックス
   int shift = 1; // 未確定足を避けるため1本前

   double ma  = iMA(symbol, tf, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, shift);
   double rsi = iRSI(symbol, tf, RSIPeriod, PRICE_CLOSE, shift);

   double priceAsk = NormalizeDouble(Ask, Digits);
   double priceBid = NormalizeDouble(Bid, Digits);

   // 既存ポジションの確認
   int buys  = 0;
   int sells = 0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==symbol && OrderMagicNumber()==MagicNumber)
           {
            if(OrderType()==OP_BUY)  buys++;
            if(OrderType()==OP_SELL) sells++;
           }
        }
     }

   // トレンド方向の判定
   bool isUpTrend   = (Close[shift] > ma);
   bool isDownTrend = (Close[shift] < ma);

   // RSIのシグナル判定(簡易的なクロス判定)
   double rsi_prev = iRSI(symbol, tf, RSIPeriod, PRICE_CLOSE, shift+1);

   bool rsiCrossUpFromLow   = (rsi_prev < RSIBuyLevel  && rsi > RSIBuyLevel);
   bool rsiCrossDownFromHigh= (rsi_prev > RSISellLevel && rsi < RSISellLevel);

   // ロットサイズの正規化
   double lot = NormalizeDouble(Lots, 2);

   // 損切り・利確価格の計算
   double point    = MarketInfo(symbol, MODE_POINT);
   double slippage = Slippage;

   // 買いエントリー
   if(isUpTrend && rsiCrossUpFromLow && buys==0)
     {
      double sl = priceBid - StopLoss * point * 10;
      double tp = priceBid + TakeProfit * point * 10;
      sl = NormalizeDouble(sl, Digits);
      tp = NormalizeDouble(tp, Digits);

      OrderSend(symbol, OP_BUY, lot, priceAsk, slippage, sl, tp,
                "MA_RSI_Buy", MagicNumber, 0, clrBlue);
     }

   // 売りエントリー
   if(isDownTrend && rsiCrossDownFromHigh && sells==0)
     {
      double sl = priceAsk + StopLoss * point * 10;
      double tp = priceAsk - TakeProfit * point * 10;
      sl = NormalizeDouble(sl, Digits);
      tp = NormalizeDouble(tp, Digits);

      OrderSend(symbol, OP_SELL, lot, priceBid, slippage, sl, tp,
                "MA_RSI_Sell", MagicNumber, 0, clrRed);
     }
  }
//+------------------------------------------------------------------+

上記はあくまで学習用のサンプルコードです。ブローカーの仕様(小数点桁数や最小ロット、最小ストップレベルなど)によっては、パラメータの調整やエラーチェックの追加が必要です。

バックテストと検証の流れ

EAを作成したら、いきなりリアル口座で動かすのではなく、必ずバックテストとフォワードテストを行います。

1. ストラテジーテスターでのバックテスト

MT4の「表示」→「ストラテジーテスター」から、作成したEAを選択し、通貨ペア・時間足・期間・スプレッドなどを設定してバックテストを実行します。ここでは次のような点を確認します。

  • 取引回数が極端に少なすぎないか
  • 最大ドローダウンが資金に対して大きすぎないか
  • 一時的な含み損がどれくらいになるか
  • 長期的な損益曲線が右肩上がりか、それとも乱高下しているか

結果が良くないからといって、すぐにインジケーターやパラメータを増やし過ぎると、過剰最適化に陥りやすくなります。まずはロジックの根本的な考え方(トレンドの捉え方、損切りの位置など)を見直す癖をつけると良いです。

2. デモ口座でのフォワードテスト

バックテストで大きな問題がなさそうであれば、次はデモ口座で実際の相場にEAを動かしてみます。通信環境や約定のクセなど、バックテストでは見えない要素を確認できる重要なステップです。

初心者が陥りやすい落とし穴

MT4でEAを自作し始めた初心者の方が、よくハマりやすいポイントも整理しておきます。

  • 短期足で過剰な最適化をする:1分足などの短期足でパラメータを極端に追い込むと、過去データには強いが実際の相場ではうまく機能しないEAになりがちです。
  • 損切りを置かない・極端に広くする:損切りを入れないEAは、一見破綻しにくいように見えますが、一度大きなトレンドが出ると大きな含み損を抱えやすくなります。
  • ロットを急激に増やす:検証段階での結果が良いと、すぐにロットを大きくしたくなりますが、資金とドローダウンのバランスを見ながら慎重に調整する必要があります。
  • ロジックを複雑にし過ぎる:インジケーターを増やしすぎると、なぜエントリー・決済したのか自分でも分からなくなり、改善が難しくなります。

インジケーターを増やす時の考え方

基本となる移動平均線とRSIでEAの仕組みを理解したら、徐々にインジケーターを追加してみるのもよいでしょう。ただし、「何となく不安だからインジを増やす」という発想ではなく、それぞれの役割を明確にすることが大切です。

  • トレンド系:MA、ボリンジャーバンド、MACDなど
  • オシレーター系:RSI、ストキャスティクスなど
  • ボラティリティ系:ATRなど

例えば、今回のEAにATRを追加して、「ボラティリティに応じて損切り幅を変える」「ボラティリティが低いときはエントリーを控える」といった改良も考えられます。このように、一つひとつのインジケーターに役割を与え、それがロジック全体のどこを補強するのかを意識すると、戦略の質が高まりやすくなります。

MT4でEAを育てていくという発想

EAを一度作ったら終わりではなく、「相場と自分の考え方に合わせて育てていく」という発想が重要です。バックテスト・フォワードテストで見えてきた課題をメモし、どこをどう変えたかを記録しながら少しずつ改善していきます。

最初から高度なロジックを目指すのではなく、今回紹介したようなシンプルな移動平均線×RSIのEAを題材に、MT4・MQL4・検証の一連の流れを体で覚えていくことが、長期的には大きな財産になります。

まとめ

この記事では、MT4で自動売買を行うために、移動平均線とRSIを使ったシンプルなEAを自作する手順と考え方を解説しました。

  • MT4とMetaEditorを使えば、個人投資家でもEAを自作できる
  • まずは移動平均線とRSIのような基本インジケーターからスタートする
  • 売買ルールは「日本語で明文化」してからコードに落とし込む
  • バックテストとフォワードテストを通じて、EAの特性を数字で把握する
  • 過剰最適化やロットの上げ過ぎに注意しながら、少しずつ改良していく

自分でEAを組めるようになると、市場を見る目や戦略の考え方も自然と鍛えられていきます。まずはデモ環境から、無理のない範囲で自動売買の世界に慣れていくところから始めてみてください。

p-nuts

お金稼ぎの現場で役立つ「投資の地図」を描くブログを運営しているサラリーマン兼業個人投資家の”p-nuts”と申します。株式・FX・暗号資産からデリバティブやオルタナティブ投資まで、複雑な理論をわかりやすく噛み砕き、再現性のある戦略と“なぜそうなるか”を丁寧に解説します。読んだらすぐ実践できること、そして迷った投資家が次の一歩を踏み出せることを大切にしています。

p-nutsをフォローする
FX自動売買
スポンサーリンク
【DMM FX】入金
シェアする
p-nutsをフォローする

コメント

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