OnInit, OnDeinit и iCustom

 
Только что заметил такую неприятную вещь, если менять период графика то в эксперте проходит инициализация/деинициализация но в подключённом индикаторе через iCustom инициализация/деинициализация не проходит если повторно менять период графика. Тоже самое происходит если менять параметры в эксперте и применять.
Как проще всего заставить индикатор через iCustom инициализироваться/деинициализироваться всегда вместе с  экспертом.
P.S. Индикатор подключен через ресурс.
 
Происходит вызов OnInit(), но не сразу при переключении, а на первом тике, или вообще когда-то там, зависит от условий при которых вызывается индикатор.
 
Dmitry Fedoseev:
Происходит вызов OnInit(), но не сразу при переключении, а на первом тике, или вообще когда-то там, зависит от условий при которых вызывается индикатор.

Ещё раз повторюсь: iCustom инициализация/деинициализация не проходит если повторно менять период графика.

Вот логи, можете проверить:

0       17:00:08.326    Expert Test_iCustom_init EURUSD,H1: loaded successfully
0       17:00:08.336    Test_iCustom_init EURUSD,H1: ----------Init ---------------- expert: 
0       17:00:08.336    Test_iCustom_init EURUSD,H1: ----- Indicator Call ----------
0       17:00:08.354    Bulls.ex4 EURUSD,H1: ----------Init ---------------- idicator: // Первый раз все ок
0       17:00:08.356    Test_iCustom_init EURUSD,H1: initialized
0       17:00:27.635    Test_iCustom_init EURUSD,H1: uninit reason 3
0       17:00:27.635    Test_iCustom_init EURUSD,H1: ----------DeInit ---------------- expert: 
0       17:00:27.731    Test_iCustom_init EURUSD,M30: ----------Init ---------------- expert: 
0       17:00:27.731    Test_iCustom_init EURUSD,M30: ----- Indicator Call ----------
0       17:00:27.761    Bulls.ex4 EURUSD,M30: ----------Init ---------------- idicator: // Первый раз все ок
0       17:00:27.764    Test_iCustom_init EURUSD,M30: initialized
0       17:00:31.104    Test_iCustom_init EURUSD,M30: uninit reason 3
0       17:00:31.104    Test_iCustom_init EURUSD,M30: ----------DeInit ---------------- expert: 
0       17:00:31.105    Test_iCustom_init EURUSD,H1: ----------Init ---------------- expert: 
0       17:00:31.105    Test_iCustom_init EURUSD,H1: ----- Indicator Call ----------
0       17:00:31.106    Test_iCustom_init EURUSD,H1: initialized // повторно, здесь должен быть Init idicator - нету
0       17:00:35.400    Test_iCustom_init EURUSD,H1: uninit reason 3
0       17:00:35.400    Test_iCustom_init EURUSD,H1: ----------DeInit ---------------- expert: 
0       17:00:35.401    Test_iCustom_init EURUSD,M30: ----------Init ---------------- expert: 
0       17:00:35.401    Test_iCustom_init EURUSD,M30: ----- Indicator Call ----------
0       17:00:35.405    Test_iCustom_init EURUSD,M30: initialized // повторно, здесь должен быть Init idicator - нету
0       17:00:53.882    Test_iCustom_init EURUSD,M30: uninit reason 3
0       17:00:53.882    Test_iCustom_init EURUSD,M30: ----------DeInit ---------------- expert: 
0       17:00:53.981    Test_iCustom_init EURUSD,H4: ----------Init ---------------- expert: 
0       17:00:53.981    Test_iCustom_init EURUSD,H4: ----- Indicator Call ----------
0       17:00:53.999    Bulls.ex4 EURUSD,H4: ----------Init ---------------- idicator: // Первый раз H4 все ок
0       17:00:54.001    Test_iCustom_init EURUSD,H4: initialized
 

Если вернуть назад таймфрейм, то не происходит. Потому что индикатор не выгрузился еще. Зачем его заново инициализировать, если с ним все нормально?

Но если непременно надо, добавить индикатору еще один параметр-пустышку и передавать в него какое-нибудь уникальное число при инициализации эксперта. Но зачем? 

 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Print("----------Init ---------------- expert: ");
   Print("----- Indicator Call ----------");
   iCustom(NULL,0,"Bulls.ex4",2,6);
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Print("----------DeInit ---------------- expert: ");
  }

В индикаторе проста Print в OnInit добавил.

Print("----------Init ---------------- idicator: "); 
 
Но через несколько минут индикатор все-таки выгружается. Если переключиться назад через несколько минут, то вызывается инит.
 
Dmitry Fedoseev:

Если вернуть назад таймфрейм, то не происходит. Потому что индикатор не выгрузился еще. Зачем его заново инициализировать, если с ним все нормально?

Но если непременно надо, добавить индикатору еще один параметр-пустышку и передавать в него какое-нибудь уникальное число при инициализации эксперта. Но зачем? 

Я понял, тогда поставлю параметр-пустышку. Мне индикатор рисуется от массивов, без инициализация/деинициализация не происходит сброс массивов.
Спасибо!

 
Dmitry Fedoseev:
Но через несколько минут индикатор все-таки выгружается. Если переключиться назад через несколько минут, то вызывается инит.

Да, тоже только что заметил. Но мне надо было сразу и эта проблема решена. Еще раз спасибо!

Причина обращения: