MQL5でエントリー後のバー数を返す関数

MQL5でエントリーしてから経過したバー(ローソク足)の本数を返す関数を作った。

ポジションの損益がプラスのときはエントリーしてからX本後にエグジット、マイナスのときはエントリーしてからY本後にエグジットしたいときなどに使える。

環境

  • OANDA MetaTrader 5: 5.00 build 4040
  • MetaEditor: 5.00 build 4040

エントリー後のバー数を返す関数

//+------------------------------------------------------------------+
//| エントリー後のバー数(2023/11/03動作確認)                                  |
//+------------------------------------------------------------------+
int BarsSinceEntry(ENUM_TIMEFRAMES period, // 期間
                   int magic // マジックナンバー
                  )
 {
  string position_symbol=""; // ポジションの銘柄
  long position_magic=0; // ポジションのマジックナンバー
  datetime position_time=0; // ポジションの時間
  int res=0; // 戻り値
  //--- 新しい順に検索している点に注意。ここでは最新のポジションのみ検索対称としている
  for(int i=PositionsTotal()-1;i>=0;i--)
    {
    position_symbol=PositionGetSymbol(i);
    position_magic=PositionGetInteger(POSITION_MAGIC);
    position_time=(datetime)PositionGetInteger(POSITION_TIME);
    if(position_symbol==Symbol() && position_magic==magic)
      {
      res=iBarShift(NULL,period,position_time,false);
      break;
      }
    }
  //---
  return(res);
 }

使用例

マジックナンバーが1であるとして、ポジションの損益がプラスの場合は日足で10本後にエグジット、マイナスの場合は日足で5本後にエグジットしたい場合、以下のようにする。

if((ポジションの損益>0 && BarsSinceEntry(PERIOD_D1,1)>=10) || (ポジションの損益<0 && BarsSinceEntry(PERIOD_D1,1)>=5))
  決済注文;