Функция для проверки:
//Считаем объем
double getAllVolume()
{
int itotal=PositionsTotal();
ulong uticket=-1;
double dVolume=0;
for(int i=itotal-1; i>=0; i--)
{
if(!(uticket=PositionGetTicket(i)))
continue;
if(PositionGetString(POSITION_SYMBOL)==_Symbol)
dVolume+=PositionGetDouble(POSITION_VOLUME);
}
itotal=OrdersTotal();
for(int i=itotal-1; i>=0; i--)
{
if(!(uticket=OrderGetTicket(i)))
continue;
if(OrderGetString(ORDER_SYMBOL)==_Symbol)
dVolume+=OrderGetDouble(ORDER_VOLUME_CURRENT);
}
return dVolume;
}
перед открытием сделки:
double max_volume=SymbolInfoDouble(m_name,SYMBOL_VOLUME_LIMIT);
double current_lots=getAllVolume();
if(max_volume>0 && max_volume-current_lots - открываемый сейчас лот <=0)
{
return 0; //Не открываем сделку
}
Полезная функция. Правда я подобной ещё не пользовался.