Ошибки, баги, вопросы - страница 1961
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не ошибка ли это, что const-метод все таки может менять поле своей структуры?
Гы, в приведенном коде меняется не this.i, а другой экземпляр Struct.i. Ошибки нет. Чтобы блокировать модификацию параметра Struct нужно и его объявить const.
Вариант "оптимизация + тест" вполне подходит для удобного отображения входных параметров одиночных проходов после оптимизации.
Но как при одиночном проходе получить список параметров, кроме как из файла, подготовленного при оптимизации? И как параметрам из этого файла сопоставить используемые в тесте значения?
Только если делать мнимую Оптимизацию в два прохода, вместо одиночного.
Гы, в приведенном коде меняется не this.i, а другой экземпляр Struct.i. Ошибки нет. Чтобы блокировать модификацию параметра Struct нужно и его объявить const.
Да, механизм понятен.
Только если делать мнимую Оптимизацию в два прохода, вместо одиночного.
И как параметрам из этого файла сопоставить используемые в тесте значения?
Andrey Khatimlianskii:
И как параметрам из этого файла сопоставить используемые в тесте значения?
Через ParameterSetRange.
Через ParameterSetRange.
Как это поможет?
Оптимизация прошла, мы записали все перебираемые параметры с диапазонами значений.
А потом запускаем одиночный тест, читаем список параметров, и выводим его на экран: параметр = значение. При этом значение нам не известно, т.к. мы не можем обратиться к инпут-переменной по имени.
Как это поможет?
Оптимизация прошла, мы записали все перебираемые параметры с диапазонами значений.
А потом запускаем одиночный тест, читаем список параметров, и выводим его на экран: параметр = значение. При этом значение нам не известно, т.к. мы не можем обратиться к инпут-переменной по имени.
Делаете входной параметр bool Optim. В OnInit возвращаете INIT_FAILED, если Optim == true. При этом в OnTesterPass через FrameInputs и ParameterGetRange (или в деструкторе глобального объекта класса) записываете фактически SET-файл Оптимизации.
Далее ставите Optim = false. И берете еще один параметр sinput int Range, задаете ему через ParameterSetRange изменение от нуля до единицы. В OnTesterInit считываете SET-файл и задаете значения всех параметров из файла в ParameterSetRange. В OnInit при Range == 0 возвращаете INIT_FAILED.
Все! Вместо одиночного имеете мнимую Оптимизацию, которая еще и быстрее одиночного будет.... Плюс считывание/запись входных параметров.
не в тему вопрос но спрошу или попрошу можно ли дополнять справочник MQL5 дополнительными примерами реализации алгоритмов больше и наглядней
Делаете входной параметр bool Optim. В OnInit возвращаете INIT_FAILED, если Optim == true. При этом в OnTesterPass через FrameInputs и ParameterGetRange (или в деструкторе глобального объекта класса) записываете фактически SET-файл Оптимизации.
Далее ставите Optim = false. И берете еще один параметр sinput int Range, задаете ему через ParameterSetRange изменение от нуля до единицы. В OnTesterInit считываете SET-файл и задаете значения всех параметров из файла в ParameterSetRange. В OnInit при Range == 0 возвращаете INIT_FAILED.
Все! Вместо одиночного имеете мнимую Оптимизацию, которая еще и быстрее одиночного будет.... Плюс считывание/запись входных параметров.
Спасибо за подробный алгоритм.
'TesterBenchmark_Example.mq5' TesterBenchmark_Example.mq5 1 1 'TesterBenchmark.mqh' TesterBenchmark.mqh 1 1 0 error(s), 0 warning(s), compile time: 3113 msec 1 1Время компиляции в 1648
'TesterBenchmark_Example.mq5' TesterBenchmark_Example.mq5 1 1 'TesterBenchmark.mqh' TesterBenchmark.mqh 1 1 0 error(s), 0 warning(s), compile time: 219 msec 1 1Что-то круто подкрутили!