Речь о том, что 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;
}
Какое значение имеет переменная 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 - Ошибочный параметр при вызове системной функции
Следующий вопрос. Я правильно понимаю, что Вы берёте данные индикатора CCI?
Скажите пожалуйста параметры, с которыми Вы создавали этот индикатор.
//--- активируем хендл индикатора CCI
handle_CCI = iCCI(Symbol(),0,14,PRICE_TYPICAL);
if(handle_CCI==INVALID_HANDLE) // проверяем наличие хендла индикатора
{
Comment("Не удалось получить хендл индикатора"); // если хендл не получен, то выводим сообщение об ошибкеreturn(-1); // завершаем работу с ошибкой
}
ArraySetAsSeries(buf_CCI,true); // устанавливаем индексацию для массива buf_CCI как в таймсерии
Речь о том, что INIT_PARAMETERS_INCORRECT часто используется для сужения область поиска за счет исключения нелогичных/ненужных значений, что значительно ускоряет оптимизацию при использовании полного перебора. Если бы не было INIT_PARAMETERS_INCORRECT, то генетика нарвалась просто на ненужные варианты и с ними мудрила, поэтому не исключать значения переменных - не вариант. Вот я и спрашиваю, как Вы предлагаете, как профессионал, решить эту проблему без чрезмерных усилий. Перечислить все правильные переменные руками, для перебора без пропусков и как бы заведомо исключая значения INIT_PARAMETERS_INCORRECT не вариант - очень долго. Использовать хитрые счетчики - не каждому дано, да и генетике это может так же вредить.
Ну что остаётся, сделать проход по всем параметрам на 1 дне и записать их верные значение в код, и таким образом их выбирать для генетики?
Прочтите мои объяснения выше.
Ваша картина мира несовместима с генетическим алгоритмом. Убъете четверть популяции отказом - генетика еще выкарабкается, пусть даже с потерями. Убъете 98% популяции - это конец эволюции. Вне зависимости от ваших желаний или предпочитаемых методов работы.
Читайте материалы, ссылки на которые я дал выше.
Я прекращаю заниматься ликбезом, извините. Продолжение темы INIT_PARAMETERS_INCORRECT закрыто, все комментарии будут удалены.
До сегодняшнего обновления всё работало. Сейчас - сообщение об ошибке.
До сегодняшнего обновления всё работало. Сейчас - сообщение об ошибке.
Какое значение возвращает GetLastError()?
Какое значение имеет переменная bars_4_tr_cur перед вызовом CopyBuffer?
Сколько баров в таймсерии, на которой считается индикатор handle_CCI?
Какое значение возвращает GetLastError()?
Какое значение имеет переменная bars_4_tr_cur перед вызовом CopyBuffer?
Сколько баров в таймсерии, на которой считается индикатор handle_CCI?
переменная = 33
М15
4003 - Ошибочный параметр при вызове системной функции
переменная = 33
М15
4003 - Ошибочный параметр при вызове системной функции
Следующий вопрос. Я правильно понимаю, что Вы берёте данные индикатора CCI?
Скажите пожалуйста параметры, с которыми Вы создавали этот индикатор.
Следующий вопрос. Я правильно понимаю, что Вы берёте данные индикатора CCI?
Скажите пожалуйста параметры, с которыми Вы создавали этот индикатор.
переменная = 33
М15
4003 - Ошибочный параметр при вызове системной функции
Точно 33? Это при данном прямом вызове с использованием непосредственного значения 33 возвращается ошибка 4003?
Проверьте ещё раз
Точно 33? Это при данном прямом вызове с использованием непосредственного значения 33 возвращается ошибка 4003?
Проверьте ещё раз
Повторюсь. До обновления советник нормально работал на демо-счетах 3-х брокеров.
Я даже попробовал заменить индикатор из более ранней версии. Матерится и всё тут.
Разобрался.
Ошибка была при считывании файла с сохранёнными параметрами.
Было:
После изменения заработало
Повторюсь. До обновления советник нормально работал на демо-счетах 3-х брокеров.
Я даже попробовал заменить индикатор из более ранней версии. Матерится и всё тут.
Пожалуйста, запустите этот советник:
Я в нём специально поставил в цикле не каждом тике получение данных с индикатора iCCI с баров от 0 до 33.