Замучила ошибка there are no trading operations - страница 4

 
Alexey Viktorov:

Компьютер это идиот. © М.М. Ботвинник.

Так-вот притворись идиотом и попытайся пройти по алгоритму с точки зрения идиота и с параметрами установленными идиотом. Именно с такой точки зрения подходит автовалидатор. Обратите внимание на "обратную связь". Оповещает-ли советник об ошибках?

Разобрался наконецто, может кому поможет, в общем в сове у меня только при включенном  ММ была проверка на минимальный лот, а так хардкором устанавливался лот = 0.01, так вот, в валидаторе депозит оказывается равен 1$ (нашел эту инфу в одной из тем), соответственно он использует лот 0.001 (ну или около того) для торговли, а так как у меня в одном месте всегда был лот 0.01 соответственно ему не хватало средств и робот не торговал)

 
Roman Gergert:

Разобрался наконецто, может кому поможет, в общем в сове у меня только при включенном  ММ была проверка на минимальный лот, а так хардкором устанавливался лот = 0.01, так вот, в валидаторе депозит оказывается равен 1$ (нашел эту инфу в одной из тем), соответственно он использует лот 0.001 (ну или около того) для торговли, а так как у меня в одном месте всегда был лот 0.01 соответственно ему не хватало средств и робот не торговал)

Хочется еще разок поднять эту тему. Ваш ответ мне не помогает. У меня есть расчет объема, и если все не подходит то используется минимальный объем:

SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN)

В конце концов, поставил сразу минимальный объем безо всяких расчетов. Далее идет проверки маржи... и no trading operations.

Вчера наткнулся на ответ форума, мол, иногда один и тот же код можно отправить через некоторое время, и он пройдет. Время прошло, не отправляется.

Что делать-то, 2 недели назад эта функция определения объема прошла, и с тех пор она ну никак не изменилась!!

 
Evgeniy Scherbina:

Хочется еще разок поднять эту тему. Ваш ответ мне не помогает. У меня есть расчет объема, и если все не подходит то используется минимальный объем:

В конце концов, поставил сразу минимальный объем безо всяких расчетов. Далее идет проверки маржи... и no trading operations.

Вчера наткнулся на ответ форума, мол, иногда один и тот же код можно отправить через некоторое время, и он пройдет. Время прошло, не отправляется.

Что делать-то, 2 недели назад эта функция определения объема прошла, и с тех пор она ну никак не изменилась!!

Я поворчу, по стариковски. При таком рейтинге, циферки под аватаркой, и имея проблему вы как-то не увидели тему где это обсуждалось. А там-то как раз решение найдено.

Автоматический валидатор - проблемы
Автоматический валидатор - проблемы
  • 2019.04.26
  • www.mql5.com
Пытаюсь обновить версию советника и получаю ошибку. Тот же советник в тестере стратегий. Паралельно пишу советники и для MT4, там все ОК...
 
Alexey Viktorov:

Я поворчу, по стариковски. При таком рейтинге, циферки под аватаркой, и имея проблему вы как-то не увидели тему где это обсуждалось. А там-то как раз решение найдено.

Среди народностей России есть те, которые молятся языческим богам, и те отвечают
 
Evgeniy Scherbina:
Среди народностей России есть те, которые молятся языческим богам, и те отвечают

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

 
Примечание - наверное этот комментарий всё-таки больше для самого себя когда в следующий раз буду искать ошибку "there are no trading operations".
Использовал ForceStop в сомнительных местах. Дальше это уже будет отображаться  в рапорте как деление с нулём и точное место нахождения данной ошибки.
Пример в моем случае:
//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
int ForceStop=0;
int sstop=0;
bool CheckVolumeValue(double volume,string &description)
  {
  
//--- минимально допустимый объем для торговых операций
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {     
      description=StringFormat("Volume is less than the minimum allowable SYMBOL_VOLUME_MIN=%.2f",min_volume);
      sstop=5/ForceStop; // force stop, zerro divide
      return(false);
     }

//--- максимально допустимый объем для торговых операций
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Volume is greater than the maximum allowable SYMBOL_VOLUME_MAX=%.2f",max_volume);
      sstop=5/ForceStop; // force stop, zerro divide
      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("The volume is not a multiple of the minimum gradation SYMBOL_VOLUME_STEP=%.2f, Closest correct volume %.2f",
                               volume_step,ratio*volume_step);
      sstop=5/ForceStop; // force stop, zerro divide
      return(false);
     }
   description="Correct value of volume";
   return(true);
  }
 

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

void OnDeinit

  {
   Alert(GetLastError());

  }

и в инит    ResetLastError();

хз что помогло, но чтото из этого

 

Мне помогает простое изменение (редактирование) нескольких строк в коде.
Ну или просто добавить пустых строк, и перекомпилировать заново.

Думаю это какой-то баг на сервере.

 
Taras Slobodyanik:

Ну или просто добавить пустых строк, и перекомпилировать заново.

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

 
Nauris Zukas:

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

Проходит не потому, что перекомпилировал, а потому, что тестирование началось с другой даты. И я заметил такую бяку, если подсунуть то что уже было, то тестирование не происходит, а сразу выдаётся предыдущий результат теста. Так-что не обольщайтесь такими костылями. Старайтесь сделать нормально. Если чего-то не хватает, или параметры недопустимые, сообщите об этом посредством Print и всё будет правильно.

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