Создал button в oninit в нажатом состоянии, label в OnCharEvent ( по нажатию на кнопку показывался/удалялся (label например) )
Хочу сделать так чтобы при первоначальном включении индикатора показывался этот label
Проблема в том что сейчас если нажать на кнопку(2-й раз, тобишь удалить label) и смене ТФ она(label) повторно создастся
Но если создать кнопку не в oninit тогда я не знаю как сделать показ содержимого (в примере label) при первой загрузки.
Как решить данную проблему?
Могли бы вы разъяснить как и где правильно было бы создать кнопки
2) Случай не про первую загрузку, а про смену ТФ
Очень часто я вот так делаю, когда не могу решить проблему, но считаю это не правильным вариантом это - создание кнопки и label c показом на пределы графика,
а потом в OnCharEvent по нажатию просто подставляю нужные размеры, при повторном опять за границы
// ----------------------------------------------------------------------------- // Обработка события - удаление эксперта // ----------------------------------------------------------------------------- void OnDeinit(const int reason) { // если это смена ТФ, то ничего не удаляем if (reason == REASON_CHARTCHANGE) return;
Буратино дали 5 яблок. Два яблока он отдал Мальвине, еще два - Артемону. Сколько яблок осталось у Буратино? Ответ 1 - неправильный. Так и в Вашем примере. Иногда будет работать, а иногда - нет, все будет зависеть от захламленности оперативной памяти машины.
Буратино дали 5 яблок. Два яблока он отдал Мальвине, еще два - Артемону. Сколько яблок осталось у Буратино? Ответ 1 - неправильный. Так и в Вашем примере. Иногда будет работать, а иногда - нет, все будет зависеть от захламленности оперативной памяти машины.
Неправильно.
Почитайте документацию, или просто попробуйте.
У топикстартера проблема в том, что при смене символа на чарте происходит деинициализация и инициализация советника. Как ему поможет переменная static если ее значение не сохранится между событиями deinit и init?
Сохранится до тех пор, пока программа не завершит работу. Учите матчасть.
Не символа, а таймфрейма. При смене символа без рестарта программы ситуация не изменится, но это уже - не фича, а баг MQL4.
У топикстартера проблема в том, что при смене символа на чарте происходит деинициализация и инициализация советника. Как ему поможет переменная static если ее значение не сохранится между событиями deinit и init?
поведение static зависит от версии (4/5), конкретного билда и настроя разработчиков. Это поведение static внутри DLL овеяно соглашениями и организацией памяти
чтобы быть уверенным что значение в OnInit то-же что при OnDeinit (то есть восстановлено то что ранее сохранено) - надо использовать глобальные переменные или файлы или sqlite/иные_базы
но в конце концов никто не гарантирует что между OnDeinit/OnInit нет рестарта терминала или целой Ось, не стоит полагаться на милости от природы, если надо сохранять данные то стоит приложить к этому усилия
PS/ тут даже очерёдность OnInit/Deinit не всегда однообразно очевидна. Про Deinit - даже его сомнения в его наличии. Есть ощущение что при перезагрузке по причине перекомпиляции порою не происходит :-)

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Создал button в oninit в нажатом состоянии, label в OnCharEvent ( по нажатию на кнопку показывался/удалялся (label например) )
Хочу сделать так чтобы при первоначальном включении индикатора показывался этот label
Проблема в том что сейчас если нажать на кнопку(2-й раз, тобишь удалить label) и смене ТФ она(label) повторно создастся
Но если создать кнопку не в oninit тогда я не знаю как сделать показ содержимого (в примере label) при первой загрузки.
Как решить данную проблему?
Могли бы вы разъяснить как и где правильно было бы создать кнопки
2) Случай не про первую загрузку, а про смену ТФ
Очень часто я вот так делаю, когда не могу решить проблему, но считаю это не правильным вариантом это - создание кнопки и label c показом на пределы графика,
а потом в OnCharEvent по нажатию просто подставляю нужные размеры, при повторном опять за границы