Чего хочет валидатор?

 
Пои попытке опубликовать советник получил ошибку "Нет торговых операций".



После надцатой правки кода написал проверочный советник-открывашку, в котором нет ничего кроме индикатора.
При попытке публикации получил все ту же ошибку.
Отлично!
Знаю где искать!!
Ща сделаю!!!
Как называется национальное жилище американских индейцев помните? Правильно, ФигВам.
Проверил/переписал функцию проверки объема и шага лота. Ошибок по определению быть не должно, сделки должны открываться в полтика, как в моем тестере.
Заслал - опять ФигВам.
Функция проверяет мин-лот, максимально допустимый лот, шаг объема, проверяет и по свободной марже.
Последнее в двух вариантах - в коде функции укороченный вариант - недостаточно денег - отлуп.
В советнике полный - если нет денег на запрашиваемый объем, уменьшает лот до 90% от максимально возможного.

Народ, памагите!!!
Я не знаю чего еще искать и что править.
Файлы:
 
Нашел лекарство.
Костыль ,конечно, но что делать...  пока не поправят валидатор других вариантов не вижу.
В функции проверки объема (а лучше в Он Инит), пишите:

input double   Lots         =0.10;          
input int      TP           =150; 
input int      SL           =1250;       
.... .... ....
.... .... ....
//----------------------------  

double lot=0, minLot;

//==================================== OnInit() ==========================================
int OnInit() {  
//------
   minLot=MarketInfo(Symbol(),MODE_MINLOT);
     lot=Lots;
       if(lot<minLot) lot=minLot;

//-----------------
      ChartSetInteger(0,CHART_SHOW_GRID,0,0); ChartSetInteger(0,CHART_COLOR_CHART_UP,White);ChartSetInteger(0,CHART_MODE,1);ChartSetInteger(0,CHART_SHOW_OHLC,0,0);
      ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,White);ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,LightSeaGreen);
      ChartSetInteger(0,CHART_SCALE,2); ChartSetInteger(0,CHART_SHIFT,true); 
      ChartSetDouble (0,CHART_SHIFT_SIZE,25);
//-----------
   return(INIT_SUCCEEDED);
 } //--
// ============================================ // init // ========================================

Валидатор, судя по всему, сейчас начинает проверку с ввода нулевого объема лота.
   МинЛот можно брать и этой функцией:

    minLot=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
 
Programmer4896 Vasily Temchenko:
Нашел лекарство.
Костыль ,конечно, но что делать...  пока не поправят валидатор других вариантов не вижу.
В функции проверки объема (а лучше в Он Инит), пишите:


Валидатор, судя по всему, сейчас начинает проверку с ввода нулевого объема лота.
   МинЛот можно брать и этой функцией:

    minLot=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);

Пожалуйста, если Вы не совсем понимаете как писать советники, если ВЫ даже не читаете профильные статьи - не используйте слово "костыль". Вы не сделали никакого открытия. Валидатор работает на отлично - отсеивает горе писателей.

В статье Какие проверки должен пройти торговый робот перед публикацией в Маркете (кстати опубликована она от 19 июля 2016) показана правильная проверка:

//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
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);
  }
Какие проверки должен пройти торговый робот перед публикацией в Маркете
Какие проверки должен пройти торговый робот перед публикацией в Маркете
  • www.mql5.com
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку для обеспечения единого стандарта качества. В этой статье мы расскажем о наиболее частых ошибках, которые допускают разработчики в своих технических индикаторах и торговых роботах. А также покажем как самостоятельно проверить свой продукт перед отправкой в Маркет.
 
Vladimir Karputov:

Пожалуйста, если Вы не совсем понимаете как писать советники, если ВЫ даже не читаете профильные статьи - не используйте слово "костыль". Вы не сделали никакого открытия. Валидатор работает на отлично - отсеивает горе писателей.

В статье Какие проверки должен пройти торговый робот перед публикацией в Маркете (кстати опубликована она от 19 июля 2016) показана правильная проверка:

и добавить нечего!

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Проблема с валидацией советника на маркете

Vitaly Muzichenko, 2020.12.31 13:17

Это "правильно" при ровных руках программиста, там где рассчитывается лот

Так-же в связке желательно:

if(AccountFreeMarginCheck(symb,type,lot)<=0) {


 

Владимир, спасибо за науку!!
Вот, дожил до 66 лет, более 15-ти из них пишу на MQL, на других языках более 35-ти, а писать так и не научился...
Не по форме ведь...  И стилизатор запустил только из-за уважения к народу, а так я его из меню удаляю первым делом.

Что касается моей писанины, то откройте, пожалуйста, код моей функции в заглавном посте и сравните мои и "правильные" проверки. Если покажете что у меня по объемам/шагу не проверяется -  с меня литр текилы.

ЗЫ
Тока что обратил внимание что вы не просто пользователь, а Модератор.
Я бы задал вам, как Модератору, пару-тройку конкретных вопросов, но не стану, количество "стертых"  за те годы что я сюда не заходил, резко увеличилось.
Так что я ставлю точку в этой дискуссии.

Стилизатор - Разработка программ - Справка по MetaEditor
Стилизатор - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Стилизатор позволяет быстро привести оформление исходного кода к рекомендуемому стандарту. Это делает код легко читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще читать и анализировать в последующем как его автору, так и другим пользователям. Чтобы запустить стилизатор, нажмите " Стилизатор" в меню "Сервис" или...
 
Programmer4896 Vasily Temchenko:

Владимир, спасибо за науку!!
Вот, дожил до 66 лет, более 15-ти из них пишу на MQL, на других языках более 35-ти, а писать так и не научился...
Не по форме ведь...  И стилизатор запустил только из-за уважения к народу, а так я его из меню удаляю первым делом.

Что касается моей писанины, то откройте, пожалуйста, код моей функции в заглавном посте и сравните мои и "правильные" проверки. Если покажете что у меня по объемам/шагу не проверяется -  с меня литр текилы.

ЗЫ
Тока что обратил внимание что вы не просто пользователь, а Модератор.
Я бы задал вам, как Модератору, пару-тройку конкретных вопросов, но не стану, количество "стертых"  за те годы что я сюда не заходил, резко увеличилось.
Так что я ставлю точку в этой дискуссии.

Можно 50 лет писать и при этом не развиваться. 

У меня кум брата писал на С, когда в городе открылся филиал американской конторы и набирали программистов, а их нужно было 4 человека со знанием Delphi которого он не знал, он его освоил на уровне новичка за неделю, потому что очень хотел получить эту работу.

В то время когда все наливали в мозг текилу - он его пополнял знаниями.

Прошло чуть более 3-х лет и его как лучшего программиста американцы забрали в головной офис в Америку.

Уехал он с женой в июле 2019г. и назад не собирается.

===

Ну а вы можете продолжать писать в своём стиле, вот только не называйте очевидные вещи "костылями"

 

Ага, а можно создать на самом деле передовой терминал (МТ4 имею в виду, не МТ5), а писать в разы кривее меня.
Смотрите картинки, комментарии к ним не нужны.

Подозреваю что если заслать в валидатор советники идущие в комплекте поставки МТ5, то картина получится примерно такая же, если не хуже.
Что же нам предлагают в качестве образцов для подражания? Кривую туфту?

ЗЫ
Не зная ни одной буквы MQL4, но имея понятие о программировании  и доступ к доке  (учебника Ковалева, кажется еще было) через неделю написал первый рабочий бот.
И не одноклеточный, как МА ил MACD, намного интереснее и эффективнее.
Файлы:
MACD.jpg  140 kb
MA.jpg  238 kb
 
Programmer4896 Vasily Temchenko:

Ага, а можно создать на самом деле передовой терминал (МТ4 имею в виду, не МТ5), а писать в разы кривее меня.
Смотрите картинки, комментарии к ним не нужны.

Подозреваю что если заслать в валидатор советники идущие в комплекте поставки МТ5, то картина получится примерно такая же, если не хуже.
Что же нам предлагают в качестве образцов для подражания? Кривую туфту?

ЗЫ
Не зная ни одной буквы MQL4, но имея понятие о программировании  и доступ к доке  (учебника Ковалева, кажется еще было) через неделю написал первый рабочий бот.
И не одноклеточный, как МА ил MACD, намного интереснее и эффективнее.
имея за плечами только кубасик и просмотрев шесть видеоуроков по мкл я сразу через месяц написал то что мне было нужно, никакой учебник я в глаза не видел, уровень вхождения на мкл4 настолько низкий на сколько это вообще возможно
 
Vladimir Karputov:

Пожалуйста, если Вы не совсем понимаете как писать советники, если ВЫ даже не читаете профильные статьи - не используйте слово "костыль". Вы не сделали никакого открытия. Валидатор работает на отлично - отсеивает горе писателей.

В статье Какие проверки должен пройти торговый робот перед публикацией в Маркете (кстати опубликована она от 19 июля 2016) показана правильная проверка:

Да вопрос не в этом. Например у меня в 5-ке на ура проходит валидация. А в 4-ке при том-же коде и тех-же проверках, ни в какую не идет. Нет торговых позиций, и хоть лопни. Как уже говорили в другой теме, даже прямое взятие позиций писал и то нет позиций в 4-ке и все тут.
Так что скорее всего дело не в программистах реально.

P.S. А вообще всех с наступающим!!! В новом году уже нужно проблемы решать...

 

....'if(RestAfterDeal>0)
     {
      Lot=int(Lot/step)*step; //-- Проверка шага.
      return(Lot);  //-- Возврат "причесанного значения"
     }
'.....

что за 'int'?

 
Aleksandr Morozov:

....'if(RestAfterDeal>0)
     {
      Lot=int(Lot/step)*step; //-- Проверка шага.
      return(Lot);  //-- Возврат "причесанного значения"
     }
'.....

что за 'int'?

int распространяется только на (Lot/step) чтобы отбросить дробную часть если она будет.