Автоматическая валидация, МТ4 - страница 2

 
а ну и после неудачного выполнения функции ОрдерСенд никто не запрещает распринтовать то что вы туда подаёте и то что требует от вас валидатор (мин макс и шаг) сорян этого наверно видно не будет - но я же не на пустом месте про шаг упоминал - вот ссылка на список проверок https://www.mql5.com/ru/articles/2555#invalid_lot
 
Aleksey Semenov #:
а ну и после неудачного выполнения функции ОрдерСенд никто не запрещает распринтовать то что вы туда подаёте и то что требует от вас валидатор (мин макс и шаг) сорян этого наверно видно не будет - но я же не на пустом месте про шаг упоминал - вот ссылка на список проверок https://www.mql5.com/ru/articles/2555#invalid_lot

Попробуем...

 
Aleksey Semenov #:
а ну и после неудачного выполнения функции ОрдерСенд никто не запрещает распринтовать то что вы туда подаёте и то что требует от вас валидатор (мин макс и шаг) сорян этого наверно видно не будет - но я же не на пустом месте про шаг упоминал - вот ссылка на список проверок https://www.mql5.com/ru/articles/2555#invalid_lot

Поменяли расчёт объёма ордера:

double Calc       = NormalizeDouble((MathRound(Calcul/Step))*Step,NormalizeLot);

и изменили NormalizeLot:

// Определим кол-во знаков после запятой для расчёта лота
   double LS = MarketInfo(_Symbol,MODE_LOTSTEP);
   if(LS >= 1.00)                {NormalizeLot=0;}
   if(LS < 1.00 && LS >= 0.1)    {NormalizeLot=1;}
   if(LS < 0.1 && LS >= 0.01)    {NormalizeLot=2;}
   if(LS < 0.01 && LS >= 0.001)  {NormalizeLot=3;}

Валидатор сразу принял успешно! 

Большое спасибо за помощь!!!

 

странно, у меня:

//+----------------------------------------------------------------------------+
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro=False, string sy="")
  {
   double l, k;
   if(sy=="" || sy=="0")
      sy=_Symbol;
   double ls=MarketInfo(sy, MODE_LOTSTEP);
   double ml=MarketInfo(sy, MODE_MINLOT);
   double mx=MarketInfo(sy, MODE_MAXLOT);

   if(ml==0)
      ml=0.1;
   if(mx==0)
      mx=100;

   if(ls>0)
      k=1/ls;
   else
      k=1/ml;
   if(ro)
      l=MathCeil(lo*k)/k;
   else
      l=MathFloor(lo*k)/k;

   if(l<ml)
      l=ml;
   if(l>mx)
      l=mx;

   return(NormalizeDouble(l,2));
  }
//End

эта функция нормально принимается валидатором.

 
Классика не умирает. 
 
Пойду ка я бараньких рёбрышек куплю. Утром. И сделаю их очень вкусными.