MQL5でEA開発 64 条件で絞ったポジション数を計算する関数

MQL5でEA開発 63 条件で絞ったポジション数を計算する関数

条件で絞ったポジション数を計算する関数

条件で絞ったポジション数を計算する関数を作ります。

名前はPositionsTotalByFilters関数とします。

戻り値はint型です。

引数は

  • 第1引数:銘柄。string型

  • 第2引数:タイプ。long型

  • 第3引数:マジックナンバー。long型

とします。

関数の作成にあたって、以下の関数を使用しました。

  • PositionsTotal関数

  • PositionGetSymbol関数

  • PositionGetInteger関数

ポジション数を返す関数としてPositionsTotal関数がありますが、この関数は口座内のすべてのポジションを数えます。

これから作るPositionsTotalByFilters関数は口座内のポジションのうち、指定した銘柄、タイプ、マジックナンバーに一致したポジションのみを数えます。

関数のコード

int PositionsTotalByFilters(string symbol, long type, long magic)
  {
/*
   symbol:銘柄
   type:タイプ
   magic:マジックナンバー
*/
   int positions_total=PositionsTotal();  // ポジション数
   int res=0;  // 戻り値
   for(int i=positions_total-1; i>=0; i--)
     {
      string position_symbol=PositionGetSymbol(i);  // ポジションの銘柄
      long position_type=PositionGetInteger(POSITION_TYPE);  // ポジションのタイプ
      long position_magic=PositionGetInteger(POSITION_MAGIC);  // ポジションのマジックナンバー
      if(position_symbol==symbol && position_type==type && position_magic==magic)
         res+=1;
     }
   return(res);
  }

サンプルコード

int PositionsTotalByFilters(string symbol, long type, long magic)
  {
/*
   symbol:銘柄
   type:タイプ
   magic:マジックナンバー
*/
   int positions_total=PositionsTotal();  // ポジション数
   int res=0;  // 戻り値
   for(int i=positions_total-1; i>=0; i--)
     {
      string position_symbol=PositionGetSymbol(i);  // ポジションの銘柄
      long position_type=PositionGetInteger(POSITION_TYPE);  // ポジションのタイプ
      long position_magic=PositionGetInteger(POSITION_MAGIC);  // ポジションのマジックナンバー
      if(position_symbol==symbol && position_type==type && position_magic==magic)
         res+=1;
     }
   return(res);
  }
void OnTick()
  {
   int buy_positions_total=PositionsTotalByFilters(_Symbol,POSITION_TYPE_BUY,20248);  // 買いポジション数
   Print("buy_positions_total=",buy_positions_total);
  }

チャート上の、あるいはバックテストで設定した銘柄、買いポジション、20248のマジックナンバーという3つの条件でポジション数を絞ります。

メッセージ

まだポジションがないので実行しても意味がありませんが、もし銘柄がドル円、タイプが買いポジション、マジックナンバーが20248のポジションが1つあれば、

buy_positions_total=1

と出力されるでしょう。

いいなと思ったら応援しよう!