決済後のエントリーについて

2025/06/14 19:47
32

例えば、買いで決済後、指定のMAをローソク足の終値で1度下回って確定しないと次の買いエントリーをしないようにするにはどうしたら良いですか?

この指定のMAをローソク足の終値で上回っていることが、買いのエントリー条件の1つになっていますので、TPなどで決済後、条件が引き続き揃っていると、次の足でも買いのエントリーすることを防ぎたいです。

買いの2本前に下回っているだけでなく、指定のMAを下回り確定→再度ローソク足が上がってきた時にまだ他の条件が揃っていない場合、指定のMAよりローソク足が上の状態が何本か続いてから他の条件も揃ってエントリーという事もありますので作り方がわかりません。

指定のMAよりローソク足が下回ったあと、他の売りの条件が揃えば、そのまま売りになります。売りの決済後の条件は、上記買いの逆になります。

コメント

GogoJungle
2025/06/18 10:22

EAつくーるには特定の条件が成立したことを保存しておくフラグのようなものがなく、通常の方法では実現が難しいです。
コードを少し改造すれば可能でして、過去に参考になりそうなQAがありましたので共有させていただきます。

作成できるエントリー条件について
https://labo.gogojungle.co.jp/articles/2084

今回ご希望のロジックが、まさに前述のQAにおける「ある条件を満たした後にすぐエントリーせず待機する」という状況となります。

①MAをローソク足が下回ったらフラグを立てる
②フラグが立っていない場合はsignal = 0にする
③エントリーしたらフラグを降ろす

とすればOKです。
ポイントは②で、if(flag_rsi == false) return; とするとそれ以降の処理もスキップしてしまいますので、returnではなくsignal = 0とします。

修正方法を考えてみましたので、以下に記載いたします。

準備

通常通りEAを作成し、ダウンロードします。

変数の追加

「ローソク足がMAを下回ったことがある」という状態を保存しておくためのフラグ、flag_maを定義します。

【修正前】

bool Trade = true;

【修正後】

bool Trade = true;
bool flag_ma = false;

フラグの状態をチェックする処理の追加

1本前のローソク足がMAを下回ったらフラグを立てます。
以下では、MAの期間を21、MAの種類をSMA (MODE_SMA)としています。
この値は自由にご設定ください。

【修正前】

   if(Trade == false) return;

【修正後】

   if(Trade == false) return;
   if(iClose(Symbol(), 0, 1) < iMA(Symbol(), 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1)) flag_ma = true;

フラグが立っていない場合はエントリー処理をスキップさせます。
signal = 1;と書いてある行を見つけ、その下に1行追加します。

【修正前】

   (何らかのコード)signal = 1;

【修正後】

   (何らかのコード)signal = 1;
   if(flag_ma == false) signal = 0;

エントリーしたらフラグを降ろす処理を追加

エントリー時にフラグをfalseにします。

【修正前】

      if(openPosition(signal, lots, take_profit, stop_loss, Magic1)) {
         bars1 = Bars;
      }

【修正後】

      if(openPosition(signal, lots, take_profit, stop_loss, Magic1)) {
         bars1 = Bars;
         flag_ma = false;
      }

以上でございます。
売りの場合は別の名前の変数を用意し、同様に修正していただければOKですが、まずは買いのみについて試していただければと存じます。

ご参考になりましたら幸いでございます。

%K
2025/06/18 21:30

ご連絡、ありがとうございます。
3度試してみましたが、35eroors,26warningsとでてしまいます。

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。