MQL5でEA開発 63 条件で絞った注文数を計算する関数

条件で絞った注文数を計算する関数

条件で絞った注文数を計算する関数を作ります。

名前はOrdersTotalByFilters関数とします。

戻り値はint型です。

引数は

  • 第1引数:銘柄。string型

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

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

とします。

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

  • OrdersTotal関数

  • OrderGetTicket関数

  • OrderGetInteger関数

  • OrderGetString関数

注文数を返す関数としてOrdersTotal関数がありますが、この関数は口座内のすべての注文を数えます。

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

関数のコード

int OrdersTotalByFilters(string symbol, long type, long magic)
  {
/*
   symbol:銘柄
   type:タイプ
   magic:マジックナンバー
*/
   int orders_total=OrdersTotal();  // 注文数
   int res=0;  // 戻り値
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong order_ticket=OrderGetTicket(i);  // 注文のチケット番号
      string order_symbol=OrderGetString(ORDER_SYMBOL);  // 注文の銘柄
      long order_type=OrderGetInteger(ORDER_TYPE);  // 注文のタイプ
      long order_magic=OrderGetInteger(ORDER_MAGIC);  // 注文のマジックナンバー
      if(order_symbol==symbol && order_type==type && order_magic==magic)
         res+=1;
     }
   return(res);
  }

サンプルコード

int OrdersTotalByFilters(string symbol, long type, long magic)
  {
/*
   symbol:銘柄
   type:タイプ
   magic:マジックナンバー
*/
   int orders_total=OrdersTotal();  // 注文数
   int res=0;  // 戻り値
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong order_ticket=OrderGetTicket(i);  // 注文のチケット番号
      string order_symbol=OrderGetString(ORDER_SYMBOL);  // 注文の銘柄
      long order_type=OrderGetInteger(ORDER_TYPE);  // 注文のタイプ
      long order_magic=OrderGetInteger(ORDER_MAGIC);  // 注文のマジックナンバー
      if(order_symbol==symbol && order_type==type && order_magic==magic)
         res+=1;
     }
   return(res);
  }
void OnTick()
  {
   int buy_orders_total=OrdersTotalByFilters(_Symbol,ORDER_TYPE_BUY_STOP,20248);  // 買い注文数
   Print("buy_orders_total=",buy_orders_total);
  }

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

メッセージ

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

buy_orders_total=1

と出力されるでしょう。

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