Автоматическая проверка на маркете - страница 6

 
Evgeniy Scherbina:
XAUUSDcheck не тестирует. Но тестирование успешно, потому что тестирует все остальные....
У вас все таки было тестирование? Я утром попробовал, а это автотестирование у меня вообще исчезло и советник напрямую направился на проверку модератору минуя автотестирвоание. Как раньше было. 
 
Полезно знать.
Solving Atomatic Validation Problems
Solving Atomatic Validation Problems
  • 2017.01.11
  • Stanislav Korotky
  • www.mql5.com
If you're distributing some products for MetaTrader 4/5 via the Market, you probably know that a special "welcome" stage of automatic product validation has been added recently by MetaQuotes on the...
 
fxsaber:
Полезно знать.
"If you think you waited enough and the problem is still there, write to the service desk, and wait more ;-)."
 

ну и как надо с

OrderSend error 131

никак не получается

 в тестере ошибки нету на автоматическое  тестирование ест

все рекомендации выполнил и все таки :

OrderSend error 131

Уфффф!!!!
 

Мне кажется автовалидация это первое что должен пройти продавец. 

я тоже попадал на разные ошибки, они были по невнимательности.

Но, автовалидация, это первая стена перед "чуваками" котоыре скчивают в кодебазе бесплатный код - и пытаются его продать, поменяв название. :-(

К сожалению из-за этого в маркете тысячи программ, из которых трудно найти пару стоящих.

я бы ставил спец код в кодебазу, при котором Маркет не принимал такой код к продаже. Ибо обидно :-(  тут годами, даже 5-летками разрабатываешь, дорабатываешь, улучшаешь программы, чтобы клиенты были довольны.

А кто-то скачал готовый продукт поменял название - выкинул в маркет по демпинговой цене, и все.... Клиенты думают, дешевле значит куплю.... 

 

Как в Китае,

Сижу на алиэкспрессе, - как минимум 5 палок для ГОПРО заказал дешевых - итог - неделя на море - палка заржавела.

Вот не поднимается рука купить оригинал палку за 100 баксов, которая не ржавеет. Но нееет, в Китай отдал уже 120 баксов, и очередной заказал такую же палку................. Гребанная жадность...... 

 
Stefan Stoyanov:

ну и как надо с

OrderSend error 131

никак не получается

 в тестере ошибки нету на автоматическое  тестирование ест

все рекомендации выполнил и все таки :

OrderSend error 131

Уфффф!!!!
Проверить нужно только минимальное значение и это сафсем несложно
 
Evgeniy Scherbina:
Проверить нужно только минимальное значение и это сафсем несложно


У меня функция вычисления лота она это делает

           double LotsOptimized()
    { int     lotDigit=(int)fabs(log10(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)));
            if(!MathIsValidNumber(lotDigit)) lotDigit=0;  
{
double FreeMg =AccountFreeMargin();
double Margin =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Minlot =MarketInfo(Symbol(),MODE_MINLOT);
double MaxLot =MarketInfo(Symbol(),MODE_MAXLOT);
double loty =MathFloor(FreeMg*Risk/100/Margin/Step)*Step;
loty = NormalizeDouble(loty,lotDigit);
if(loty<Minlot) loty=Minlot;
if(loty>MaxLot) loty=MaxLot;  
      Lots=loty;
      Lots=NormalizeDouble(Lots,lotDigit);

      return (Lots);}}
  
//================================================================
 

кроме того на маркете ест пример


//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
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 я проверяю через

if (CheckVolumeValue(Lots,com) ==false )return(0);

не смотря на все опят идет ошибка 131

 
Stefan Stoyanov:


У меня функция вычисления лота она это делает

           double LotsOptimized()
    { int     lotDigit=(int)fabs(log10(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)));
            if(!MathIsValidNumber(lotDigit)) lotDigit=0;  
{
double FreeMg =AccountFreeMargin();
double Margin =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Minlot =MarketInfo(Symbol(),MODE_MINLOT);
double MaxLot =MarketInfo(Symbol(),MODE_MAXLOT);
double loty =MathFloor(FreeMg*Risk/100/Margin/Step)*Step;
loty = NormalizeDouble(loty,lotDigit);
if(loty<Minlot) loty=Minlot;
if(loty>MaxLot) loty=MaxLot;  
      Lots=loty;
      Lots=NormalizeDouble(Lots,lotDigit);

      return (Lots);}}
  
//================================================================

Ваш lotDigit это хитроумная дура, которая всегда вычисляет 0. Этого нет в примере в документации. Видимо, вам нравятся когда много скобок?

Также вот это: FreeMg*Risk/100/Margin/Step... Откуда 100? Явно с потолка.

Много строк. Реально много, а что вычисляете?? 

Причина обращения: