MT4で始める自動売買EA入門:インジケーターを使ったシンプル戦略の作り方

自動売買・システムトレード

裁量トレードに疲れて「チャートの前に張り付く時間を減らしたい」と感じたとき、MT4の自動売買(EA)は強力な選択肢になります。ただし、なんとなくネットで配布されているEAを回すだけでは、運良く勝てても長続きしません。仕組みを理解し、自分でロジックを組めるようになると、自分の相場観やリスク許容度に合った戦略を構築できるようになります。

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

MT4自動売買の全体像を押さえる

まずは、MT4における自動売買の全体像を整理します。MT4では、EA(Expert Advisor)と呼ばれるプログラムがチャートに張り付いて価格やインジケーターを監視し、条件が揃ったら自動でエントリー・決済を行います。

仕組みを分解すると次のようになります。

  • チャートにEAをセットする
  • EAが毎ティック(価格更新のたび)に条件をチェックする
  • 売買条件を満たしたら注文(成行または指値)を発注する
  • 決済条件を満たしたら決済注文を出す
  • ロット、損切り幅、利確幅、同時保有ポジション数などはパラメータで管理する

つまり、EAとは「ルール化された売買アイデア」をMQL4という言語で記述したものだと考えると分かりやすいです。

MT4の準備:口座とプラットフォームを整える

自動売買を始める前に、環境をきちんと整えておくことが重要です。

典型的な準備の流れは次の通りです。

  • MT4が使えるFX業者で口座開設を行う
  • マイページからMT4をダウンロードし、PCにインストールする
  • ログインIDとパスワードをMT4に設定して取引口座に接続する
  • ナビゲーターウィンドウに「エキスパートアドバイザ」が表示されていることを確認する
  • 「ツール」→「オプション」→「エキスパートアドバイザ」で自動売買を許可する項目を確認する

さらに、VPSを利用して24時間EAを稼働させる運用も一般的です。自宅PCで動かす場合は、OSの自動アップデートや再起動で止まるリスクを認識しておく必要があります。

EAの仕組み:チャート監視を自動化する考え方

EAは「特定のロジックを毎ティック実行するプログラム」です。MQL4のEAには代表的な3つの入口があります。

  • OnInit():EAをチャートにセットしたときに一度だけ実行される初期化処理
  • OnDeinit():EAを外したときに実行される終了処理
  • OnTick():価格が更新されるたびに実行されるメインロジック

トレード戦略のほとんどはOnTick()の中に書かれます。ここで、インジケーターの値を取得し、売買条件を判定し、必要に応じてOrderSend()で注文を出します。

裁量トレードで普段やっていることを言語化すると、EAに落とし込みやすくなります。

  • 「短期の移動平均が長期の移動平均を上抜けたら買う」
  • 「RSIが30を下から上に抜けたら買いシグナルとみなす」
  • 「ボリンジャーバンドの±2σを終値がブレイクしたら順張りする」

このようなルールを、インジケーター関数や価格データを使ってプログラムに変換していきます。

最初に覚えたい基本インジケーター

EAを自作するうえで、すべてのインジケーターを覚える必要はありません。まずは「ロジックの軸」になりやすい基本的なものだけ押さえれば十分です。

  • 移動平均線(MA):トレンド方向の判定やクロスシグナルに使う。
  • RSI:買われすぎ・売られすぎを数値で表すオシレーター。逆張り・フィルター両方に使える。
  • MACD:トレンドの強さとタイミングを捉えるためのインジケーター。クロスやゼロライン抜けをシグナルにする。
  • ボリンジャーバンド:価格のバンドブレイクを使った順張りや、バンド内への回帰を狙う逆張りに利用できる。

MQL4では、これらの値を次のような関数で取得します(概念だけ掴めば十分です)。

  • iMA():移動平均線の値を取得
  • iRSI():RSIの値を取得
  • iMACD():MACDとシグナルの値を取得
  • iBands():ボリンジャーバンドの上限・中央値・下限を取得

実際のEAでは、これらを組み合わせて売買ルールを作っていきます。

シンプルな移動平均クロスEAの設計

最初の一歩としておすすめなのが、短期移動平均と長期移動平均のクロスを使ったEAです。考え方は非常に直感的で、ロジックもシンプルです。

基本ルールの例を見てみましょう。

  • 期間20の移動平均線を「短期線」、期間80の移動平均線を「長期線」とする
  • 短期線が長期線を下から上へクロスしたら買いエントリー
  • 短期線が長期線を上から下へクロスしたら売りエントリー
  • 損切りは直近のスイング安値(高値)または固定pipsで設定
  • 利確はリスクリワード1:1.5〜2程度を目安に設定

