Не для разработчиков МТ! Чем заменить INIT_PARAMETERS_INCORRECT ? - страница 11

 
Сергей Таболин:

Пришла мысль отсеивать при ген.оптимизации "недопустимые" параметры в OnTester():

Получается никак не вмешиваясь в генетику убрать из вида результаты INIT_PARAMETERS_INCORRECT.

Тут же возник другой вопрос: а можно ли в этом случае выдать "глубокий минус" по прибыли?

это очень медленный метод. Мы тратим ресурсы на просчет всего прохода.

 
Mikhail Mitin:

это очень медленный метод. Мы тратим ресурсы на просчет всего прохода.

Из двух зол...

 
Mikhail Mitin:

это очень медленный метод. Мы тратим ресурсы на просчет всего прохода.

Ввести INIT_PARAMETERS_INCORRECT_ONTESTER - переброска в OnTester.

 

Как я решал эту задачу (несколько вариантов):

  • создается отдельный параметр, в зависимости от его значения подставляются другие значения (описание в паре постов выше). Оптимизация идет только этого параметра
  • еще есть 1 вариант, как я выходил из данной ситуации, но он не простой в реализации:
    1. создавал csv файл, в котором был перебор только нужных параметров
    2. делал чтение файла в OnInit, чтение значений из файла и присвоение в параметры (чтение файлов с флагом Совместный доступ)
    3. оптимизировал только 1 параметр (номер строки в csv файле)
  • писал алгоритм создания mqh файла из csv файла (по аналогии с пунктов выше, только скорость работы быстрее) и подключал его к эксперту.

 
Mikhail Mitin:

Как я решал эту задачу (несколько вариантов):

  • создается отдельный параметр, в зависимости от его значения подставляются другие значения (описание в паре постов выше). Оптимизация идет только этого параметра
  • еще есть 1 вариант, как я выходил из данной ситуации, но он не простой в реализации:
    1. создавал csv файл, в котором был перебор только нужных параметров
    2. делал чтение файла в OnInit, чтение значений из файла и присвоение в параметры (чтение файлов с флагом Совместный доступ)
    3. оптимизировал только 1 параметр (номер строки в csv файле)
  • писал алгоритм создания mqh файла из csv файла (по аналогии с пунктов выше, только скорость работы быстрее) и подключал его к эксперту.

А как это позволяет реализовывать генетический алгоритм, если переменная у Вас только одна?

 

Осенило! ))))

Из OnInit строки 

   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                  return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                    return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)  return(INIT_PARAMETERS_INCORRECT);

перенёс в 

void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                                 ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                                   ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)                 ExpertRemove();

Генетике не мешает, и PARAMETERS_INCORRECT не расчитываются. )))

 
Сергей Таболин:

Осенило! ))))

Из OnInit строки 

перенёс в 

Генетике не мешает, и PARAMETERS_INCORRECT не расчитываются. )))

Интересное решение. И как, генетика проходит успешно, не заваливается в одного потомка?

 
Aleksey Vyazmikin:

Интересное решение. И как, генетика проходит успешно, не заваливается в одного потомка?

Всё ок. Не заваливается. ))) По крайней мере, пока. Где-то у меня была сова с большим количеством невалидных параметров. Нужно будет прогнать на ней оптимизацию и посмотреть.

А идея переноса заключается в том, что генетика спотыкается именно на инициализации. А если проверку в перенести в OnTick , то инициализация проходит нормально, тест начинается, тут же заканчивается и генетика получает результат прохода в ноль.

 
Сергей Таболин:

Всё ок. Не заваливается. ))) По крайней мере, пока. Где-то у меня была сова с большим количеством невалидных параметров. Нужно будет прогнать на ней оптимизацию и посмотреть.

А идея переноса заключается в том, что генетика спотыкается именно на инициализации. А если проверку в перенести в OnTick , то инициализация проходит нормально, тест начинается, тут же заканчивается и генетика получает результат прохода в ноль.

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

 
Aleksey Vyazmikin:

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

Оптимизация на той сове, о которой я говорил, идёт успешно. )))

Хорошая идея. Нужно добавить флаг проверки.

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