Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В MT5-индикаторах OnInit не может вызваться повторно.
Это что-то должно значить? В документации к _UninitReason и UninitializeReason() нет исключений индикаторов, как обычно в документации к другим функциям. Терминал же как-то загружает повторно индикатор во всех этих случаях. В чем проблема запомнить код деинициализации и проинициализировать его при повторном запуске? Ну или документацию поправьте.
Терминал же как-то загружает повторно индикатор
Нет. Смотрите static-переменную в исходнике.
Нет. Смотрите static-переменную в исходнике.
Как это нет? Закрываете терминал с индикатором на графике, а открываете - уже без него?
Как это нет? Закрываете терминал с индикатором на графике, а открываете - уже без него?
OnInit запускается всего один раз - это значит, что EX5-код запускается единожды. Так называемые перезагрузки - это повторный полноценный запуск EX5, который никакого отношения не имеет к ранее запущенному EX5.
ЗЫ static-переменная i всегда будет рапечатываться нулевой.OnInit запускается всего один раз - это значит, что EX5-код запускается единожды. Так называемые перезагрузки - это повторный полноценный запуск EX5, который никакого отношения не имеет к ранее запущенному EX5.
ЗЫ static-переменная i всегда будет рапечатываться нулевой.Как системные переменные связаны со степенью "полноценности" запуска кода EX5? Параметры индикатора, например, имеют отношение к ранее запущенному EX5: загружаются такие же. Почему нельзя также поступить с системными переменными?
Как системные переменные связаны со степенью "полноценности" запуска кода EX5? Параметры индикатора, например, имеют отношение к ранее запущенному EX5: загружаются такие же. Почему нельзя также поступить с системными переменными?
Странно, что у нас с Вами такая пропасть в понимании. У меня не получается объяснить.
У меня не получается объяснить.
Ничего страшного, не только у Вас. А казалось бы, чего проще: либо работает по документации, либо менять документацию. Например: "работает только для неполноценных запусков" с объяснением, какие полноценные, какие - нет.
либо работает по документации, либо менять документацию
Оно как раз-таки работает по документации. Вы ее либо не читали, либо читали по диагонали.
Там явно сказанно, что оно для эксперта предназначено.
https://www.mql5.com/ru/docs/constants/namedconstants/uninit
Причины деинициализации
Коды причины деинициализации эксперта, возвращаемые функцией UninitializeReason().
Там явно сказанно, что оно для эксперта предназначено.
Согласен, не заметил, если глубоко покопаться, косвенно указано. Обычно сразу в функциях пишут, что работает только там-то.
Почему _UninitReason и UninitializeReason() в событии OnInit() индикатора всегда возвращает 0 независимо от причины деинциализации?
Вопрос не понятен. В событии OnInit до деинициализации дело еще не дошло. Данный флаг заполняется осмысленным значением непосредственно перед вызовом OnDeinit (после того как программу тем или иным способом попросили завершиться) и может быть также получен как параметр обработчика OnDeinit. А до того момента там просто лежит 0, как значение по-умолчанию для всех глобальных переменных.