このとき、EA化する際に考えるべきポイントは次の通りです。

  • 「クロスした瞬間」をどう判定するか(1本前までのMAの位置と現在の位置を比較)
  • エントリー済みのポジションがあるときに、追加エントリーを許可するか
  • ドテン(買い→即売り)にするのか、決済してから次の方向にエントリーするのか
  • スプレッドが広がっている時間帯(早朝など)を避けるかどうか

これらをMQL4のコードに落とすことで、ルールに一貫性のある自動売買が実現します。

MQL4の基本構造:触るべき場所だけ押さえる

MQL4の全機能を覚える必要はありません。自動売買用EAを作るうえでまず押さえたいのは、次の要素です。

  • 変数と入力パラメータ(ロット、損切り幅、移動平均の期間など)
  • OnTick()内でのロジックの流れ
  • インジケーター値の取得
  • 売買注文の発注と決済(OrderSendOrderCloseなど)
  • ポジション数や方向をチェックするためのループ処理

EAのひな型はMT4の「MetaEditor」で簡単に作成できます。「新規作成」→「エキスパートアドバイザ(テンプレート)」を選ぶと、最低限の構造が自動生成されます。このテンプレート内のコメントを参考にしながら、OnTick()に自分のロジックを書き足していくのが実践的な進め方です。

実例:移動平均クロスEAのサンプルコード

ここでは、考え方がイメージしやすいように、簡略化したサンプルコードのイメージを示します(実運用では、スプレッドやエラー処理など追加の配慮が必要です)。

// パラメータ入力
input double Lots = 0.1;
input int FastMA = 20;
input int SlowMA = 80;
input int StopLoss = 200;   // ポイント
input int TakeProfit = 400; // ポイント

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnTick()
  {
   // 現在足と1本前の移動平均を取得
   double fast_current = iMA(NULL,0,FastMA,0,MODE_EMA,PRICE_CLOSE,0);
   double fast_prev    = iMA(NULL,0,FastMA,0,MODE_EMA,PRICE_CLOSE,1);
   double slow_current = iMA(NULL,0,SlowMA,0,MODE_EMA,PRICE_CLOSE,0);
   double slow_prev    = iMA(NULL,0,SlowMA,0,MODE_EMA,PRICE_CLOSE,1);

   // すでにポジションを持っているか確認
   int total = OrdersTotal();
   bool hasPosition = false;
   for(int i=0;i<total;i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==12345)
           {
            hasPosition = true;
            break;
           }
        }
     }
   if(hasPosition) return;

   // ゴールデンクロスで買い
   if(fast_prev < slow_prev && fast_current > slow_current)
     {
      double ask = NormalizeDouble(Ask,Digits);
      double sl  = ask - StopLoss*Point;
      double tp  = ask + TakeProfit*Point;
      OrderSend(Symbol(),OP_BUY,Lots,ask,3,sl,tp,"MA Buy",12345,0,clrBlue);
     }

   // デッドクロスで売り
   if(fast_prev > slow_prev && fast_current < slow_current)
     {
      double bid = NormalizeDouble(Bid,Digits);
      double sl  = bid + StopLoss*Point;
      double tp  = bid - TakeProfit*Point;
      OrderSend(Symbol(),OP_SELL,Lots,bid,3,sl,tp,"MA Sell",12345,0,clrRed);
     }
  }

このコードはあくまでイメージですが、以下のポイントを押さえています。

  • パラメータを外出しして、テストや最適化で簡単に変更できるようにしている
  • ポジションがすでにある場合は新規エントリーを行わないシンプル設計にしている
  • 移動平均の「1本前」と「現在」を比較してクロスを判定している

RSIフィルターでダマシを減らす改良

移動平均クロスだけだと、レンジ相場でダマシが多くなりがちです。そこで、RSIフィルターを追加して「勢いの乏しいシグナルを捨てる」工夫が有効です。

例として、次のような条件を追加できます。

  • 買いエントリー:移動平均ゴールデンクロスかつRSIが50より上
  • 売りエントリー:移動平均デッドクロスかつRSIが50より下

このようにすることで、トレンドの方向とモメンタムがある程度そろった場面だけを狙うことができます。MQL4では、iRSI()を使ってRSIの値を取得し、条件分岐に組み込みます。

