Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
pavlick_:
Хотя не выйдет ничего, ну пошлю я из индикатора сообщение, как я его в эксперте отловлю, когда подтверждение необходимо получить находясь в OnTimer?Принять сообщение в OnChartEvent() и сохранить результат в глобальной переменной.
Сообщения можно отсылать не только другим программам на одном графике, но даже и на другие графики.
Anatoli, я думал об этом, но это ведь огромная задержка, фигура будет мерцать (появляться и исчезать), не выход это.
Если гарантий порядка никаких нет, то можно было бы задействовать lparam или dparam (всё равно они не работают при CHARTEVENT_OBJECT_DELETE). Можно пердавать в них инициатора удаления (например, 0 - вручную, 1 - из мкл кода).
МК как всегда многословны, вопросы порядка - это большая тайна? Застопорился на этой мелочи и не могу продвинуться дальше.pavlick_:
Anatoli, я думал об этом, но это ведь огромная задержка, фигура будет мерцать (появляться и исчезать), не выход это.
Если гарантий порядка никаких нет, то можно было бы задействовать lparam или dparam (всё равно они не работают при CHARTEVENT_OBJECT_DELETE). Можно пердавать в них инициатора удаления (например, 0 - вручную, 1 - из мкл кода).
МК как всегда многословны, вопросы порядка - это большая тайна? Застопорился на этой мелочи и не могу продвинуться дальше.
Сделайте краткий пример и обозначьте проблему на результате его теста. Так понятнее будет, что подсказать, если есть проблема и есть ли вообще.
Здравствуйте.
Существуют ли основания/гарантии того, что следующие предположения верны:
Существует эксперт, который содержит обработчик OnChartEvent. Из другого скрипта сначала отправляем пользовательское событие через EventChartCustom, а потом удаляем графический объект с графика, что приводит к отправке обработчику CHARTEVENT_OBJECT_DELETE. Обработчик получит события в том порядке, который наблюдает скрипт (сначала пользовательское, а потом CHARTEVENT_OBJECT_DELETE).
https://www.mql5.com/ru/docs/eventfunctions/eventchartcustom
Внимательно читаем:
Возвращаемое значение
Возвращает true в случае удачной постановки пользовательского события в очередь событий графика – получателя события. В случае ошибки возвращает false, для получения кода ошибки используйте GetLastError().
Обращаем внимание на слово "очередь". Оно тут не случайно употребляется.
https://www.mql5.com/ru/docs/eventfunctions/eventchartcustom
Внимательно читаем:
Обращаем внимание на слово "очередь". Оно тут не случайно употребляется.
т.е. ответом на следующий вопрос будет да?
Выходные закончились, надеюсь получить ответ от сотрудников МК. Господа, допустим имеем:
1. Скрипт, который шлёт пользовательское событие графику через EventChartCustom() ("событие 1"), потом удаляет графический объект с графика (это генерирует CHARTEVENT_OBJECT_DELETE "собыие 2"), шлёт пользовательское событие через EventChartCustom() ("событие 3").
2. Эксперт, который содержит обработчик OnChartEvent().
Гарантируется ли то, что эксперт получит события в следующем порядке (и не в каком другом): "событие 1", "событие 2", "событие 3" ?т.е. ответом на следующий вопрос будет да?
Да, термин "очередь" определяет именно такой порядок доступа к данным.
А событие удаление объекта создастся гарантированно до выхода из функции ObjectDelete? Там нет асинхронности, связанной с перерисовкой чарта?
Эта функция лишь размещает команду на удаление объекта в очереди чарта. Согласно заявленному порядку, в очереди чарта она появится после размещения в той же очереди пользовательского события через EventChartCustom. А значит во входящей очереди событий эксперта события будут появляться согласно последовательности процессинга очереди чарта. Т.е. пользовательское событие и только потом событие удаления объекта.
До или после выхода из функции ObjectDelete это произойдет - не имеет отношения к поставленному вопросу (последовательность обработки). Хотя ассинхронность процессинга работы с объектами в данном случае конечно есть, т.е. для гарантии процессинга удаления объекта (процессинга очереди чарта) нужно вызвать ChartRedraw().
Эта функция лишь размещает команду на удаление объекта в очереди чарта. Согласно заявленному порядку, в очереди чарта она появится после размещения в той же очереди пользовательского события через EventChartCustom. А значит во входящей очереди событий эксперта события будут появляться согласно последовательности процессинга очереди чарта. Т.е. пользовательское событие и только потом событие удаления объекта.
До или после выхода из функции ObjectDelete это произойдет - не имеет отношения к поставленному вопросу (последовательность обработки). Хотя ассинхронность процессинга работы с объектами в данном случае конечно есть, т.е. для гарантии процессинга удаления объекта (процессинга очереди чарта) нужно вызвать ChartRedraw().
Ну началось, асинхронность, постановка в очередь )). Скрипт делает примерно это:
EventChartCustom(); // событие 1
ObjectDelete(); // событие 2
EventChartCustom(); // событие 3
Раз ObjectDelete() это постановка в очередь, т.е. функция не дожидается фактического удаления (возможно), то событие 3 может вполне оказаться раньше события 2 (их приём в OnChartEvent). Может и не так, но с ваших слов как-то так получается.