Просьба разработчикам, глобальные переменные - страница 2

 
stringo:

Спасибо.

То исправление, о котором идёт речь, откатили уже 5 февраля 2014 года. То есть, оно прожило всего 2 недели.

Тогда откатили по той самой причине, чтобы осталось поведение индикаторов 509 билда (а в 509 билде инициализация-деинициализация работали именно так). Вот посмотрите ещё одну ссылку из той же темы

https://www.mql5.com/ru/forum/148850/page58#901460 В результате этого запроса и был сделан откат

И это поведение не полгода, а уже почти 2 года

Также добавлю, что в пятёрке инициализация-деинициализация индикаторов производится точно так же.

Но это не из-за оглядки на 509 билд, а из-за архитектуры - индикатор удалялся из одного исторического кеша, потом добавлялся в другой исторический кеш (с другим символом-периодом)

 
stringo:

Спасибо.

То исправление, о котором идёт речь, откатили уже 5 февраля 2014 года. То есть, оно прожило всего 2 недели.

Тогда откатили по той самой причине, чтобы осталось поведение индикаторов 509 билда (а в 509 билде инициализация-деинициализация работали именно так). Вот посмотрите ещё одну ссылку из той же темы

https://www.mql5.com/ru/forum/148850/page58#901460 В результате этого запроса и был сделан откат

И это поведение не полгода, а уже почти 2 года

Да, то есть кто-то накуралесил писав свой индикатор в 509ом и вы дали возможность в этом случае поддерживать этот "bug"

Но согласитесь, с самого появления MQL4, такого поведения не было прдусмотренно и не описано в справке,

что даже противоречит опсанию поведения переменных в справке.

Проблема в том,то что вы этим ти использования переменных и отступаете от описания в документации

 
wlad:

На данный момент не существует никакой возможности сохранить состояние переменной  в индикаторах при смене периода графика и в других подобных случаях.

Возможность существует. Используйте временную глобальную переменную терминала https://docs.mql4.com/ru/globals/globalvariabletemp

При деинициализации индикатора по причине закрытия графика REASON_CHARTCLOSE или его удаления REASON_REMOVE обнуляйте соответствующую глобальную переменную

 
stringo:

Возможность существует. Используйте временную глобальную переменную терминала https://docs.mql4.com/ru/globals/globalvariabletemp

При деинициализации индикатора по причине закрытия графика REASON_CHARTCLOSE или его удаления REASON_REMOVE обнуляйте соответствующую глобальную переменную

Да, конечно, это не проблема,

но у меня массив, который бы надо сохранить.

Сохранять в файл, тоже костыль

 
wlad:

Проблема в том,то что вы этим ти использования переменных и отступаете от описания в документации

В справке явно написано

Загрузка и выгрузка индикаторов

Индикаторы загружаются в следующих случаях:

  • прикрепление индикатора к графику;
  • запуск терминала (если индикатор был прикреплен к графику перед предыдущим закрытием терминала);
  • загрузка шаблона (если в шаблоне указан прикрепленный к графику индикатор);
  • смена профиля (если индикатор прикреплен к одному из графиков профиля);
  • смена символа и/или периода графика, к которому прикреплен индикатор;
  • после удачной перекомпиляции индикатора, если данный индикатор был прикреплен к графику.
  • изменение входных параметров индикатора.

Индикаторы выгружаются в следующих случаях:

  • при откреплении индикатора от графика;
  • закрытие терминала (если индикатор был прикреплен к графику);
  • загрузка шаблона, если к графику прикреплен индикатор;
  • закрытие графика, к которому был прикреплен индикатор;
  • смена профиля, если индикатор прикреплен к одному из графиков сменяемого профиля;
  • смена символа и/или периода графика, к которому прикреплен индикатор;
  • изменение входных параметров индикатора.
 
AlexeyVik:
На мой взгляд, это всё частные случаи которые легко обрабатываются. Я вот не понимаю почему вы, вместо того чтобы решать такие пустяковые вопросы самостоятельно, требуете от разработчиков каких-то изменений которые могут затронуть интересы других пользователей? Одному надо массив сохранить, а другому обнулить... и кому должны угодить разработчики??? Может голосование провести? И не просто голосование, а с перечнем индикаторов в которых это надо и в которых это не надо???
Вы не правы. Если глобальные переменные не обнуляются автаматически, это дает более широкое поле для маневра. Кому надо - тот сам их обнулит в OnInit.
 
stringo:

Возможность существует. Используйте временную глобальную переменную терминала https://docs.mql4.com/ru/globals/globalvariabletemp

При деинициализации индикатора по причине закрытия графика REASON_CHARTCLOSE или его удаления REASON_REMOVE обнуляйте соответствующую глобальную переменную

В этот подходе возникают заморочки с тем, что в имени переменной нужно хранить еще торговый символ и таймфрейм чарта. А если индикатор работает на двух чартах с одинаковым торговым символом и таймфреймом, но разными параметрами, тогда ой.

 
wlad:

Да, конечно, это не проблема,

но у меня массив, который бы надо сохранить.

Сохранять в файл, тоже костыль

Я находил такой выход. Хранил глобальные переменные на чарте в виде текстовых графических объектов. С большим смещение за видимую область экрана для невидимости. И написал пару функций для загрузки их с чарта и сохранения на чарт.
 
RickD:

В этот подходе возникают заморочки с тем, что в имени переменной нужно хранить еще торговый символ и таймфрейм чарта. А если индикатор работает на двух чартах с одинаковым торговым символом и таймфреймом, но разными параметрами, тогда ой.

Можно привязываться к ChartID. Он для каждого графика - свой
 
У меня нет проблем с GV и с GV терминала, т.к. давно взял за правило иметь открытыми все графики от М1 до старшего, необходимого для расчётов. Потому нет надобности менять ТФ! 
Причина обращения: