Костыль ,конечно, но что делать... пока не поправят валидатор других вариантов не вижу.
В функции проверки объема (а лучше в Он Инит), пишите:
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);
Нашел лекарство.
Костыль ,конечно, но что делать... пока не поправят валидатор других вариантов не вижу.
В функции проверки объема (а лучше в Он Инит), пишите:
Валидатор, судя по всему, сейчас начинает проверку с ввода нулевого объема лота.
МинЛот можно брать и этой функцией:
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
Пожалуйста, если Вы не совсем понимаете как писать советники, если ВЫ даже не читаете профильные статьи - не используйте слово "костыль". Вы не сделали никакого открытия. Валидатор работает на отлично - отсеивает горе писателей.
В статье Какие проверки должен пройти торговый робот перед публикацией в Маркете (кстати опубликована она от 19 июля 2016) показана правильная проверка:
и добавить нечего!
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Проблема с валидацией советника на маркете
Vitaly Muzichenko, 2020.12.31 13:17
Это "правильно" при ровных руках программиста, там где рассчитывается лот
Так-же в связке желательно:
if(AccountFreeMarginCheck(symb,type,lot)<=0) {
Владимир, спасибо за науку!!
Вот, дожил до 66 лет, более 15-ти из них пишу на MQL, на других языках более 35-ти, а писать так и не научился...
Не по форме ведь... И стилизатор запустил только из-за уважения к народу, а так я его из меню удаляю первым делом.
Что касается моей писанины, то откройте, пожалуйста, код моей функции в заглавном посте и сравните мои и "правильные" проверки. Если покажете что у меня по объемам/шагу не проверяется - с меня литр текилы.
ЗЫ
Тока что обратил внимание что вы не просто пользователь, а Модератор.
Я бы задал вам, как Модератору, пару-тройку конкретных вопросов, но не стану, количество "стертых" за те годы что я сюда не заходил, резко увеличилось.
Так что я ставлю точку в этой дискуссии.

- www.metatrader5.com
Владимир, спасибо за науку!!
Вот, дожил до 66 лет, более 15-ти из них пишу на MQL, на других языках более 35-ти, а писать так и не научился...
Не по форме ведь... И стилизатор запустил только из-за уважения к народу, а так я его из меню удаляю первым делом.
Что касается моей писанины, то откройте, пожалуйста, код моей функции в заглавном посте и сравните мои и "правильные" проверки. Если покажете что у меня по объемам/шагу не проверяется - с меня литр текилы.
ЗЫ
Тока что обратил внимание что вы не просто пользователь, а Модератор.
Я бы задал вам, как Модератору, пару-тройку конкретных вопросов, но не стану, количество "стертых" за те годы что я сюда не заходил, резко увеличилось.
Так что я ставлю точку в этой дискуссии.
Можно 50 лет писать и при этом не развиваться.
У меня кум брата писал на С, когда в городе открылся филиал американской конторы и набирали программистов, а их нужно было 4 человека со знанием Delphi которого он не знал, он его освоил на уровне новичка за неделю, потому что очень хотел получить эту работу.
В то время когда все наливали в мозг текилу - он его пополнял знаниями.
Прошло чуть более 3-х лет и его как лучшего программиста американцы забрали в головной офис в Америку.
Уехал он с женой в июле 2019г. и назад не собирается.
===
Ну а вы можете продолжать писать в своём стиле, вот только не называйте очевидные вещи "костылями"
Ага, а можно создать на самом деле передовой терминал (МТ4 имею в виду, не МТ5), а писать в разы кривее меня.
Смотрите картинки, комментарии к ним не нужны.
Что же нам предлагают в качестве образцов для подражания? Кривую туфту?
ЗЫ
Не зная ни одной буквы MQL4, но имея понятие о программировании и доступ к доке (учебника Ковалева, кажется еще было) через неделю написал первый рабочий бот.
И не одноклеточный, как МА ил MACD, намного интереснее и эффективнее.
Ага, а можно создать на самом деле передовой терминал (МТ4 имею в виду, не МТ5), а писать в разы кривее меня.
Смотрите картинки, комментарии к ним не нужны.
Что же нам предлагают в качестве образцов для подражания? Кривую туфту?
ЗЫ
Не зная ни одной буквы MQL4, но имея понятие о программировании и доступ к доке (учебника Ковалева, кажется еще было) через неделю написал первый рабочий бот.
И не одноклеточный, как МА ил MACD, намного интереснее и эффективнее.
Пожалуйста, если Вы не совсем понимаете как писать советники, если ВЫ даже не читаете профильные статьи - не используйте слово "костыль". Вы не сделали никакого открытия. Валидатор работает на отлично - отсеивает горе писателей.
В статье Какие проверки должен пройти торговый робот перед публикацией в Маркете (кстати опубликована она от 19 июля 2016) показана правильная проверка:
Да вопрос не в этом. Например у меня в 5-ке на ура проходит валидация. А в 4-ке при том-же коде и тех-же проверках, ни в какую не идет. Нет торговых позиций, и хоть лопни. Как уже говорили в другой теме, даже прямое взятие позиций писал и то нет позиций в 4-ке и все тут.
Так что скорее всего дело не в программистах реально.
P.S. А вообще всех с наступающим!!! В новом году уже нужно проблемы решать...
....'if(RestAfterDeal>0)
{
Lot=int(Lot/step)*step; //-- Проверка шага.
return(Lot); //-- Возврат "причесанного значения"
}
'.....
что за 'int'?
....'if(RestAfterDeal>0)
{
Lot=int(Lot/step)*step; //-- Проверка шага.
return(Lot); //-- Возврат "причесанного значения"
}
'.....
что за 'int'?
int распространяется только на (Lot/step) чтобы отбросить дробную часть если она будет.

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