見出し画像

XX分経過したポジションをクローズする

恋と同じで、どんなロジックも時間経過によりエッジが失われたりします。
XX分経ったら決算するロジックを作成してみました。

よかったら使ってみてね

#include <Trade\Trade.mqh>
CTrade mytrade;


//+------------------------------------------------------------------+
//| オープンしてX分経ったポジションを清算する                                      |
//+------------------------------------------------------------------+
void CloseOrdersAfterXMinutes(int minutes, ulong magicNumber1, ulong magicNumber2) export
{
   int totalOrders = PositionsTotal(); // オープン中の全ポジション数を取得

   for (int i = totalOrders - 1; i >= 0; i--)
     {
      ulong ticket = PositionGetTicket(i);
      if (PositionSelectByTicket(ticket))
        {
         // Magicnumberが一致するもの対象とする
         ulong magic   = PositionGetInteger(POSITION_MAGIC);  // ポジションのMagicNumber
         if (magic == magicNumber1 || magic == magicNumber2)
           {
            datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); // ポジションのオープン時間を取得
            datetime currentTime = TimeCurrent(); // 現在の時間を取得
            int elapsedTime = (int)((currentTime - openTime) / 60); // 経過時間を分単位で計算

            if (elapsedTime >= minutes)
              {
               // 経過時間が指定時間を超えた場合、ポジションを決済
               mytrade.PositionClose(ticket, 10);
              }
           }
        }
      else
        {
         Print("PositionSelectByTicket error: ", GetLastError());
        }
     }
  }



使い方(5分経過したポジションをクローズしたい場合)


CloseOrdersAfterXMinutes(5, MagicNumber_bid, MagicNumber_ask);

MQL5コード一覧はコチラ

https://note.com/noway_pway/n/na50e47a51645


この記事が気に入ったらサポートをしてみませんか?