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つあれば、
と出力されるでしょう。