Про валидатор. Ошибка нет операций, хотя они есть и много - страница 2

 
Alexey Viktorov:

Никто тут не поможет. Проблема скрыта от глаз присутствующих. Можно посмотреть есть-ли сегодня опубликованные советники. Если есть, то проблема в коде. Её надо искать, а как искать при отсутствии кода?

Как может быть проблема в коде, если в тестете от Метакровтов торгует, а в валидаторе нет операций?

 
Evgeniy Zhdan:

Как может быть проблема в коде, если в тестете от Метакровтов торгует, а в валидаторе нет операций?

Так бывает. В валидаторе заложен режим идиота. Он подставляет немыслимые параметры и загоняют нормального человека в тупик. В советнике должна быть "Защита от дурака", сообщения о неадекватных параметрах. Если какие-то неадекватные параметры можно привести к нормальным при инициализации советника, то это надо сделать.

 
Alexey Viktorov:

Так бывает. В валидаторе заложен режим идиота. Он подставляет немыслимые параметры и загоняют нормального человека в тупик. В советнике должна быть "Защита от дурака", сообщения о неадекватных параметрах. Если какие-то неадекватные параметры можно привести к нормальным при инициализации советника, то это надо сделать.

Согласен с каждым словом. Кажется, я понял в чем дело. Сейчас если валидатор пройдет, напишу. 

Ан нет, не прошло. Думал, Bid и Ask нельзя так писать. Было:

OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(Bid - dist * _Point,_Digits),30,0,0,"",MagicFirst,0,clrLimeGreen);

Стало

double priceB = bid-dist*_Point;
OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(priceB,_Digits),30,0,0,"",MagicFirst,0,clrLimeGreen);

Все равно нет операций. Странно.

 
Evgeniy Zhdan:

Согласен с каждым словом. Кажется, я понял в чем дело. Сейчас если валидатор пройдет, напишу. 

Ан нет, не прошло. Думал, Bid и Ask нельзя так писать. Было:

Я попробовал пройти проверку. Уже опубликованной версией, просто версию поменял. Получил ту-же ошибку. Стоит отдохнуть и подождать похоже =)

 

с валидатором все спокойно, ничего не поменялось. 

С первыми советниками у меня были проблемы, а потом уже каждый советник нормально проходит валидацию, 


сегодня публиковал - все нормально. 


@Evgeniy Zhdan у меня к Вам вопрос: 

Вы когда публиковали своих роботов раньше, с модератором, у Вас не было проблем? ну там разбор кода, почему автовалидатор не пускает робота в маркет? 


Я вот когда общался с модераторами, очень трудно было выявить ошибку, а они были прям совсем простые. 

например минусовое значение переменной. 

 
Vladislav Andruschenko:

с валидатором все спокойно, ничего не поменялось. 

С первыми советниками у меня были проблемы, а потом уже каждый советник нормально проходит валидацию, 


сегодня публиковал - все нормально. 


@Evgeniy Zhdan у меня к Вам вопрос: 

Вы когда публиковали своих роботов раньше, с модератором, у Вас не было проблем? ну там разбор кода, почему автовалидатор не пускает робота в маркет? 


Я вот когда общался с модераторами, очень трудно было выявить ошибку, а они были прям совсем простые. 

например минусовое значение переменной. 

Были проблемы поначалу. Потом просто в код добавлял нужные функции из статьи "Как правильно публиковать.." и все, проблем не возникало.

Сейчас если делаю вот так:

void OnTick()
  {
//
   OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(Bid - 300*_Point,_Digits),30,0,0,"",Magic,0,clrNONE);
}

То торгует....

 
Evgeniy Zhdan:

Были проблемы поначалу. Потом просто в код добавлял нужные функции из статьи "Как правильно публиковать.." и все, проблем не возникало.

Сейчас если делаю вот так:

То торгует....

у меня были такие траблы переодически с торговлей в автовалидаторе. 

и то же самое - в тестере торгует , в автовалидаторе нет.

после внедрения всех "проверок" из статьи - все стало на свои места, торговля есть. 

а причины могут быть разные - Вы проверяли на минусовое значение всех переменных? 

 
Vladislav Andruschenko:

у меня были такие траблы переодически с торговлей в автовалидаторе. 

и то же самое - в тестере торгует , в автовалидаторе нет.

после внедрения всех "проверок" из статьи - все стало на свои места, торговля есть. 

а причины могут быть разные - Вы проверяли на минусовое значение всех переменных? 

Все нужные проверки у меня загружены. переменных только 2 - Лот и Дистанция. Дистанция если минусовая то будет ошибка открытия ордера, с ценой что-то не так. Лот тоже самое. 

У меня просто нет операций.

Вот сейчас отпарвил без функции CheckVolumeValue

Получил кучу ошибок, что логично:

А с этой функцией вообще нет ордеров. Т.е. валидатор не может залезть в CheckVolumeValue

Вот так  у меня сделано:

   if(CheckVolumeValue(Lot) /* без этого ордера есть, но понятнео дело, ошибки*/ && IsNewOrderAllowed() && (CountTrades(OP_BUY,MagicFirst)==0 ||CountTrades(OP_SELL,MagicFirst)==0))
     {
      double bid = MarketInfo(Symbol(),MODE_BID);
      double priceB = bid-distance*_Point;
      double priceS = bid+distance*_Point;
      if(CountTrades(OP_BUYLIMIT,MagicFirst)==0 && CountTrades(OP_BUY,MagicFirst)==0) OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(priceB,_Digits),30,0,0,"",MagicFirst,0,clrLimeGreen);
      if(CountTrades(OP_SELLLIMIT,MagicFirst)==0 && CountTrades(OP_SELL,MagicFirst)==0) OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(priceS,_Digits),30,0,0,"",MagicFirst,0,clrRoyalBlue);
     }
Но повторяю - нет ордеров ТОЛЬКО  ВАЛИДАТОРЕ, в тестере на сервере Метаквотов торгует без ошибок с любыми параметрами, адекватными
Какие проверки должен пройти торговый робот перед публикацией в Маркете
Какие проверки должен пройти торговый робот перед публикацией в Маркете
  • www.mql5.com
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку, так как небольшая ошибка в логике советника или индикатора может привести к убыткам на торговом счете. Именно поэтому нами разработана серия базовых проверок, призванных обеспечить необходимый уровень качества продуктов Маркета. Если в процессе проверки...
 
Evgeniy Zhdan:

Все нужные проверки у меня загружены. переменных только 2 - Лот и Дистанция. Дистанция если минусовая то будет ошибка открытия ордера, с ценой что-то не так. Лот тоже самое. 

У меня просто нет операций.

Вот сейчас отпарвил без функции CheckVolumeValue

Получил кучу ошибок, что логично:

А с этой функцией вообще нет ордеров. Т.е. валидатор не может залезть в CheckVolumeValue

Вот так  у меня сделано:

Но повторяю - нет ордеров ТОЛЬКО  ВАЛИДАТОРЕ, в тестере на сервере Метаквотов торгует без ошибок с любыми параметрами, адекватными


но если написано no trading operation - это нее значит, что нет попыток открытия ордера :-)

Значит у Вас есть выход из функции, если есть ошибка. 

Вы уже нашли, что проблема может быть с лотом, что еще? 

 

вот смотрите, Вы поняли статью буквально и вставили просто код?

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);
  }


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

Это же не правильно. ?  с одной стороны! с другой стороны правильно.