Сегодня обновился терминал МТ5 и не показывается окно "Оптимизация" во время теста - страница 22

 
Aleksey Vyazmikin:

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

Ну что остаётся, сделать проход по всем параметрам на 1 дне и записать их верные значение в код, и таким образом их выбирать для генетики?

Прочтите мои объяснения выше.

Ваша картина мира несовместима с генетическим алгоритмом. Убъете четверть популяции отказом - генетика еще выкарабкается, пусть даже с потерями. Убъете 98% популяции - это конец эволюции. Вне зависимости от ваших желаний или предпочитаемых методов работы.

Читайте материалы, ссылки на которые я дал выше.

Я прекращаю заниматься ликбезом, извините. Продолжение темы INIT_PARAMETERS_INCORRECT закрыто, все комментарии будут удалены.

 
void collectNecessaryDataOnTick()
{
   //--- считать последние цены на тике
   SymbolInfoTick(Symbol(),last_tick);
   
   ArrayFree(buf_CCI);
   
   if(CopyBuffer(handle_CCI,0,0,bars_4_tr_cur,buf_CCI) < 0 )               // копируем данные из индикаторного массива в статический массив buf_CCI для дальнейшей работы с ними
   {                                                                       // если есть ошибки
      Comment("Не удалось скопировать данные из индикаторного буфера");    // то выводим сообщение
      return;                                                              // и выходим из функции
   }
   bars_4_tr_cur  = 10;
   
   return;
}

До сегодняшнего обновления всё работало. Сейчас - сообщение об ошибке.

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

До сегодняшнего обновления всё работало. Сейчас - сообщение об ошибке.

Какое значение возвращает GetLastError()?

Какое значение имеет переменная bars_4_tr_cur перед вызовом CopyBuffer?

Сколько баров в таймсерии, на которой считается индикатор handle_CCI?

 
Slava:

Какое значение возвращает GetLastError()?

Какое значение имеет переменная bars_4_tr_cur перед вызовом CopyBuffer?

Сколько баров в таймсерии, на которой считается индикатор handle_CCI?

переменная = 33

М15

   ResetLastError();
   if(CopyBuffer(handle_CCI,0,0,33,buf_CCI) < 0 )               // копируем данные из индикаторного массива в статический массив buf_CCI для дальнейшей работы с ними
   {                                                                       // если есть ошибки
      Comment("Не удалось скопировать данные из индикаторного буфера");    // то выводим сообщение об ошибке
      Print(GetLastError());
      return;                                                              // и выходим из функции
   }

4003 - Ошибочный параметр при вызове системной функции

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

переменная = 33

М15

4003 - Ошибочный параметр при вызове системной функции

Следующий вопрос. Я правильно понимаю, что Вы берёте данные индикатора CCI?

Скажите пожалуйста параметры, с которыми Вы создавали этот индикатор.

 
Slava:

Следующий вопрос. Я правильно понимаю, что Вы берёте данные индикатора CCI?

Скажите пожалуйста параметры, с которыми Вы создавали этот индикатор.

//--- активируем хендл индикатора CCI
   handle_CCI = iCCI(Symbol(),0,14,PRICE_TYPICAL);
   if(handle_CCI==INVALID_HANDLE)                        // проверяем наличие хендла индикатора
   {
      Comment("Не удалось получить хендл индикатора");   // если хендл не получен, то выводим сообщение об ошибке
      return(-1);                                        // завершаем работу с ошибкой
   }
   ArraySetAsSeries(buf_CCI,true);                       // устанавливаем индексацию для массива buf_CCI как в таймсерии
 
Сергей Таболин:

переменная = 33

М15

4003 - Ошибочный параметр при вызове системной функции

Точно 33? Это при данном прямом вызове с использованием непосредственного значения 33 возвращается ошибка 4003?

Проверьте ещё раз

 
Slava:

Точно 33? Это при данном прямом вызове с использованием непосредственного значения 33 возвращается ошибка 4003?

Проверьте ещё раз

int OnInit()
{
............
//--- количество баров для определения трендов CCI
   bars_4_tr_cur  = 33;
............
//+--------
   return(INIT_SUCCEEDED);
}

Повторюсь. До обновления советник нормально работал на демо-счетах 3-х брокеров. 

Я даже попробовал заменить индикатор из более ранней версии. Матерится и всё тут.

 

Разобрался.

Ошибка была при считывании файла с сохранёнными параметрами.

Было:

      if(filehandle != INVALID_HANDLE)

После изменения заработало

      if(FileIsExist(filename,FILE_COMMON) && filehandle != INVALID_HANDLE)
 
Сергей Таболин:

Повторюсь. До обновления советник нормально работал на демо-счетах 3-х брокеров. 

Я даже попробовал заменить индикатор из более ранней версии. Матерится и всё тут.

Пожалуйста, запустите этот советник:

Я в нём специально поставил в цикле не каждом тике получение данных с индикатора iCCI с баров от 0 до 33.

Файлы:
iCCI.mq5  11 kb