Исправляем ошибку Volume limit reached — превышение максимального объема открытых сделок (mql5)

Функция для проверки:

//Считаем объем
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; //Не открываем сделку
        }

Поделись с друзьями: