Terminal MT5 atualizado hoje e a janela "Otimização" não aparece durante o teste - página 22

 
Aleksey Vyazmikin:

A questão é que INIT_PARAMETERS_INCORRECT é freqüentemente usado para restringir a área de busca, excluindo valores ilógicos/desnecessários, o que acelera significativamente a otimização ao utilizar uma enumeração completa. Se o INIT_PARAMETERS_INCORRECT não existisse, a genética se depararia apenas com variantes desnecessárias e mexeria com elas, portanto, não excluir valores de variáveis não é uma opção. Então é isso que eu estou perguntando, como você sugere, como profissional, resolver este problema sem muito esforço. Enumerar manualmente todas as variáveis corretas, para enumeração sem lacunas e excluir conscientemente os valores INIT_PARAMETERS_INCORRECT não é uma opção - muito longa. O uso de contadores inteligentes não é para todos e também pode prejudicar a genética.

Então o que resta, passar todos os parâmetros em 1 dia e escrever seus valores corretos em código, e assim selecioná-los para a genética?

Leia minhas explicações acima.

Sua imagem do mundo é incompatível com o algoritmo genético. Matar um quarto da população pela negação - a genética ainda sobreviverá, mesmo com prejuízo. Matar 98% da população - esse é o fim da evolução. Independentemente de seus desejos ou modus operandi preferido.

Leia os materiais aos quais fiz a ligação acima.

Já terminei com o esclarecimento, desculpe. A continuação do tópico INIT_PARAMETERS_INCORRECT está encerrada, todos os comentários serão eliminados.

 
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;
}

Antes da atualização de hoje, tudo estava funcionando. Agora há uma mensagem de erro.

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

Antes da atualização de hoje, tudo estava funcionando. Agora há uma mensagem de erro.

Que valor a GetLastError() retorna?

Qual é o valor das barras variáveis_4_tr_cur antes de chamar o CopyBuffer?

Quantas barras nas séries cronológicas, nas quais o indicador handle_CCI é contado?

 
Slava:

Que valor a GetLastError() retorna?

Qual é o valor da variável bars_4_tr_cur antes de chamar CopyBuffer?

Quantas barras nas séries de tempo em que o indicador handle_CCI é contado?

variável = 33

М15

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

4003 -Parâmetro errado ao chamar uma função do sistema

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

variável = 33

М15

4003 -Parâmetro errado ao chamar uma função do sistema

Próxima pergunta. Entendo corretamente que você está tomando dados do indicador CCI?

Por favor, diga-me os parâmetros com os quais você criou este indicador.

 
Slava:

Próxima pergunta. Entendo corretamente que você está tomando dados do indicador CCI?

Por favor, diga-me os parâmetros com os quais você criou este indicador.

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

variável = 33

М15

4003 -Parâmetro inválido ao chamar uma função do sistema

Exatamente 33? Esta é uma chamada direta usando um valor direto de 33 erros de retorno 4003?

Verifique novamente

 
Slava:

Exatamente 33? É uma determinada chamada direta usando o valor direto de 33 que retorna o erro 4003?

Verifique novamente

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

Novamente. Antes da atualização, a EA trabalhou bem em contas de demonstração de 3 corretores.

Eu até tentei substituir o indicador de uma versão anterior. Ele ainda grita.

 

Eu já descobri.

O erro foi na leitura do arquivo de parâmetros salvo.

Foi:

      if(filehandle != INVALID_HANDLE)

Depois de mudá-lo, funcionou.

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

Deixe-me repetir. Antes da atualização, a EA trabalhou bem em contas de demonstração de 3 corretores.

Eu até tentei substituir o indicador de uma versão anterior. Jura e é isso.

Por favor, execute esta EA:

Eu o defino propositadamente para receber dados do indicador iCCI das barras 0 a 33 em um loop que não é todo tiquetaque.

Arquivos anexados:
iCCI.mq5  11 kb
Razão: