OnDeinit

Se llama en los indicadores y expertos al suceder el evento Deinit. La función se ha diseñado para desinicializar un programa MQL5 iniciado.

void  OnDeinit(
   const int  reason         // código del motivo de la desinicialización
   );

Parámetros

reason

[in]  Código del motivo de la desinicialización.

Valor retornado

No hay valor retornado

Observación

El evento Deinit se genera para los expertos e indicadores en los casos siguientes:

  • antes de llevar a cabo una desinicialización relacionada con el cambio de símbolo o periodo del gráfico al que está fijado el programa mql5;
  • antes de llevar a cabo una desinicialización relacionada con el cambio de los parámetros de entrada;
  • antes de iniciar un programa mql5.

El parámetro reason puede adoptar los siguientes valores:

Constante

Valor

Descripción

REASON_PROGRAM

0

El experto ha dejado de funcionar, llamando a la función ExpertRemove()

REASON_REMOVE

1

El programa ha sido eliminado del gráfico

REASON_RECOMPILE

2

El programa ha sido recompilado

REASON_CHARTCHANGE

3

El símbolo o periodo del gráfico ha sido modificado

REASON_CHARTCLOSE

4

El gráfico ha sido cerrado

REASON_PARAMETERS

5

Los parámetros de entrada han sido modificados por el usuario

REASON_ACCOUNT

6

Se ha activizado otra cuenta, o bien ha tenido lugar la reconexión al servidor comercial como consecuencia del cambio de ajustes de la cuenta

REASON_TEMPLATE

7

Se ha aplicado otra plantilla del gráfico

REASON_INITFAILED

8

El manejador OnInit() ha retornado un valor distinto a cero

REASON_CLOSE

9

El terminal ha sido cerrado

Podrá obtener los códigos de desinicialización del experto con la función UninitializeReason() o desde la variable predeterminada _UninitReason.

Ejemplo de las funciones OnInit() y OnDeinit() para el experto

input int fake_parameter=3;      // parámetro inútil
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Obtenemos el número del build en el que se ha compilado el programa
   Print(__FUNCTION__," Build #",__MQLBUILD__);
//--- También se puede obtener el código del motivo del reinicio en OnInit()
   Print(__FUNCTION__," Cuando el experto se reinicia, podemos obtener el código del motivo de la desinicialización");
//--- Primer método para obtener el código del motivo de la desinicialización
   Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- Segundo método para obtener el código del motivo de la desinicialización  
   Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Primer método para obtener el código del motivo de la desinicialización
   Print(__FUNCTION__," Código del motivo de la desinicialización = ",reason);
//--- Segundo método para obtener el código del motivo de la desinicialización
   Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- Tercer método para obtener el código del motivo de la desinicialización  
   Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
  }
//+------------------------------------------------------------------+
//| Retorna la descripción de texto del motivo de la desinicialización
//+------------------------------------------------------------------+
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;
  }

Ver también

OnInit, funciones de procesamiento de eventos, Ejecución de programas, Eventos del terminal de cliente, Motivos de la desinicialización, Zona de visibilidad y tiempo de vida útil de las variables, Creación y eliminación de objetos