OnDeinit

Вызывается в индикаторах и экспертах при наступлении события Deinit. Функция предназначена для деинициализации запущенной MQL5-программы.

void  OnDeinit(
   const int  reason         // код причины деинициализации
   );

Параметры

reason

[in]  Код причины деинициализации.

Возвращаемое значение

Нет возвращаемого значения

Примечание

Событие Deinit генерируется для экспертов и индикаторов в следующих случаях:

  • перед переинициализацией в связи со сменой символа или периода графика, к которому прикреплена mql5-программа;
  • перед переинициализацией в связи со сменой входных параметров;
  • перед выгрузкой mql5-программы.

Параметр reason может принимать следующие значения:

Константа

Значение

Описание

REASON_PROGRAM

0

Эксперт прекратил свою работу, вызвав функцию ExpertRemove()

REASON_REMOVE

1

Программа удалена с графика

REASON_RECOMPILE

2

Программа перекомпилирована

REASON_CHARTCHANGE

3

Символ или период графика был изменен

REASON_CHARTCLOSE

4

График закрыт

REASON_PARAMETERS

5

Входные параметры были изменены пользователем

REASON_ACCOUNT

6

Активирован другой счет либо произошло переподключение к торговому серверу вследствие изменения настроек счета

REASON_TEMPLATE

7

Применен другой шаблон графика

REASON_INITFAILED

8

Обработчик OnInit() вернул ненулевое значение

REASON_CLOSE

9

Терминал был закрыт

Коды причины деинициализации эксперта можно также получить функцией UninitializeReason() или из предопределенной переменной _UninitReason.

Пример функций OnInit() и OnDeinit() для эксперта

input int fake_parameter=3;      // бесполезный параметр
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Получим номер билда, в котором скомпилирована программа
   Print(__FUNCTION__," Build #",__MQLBUILD__);
//--- Код причины перезагрузки можно получать и в OnInit()
   Print(__FUNCTION__," При перезагрузке эксперта можно получить код причины деинициализации");
//--- Первый способ получить код причины деинициализации
   Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- Второй способ получить код причины деинициализации   
   Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Первый способ получить код причины деинициализации
   Print(__FUNCTION__," Код причины деинициализации = ",reason);
//--- Второй способ получить код причины деинициализации
   Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- Третий способ получить код причины деинициализации   
   Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
  }
//+------------------------------------------------------------------+
//| Возвращает текстовое описания причины деинициализации            |
//+------------------------------------------------------------------+
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;
  }

Смотри также

OnInit, Функции обработки событий, Выполнение программ, События клиентского терминала, Причины деинициализации, Область видимости и время жизни переменных, Создание и уничтожение объектов