OnInit

É chamada em indicadores e EAs quando ocorre o evento Init. A função é projetada para inicialização de um programa MQL5 em execução. Existem duas versões da função.

Versão com retorno de resultado

int  OnInit(void);

Valor retornado

Valor de tipo int, zero significa inicialização bem-sucedida.

Ao retornar o valor INIT_FAILED o Expert Advisor será retirado à força do gráfico.

Ao retornar o valor INIT_FAILED o indicador não será removido do gráfico. Nesse caso, o indicador restante no gráfico estará inoperante – os manipuladores de eventos não são chamados no indicador.

O uso da chamada da OnInit() com o retorno de resultado é prioridade, pois este método permite não apenas inicializar o programa, mas também retornar o código de erro em caso de término antecipado do programa.

Versão sem retorno do resultado é deixada apenas para compatibilidade com códigos antigos. Não é recomendada

void  OnInit(void);

Observação

O evento Init é gerado imediatamente após o especialista ou indicador ser carregado, este evento não é gerado para scripts. A função OnInit() é usada para inicialização do programa MQL5. Se a OnInit() tiver um valor retornado do tipo int, um código de retorno diferente de zero significa uma inicialização mal-sucedida e gera o evento Deinit com código de motivo de desinicialização REASON_INITFAILED.

A função OnInit() do tipo void sempre significa uma inicialização bem-sucedida e não é recomendada.

Ao otimizar os parâmetros de entrada do EA, recomenda-se usar como código de retorno os valores da enumeração ENUM_INIT_RETCODE. Estes valores se destinam a organizar o gerenciamento do progresso da otimização e, inclusive, a selecionar os mais adequados agentes de teste. Na inicialização do EA, mesmo antes de executar o teste, você pode solicitar informações sobre a configuração e sobre os recursos do agente (o número de núcleos, a quantidade de memória livre, etc.) usando a função TerminalInfoInteger(). Com base nas informações recebidas, você pode permitir que esse agente de teste seja usado ou não ao ser otimizado.

Identificador

Descrição

INIT_SUCCEEDED

Inicialização bem-sucedida, o teste do EA pode continuar.

Esse código significa o mesmo que o valor zero — inicialização do EA no testador bem-sucedida.

INIT_FAILED

Inicialização mal-sucedida, não faz sentido continuar o teste devido a erros irrecuperáveis. Por exemplo, não foi possível criar o indicador necessário para o trabalho do EA.

O retorno deste valor significa o mesmo que o retorno, retrocesso de um valor diferente de zero — inicialização do EA no testador mal-sucedida.

INIT_PARAMETERS_INCORRECT

Projetado para denotar um conjunto incorreto de parâmetros de entrada, na tabela de otimização geral, a sequência de resultados com esse código de retorno será destacada em vermelho.

O teste para este conjunto de parâmetros do EA não será executado, o agente estará livre para receber um novo trabalho.

Quando esse valor é recebido, o testador de estratégia tem a garantia de não transferir essa tarefa para outros agentes para reexecução.

INIT_AGENT_NOT_SUITABLE

Não há erros no programa durante a inicialização, mas por algum motivo este agente não é adequado para testes. Por exemplo, não há RAM suficiente, sem suporte de OpenCL e assim por diante.

Após retornar este código, o agente não receberá mais tarefas até o final desta otimização.

O uso da OnInit() com retorno de INIT_FAILED/INIT_PARAMETERS_INCORRECT no testador tem várias características que devem ser consideradas ao otimizar EAs:

  • o conjunto de parâmetros para o qual a OnInit() retornou INIT_PARAMETERS_INCORRECT é considerado inadequado para testes e não será usado para obter a próxima população duranteotimizações genéticas. O fato de haver muitos conjuntos de parâmetros rejeitados pode levar a resultados de pesquisa incorretos de parâmetros ideais de EAs. O algoritmo de busca pressupõe que a função de critério de otimização é suave e não tem descontinuidades em todo o conjunto de parâmetros de entrada.
  • se a OnInit() retornar INIT_FAILED, o teste não poderá ser iniciado e o EA será descarregado da memória do agente. Para executar a próxima passagem, o novo EA será carregado com o novo conjunto de parâmetros. Isso faz com que inciar o teste da próxima passagem de otimização leve mais tempo do que se fosse chamada a TesterStop().

Exemplo da função OnInit() para um EA

//--- input parameters
input int      ma_period=20; // período de média móvel
 
//--- identificador do indicador usado no Expert Advisor
int indicator_handle;   
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- verificamos se o valor ma_period é correto
   if(ma_period<=0)
     {
      PrintFormat("Valor inválido do parâmetro de entrada ma_period: %d",ma_period);
      return (INIT_PARAMETERS_INCORRECT);
     }
//--- ao otimizar
   if(MQLInfoInteger(MQL_OPTIMIZATION))
     {
      //--- verificamos a quantidade de RAM disponível para o agente
      int available_memory_mb=TerminalInfoInteger(TERMINAL_MEMORY_TOTAL);
      if(available_memory_mb<2000)
        {
         PrintFormat("Memória insuficiente para o agente de teste: %d MB",
                     available_memory_mb);
         return (INIT_AGENT_NOT_SUITABLE);
        }
     }
//--- verificamos se existe indicador
   indicator_handle=iCustom(_Symbol,_Period,"My_Indicator",ma_period);
   if(indicator_handle==INVALID_HANDLE)
     {
      PrintFormat("Não foi possível criar o indicador My_Indicator. Código de erro %d",
                  GetLastError());
      return (INIT_FAILED);
     }
//--- inicialização do EA bem-sucedida
   return(INIT_SUCCEEDED);
  }

Veja também

OnDeinit, TesterHideIndicators, Funções de processamento de eventos, Execução de programas, Evento do terminal do cliente, Inicialização de variáveis, Criando e destruindo objetos