возврат с торгового сервера причины отказа открытия сделки №131

 

При тесте ошибок не обнаружено хотя тест был на разных вариациях, но проверяющие робот перед выставлением в маркет говорят, что у них где то выдается ошибка 131, при этом отказываются говорить параметры и торговые условия символов где возникает ошибка.

В коде этой ошибки не может быть, так как перед функцией OrderSend(открытие сделки) есть проверка:


 int dlot = 2;

 if(NormalizeDouble(MarketInfo(zsymbol,MODE_LOTSTEP),2)<nd(0.1,1)) dlot = 2;

 else

 if(NormalizeDouble(MarketInfo(zsymbol,MODE_LOTSTEP),2)<1) dlot = 1;

 else

 if(NormalizeDouble(MarketInfo(zsymbol,MODE_LOTSTEP),2)<10) dlot = 0;


 zlot = NormalizeDouble(MathMax(MathMin(zlot,MarketInfo(zsymbol,MODE_MAXLOT)),MarketInfo(zsymbol,MODE_MINLOT)),dlot);


 int t=OrderSend(zsymbol,ztype,zlot,zprice,zslippage,zzsl,zztp,zcomment,zmg,zexpostin,zclr);

При этом проверялись разные вариации и насильно вбивался лот меньше допустимого/больше допустимого/неверная дробь(1.001) и все ровно ошибки 131 мой терминал не выдавал т.к. код выше корректировал значения на допустимые.

Напомню что маркет не сообщает параметры и торговые условия символов где возникает ошибка

В чем причина подобного ответа маркета?

 
double mtsVolumeCoerse(string _symbol, double _volume)
{
   double vmin = SymbolInfoDouble(_symbol,SYMBOL_VOLUME_MIN); 
   double vmax = SymbolInfoDouble(_symbol,SYMBOL_VOLUME_MAX);
   double vstep = SymbolInfoDouble(_symbol,SYMBOL_VOLUME_STEP);
   _volume = vstep > 0 ? vstep * (int)NormalizeDouble(_volume/vstep,0) : 0;
   if (_volume < vmin) _volume = vmin;
   if (_volume > vmax) _volume = vmax;
   if (vstep>=1) return NormalizeDouble(_volume,0);
   if (vstep>=0.1) return NormalizeDouble(_volume,1);
   return NormalizeDouble(_volume,2);
}

Думаю дело еще в этом: _volume = vstep > 0 ? vstep * (int)NormalizeDouble(_volume/vstep,0) : 0;

Надо приводить открываемый объем к значению кратному шагу.