Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
для всех глобальных переменных
Вы путаете глобальные и предопределенные переменные.
Вы путаете глобальные и предопределенные переменные.
Они тоже глобальные, хоть и предопределенные.
Они тоже глобальные, хоть и предопределенные.
Не тоже, что следует из названия: они ОПРЕДЕЛЯЮТСЯ средой ПЕРЕД исполнением кода, а не объявляются и не изменяются в коде, как глобальные. Отсюда и вопрос: почему _UninitReason в индикаторах не предопределяется? И сколько раз выполнен код OnInit() до этого тут ни при чем.
Не тоже, что следует из названия: они ОПРЕДЕЛЯЮТСЯ средой ПЕРЕД исполнением кода, а не объявляются и не изменяются в коде, как глобальные. Отсюда и вопрос: почему _UninitReason в индикаторах не предопределяется? И сколько раз выполнен код OnInit() до этого тут ни при чем.
Потому, что OnInit() всегда выполняется уже в другом индикаторе (экземпляре программы) и про прошлый индикатор, в котором был OnDeinit(), ничего не знает.
Для эксперта OnInit() в некоторых случаях может выполняться в том же экземпляре, где был и OnDeinit(), поэтому информация сохраняется.
Т.е., для экспертов OnInit()/OnDeinit() могут вызываться и без выгрузки/загрузки программы, в отличие от индикаторов.
При смене символа или таймфрейма графика, к которому эксперт прикреплен, выгрузка и загрузка эксперта не производится. При этом последовательно вызываются обработчики OnDeinit() на старом символе/таймфрейме и OnInit() на новом символе/таймфрейме (если они есть), значения глобальных переменных и статических переменных не сбрасываются. Все события, поступившие для эксперта до завершения инициализации (функции OnInit()), пропускаются.
https://www.mql5.com/ru/docs/runtime/runningФорум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2017.11.30 09:48
Памятка
Потому, что OnInit() всегда выполняется уже в другом индикаторе (экземпляре программы) и про прошлый индикатор, в котором был OnDeinit(), ничего не знает
Как это ничего? Параметры, настройки и окно прошлого индикатора же знает. Почему бы не знать еще и причину деинициализации?
объект глобального класса
Какое отношение этот объект имеет к предопределенным переменным?
Какое отношение этот объект имеет к предопределенным переменным?
Не имеет значения, как они называются. Это просто переменные, значения некоторых из них даже можно менять пользователю.
Так вот эти переменные определяются и инициализируются, как обычные, на глобальном уровне запущенной копии EX5-программы. У каждого EX5 это свои внутренние переменные, как любые другие, заданные пользователем.
Не тоже, что следует из названия: они ОПРЕДЕЛЯЮТСЯ средой ПЕРЕД исполнением кода, а не объявляются и не изменяются в коде, как глобальные. Отсюда и вопрос: почему _UninitReason в индикаторах не предопределяется? И сколько раз выполнен код OnInit() до этого тут ни при чем.
Побольше КАПСЫ - поменьше здравого смысла? То что выделено красным - вообще не понятно, кому адресовано. Я про количество вызовов OnInit ничего не писал, но на всякий случай уточним, что OnInit всегда вызывается ядром 1 раз.
Вы задали довольно странный вопрос, потому что проверять причину деинициализации программы в обработчике её запуска - как минимум странно. Значение _UninitReason проставляется после того, как взведен флаг _IsStopped. До этого момента нет еще никакой деинициализации.
Можете продолжать упорствовать, но глобальные переменные от этого не перестанут быть глобальными, и не важно - описал ли их программист в MQL5 или сгенерировал компилятор.
Так вот эти переменные определяются и инициализируются, как обычные, на глобальном уровне запущенной копии EX5-программы
Откуда Вы знаете. В документации где-то написано?
OnInit всегда вызывается ядром 1 раз.
Как объясните тогда, что в OnInit() советника значение переменной _UninitReason - не 0 при перезапуске?
Откуда Вы знаете. В документации где-то написано?
Как объясните тогда, что в OnInit() советника значение переменной _UninitReason - не 0 при перезапуске?