Создаю тему что бы Разработчики увидели!

 

Уважаемые разработчики, есть подозрение на ошибку валидатора маркета "no trading operations" для МТ 4

Проверка на наличие баланса для торговли.

Перепробовал массу вариантов кода и за весь день ни один из вариантов не прошел проверку маркета.

Не проходят проверку и те программы которые раньше проходили проверку.

В итоге все упростил до минимума, но до открытия операции валидатор так и не доходит что дает ошибку "no trading operations"

double lot         = 0.01;
int    m_deviation = 30;
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!CheckMoneyForTrade(Symbol(), lot, OP_BUY))
      return;
   if(!CheckVolumeValue(lot))
      return;
   if(OrderSend(Symbol(), OP_BUY, NormalizeDouble(lot, 2),  NormalizeDouble(Ask, Digits()), m_deviation, 0, 0, "Comment", 0, 0, clrBlue) < 0)
     {
      Print(" OrderSend OP_BUY Error ", ::GetLastError());
      return ;
     }
  }
//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
bool CheckMoneyForTrade(string symb, double lots, int type)
  {
   double free_margin = AccountFreeMarginCheck(symb, type, lots);
   if(free_margin < 0)
     {
      string oper = (type == OP_BUY) ? "Buy" : "Sell";
      Print("Not enough money for ", oper, " ", lots, " ", symb, " Error code=", GetLastError());
      return(false);
     }
   return(true);
  }
//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume)
  {
//--- минимально допустимый объем для торговых операций
   double min_volume = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN);
   if(volume < min_volume)
     {
      Print("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f", min_volume);
      return(false);
     }
//--- максимально допустимый объем для торговых операций
   double max_volume = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX);
   if(volume > max_volume)
     {
      Print("Объем больше максимально допустимого 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)
     {
      Print("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
            volume_step, ratio * volume_step);
      return(false);
     }
   return(true);
  }
//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+

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

Файлы:
Test.mq4  7 kb
 

Добрый день ! Подтверждаю, какие-то проблемы с проверкой, ничего не проходит. Вообще ничего, даже то,что проходило на прошлой неделе. Админы, пожалуйста, проверьте ! 

 

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

В общем, пока админы не прокомментируют пройти проверку невозможно...

 

Вот сообщение с комментариями из валидатора

 2020.06.25 16:00:00  Tester: not enough money for buy 0.20 NZDUSD at 0.64329 sl: 0.00000 tp: 0.00000 [2020.06.25 16:00]
 2020.06.25 16:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 129, FreeMargin: -127.62
 2020.06.25 16:00:00  Test__1 NZDUSD,H1: OrderSend error 134

Где видно что валидатор стартовал с депозитом 1 доллар и не смог открыть позицию 

 
Да, все верно, также получал эту ошибку, слишком низкий баланс
 

Есть ветка в англ части форума - https://www.mql5.com/en/forum/350461
Там об этом же.
Вчера там двоих отсылал на другую ветку (эту), где шел разбор того, что должен включать код для того, чтобы не было такой ошибки при валидации (там куски кода, например про CheckMoneyForTrade и так далее).
Не помогло - сегодня к ним присоединился третий в ветке с этой же ошибкой (не новенький, у него 50 продуктов в Маркете).

В китайской части форума тоже есть ветка, и там тоже ошибка в валидации (какая конкретно - не указывается), причем жалуются опытные продавцы (у которых тоже много продуктов в Маркете) - ветка эта.

-----------------

Тут трудно понять - ошибка валидатора или ошибка в кодах их советников, которые должны быть профиксены для того, чтобы все-таки провалидировалось.

Please Help
Please Help
  • 2020.09.04
  • www.mql5.com
Please Help What is the solution to this problem ?? Please help and thank you...
 
Sergey Golubev:

Есть ветка в англ части форума - https://www.mql5.com/en/forum/350461
Там об этом же.
Вчера там двоих отсылал на другую ветку (эту), где шел разбор того, что должен включать код для того, чтобы не было такой ошибки при валидации (там куски кода, например про CheckMoneyForTrade и так далее).
Не помогло - сегодня к ним присоединился третий в ветке с этой же ошибкой (не новенький, у него 50 продуктов в Маркете).

В китайской части форума тоже есть ветка, и там тоже ошибка в валидации (какая конкретно - не указывается), причем жалуются опытные продавцы (у которых тоже много продуктов в Маркете) - ветка эта.

-----------------

Тут трудно понять - ошибка валидатора или ошибка в коде их советников.

Проверено разными кодами, вплоть до самого минимального что представлен в начале ветки.

Если проверку на достаточность баланса отключить то валидатор зарубается на нехватке средств.

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

 

Дублирую свои выводы из этого сообщения 


//==========

Мой вывод: 

Функции IsTesting и IsVisualMode всегда возвращают false. и все что внутри условий - не выполняется.  (Мой робот работает только если на счете есть уже открытые ордера. И как их открыть только в тестере я не представляю) 

Если функции проверки тестера убрать и прописать просто открытие сделки с минимальным лотом, то результат  есть (выдается ошибка)  только по NZDUSD где баланс 1USD. 

Если делать проверку на баланс, то естественно, сделка не открывается. 


По остальным парам сделки ни при каких условиях не открываются.

 
Sergey Likho:

Дублирую свои выводы из этого сообщения 


//==========

Мой вывод: 

Функции IsTesting и IsVisualMode всегда возвращают false. и все что внутри условий - не выполняется.  (Мой робот работает только если на счете есть уже открытые ордера. И как их открыть только в тестере я не представляю) 

Если функции проверки тестера убрать и прописать просто открытие сделки с минимальным лотом, то результат  есть (выдается ошибка)  только по NZDUSD где баланс 1USD. 

Если делать проверку на баланс, то естественно, сделка не открывается. 


По остальным парам сделки ни при каких условиях не открываются.

Вам нужно выбрать утилиты при публикации программы, тогда Ваш код скорее всего пройдет.

 
Vladimir Pastushak:

Вам нужно выбрать утилиты при публикации программы, тогда Ваш код скорее всего пройдет.

Моя программа уже  3 года в маркете. И это всегда был торговый эксперт. И валидации раньше проходились. И сейчас в тестере на любых символах все работает и открывается корректно.  Проблема именно с автопроверкой. Собственно та же что и у вас. 

 
Уже писал. В новых требованиях обязательна проверка на достаточность средств, и при их недостатке, работа советника должна быть остановлена. Если работа не останавливается ошибка валидатора нет торговых операций.