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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
AndiSx
12
AndiSx  

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

int level = 1;

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

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

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

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

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

Yury Kirillov
5298
Yury Kirillov  
AndiSx:

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

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

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

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

int level = 1;

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

Лучше так:

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

TerminalClose(0);
Vladimir Karputov
Модератор
180735
Vladimir Karputov  

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

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" объявленная на глобальном программном уровне работает правильно.

Artyom Trishkin
Модератор
52249
Artyom Trishkin  
AndiSx:

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

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

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

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

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

AndiSx
12
AndiSx  
Всем спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий