🗂
MQL5で現在のポジション数、オーダー数を数える方法
MT5はポジション数の他にオーダー数を数える必要があります。
また成行注文も待機注文へ一時回るので成行注文でもオーダー数をカウントする必要があります。
例)ポジション数が0でかつオーダー数が0の時にエントリー注文を出す
bool A = PositionsTotal() == 0;//ポジション数が0
bool B = OrdersTotal() == 0;//オーダー数が0
if(A && B){
position_entry(0);
}
ポジション数をカウントする
int position_count(ENUM_ORDER_TYPE order_type)
{
int count =0;
for(int i=PositionsTotal()-1; i>=0; i--)
{
if("" != PositionGetSymbol(i))
{
if(PositionGetInteger(POSITION_TYPE)==order_type)
{
if(Symbol()==PositionGetString(POSITION_SYMBOL))
{
if(PositionGetInteger(POSITION_MAGIC)==MagicNumber)
{
count++;
}
}
}
}
}
return count ;
}
オーダー数をカウントする
int order_count()
{
int count =0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(OrderGetTicket(i)))
{
if(Symbol()==OrderGetString(ORDER_SYMBOL))
{
if(OrderGetInteger(ORDER_MAGIC)==MagicNumber)
{
count++;
}
}
}
}
return count ;
}
成行注文のオーダー数をカウントする
int market_order_count()
{
int count =0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(OrderGetTicket(i)))
{
if(Symbol()==OrderGetString(ORDER_SYMBOL))
{
if(OrderGetInteger(ORDER_MAGIC)==MagicNumber)
{
long orderType = OrderGetInteger(ORDER_TYPE);
if(orderType == ORDER_TYPE_BUY || orderType == ORDER_TYPE_SELL) // ここで成行注文のみをチェック
{
count++;
}
}
}
}
}
return count ;
}
使い方
void OnTick()
{
bool A = position_count(ORDER_TYPE_BUY) == 0;//BUYポジション 0
bool B = position_count(ORDER_TYPE_SELL) == 0;//SELLポジション 0
bool C = order_count() == 0;//オーダー数 0
}
Discussion