![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Звучит, как глупость. Таймеры копий индикатора никакого отношения друг к другу не имеют.
500 лет назад для большинства людей утверждение, что Земля шарообразная, звучало тоже как глупость.
Хорошо, я сейчас переделаю этот пример под таймер.
Хорошо, я сейчас переделаю этот пример под таймер.
Ну где же она однозначная.
Поюзайте этот примитивный пример. И поймете "однозначность" при переключения ТФ.
В этом примере в OnInit создается объект и координатами текущего времени и цены. В OnCalculate этот объек движется вместе с ценой.
В OnDeinit он просто ( что логично) удаляется.
При переключении ТФ выясняется, что объект то появляется, то и исчезает.
Почему так происходит?
Потому, что иногда OnDeinit старого ТФ удаляет то что уже создано в OnInit нового ТФ. Это что не баг! Что должен должен думать программист, который создал этот пример и не читал данной ветки?
Вы хотите показать, что EvenKillTimer в старом деинит в состоянии повлияет на EventSetTimer в новом init?
Был не прав. Извиняюсь. Лажанулся.
Действительно, таймер нового ТФ оказался живучим, не убиваемым EventKillTimer старого ТФ. :)
В Вашем примере графический объект присутствует на всех ТФ, просто нужно изменить масштаб чтобы его увидеть.
Нет, не верно. Он удаляется иногда Деюнитом старого ТФ.
Действительно, таймер нового ТФ оказался живучим, не убиваемым EventKillTimer старого ТФ. :)
Нет, не верно. Он удаляется иногда Деюнитом старого ТФ.
Для принудительного обновления графических объектов используйте команду на перерисовку графика ChartRedraw().
Добавьте в Init и Deinit вот это:
ChartRedraw();
Добавьте в Init и Deinit вот это: ChartRedraw();
Попробовал. Это не меняет ситуации, да и не может менять, если объект уже удален, ChartRedraw() его не воскресит.
Я не исключаю, Сергей, что эта "особенность" неоднозначности последовательности выполнения OnInit нового ТФ и OnDeinit старого ТФ может зависить от железа. Т.к. разные потоки, разные процессоры с разной архитектурой сопроцессоров - это все сложно и я в этом не силен. Но то что эта "особенность" проявляется на моем компьютере и на компьютере других судя по этой ветке, то это точно.
То есть, Вы хотите сказать что пробовали этот пример на своем компьютере и при переключении ТФ вы всегда видели объект?
Я кстати заметил, что если свечи увеличить до максимального размера, т.е. на экране мин кол-во баров, то очень тяжело добиться исчезновение объекта. Мне приходилось переключать ТФ раз 30 чтобы произошло удаление объекта ( т.е. Деюнит сработал позже Юнита). Видимо на эту "особенность" влияет производительность потоков. Это как гипотеза или мысть вслух.
Очень рад что мой бред оказался бредом
:) Это был не бред, а лишь гипотеза.
Спасибо за гипотезу. Благодаря ей и fxsaber у меня произошел новый виток осознания, что такое копия индикатора. Просто таймер принадлежит этой копии и умирает вместе с ней даже при смене ТФ. А объекты живут сами по себе, даже если созданы копией индикатора, они принадлежат только окну. Теперь я понимаю, что прописывать в Деюните EventKillTimer смысла никакого нет, все равно таймер умрет если уже произошло обращение к Деюниту.
Т.е. вся проблема - это добавление ОДНОЙ строки в начале любого индикатора.
Код библиотеки