Что случилось с глобальными переменными?

 

Есть такой код:

int level = 1;

void OnTick()
{
   Print("!!!!! level: ",level);
   level++;

   Print("!!!!! level: ",level);
   level++;
   
   Print("!!!!! level: ",level);
   level++;
}

При запуске, оказывается, что этот код делает не то что предполагалось:

Как видите, изначально level равно не 1, а какому-то рандомному числу, от него уже идет инкрементация.

Не понимаю в чем дело. Как исправить данную проблему?

 
AndiSx:

Есть такой код:

При запуске, оказывается, что этот код делает не то что предполагалось:

Как видите, изначально level равно не 1, а какому-то рандомному числу, от него уже идет инкрементация.

Не понимаю в чем дело. Как исправить данную проблему?

int level = 1;

void OnTick()
{
   Print("!!!!! level: ",level);
      
   ExpertRemove();
}
 

Лучше так:

Print("!!!!! level: ",level);

TerminalClose(0);
 

Пожалуйста указывайте терминал, билд и операционную систему - эти данные - первые три строчки из вкладки "Журнал" после запуска терминала:

2018.04.24 07:03:44.775 MetaTrader 5 x64 build 1795 started (MetaQuotes Software Corp.)
2018.04.24 07:03:44.777 Windows 10 (build 16299) x64, IE 11, UAC, Intel Core i3-3120M  @ 2.50GHz, Memory: 4708 / 8077 Mb, Disk: 287 / 464 Gb, GMT+2
2018.04.24 07:03:44.777 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075


Не жалейте букв и чернил, сразу составляйте наиболее полный код:

//+------------------------------------------------------------------+
//|                                 Test Global Program Variable.mq5 |
//|                      Copyright © 2018, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//---
int level=1;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Print(__FUNCTION__,", ",Symbol()," ",EnumToString(Period())," !!!!! level: ",level);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Print(__FUNCTION__,", ",Symbol()," ",EnumToString(Period())," !!!!! level: ",level);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Print("!!!!! level: ",level);
   level++;

   Print("!!!!! level: ",level);
   level++;

   Print("!!!!! level: ",level);
   level++;
  }
//+------------------------------------------------------------------+


И вывод во вкладку "Эксперты": изначально эксперт запущен на USDCAD,M15, затем был сменён таймфрейм графика на M5. После этого был заменён символ: с USDCAD на AUDJPY и в конце эксперт был удалён вручную с графика:

2018.04.24 07:11:01.968 OnInit, USDCAD PERIOD_M15 !!!!! level: 1
2018.04.24 07:11:08.710 !!!!! level: 1
2018.04.24 07:11:08.710 !!!!! level: 2
2018.04.24 07:11:08.710 !!!!! level: 3
2018.04.24 07:11:08.756 !!!!! level: 4
2018.04.24 07:11:08.756 !!!!! level: 5
2018.04.24 07:11:08.756 !!!!! level: 6
2018.04.24 07:11:09.507 OnDeinit, USDCAD PERIOD_M15 !!!!! level: 7
2018.04.24 07:11:09.645 OnInit, USDCAD PERIOD_M5 !!!!! level: 7
2018.04.24 07:11:14.111 !!!!! level: 7
2018.04.24 07:11:14.111 !!!!! level: 8
2018.04.24 07:11:14.111 !!!!! level: 9
2018.04.24 07:11:18.195 OnDeinit, USDCAD PERIOD_M5 !!!!! level: 10
2018.04.24 07:11:19.148 OnInit, AUDJPY PERIOD_M5 !!!!! level: 10
2018.04.24 07:11:19.713 !!!!! level: 10
2018.04.24 07:11:19.713 !!!!! level: 11
2018.04.24 07:11:19.713 !!!!! level: 12
2018.04.24 07:11:20.525 !!!!! level: 13
2018.04.24 07:11:20.525 !!!!! level: 14
2018.04.24 07:11:20.525 !!!!! level: 15
2018.04.24 07:11:20.697 !!!!! level: 16
2018.04.24 07:11:20.697 !!!!! level: 17
2018.04.24 07:11:20.697 !!!!! level: 18
2018.04.24 07:11:22.581 OnDeinit, AUDJPY PERIOD_M5 !!!!! level: 19

Переменная "level" объявленная на глобальном программном уровне работает правильно.

 
AndiSx:

Есть такой код:

При запуске, оказывается, что этот код делает не то что предполагалось:

Как видите, изначально level равно не 1, а какому-то рандомному числу, от него уже идет инкрементация.

Не понимаю в чем дело. Как исправить данную проблему?

В журнал выводятся не все записи. Для ускорения. Чтобы видеть все записи, откройте журнал во встроенном просмотровщике из контекстного меню правой кнопки мыши.

 
Всем спасибо.
Причина обращения: