解決済み

トレーリングストップの判定間隔

2026/10/03 04:26
40

オプションのトレーリングストップ(固定幅)を使用しているのですが、30pipsで設定をしていると頻繁に何度もストップロスが変わってしまうのを間隔を開けて判明する事は可能ですか?

例えば、
1分おきや5分おきにトレーリングストップが確認
→30pipsの確認
→ストップロスの変更を行う。

コメント

GogoJungle
2026/10/06 10:49

トレーリングストップ(固定幅)のストップロス更新を毎ティックではなく、1分おきや5分おきなど一定の間隔で行いたい、というご質問ですね。

EAつくーるの機能だけでは判定の間隔を変えられませんが、出力されたコードを少し改造すれば実現できると存じます。修正方法を考えましたので、ご提案いたします。

現在のトレーリングストップは、価格が動くたび(ティックごと)に判定しています。そのため、価格が有利な方向へ少し動くたびにストップロスも少しずつ動きます。なお、「30pips」は判定の間隔ではありません。ストップロスを現在価格から何pips離して置くかを決める値です。

準備
  1. 「オプション」設定画面で「トレーリングストップ(固定幅)」にチェックを入れ、「間隔」を30にしてください。
  2. この状態でコードをダウンロードし、MetaEditorで開きます。
  3. MT4用・MT5用のどちらのEAでも、修正内容は同じです。
修正手順

1. 判定間隔のパラメータを追加する

「input bool isTrailingStop」で検索してください。見つかった行のすぐ下に1行追加します。

【修正前】

input bool isTrailingStop = true;

【修正後】

input bool isTrailingStop = true;
input int  TrailingCheckMinutes = 5; // トレーリングストップの判定間隔(分)

2. 判定する処理に時間の制限をかける

「TrailingStop(TrailinStopNormalValue」で検索してください。OnTick関数の中に次の行があります。

【修正前】

if(isTrailingStop == true) TrailingStop(TrailinStopNormalValue, Magic1);

【修正後】

static datetime ts_last_check = 0;
if(TimeCurrent() - ts_last_check >= TrailingCheckMinutes * 60) {
  if(isTrailingStop == true) TrailingStop(TrailinStopNormalValue, Magic1);
  ts_last_check = TimeCurrent();
}

「ポジション2」以降も使っている場合は、Magic2やMagic3の行も続けて並んでいます。その場合は、それらの行もまとめて { } の中に入れてください。

static datetime ts_last_check = 0;
if(TimeCurrent() - ts_last_check >= TrailingCheckMinutes * 60) {
  if(isTrailingStop == true) TrailingStop(TrailinStopNormalValue, Magic1);
  if(isTrailingStop == true) TrailingStop(TrailinStopNormalValue, Magic2);
  ts_last_check = TimeCurrent();
}

3. コンパイルして動作を確認する

修正したらコンパイルします。MT5の場合は、「Tkool.mqh」が「MQL5\Include\Tkool」フォルダにあることも確認してください。EAをチャートに適用するときに、パラメータの「TrailingCheckMinutes」で間隔を指定できます。

  • 1分おきにする場合:1
  • 5分おきにする場合:5
  • 0にした場合:今までどおり毎ティック判定します
補足
  • この修正で変わるのは、ストップロスを動かすタイミングだけです。一度置いたストップロスへの到達はブローカー側で判定されるため、決済が遅れることはありません。
  • 間隔を長くすると、ストップロスが動く回数は減ります。その代わり、急に価格が動いたときには、ストップロスが追いつく前に価格が戻ってしまうことがあります。
  • コードを改造せずに更新回数を減らしたい場合は、「トレーリングストップ(高値・安値)」に切り替える方法もあります。直近の高値・安値を基準にストップロスを動かすため、新しい高値・安値が出たときにしか更新されません。そのため、固定幅より更新の回数がかなり少なくなります。
ki4
2026/10/08 14:31

ありがとうございます。こちらで試してみます。

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。