「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の評価・レビューをチェック!
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つも無ければ処理終了
- 無駄な
OrderSelectやOrderModifyを行わないための安全処理
👉 この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関数や実装例を紹介していきます。
気になる機能やロジックがあれば、用途別に整理した関連記事もぜひあわせてご覧ください。









コメント