Значение глобальной переменной в init ()

 

Вот простой советник, демонстрирующий ошибку. Или может я чего не понимаю, просветите.

int num=0;
string Sym1="a";
string Sym2="b";
string Sym3="";
string Sym4="";
 
string massiv[4];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if(Sym1 != "") {
      num++;
      massiv[num-1]=Sym1;
   }
   if(Sym2 != "") {
      num++;
      massiv[num-1]=Sym2;
   }
   if(Sym3 != "") {
      num++;
      massiv[num-1]=Sym3;
   }
   if(Sym4 != "") {
      massiv[num-1]=Sym4;
   }
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   for(int i = 0; i < 4; i++) {
      Print("massiv[", i, "]=", massiv[i]);
   }
//----
   return(0);
  }

Вот результат его работы:

11:26:16 TTest GBPUSD,H1: loaded successfully
11:26:23 TTest GBPUSD,H1: initialized
11:26:30 TTest GBPUSD,H1: massiv[0]=a
11:26:30 TTest GBPUSD,H1: massiv[1]=b
11:26:30 TTest GBPUSD,H1: massiv[2]=
11:26:30 TTest GBPUSD,H1: massiv[3]=
11:26:32 TTest GBPUSD,H1: massiv[0]=a
11:26:32 TTest GBPUSD,H1: massiv[1]=b
11:26:32 TTest GBPUSD,H1: massiv[2]=
11:26:32 TTest GBPUSD,H1: massiv[3]=
11:26:33 TTest GBPUSD,H1: deinitialized
11:26:33 TTest GBPUSD,H1: uninit reason 3
11:26:37 TTest GBPUSD,M15: initialized
11:26:37 TTest GBPUSD,M15: massiv[0]=a
11:26:37 TTest GBPUSD,M15: massiv[1]=b
11:26:37 TTest GBPUSD,M15: massiv[2]=a
11:26:37 TTest GBPUSD,M15: massiv[3]=b
11:26:38 TTest GBPUSD,M15: massiv[0]=a
11:26:38 TTest GBPUSD,M15: massiv[1]=b
11:26:38 TTest GBPUSD,M15: massiv[2]=a
11:26:38 TTest GBPUSD,M15: massiv[3]=b

Т.е. значение переменной num остается такое же, как до деинициализации. Билд 211 от 15.10.07

Я понимаю, что можно в начале init обнулить переменную, но все же.

 
Вы же сменили таймфрейм или символ ( 11:26:33 TTest GBPUSD,H1: uninit reason 3) , поэтому значения переменных остались прежними.
 
Rosh:
Вы же сменили таймфрейм или символ ( 11:26:33 TTest GBPUSD,H1: uninit reason 3) , поэтому значения переменных остались прежними.


"Каждая присоединенная к графику программа завершает работу функцией deinit(). Функция deinit() запускается также при завершении работы клиентского терминала, при закрытии графика, непосредственно перед сменой финансового инструмента и/или периода графика, при удачной перекомпиляции программы, при смене входных параметров, а также при смене счета." - это из справки.

11:26:33 TTest GBPUSD,H1: deinitialized
11:26:33 TTest GBPUSD,H1: uninit reason 3
11:26:37 TTest GBPUSD,M15: initialized

Получается, что советник сначала завершает свою работу, а потом загружается снова, но со страрыми значениями переменных. Я возможно что-то упускаю. Поясните, пожалуйста, на пальцах, чтоб было понятнее.

 
При смене таймфрейма эксперт не выгружается, а просто деинициализируется. Строки loaded после unint нет.
 
Renat:
При смене таймфрейма эксперт не выгружается, а просто деинициализируется. Строки loaded после unint нет.

Ясно, спасибо.
Причина обращения: