_UninitReason и UninitializeReason() в индикаторах. - страница 2

 
fxsaber #:
В MT5-индикаторах OnInit не может вызваться повторно.

Это что-то должно значить? В документации к _UninitReason и UninitializeReason() нет исключений индикаторов, как обычно в документации к другим функциям. Терминал же как-то загружает повторно индикатор во всех этих случаях. В чем проблема запомнить код деинициализации и проинициализировать его при повторном запуске? Ну или документацию поправьте.

 
Ivan Titov #:

Терминал же как-то загружает повторно индикатор

Нет. Смотрите static-переменную в исходнике.

 
fxsaber #:

Нет. Смотрите static-переменную в исходнике.

Как это нет? Закрываете терминал с индикатором на графике, а открываете - уже без него?

 
Ivan Titov #:

Как это нет? Закрываете терминал с индикатором на графике, а открываете - уже без него?

OnInit запускается всего один раз - это значит, что EX5-код запускается единожды. Так называемые перезагрузки - это повторный полноценный запуск EX5, который никакого отношения не имеет к ранее запущенному EX5.

ЗЫ static-переменная i всегда будет рапечатываться нулевой.
 
fxsaber #:

OnInit запускается всего один раз - это значит, что EX5-код запускается единожды. Так называемые перезагрузки - это повторный полноценный запуск EX5, который никакого отношения не имеет к ранее запущенному EX5.

ЗЫ static-переменная i всегда будет рапечатываться нулевой.

Как системные переменные связаны со степенью "полноценности" запуска кода EX5? Параметры индикатора, например, имеют отношение к ранее запущенному EX5: загружаются такие же. Почему нельзя также поступить с системными переменными?

 
Ivan Titov #:

Как системные переменные связаны со степенью "полноценности" запуска кода EX5? Параметры индикатора, например, имеют отношение к ранее запущенному EX5: загружаются такие же. Почему нельзя также поступить с системными переменными?

Странно, что у нас с Вами такая пропасть в понимании. У меня не получается объяснить.

 
fxsaber #:
У меня не получается объяснить.

Ничего страшного, не только у Вас. А казалось бы, чего проще: либо работает по документации, либо менять документацию. Например: "работает только для неполноценных запусков" с объяснением, какие полноценные, какие - нет.

 
Ivan Titov #:
либо работает по документации, либо менять документацию

Оно как раз-таки работает по документации. Вы ее либо не читали, либо читали по диагонали.

Там явно сказанно, что оно для эксперта предназначено.

https://www.mql5.com/ru/docs/constants/namedconstants/uninit

Причины деинициализации

Коды причины деинициализации эксперта, возвращаемые функцией UninitializeReason().

 
Vladislav Boyko #:

Там явно сказанно, что оно для эксперта предназначено.

Согласен, не заметил, если глубоко покопаться, косвенно указано. Обычно сразу в функциях пишут, что работает только там-то.

 
Ivan Titov:
Почему _UninitReason и UninitializeReason() в событии OnInit() индикатора всегда возвращает 0 независимо от причины деинциализации?

Вопрос не понятен. В событии OnInit до деинициализации дело еще не дошло. Данный флаг заполняется осмысленным значением непосредственно перед вызовом OnDeinit (после того как программу тем или иным способом попросили завершиться) и может быть также получен как параметр обработчика OnDeinit. А до того момента там просто лежит 0, как значение по-умолчанию для всех глобальных переменных.