[MQL4] Функция проверяет допустимость объёма ордера

romanzif

Постоялец
Команда форума
Администратор
Форекс робот VolnaFX
Монет
23,220
Если ваш советник торгует динамическим лотом, то рекомендую перед открытием ордера проверять его корректность по спецификации счета.
На самом деле это лучше всегда делать, даже когда торгуете фиксированным лотом заданным в настройках.

Так, например, если в настройках объем = 0.01 лота, а счет на которые поставили советник поддерживает минимальный 0.1, то сделка не будет открыта.

Здесь можно либо вообще не открывать ордер, либо выводить предупреждение, либо советник будет автоматически брать минимально допустимое значение - решать вам, я приведу общую функции проверки.

Так же без такой проверки ваш робот не примут на маркет mql5

Код:
//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                    |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume)//,string &description)
  {
//--- минимально допустимый объем для торговых операций
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {
  //    description=StringFormat("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f",min_volume);
      return(false);
     }

//--- максимально допустимый объем для торговых операций
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
   //   description=StringFormat("Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f",max_volume);
      return(false);
     }

//--- получим минимальную градацию объема
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
  //    description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
  //                             volume_step,ratio*volume_step);
      return(false);
     }
 //  description="Корректное значение объема";
   return(true);
  }
//+------------------------------------------------------------------+
Вызывайте эту функцию перед OrderSend() в параметрах передаём объём который надо проверить.
 

Сигналы

Заработок онлайн

Верх