エントリーから一定時間経過後の決済EA発動

EAつくーる
こまつな
2024/09/29 03:00
128

エントリーから一定時間経過後に決済EAを発動させる方法はありますでしょうか。
例えば、9:00にエントリーするが、決済EA(例えば移動平均線にタッチ)は10:00にならないと発動しないようにしたいです。(9:00~9:59の間は決済したくない)
経過時間ではなくても、ロウソク足何本経過後から決済EA発動などでもよいです。

コメント

GogoJungle
2024/10/01 10:49

EAつくーるの機能のみではご作成いただけませんが、こちらの資料を参考に決済EAを作成後、コードを一部修正することで実現可能であると存じます。

修正事項

専用の関数の追加

プログラムの一番最後に、次の関数を追加します。(コピペでOKです。)

//+--------------------------------------------------------------------------------------------------------+
//|最後のエントリーから指定した時間経過後にtrueを返す関数
//|   処理 :指定した時間経過後にtrueを返す
//|   引数 :経過時間(秒)、マジックナンバー
//|   戻り値:true/false
//+--------------------------------------------------------------------------------------------------------+
bool IsTimeElapsedSinceLastEntry(int timeLimit, int magic)
{
   datetime lastEntryTime = 0; // 最後にオープンしたポジションのエントリー時間
   
   // 最も最近のオープン時間を探す
   for (int i = OrdersTotal() - 1; i >= 0; i--) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderMagicNumber() == magic) {
            if (OrderOpenTime() > lastEntryTime) {
               lastEntryTime = OrderOpenTime();
            }
         }
      }
   }

   if (TimeCurrent() - lastEntryTime >= timeLimit) return true; // 未エントリー、または指定時間経過でtrue
   return false;
}

タイムリミットを表すパラメーターの準備

最後のエントリーから、決済ロジックが適用されるまでの時間(単位は秒)を指定するためのパラメーターを用意します。マジックナンバーの定義の下に書いておくとよいでしょう。

修正前

input int Magic1 = 1;

修正後

input int Magic1 = 0; // 決済専用EAのため、デフォルトで0にしておきます
input int TimeLimitSeconds = 3600; // 3600秒、つまり1時間です

関数の利用

最初に追加した関数を利用して、決済ロジックを適用してよいかのチェックをします。
if(Trade == false) return;と記載してある行を探し、次のように修正します。

修正前

   if(Trade == false) return;

修正後

   Trade = IsTimeElapsedSinceLastEntry(TimeLimitSeconds, Magic1); // この行を追加します
   if(Trade == false) return;

ご作成後は、デモ口座にて十分ご検証の上でご利用ください。
ご参考になりましたら幸いです。

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。