逆指値注文について

2025/07/18 00:20
44

お世話になります。

エントリー条件を満たせば、逆指値注文を出したいのですが、可能でしょうか?
もし、可能ではないなら、ポジション1で最低ロットをエントリーさせ、ポジション2で、ポジション1のエントリー価格の○○pips下まで下がればエントリーする。
などの条件を設定することは可能でしょうか?

宜しくお願い致します。

コメント

GogoJungle
2025/07/22 14:21

「EAつくーる」では、MT4/MT5のような未約定の逆指値注文(Stop Order)は直接行えませんが、ご提案いただいた代替策である 保有中のポジションのエントリー価格を条件にして、他のポジションでエントリーを行うロジック であれば構築することが可能でございます。

以下は、ポジション1が買いでエントリーした後に、そのエントリー価格から50pips下がったら、ポジション2でも買いエントリーを行う設定の例です。


■ 「基本項目」の設定

「損切り」「利食い」の値を共に0にしておきます。
(トリガーであるポジション1のポジションが勝手に決済されないようにします。)

■ ポジション1の「取引条件」

お好みの条件を設定し、最低ロットで買いエントリーさせます。

■ ポジション2の「取引条件」

エントリーと決済の条件を設定します。

ローソク足(適用価格:終値, 計算位置:0本前) <= 最終エントリー足の価格(ポジション:1, 適用価格:終値, 計算位置:0本前, 補正値:-50)
↓
買いエントリー

(何らかの条件)
↓
買いポジション決済

■ 「全決済」オプション

「全決済」オプションにチェックを入れ、ポジション2が決済されたタイミングでポジション1も決済されるようにします。
これをしないと、トリガーであるポジション1のポジションが残り続け、ポジション2の決済の直後に再度ポジション2のエントリー条件を満たしてしまうことになります。


■ 補足ポイント

  • 上記の設定では、ポジション1の買いエントリー後、その価格より50pips以上下がったときに、ポジション2が買いエントリーします。
  • 補正値にマイナスを指定することで、「○○pips下がったら」という条件を実現しています。
  • 売りエントリーで使用する場合は、不等号の向きを逆(>=)に変更し、補正値を「+○○」としてください。
  • 「最終エントリー足の価格」は、該当ポジションが存在しないと参照されませんので、ポジション1が未エントリーの状態では条件は成立しません
  • 「全決済」オプションはSL・TPによる決済では発動しないため、ポジション2には必ず「買いポジション決済」の条件を入れてください。

この方法により、「逆指値的な条件での追加エントリー」を実現することが可能です。
ご参考になれば幸いでございます。

でび
2025/07/22 14:41

返信ありがとうございます。
最終エントリー足の所に、補正値が無いのですが、どうすれば良いでしょうか?

GogoJungle
2025/07/22 15:48

大変失礼いたしました。
「ローソク足」の方に補正値の項目がございますので、

ローソク足(適用価格:終値, 計算位置:0本前, 補正値:+50) <= 最終エントリー足の価格(ポジション:1, 適用価格:終値, 計算位置:0本前)

とすればOKです。移項したので、プラス・マイナスが逆になります。

でび
2025/07/22 22:35

ありがとうございます。
そのままやってみたのですが、エントリーしないんですが、何か間違えてますか?

他には、最大ポジション数は2に変えました。
お手数ですが、よろしくお願いします
![IMG_6204.jpeg](IMG_6204.jpeg
IMG_6205.jpeg

でび
2025/07/22 22:37

IMG_6204.jpeg

でび
2025/07/22 22:39

IMG_6206.jpeg

GogoJungle
2025/07/23 21:33

再度検討いたしましたところ、EAつくーるの機能のみでは難しいことが分かりました。
ポジション1の「エントリー時のローソク足の終値」は利用できますが、これは「エントリー時の価格」と異なるものであるためです。
コードの修正案を考えてみましたので、ご案内します。

ポジション2のエントリー条件の修正

ポジション2のエントリー条件に、「ポジション1のポジション数が0より大きいこと」を加えてください。(失礼しました。お伝えし損ねておりました。)
これがないと、トリガーであるポジション1のエントリーの有無に関わらずポジション2がエントリーしてしまう場合がございます。

エントリー時の価格を取得する専用関数の用意

次の関数は、マジックナンバーを指定することでそのポジションの最後のエントリー時の価格を取得することができます。
この関数を、コードの一番下にコピペしてください。

double getLastEntryPrice(int magic)
{
   double price = -1;
   datetime latestTime = 0;

   for(int i = OrdersTotal() - 1; i >= 0; i--) {
      if(OrderSelect(i, SELECT_BY_POS)) {
         if(OrderMagicNumber() == magic && OrderSymbol() == Symbol()) {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
               if(OrderOpenTime() > latestTime) {
                  latestTime = OrderOpenTime();
                  price = OrderOpenPrice();
               }
            }
         }
      }
   }

   return price;
}

取引条件にてgetLastEntryPrice関数を使用する

前回までにご案内した方法により、コードに【修正前】のような行が存在するはずです。
これを【修正後】のコードで置き換えます。

【修正前】

if(iClose(Symbol(), 0, 0)+PipsToPrice(10)  <=  iClose(Symbol(), 0, getLastEntryBar(Symbol(), 0, 0, Magic1))) signal = 1;

【修正後】

if(iClose(Symbol(), 0, 0)+PipsToPrice(10)  <=  getLastEntryPrice(Magic1)) signal = 1;

以上でございます。

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

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。