Инициализация переменных на разных уровнях.

 
При переключении ТФ переменные и массивы, объявленные на глобальном уровне, инициализируются нулём.
Хотелось бы, чтобы этого не происходило. Пропадает смысл глобальности. Пусть пользователь сам решит, что, как и где инициализировать.
Метаквоты, ответьте пожалуйста, будет такая возможность?
Кажется раньше, в прежних билдах, с глобольностью было всё в порядке.
//+------------------------------------------------------------------+
//|                                               Checking_Array.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
 
#property indicator_chart_window
int    start;
int    variable;
int    Array[10];
string str1, str2;
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
 {
  start++;
  str1 = StringConcatenate ("variable = ", variable, " ; Array[9] = {", Array[1], ", ", Array[2], ", ", Array[3], ", ", Array[4], ", ", Array[5], ", ", Array[6], ", ", Array[7], ", ", Array[8], ", ", Array[9], "};");
  variable = 123456789;
  for (int i = 1; i <= 9; i++) Array[i] = i;
  str2 = StringConcatenate ("variable = ", variable, " ; Array[9] = {", Array[1], ", ", Array[2], ", ", Array[3], ", ", Array[4], ", ", Array[5], ", ", Array[6], ", ", Array[7], ", ", Array[8], ", ", Array[9], "};");
  Comment ("start = ", start, "\n", str1, "\n", str2);
  return(0);
 }
//+------------------------------------------------------------------+
Файлы:
 

Переключение ТФ - это по сути удаление и добавление эксперта на график заново. Так что с инициализацией все логично.

Если хотите, чтобы эксперт работал на нескольких таймфреймах, то используйте соответствующие функции. Такая возможность есть.

 
Это не советник. Это индикатор. На счёт логичности не понял. Где логика?
Может тогда будем обнулять и глобальные переменные для всеобщей логичности?
Да и вообще, с закрытием МТ4 форматировать все диски.
 
Zhunko:
Это не советник. Это индикатор. На счёт логичности не понял. Где логика?
Может тогда будем обнулять и глобальные переменные для всеобщей логичности?
Да и вообще, с закрытием МТ4 форматировать все диски.
Сохраняйте переменные в файл и будет Вам счастье
 
Sergey_Murzinov:
Zhunko:
Это не советник. Это индикатор. На счёт логичности не понял. Где логика?
Может тогда будем обнулять и глобальные переменные для всеобщей логичности?
Да и вообще, с закрытием МТ4 форматировать все диски.
Сохраняйте переменные в файл и будет Вам счастье
Не правильно это. Выпендриваться с файлами, когда это не нужно. Файлы тормозят процессы. Они нужны для долговременного сохранения. А для оперативных нужд есть ОЗУ.
Впрочем, так сейчас и делаю. Очень не удобно.
 
Zhunko:
Sergey_Murzinov:
Zhunko:
Это не советник. Это индикатор. На счёт логичности не понял. Где логика?
Может тогда будем обнулять и глобальные переменные для всеобщей логичности?
Да и вообще, с закрытием МТ4 форматировать все диски.
Сохраняйте переменные в файл и будет Вам счастье
Не правильно это. Выпендриваться с файлами, когда это не нужно. Файлы тормозят процессы. Они нужны для долговременного сохранения. А для оперативных нужд есть ОЗУ.
Впрочем, так сейчас и делаю. Очень не удобно.
А зачем Вам массивы с другого графика ? При переключении ТФ индикаторы удаляются с графика и вновь загружаются и инициализируются на новом ТФ.
С советниками ничего подобного не происходит, т. к. они не привязаны к ТФ. А может, и в советниках тоже самое ? Выходной, не проверишь, нет котировок.
 
Valmars:

А зачем Вам массивы с другого графика ? При переключении ТФ индикаторы удаляются с графика и вновь загружаются и инициализируются на новом ТФ.
С советниками ничего подобного не происходит, т. к. они не привязаны к ТФ. А может, и в советниках тоже самое ? Выходной, не проверишь, нет котировок.
У меня слишком много вычислений сильно грузит МТ4 и комп. И чтобы не вычислять всё каждый раз при переключениях ТФ, слежу за всеми ТФ одновременно и при переключениях копирую нужный массив в индикаторный буфер. Сейчас это делаю из файла.
 
Zhunko:
Valmars:

А зачем Вам массивы с другого графика ? При переключении ТФ индикаторы удаляются с графика и вновь загружаются и инициализируются на новом ТФ.
С советниками ничего подобного не происходит, т. к. они не привязаны к ТФ. А может, и в советниках тоже самое ? Выходной, не проверишь, нет котировок.
У меня слишком много вычислений сильно грузит МТ4 и комп. И чтобы не вычислять всё каждый раз при переключениях ТФ, слежу за всеми ТФ одновременно и при переключениях копирую нужный массив в индикаторный буфер. Сейчас это делаю из файла.


Попробуй использовать ГЛОБАЛЬНЫЕ переменные


// в модуле INIT
init()
{
if (GlobalVariableCheck("gGep_LimitBuy3_"+Symbol()) == false )
GlobalVariableSet("gGep_LimitBuy3_"+Symbol(),pLimitBuy3);


if (GlobalVariableCheck("gGep_LimitSell3_"+Symbol()) == false )
GlobalVariableSet("gGep_LimitSell3_"+Symbol(),pLimitSell3);

}

start()
{
lTPSell2 = GlobalVariableGet("gGep_LimitBuy3_"+Symbol());
lTPBuy2 = GlobalVariableGet("gGep_LimitSell3_"+Symbol());
}



1-й старт
init
if (GlobalVariableCheck("gGep_LimitBuy3_"+Symbol()) == false ) // перевнной нет
GlobalVariableSet("gGep_LimitBuy3_"+Symbol(),pLimitBuy3); // инициализируем ее

переключаем ТФ
вновь отрабатывает INIT

if (GlobalVariableCheck("gGep_LimitBuy3_"+Symbol()) == false ) // переменная есть
GlobalVariableSet("gGep_LimitBuy3_"+Symbol(),pLimitBuy3); // сюда не попадем

При этом в init отработка при переключении не позволит вновь инициализировать gGep_LimitBuy3


Работает быстрее чем чтение из файла

только один момент
если выключим машину - включим ПЕРЕМЕННАЯ останется! надо учитывать поэтому после запуска холодной машины принимаем решение
чисть глобальные переменные или нет

 
Юра, глобальные переменные не дают запомнить массив. Это не предусмотренно.
Надежда на Метаквотов.
 
Zhunko:
Юра, глобальные переменные не дают запомнить массив. Это не предусмотренно.
Надежда на Метаквотов.

Увы , Вадим...
организовать конечно можно попробовать
но боюсь это слишком сложно
к тому же возможно есть ограничения на кол гл переменных - не знаю
да и кол массивов возможно у тебя велико
а по сути небольшой массив/ы можно хранить и в глобальных


for ( i = 0; i <= КолЭлементов; i++ )
{
mas1 = "gMAS"+i
mas2 = "gMAS"+i

lTPS[ i ] = GlobalVariableGet(mas1+Symbol());
lTPB[ i ] = GlobalVariableGet(mas2+Symbol());

}
 
Ну если 100000000 элементов запомнит...
Кто печатать будет?
Причина обращения: