エントリー条件について

2025/02/10 12:59
59

買いの決済後、陰線が一度確定してから次の足以降に、エントリー条件が揃ったらエントリーとする方法を教えてください。

コメント

GogoJungle
2025/02/10 17:54

確定するのは陰線でなければなりませんか?
(それとも、「買いの決済後にそのローソク足が確定するまで次のエントリーを制限したい」というご要望でしょうか?)

ローソク足の確定までエントリーを制限させる場合は、「連続エントリー制限」オプションで「ローソク足で指定」を選択し「本数」を1本としていただければ実現します。

一方で、「買いの決済後、少なくとも1本以上のローソク足で陰線が発生したらエントリー条件の判定を行う」というロジックをEAつくーるの機能のみで作成するのは、難しい状況でございます。

%K
2025/02/11 00:12

買いの場合、決済後に一本陰線が出たら次のエントリー条件を待つと考えております。

購入後、作れないとなったら、どうしたらよいですか?

GogoJungle
2025/02/11 14:19

承知いたしました。

> 購入後、作れないとなったら、どうしたらよいですか?

必ずではございませんが、こちらLABOにてご相談いただければ、改造方法をお伝えできる場合があります。
ご安心ください。

通常通りEAをご作成いただいたあと、以下を参考にコードの修正をお試しください。

関数の定義

今回のご要望に対応した専用の関数をご用意しました。
コードの一番下にコピペしてください。

//--------------------------------------------------------------------------------------------------------+
// 最後に決済したバーを取得する関数
//   処理:最後に決済したバーを取得する
//   引数:マジックナンバー
//   戻り値:最後に決済したバー
//--------------------------------------------------------------------------------------------------------+
int getLastCloseBar(int magic)
{
   int i;
   for(i = OrdersHistoryTotal() - 1; i >= 0; i--) {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == false) continue;
      if(OrderMagicNumber() != magic || OrderSymbol() != Symbol()) continue;

      if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
         int shift = iBarShift(Symbol(), Period(), OrderCloseTime(), false);
         return(shift);
      }
   }
   return(-1);
}

//--------------------------------------------------------------------------------------------------------+
// 指定した期間に陰線が存在するか確認する関数
//   処理:指定した期間に陰線が存在するか確認する
//   引数:開始バー,終了バー
//   戻り値:陰線が存在する場合はtrue,存在しない場合はfalse
//--------------------------------------------------------------------------------------------------------+
bool checkBearishCandle(int start, int end)
{
   if(start >= end) return(false); // 開始バーが終了バー以上の場合はfalseを返す
   for(int i = start; i <= end; i++) {
      if(iClose(Symbol(), Period(), i) < iOpen(Symbol(), Period(), i)) return(true);
   }
   return(false);
}

エントリー処理の直前に「陰線が出ていたか」を判定する処理を追加

コードの中から「修正前」の部分を探し、「修正後」のようにご修正ください。

【修正前】

   if(signal != 0 && getOpenLots(Magic1) == 0) {

【修正後】

   if(getLastCloseBar(Magic1) != -1  && checkBearishCandle(1, getLastCloseBar(Magic1) - 1) == false) signal = 0; // この1行を追加
   if(signal != 0 && getOpenLots(Magic1) == 0) {

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

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。