OnDeinit

É chamada em indicadores e EAs quando ocorre o evento Deinit. A função é projetada para desinicialização de um programa MQL5 em execução.

void  OnDeinit(
   const int  reason         // código de motivo da desinicialização
   );

Parâmetros

reason

[in]  Código de motivo da desinicialização.

Valor retornado

Sem valor retornado

Observação

O evento Deinit é gerado para EAs e para indicadores nos seguintes casos:

  • antes de uma reinicialização devida à mudança do símbolo ou do período do gráfico ao qual o programa MQL5 está associado;
  • antes de uma reinicialização devida à mudança dos parâmetros de entrada;
  • antes de descarregar o programa MQL%.

O parâmetro reason pode pegar os seguintes valores:

Constante

Valor

Descrição

REASON_PROGRAM

0

O Expert Advisor parou seu trabalho chamando a função ExpertRemove()

REASON_REMOVE

1

Programa excluído do gráfico

REASON_RECOMPILE

2

Programa recompilado

REASON_CHARTCHANGE

3

Símbolo ou período alterado

REASON_CHARTCLOSE

4

Gráfico fechado

REASON_PARAMETERS

5

Parâmetros de entrada alterados pelo usuário

REASON_ACCOUNT

6

Outra conta ativada ou reconectada ao servidor de negociação como resultado da alteração das configurações da conta

REASON_TEMPLATE

7

Outro modelo de gráfico implementado

REASON_INITFAILED

8

Manipulador de OnInit() retornou um valor diferente de zero

REASON_CLOSE

9

Terminal fechado

Códigos de motivo de desinicialização do EA podem ser obtidos pela função UninitializeReason() ou a partir da variável predefinida _UninitReason.

Exemplo da funções OnInit() e OnDeinit() para o EA

input int fake_parameter=3;      // parâmetro inútil
//+----------´--------------------------------------------------------+
//| Expert initialization function                                    |
//+----------´--------------------------------------------------------+
int OnInit()
  {
//--- Obtemos o número da compilação do programa
   Print(__FUNCTION__," Build #",__MQLBUILD__);
//--- Código de motivo de reinicialização pode ser obtido na OnInit()
   Print(__FUNCTION__," Ao reinicializar o EA, você pode obter o código de motivo da desinicialização");
//--- Primeira maneira de obter o código de motivo de desinicialização
   Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- Segunda maneira de obter o código de motivo de desinicialização  
   Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
//---
   return(INIT_SUCCEEDED);
  }
//+----------´--------------------------------------------------------+
//| Expert deinitialization function                                  |
//+----------´--------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Primeira maneira de obter o código de motivo de desinicialização
   Print(__FUNCTION__," Código de motivo da desinicialização = ",reason);
//--- Segunda maneira de obter o código de motivo de desinicialização
   Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- Terceira maneira de obter o código de motivo de desinicialização  
   Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
  }
//+------------------------------------------------------------------+
//| Retorna a descrição do motivo da desinicialização                |
//+------------------------------------------------------------------+
string getUninitReasonText(int reasonCode)
  {
   string text="";
//---
   switch(reasonCode)
     {
      case REASON_ACCOUNT:
         text="Account was changed";break;
      case REASON_CHARTCHANGE:
         text="Symbol or timeframe was changed";break;
      case REASON_CHARTCLOSE:
         text="Chart was closed";break;
      case REASON_PARAMETERS:
         text="Input-parameter was changed";break;
      case REASON_RECOMPILE:
         text="Program "+__FILE__+" was recompiled";break;
      case REASON_REMOVE:
         text="Program "+__FILE__+" was removed from chart";break;
      case REASON_TEMPLATE:
         text="New template was applied to chart";break;
      default:text="Another reason";
     }
//---
   return text;
  }

Veja também

OnInit, Funções de processamento de eventos, Execução de programas, Eventos do terminal do cliente, Motivos de desinicialização, Escopo de visibilidade e tempo de vida das variáveis, Criando e destruindo objetos