【MT4】EAにトレーリングストップを追加する方法|管理専用EAで決済を自動化

トレーリングストップ①
EAサンプル・ノウハウ
記事内に商品プロモーションを含む場合があります
スポンサーリンク

「MT4のEAにトレーリングストップを入れたいけど、どう実装すればいいの?」
「OrderModifyの条件が分からず、うまく動かない…」
そんな方に向けて、この記事ではMT4(MQL4)で動作するトレーリングストップEAの作り方を解説します。

トレーリングストップは、
「伸びた利益をできるだけ手放さずに終わらせるための仕組み」ですが、 EAで実装する場合は「いつ・どの条件でストップを動かすか」を明確に定義する必要があります。

本記事では、エントリーを一切行わず、既存ポジションを管理するだけの「管理専用EA」として、
トレーリングストップをシンプルかつ安全に実装する方法を、
プログラミング初心者の方にも分かるよう丁寧に整理します。

📘 この記事で解説する内容
  • トレーリングストップとは何か?EAで使う意味
  • MT4標準トレーリングストップとの違い
  • 管理専用EAとして設計するメリット
  • トレーリングストップの基本ロジック(BUY/SELL)
  • OrderModifyを使う際の重要な判定ポイント
  • 最小構成トレーリングストップEAの考え方

トレーリングストップとは?EAで使われる理由

トレーリングストップとは、
含み益が伸びた分だけ損切ライン(SL)を追従させる決済手法です。

相場が有利に進んだ場合は利益を伸ばし、
逆行した場合は直前まで確保していた利益を守ることができます。

裁量トレードでは非常に便利な機能ですが、
EAで使う場合は 自分でロジックとして実装する必要があります。

MT4標準トレーリングストップの限界

MT4には標準でトレーリングストップ機能が用意されていますが、
この機能はあくまで裁量トレード向けです。

  • 毎回手動で設定する必要がある
  • MT4再起動やチャート再読み込みで無効になる
  • 条件分岐やロジック制御ができない
  • 複数ポジションを柔軟に管理できない

そのため、
EA運用や自動売買と組み合わせる用途には不向きです。

管理専用トレーリングストップEAという考え方

本記事で扱うEAは、
エントリーを一切行いません。

すでに存在しているポジションに対して、

  • 利益が一定以上出たら
  • ストップロスを有利な位置に動かす

という処理だけを行う、「決済・管理専用EA」です。

この設計のメリット

  • 手動トレードにも使える
  • 他のEAが建てたポジションも管理できる
  • エントリーと決済を分離できる
  • ロジックが単純でバグを起こしにくい

EA設計としても、
非常に再利用性の高い構成になります。

トレーリングストップの基本ロジック(BUY/SELL)

トレーリングストップの考え方はシンプルです。

BUYポジションの場合

  • 現在価格 − トレール幅 が
    • エントリー価格より有利
    • かつ、現在のSLより有利
  • この条件を満たしたときだけSLを更新

SELLポジションの場合

  • 現在価格 + トレール幅 が
    • エントリー価格より有利
    • かつ、現在のSLより有利
  • 条件を満たしたときだけSLを更新

常に「より良い方向にだけ」SLを動かすことが重要です。

OrderModifyを使う際の重要ポイント

トレーリングストップ実装では、
OrderModify() を頻繁に呼び出すことになります。

そのため、

  • 毎Tick無条件に呼ばない
  • SLが本当に更新される場合のみ実行する
  • BUY/SELLで条件を明確に分ける

といった点を守らないと、

  • 不要な注文修正
  • サーバーエラー
  • EAの不安定化

につながります。

👉 「条件判定が9割」
これがトレーリングストップ実装の本質です。

最小構成トレーリングストップEAの考え方

本記事で紹介するEAは、

  • エントリー処理なし
  • ポジションがなければ何もしない
  • ポジションがあれば管理のみ行う

という最小構成で作られています。

この構成にすることで、

  • ロジック理解が簡単
  • 他EAや裁量と組み合わせやすい
  • 将来の拡張(複数ポジ・マジック番号対応)もしやすい

というメリットがあります。

トレーリングストップEAのダウンロード

EAファイルのダウンロードはこちら👇

📥 管理専用トレーリングストップEA をダウンロード

\ 国内最大級のEAプラットフォーム /
GogoJungle(ゴゴジャン)でEAの評価・レビューをチェック!

▶ GogoJungleでEAを探す 【MT4】EAにトレーリングストップを追加する方法|管理専用EAで決済を自動化

MT4用 トレーリングストップのサンプルコード(MQL4)

以下にMQL4サンプルコードを掲載します。
そのままコピーしてMetaEditorに貼り付けてコンパイルすれば動作します。

//+------------------------------------------------------------------+
//|                                      30_TrailingStop_Minimum.mq4 |
//|                                    Copyright © 2020-2025 ぷろぐらむFX |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020-2025 ぷろぐらむFX"
#property link      "https://fx-prog.com/"
#property version   "1.00"
#property strict

//==== パラメータ
input int TrailingPips = 15;   // トレーリング幅(pips)

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   bool kekka = false;
   
   // ポジションが無ければ何もしない
   if(OrdersTotal() == 0) return;

   // 単ポジ前提
   if(!OrderSelect(0, SELECT_BY_POS, MODE_TRADES)) return;

   double trail = TrailingPips * Point;

   // BUYポジション
   if(OrderType() == OP_BUY)
   {
      double newSL = Bid - trail;

      // 利益が出ていて、SLを更新できる場合のみ
      if(newSL > OrderOpenPrice() && newSL > OrderStopLoss())
      {
         kekka = OrderModify(
            OrderTicket(),
            OrderOpenPrice(),
            newSL,
            OrderTakeProfit(),
            0,
            clrBlue
         );
      }
   }

   // SELLポジション
   if(OrderType() == OP_SELL)
   {
      double newSL = Ask + trail;

      if(newSL < OrderOpenPrice() && 
         (OrderStopLoss() == 0 || newSL < OrderStopLoss()))
      {
         kekka = OrderModify(
            OrderTicket(),
            OrderOpenPrice(),
            newSL,
            OrderTakeProfit(),
            0,
            clrRed
         );
      }
   }
}
スポンサーリンク

if文の条件とロジック解説(最小構成トレーリングストップEA)

このEAは、エントリーは一切行わず
既に持っているポジションのストップロスを自動で追従させる
トレーリングストップ専用EAです。

処理はすべて OnTick() 内で行われ、価格が動くたびに実行されます。


① ポジションが無い場合は何もしない

if(OrdersTotal() == 0) return;
  • ポジションが1つも無ければ処理終了
  • 無駄な OrderSelectOrderModify を行わないための安全処理

👉 このEAはポジション管理専用です。


② 単ポジ前提でポジションを取得

if(!OrderSelect(0, SELECT_BY_POS, MODE_TRADES)) return;
  • 保有中の最初のポジション1つを対象にする
  • 複数ポジション管理はあえて行わない「最小構成」

👉 初心者でも挙動が理解しやすい設計です。


③ トレーリング幅をpips → 価格に変換

double trail = TrailingPips * Point;
  • パラメータで指定した pips を
  • MT4内部で扱える「価格差」に変換

BUYポジション時のロジック

if(OrderType() == OP_BUY)
{
   double newSL = Bid - trail;

   if(newSL > OrderOpenPrice() && newSL > OrderStopLoss())
   {
      OrderModify(...);
   }
}

判定の考え方

① 新しいSL位置を計算

newSL = Bid - trail;
  • 現在価格から一定pips下に
  • 追従型のSL候補を作る

② 利益が出ているか

newSL > OrderOpenPrice()
  • SLがエントリー価格を超えているか
  • 含み益が出ていない段階ではトレーリングしない

③ SLを「より有利」に更新できるか

newSL > OrderStopLoss()
  • 既存のSLより良い位置かをチェック
  • SLを不利な方向へ戻さないための安全条件

👉 BUYでは
SLは上にしか動かない設計です。


SELLポジション時のロジック

if(OrderType() == OP_SELL)
{
   double newSL = Ask + trail;

   if(newSL < OrderOpenPrice() && 
      (OrderStopLoss() == 0 || newSL < OrderStopLoss()))
   {
      OrderModify(...);
   }
}

SELLはBUYの完全な逆方向の考え方です。


① 新しいSL位置を計算

newSL = Ask + trail;
  • 現在価格より上にSLを配置
  • 下落に合わせてSLを追従

② 利益が出ているか

newSL < OrderOpenPrice()
  • SLがエントリー価格より有利かを判定
  • 利益が出ていないとトレーリングしない

③ SL未設定 or より有利な更新か

OrderStopLoss() == 0 || newSL < OrderStopLoss()
  • 初回SL未設定でも対応
  • 既存SLより確実に有利な場合のみ更新

👉 SELLでは
SLは下にしか動かない構造です。


このEAのロジック的な特徴まとめ

  • エントリー処理なし(管理専用)
  • MT4標準トレーリングストップ不要
  • 毎Tick実行で追従が速い
  • SLは絶対に不利な方向へ戻らない
  • 単ポジ前提で挙動が非常に分かりやすい

まとめ|EAでトレーリングストップを扱う際のポイント

トレーリングストップをEAで扱う際に重要なのは、

  • MT4標準機能に頼らないこと
  • エントリーと決済を分離して考えること
  • SLを「不利に動かさない」条件設計

です。

管理専用EAとして実装すれば、
トレーリングストップは非常に安全で強力な武器になります。

まずはシンプルな構成で理解し、
そこから自分のEAや運用スタイルに合わせて
少しずつ拡張していきましょう。


✅ 今回のロジックをベースにしたEAサンプルも多数公開中

今回紹介したようなEAの売買ロジック・考え方をベースに、
当サイトではさまざまなFX自動売買EAのサンプルコードを公開しています。

ロジックの違いや設計の考え方を比較しながら、
自分に合ったEA構成を探したい方はぜひチェックしてみてください。


📊 EA運用・検証フェーズに進みたい方へ

今回のような仕組みを理解したうえで、
「実際にどのEAが安定しているのか」、「検証データではどんな差が出ているのか」
を確認したい方は、以下の記事も参考になります。


EA開発初心者向けに、今後も実践的に使えるMQL4関数や実装例を紹介していきます。
気になる機能やロジックがあれば、用途別に整理した関連記事もぜひあわせてご覧ください。

コメント

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