Так какой все же результат выбирать после форвард-тестирования? - страница 3

 
Andrey Khatimlianskii #:

@fxsaber, ничего, что массивы структур не инициализируются нулями? Нигде боком не вылезет?

Надо бы конкретизировать. Столько выложено, что сплошная неоднозначность.

 
Andrey Khatimlianskii #:

Строки 91 и 238, "{0}" заменить на "{}", тогда собирается.


@fxsaber, ничего, что массивы структур не инициализируются нулями? Нигде боком не вылезет?

Огромное спасибо за помощь,Андрей (только добрался до ПК и увидел ваш ответ. Чуть позже попробую повторить у себя. О результатах отпишусь дополнительно..

 
fxsaber #:

Надо бы конкретизировать. Столько выложено, что сплошная неоднозначность.

В TypeToBytes.mqh заменил "{0}" на "{}" в строках 91 и 238.

Есть еще несколько аналогичных мест, но Валидейт их не использует.

Насколько я понимаю, это инициализация массивов при объявлении (раньше они забивались нулями, если это возможно).


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

К сожалению, не могу отследить этого сам.

Вроде бы сразу после объявления в массив что-то копируется, значит косяков быть не должно.

 
Andrey Khatimlianskii #:

Насколько я понимаю, это инициализация массивов при объявлении (раньше они забивались нулями, если это возможно).

Ilyas, вроде, говорил, что такая инициализация все обнуляет. Из этого исходил, когда заменял {0} на {}.

 
fxsaber #:

Ilyas, вроде, говорил, что такая инициализация все обнуляет.

насколько я помню, напрямую он этого не говорил, просто {} наиболее простая замена для {0}, но не аналогичная.

 
TheXpert #:

насколько я помню, напрямую он этого не говорил, просто {} наиболее простая замена для {0}, но не аналогичная.

{0} - первому элементу присвоить ноль. Вроде, такая трактовка была после ввода {}. В общем, спрашивать надо по новой.

 
fxsaber #:

Ilyas, вроде, говорил, что такая инициализация все обнуляет. Из этого исходил, когда заменял {0} на {}.

Да, нашел:

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

Особенности языка mql5, тонкости и приёмы работы

Ilyas, 2021.05.28 18:18

Мы расширяем инициализирующие последовательности "{ ... }", в ближайшем билде будет разрешено использовать любое выражение, а не только константное.

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

Анализ существующих кодов показал, что часто неправильно используется последовательность из одного нуля - "{0}"

Например так:

MqlTradeRequest request={0};


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

Для приведённой выше строки кода, по новым правилам, будет выдана ошибка, т.к. первое поле имеет тип ENUM_TRADE_REQUEST_ACTIONS, перечисление, в котором отсутствует значение "0"

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


Правильно будет так:

MqlTradeRequest request={};
Значит, можно везде заменить {0} на {}. Почему не сделаете этого в TypeToBytes?
 
Andrey Khatimlianskii #:

Значит, можно везде заменить {0} на {}. Почему не сделаете этого в TypeToBytes?

Много кода в КБ. Этот КБ-баг сильно отбивает желание обновлять.

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

Ошибки, баги, вопросы

fxsaber, 2021.10.02 21:59

Если в кодобазе заменить один из mqh-файлов и отправить на проверку, то все остальные mqh-файлы удаляются.

Из-за этого приходится полностью удалять все исходники и заново прикреплять, вместо того, чтобы перезалить только один mqh-файл.


Прошу починить.


Намучался обновлять Virtual - заново приходится загружать абсолютно все.


ЗЫ Файлы, что прикреплены к блог-постам, совсем не обновляются: загружаются самые первые, что были при создании записи.

 

Пришел, добрался до компьютера, по совету Андрея, заменил {0} на {}, ошибки  связанные TypeToBytes.mqh пропали, но осталось еще две при вызове (как я понимаю) метода класса Parameters, который находится в Expert.mqh.

Все дело, в неправильном наборе параметров, передаваемых из "приложений" ValidateTasks.mqh (строка 29) и ValidatePortfolio.mqh (строка 162), т.к. метод требует передачи номера окна графика, структуры вида MqlParam, а также некоего массива с именами (скриншот №1), и этим ограничивается, но в двух вызовах, из вышеуказанных документов, четвертым параметром идет непонятный "false" (скриншоты 2 и 3), из-за чего и вылезают две ошибки.

Если "false", потереть, оставив три параметра, тогда уже 100% все собирается без ошибок.

В связи с чем, вопрос к создателю @fxsaber, скажите, что за "false", присутствовал в параметрах, и как поступить правильнее, так как поступил я (удалив его из вызовов метода), либо добавить этот bool в метод?

Заранее спасибо за ответ.


UPD 1:

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

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

 
AltAndGen #:

В связи с чем, вопрос к создателю @fxsaber, скажите, что за "false", присутствовал в параметрах, и как поступить правильнее, так как поступил я (удалив его из вызовов метода), либо добавить этот bool в метод?

В КБ-исходнике все есть. Скачайте mqh-файл, а не zip (их лучше никогда не смотреть).

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