さらに踏み込むなら、「RSIが30付近から反発したときだけ買い」「RSIが70付近から下落に転じたときだけ売り」といった逆張りロジックもEA化できます。ただし、逆張りは損切り管理がより重要になるため、ストップ幅やポジションサイズの設計に注意が必要です。

バックテストと最適化の進め方

EAを実運用する前に欠かせないのが、バックテストパラメータの最適化です。MT4には「ストラテジーテスター」が内蔵されており、過去の価格データを使ってEAの成績を検証できます。

バックテストの基本的な流れは次の通りです。

  • 検証したい通貨ペアと時間足を選ぶ(例:EURUSDの1時間足)
  • テスト期間を指定する(例:過去3〜5年分)
  • 初期証拠金、スプレッド、レバレッジなどの条件を設定する
  • ストラテジーテスターでEAを選択し、テストを実行する
  • 損益曲線、ドローダウン、勝率、PFなどを確認する

続いて、パラメータの最適化では、次のような項目を変動させながら複数パターンを検証します。

  • 短期MA・長期MAの期間
  • RSIの期間・閾値
  • 損切り幅・利確幅
  • トレードを許可する時間帯

ただし、最適化において気を付けたいのは「やりすぎると過去データにだけ都合よくフィットした戦略(過剰最適化)」になりやすい点です。見た目のカーブフィットではなく、複数期間・複数通貨ペアでそれなりに一貫性のある結果が出ているかを意識して評価することが重要です。

本番運用前のリスク管理とチェックリスト

バックテストでそれなりの手応えが得られても、すぐに大きなロットで本番運用するのは避けるべきです。リスク管理の観点から、次のステップで段階的に進めるのが現実的です。

  • デモ口座で一定期間(例:1〜3か月)稼働し、想定通りの挙動か確認する
  • リアル口座でも最初は極小ロットで稼働させ、スリッページやスプレッドの影響を体感する
  • ロットを増やす場合も、口座残高に対して1トレードの損失が数%を超えないようにする
  • 指標発表時など流動性が薄くなるタイミングの挙動を観察する
  • VPSやPC環境の再起動・回線切断時にEAがどうなるか事前に確認する

EA運用は「勝てるロジックを作れば終わり」ではなく、「ロジックを含めたシステム全体を安定稼働させる」ことが重要です。ログファイルの出力や、異常時にメール通知を送る機能を組み込むなど、運用目線の工夫も有効です。

よくある失敗パターンと回避策

MT4の自動売買でありがちな失敗パターンをいくつか挙げ、その回避策を整理します。

  • 過去チャートだけを見てロジックを変え続けてしまう
    過去のきれいな局面だけを見て「ここでこうしていれば勝てたはず」と条件を足し続けると、実運用では通用しないEAになりがちです。一定のシンプルさを保ちつつ、複数の相場環境でテストして一貫性を確認することが大切です。
  • ロットを上げるタイミングが早すぎる
    少し勝ち始めた段階で急激にロットを上げると、ドローダウン1回で心理的に耐えられなくなることがあります。残高に応じてロットを徐々に増やし、「想定外の連敗」が来ても継続できる水準に抑えることが重要です。
  • EA任せにしすぎて相場環境を見なくなる
    自動売買とはいえ、極端なボラティリティやスプレッド拡大など、裁量判断で一時停止した方がよい局面もあります。完全放置ではなく、最低限のモニタリングは継続した方がリスクを抑えやすくなります。

ステップアップのための次の一手

移動平均とRSIを使ったシンプルなEAを一つ完成させ、バックテストとデモ運用まで経験すると、「自分のトレードアイデアをどのようにロジック化すればよいか」の感覚がつかめてきます。

その次のステップとしては、次のような発展が考えられます。

  • ボリンジャーバンドやMACDを組み合わせたトレンドフォロー型EA
  • 高値・安値ブレイクとボラティリティ指標(ATRなど)を組み合わせたブレイクアウトEA
  • 複数時間足を組み合わせたマルチタイムフレーム分析EA
  • ポジションサイジングやトレーリングストップの工夫による資金管理ロジックの強化

重要なのは、「最初から完璧なEAを作ろうとしないこと」です。まずはシンプルな戦略を1つ形にし、小さく検証しながら改善していくプロセスそのものが、裁量トレードにも活きる貴重な経験になります。

MT4とEAを使いこなせるようになると、感情に振り回されず、一貫したルールに基づいてトレードを積み重ねられるようになります。自分の相場観やライフスタイルに合った戦略を少しずつ形にしていくことで、自動売買は長く付き合える有力な武器になっていきます。

p-nuts

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

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

コメント

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