1. С чего это? От вредных симптомов нужно изваляться, причем решительно.
2. Не следует называть переменные, массивы и прочие вещи созвучно или также ключевым словам языка (но уж очень в глаза бросается массив "Symbol", фиг потом в коде разберешь массив это или что иное).
1. Ну, сначала необходимо подлино установить принадлежность симптоматики к положительным или отрицательным проявлениям. На моем опыте бывали случае, когда пытался изменить значение глобальной переменной в функции, которая этого не должна была делать (проклятый копипаст). Несколько дней искал эту ошибку. С тех пор глобальные переменные использую в случаях, когда без них не обойтись в принципе.
2. Согласен. Но если они используются в пределах одной функции, меня это не парит. Глобальные же переменные с подобными именами, действительно, залог будущих путаниц.
Можно ли каким образом внутри OnTick определять срабатывание OnInit? Например, внутри OnTick объявлять статик переменную, которая хранит количество инициализаций советника (если на такое или аналогичное свойство присутствует в MQL5)?
Наверное, я параноик. Не люблю публичные (глобальные) переменные. Считаю это муветоном.
Глобальные переменные хотя бы видны издалека. А вот прятать внутрь функций серьезные накопительные переменные в статику - это есть путь заботливого рассыпания граблей для самого себя. Я лично впервые вижу, чтобы накопительный статический массив так запрятали внутрь функции. Это грабли фиерического размера.
Используйте классы - они глобальный уровень оставят чистым, скроют все кишки и избавят от костылей.
Можно ли каким образом внутри OnTick определять срабатывание OnInit? Например, внутри OnTick объявлять статик переменную, которая хранит количество инициализаций советника (если на такое или аналогичное свойство присутствует в MQL5)?
Количество срабатываний OnInit можно не только считать, но определять почему именно инициализация произошла (вопрос реализации это другой момент).
Считать то можно и в OnInit, другой вопрос, что мне эти данные нужны в другом событии (без применения глобальных переменных). Как ни крути, вопрос реализации. С OnDenit та же песня.
Классы никогда не писал. Если может кто помочь, буду признателен.
Нужно написать класс WorkSymbols.
Методы:
string GetSymbol[];
bool UpdateSymbols(inWorkSymbols);
bool UpdateSymbolsStatus();
int GetSymbolCount();
Извинясь, если просьба нахальная... Сам тоже буду пытаться разобраться.
Единственное, что мне здесь не нравится - изменение "на живую" размеров массива, содержащего рабочие данные. Вопрос к разработчикам, гарантировано ли сохранение ранее внесенных данных пользователя в изменяемом динамическом массиве при следующем условии?:
Единственное, что мне здесь не нравится - изменение "на живую" размеров массива, содержащего рабочие данные. Вопрос к разработчикам, гарантировано ли сохранение ранее внесенных данных пользователя в изменяемом динамическом массиве при следующем условии?:
Ставлю на то, что гарантируется. По крайней мере я постоянно на это расчитываю, и проблемы ни разу не возникло.
1. С чего это? От вредных симптомов нужно изваляться, причем решительно.
2. Не следует называть переменные, массивы и прочие вещи созвучно или также ключевым словам языка (но уж очень в глаза бросается массив "Symbol", фиг потом в коде разберешь массив это или что иное).
1. Ну, сначала необходимо подлино установить принадлежность симптоматики к положительным или отрицательным проявлениям. На моем опыте бывали случае, когда пытался изменить значение глобальной переменной в функции, которая этого не должна была делать (проклятый копипаст). Несколько дней искал эту ошибку. С тех пор глобальные переменные использую в случаях, когда без них не обойтись в принципе.
2. Согласен. Но если они используются в пределах одной функции, меня это не парит. Глобальные же переменные с подобными именами, действительно, залог будущих путаниц.
Все же повторю свой вопрос.
Можно ли каким образом внутри OnTick определять срабатывание OnInit?
Например, внутри OnTick объявлять статик переменную, которая хранит количество инициализаций советника (если на такое или аналогичное свойство присутствует в MQL5)?
Наверное, я параноик. Не люблю публичные (глобальные) переменные. Считаю это муветоном.
Глобальные переменные хотя бы видны издалека. А вот прятать внутрь функций серьезные накопительные переменные в статику - это есть путь заботливого рассыпания граблей для самого себя. Я лично впервые вижу, чтобы накопительный статический массив так запрятали внутрь функции. Это грабли фиерического размера.
Используйте классы - они глобальный уровень оставят чистым, скроют все кишки и избавят от костылей.
Все же повторю свой вопрос.
Можно ли каким образом внутри OnTick определять срабатывание OnInit?
Например, внутри OnTick объявлять статик переменную, которая хранит количество инициализаций советника (если на такое или аналогичное свойство присутствует в MQL5)?
Количество срабатываний OnInit можно не только считать, но определять почему именно инициализация произошла (вопрос реализации это другой момент).
С _UninitReason к примеру знакомы?
Нужно написать класс WorkSymbols.
Методы:
string GetSymbol[];
bool UpdateSymbols(inWorkSymbols);
bool UpdateSymbolsStatus();
int GetSymbolCount();
Извинясь, если просьба нахальная... Сам тоже буду пытаться разобраться.
Да, похоже, что зря объединили условие смены символа и таймфрейма.
Я тоже за то, чтобы их разделить на 2 условия. Тикет в сервисдеск уже поставил.
Вроде как сварганил. Критика приветствуется.
Единственное, что мне здесь не нравится - изменение "на живую" размеров массива, содержащего рабочие данные.
Вопрос к разработчикам, гарантировано ли сохранение ранее внесенных данных пользователя в изменяемом динамическом массиве при следующем условии?:
Единственное, что мне здесь не нравится - изменение "на живую" размеров массива, содержащего рабочие данные.
Вопрос к разработчикам, гарантировано ли сохранение ранее внесенных данных пользователя в изменяемом динамическом массиве при следующем условии?: