Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А все, спасибо за ответы! Пока Вы мнее здесь писали, я решил проблему, таким способом:
А ну, теперь правда другая проблема появилась. Индикатор после переключения графика теперь перестал рисовать линии.
Ну я постараюсь решить эту проблему.. ))
А все, спасибо за ответы! Пока Вы мнее здесь писали, я решил проблему, таким способом:
UninitializeReason() = reason
:)
Здравствуйте! Написал индикатор. Все работает хорошо. Да вот только при переключении таймфрейма, все зарисованные объекты исчезают с графика.
Вопрос , конечно же, может быть банальным. Но на просторах интернета и данного форума ответа я все же не нашел..
Пробовал функцию ChartRedraw(); , вставлял и в начале и в конце. - не помогает.
методом логического тыка задача решена за 12 часов.
1 сначала вызывается деинит старого индикатора потом инит нового, процесс асинхронный то есть работа производится одновременно
разница между старта деинит и инит примерно от 20 до 100 микро секунд, до миллисекунды недотягивает
2 деинит большого количества прямоугольников у меня занимает 3 секунды
3 тоесть инит и калькулейт отрабатывают раньше чем деинит старого индикатора
4 при повышении таймфрейма иногда деинит успевает а при понижении точно нет, почему? читаем дальше
5 я сначала подумал что деинит получает переменные от нового индикатора если деинит медленный, и сделал задержку в 5 секунд, проверил переменную до задержки и после
она одинаковая и отличается от новой переменной инита, тоесть пока не завершится деинит старые переменные остаются старыми
так почему же не рисуются новые обьекты, так потому что история не загрузилась и обьекты некуда ставить
решение костыль
и prev_calculated = 0 пока не загрузится история, вариантов проверки синхронности истории масса, любой вариант подойдет.
все, обьекты рисуются. идем дальше. обьекты все еще не удаляются при том что запрос на удаление прошел, и даже ответ получен что фигура удалена
все запросы на создание и удаление обьекта встают в очередь, я дожидаюсь удаление обьекта получаю подтверждение этому но он на новом таймфрейме все равно есть.
и тут меня осенило, а что если график не меняет таймфрейм а удаляется и создается новый, все обьекты и так удаляются на старом, и вот появляется новый график синхронизируется история а это время
в очередь встают остатки деинита и ВНИМАНИЕ!!! все обьекты со старого таймфрейма запомненные при удалении графика встают в очередь на создание обьектов на новом графике после запроса удаления этих обьектов деинитом, тоесть сначала удаляется воздух апротом создаются обьекты из памяти о старом графике, итого очередь такая
деинит - запоминание обьектов - новый график - запрос на удаление обьектов де инитом - постановка команды удаление в очередь - синхронизация нового графика по истории - постановка команды создания обьектов на новом графике,
так как процессы асинхронны то очередь будет меняться но удаление всегда будет до возврата истории обьектов со старого графика а запоминаются они до удаления в момент смены таймфрейма
и вот я пробую свою теорию, ставлю задержку де инита
и уаля, все удаляется, то есть я жду пока история обьектов перенесется на новый график и только после этого удаляю
заключение, смена таймфрейма удаляет график и все что на нем и создает новый график с переносом всего что было на старом и только после завершения переноса возможно что то удалить,
но есть и подвох, если история таймфрейма была то новый график появляется сразу а если небыло то пока не завершится де инит а это у меня 5+3 сек график не загружается
простое решение это 2 раза делать удаление, сложное это проверить пока не синхронизируется новый график с историей ожидать, а если синхронизация не начилась то удалять потом ждать потом проверяте если снова появилось то снова удалять
ПС: подвох в том что нигде не описан порядок действий и приходится догадываться, но адекватного решения не найдено так как при отсутствии истории другого таймфрейма я тупо вешаю систему либо по времини либо по событию ожидания синхронизации истории.
ПС: подвох в том что нигде не описан порядок действий и приходится догадываться, но адекватного решения не найдено
https://www.mql5.com/ru/code/18138