Обсуждение статьи "Рецепты MQL5 - Элементы управления в подокне индикатора - Кнопки" - страница 7

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы так уверены что в вашей статье все идеально?
Очень приятно, что Вы её читали.
С удовольствием отвечу на все вопросы в соответствующей ветке.
===
Чтоб не было лишних заблуждений, я против Анатолия ни чего не имею! За статью ему респект! Но на вопросы ответить надо...
Извините, а я Вас случайно не отвлекаю от написания очередного учебного пособия или рецепта?
Если нет, то давайте продолжим обсуждение Вашей статьи про управление в подокне индикатора. Итак, Вы предлагаете массовое решение (или идею) как сделать удобное меню в индикаторе. Хорошо, цель статьи очень достойна! Но как "начинающему" программисту воспользоваться всем этим арсеналом? Куда разместить пользовательские функции? Продемонстрируйте на примере. А заодно объясните, что нужно исправить в коде чтобы использовать например, 5 кнопок? Считайте это вопрос начинающего.
Нет, не отвлекаете. Я пока ничего не пишу. Надо же иногда отдыхать хотя бы один день в году. Просто отдыхать не интересно, тем более долго. )
Это не массовое решение и я об этом не писал. Давайте Вы не будете приписывать то, чего не было. В начале обсуждения уже было озвучено, что это не универсальное решение, а частный случай. На мой взгляд хороший пример, чтобы попрактиковаться начинающему. А не получить готовое решение на халяву и побежать, разинув рот в широкой улыбке, на встречу солнцу. ) Понимаете? Мне бы такой простой и понятный пример в самом начале изучения программирования. Особенно, когда это первый язык программирования в жизни и до этого род деятельности всю жизнь был в абсолютно другой области, никак с этим не связанный.
Для того, чтобы сделать 5 кнопок, в данном случае, нужно изменить размеры массивов и исключить лишние элементы при объявлении массивов для названий объектов-кнопок, отображаемого текста в кнопках и состояний кнопок.
Массив состояний кнопок есть, поэтому по такому же принципу можно производить проверку, какая кнопка нажата и вместо простого изменения цвета кнопки, производить какое-то другое (нужное пользователю) действие. Это могут быть например торговые функции (и не только): удаление всех отложенных ордеров, закрытие всех позиций и т.д. Идей бесконечное множество. А если нет идей, то выбран не тот род деятельности. )
Для того, чтобы это реализовать нужно создать ещё один массив, который будет проинициализирован идентификаторами пользовательского перечисления (которое тоже нужно создать), например, с названием ENUM_SCRIPT. А идентификаторы тогда будут называться, например: SCRIPT_01 =0, SCRIPT_02 =2 и т.д. Также в цикле, при проверке нажата ли кнопка на панели, нужно будет определить, какой идентификатор привязан к нажатой кнопке и текущее состояние кнопки, а далее передать на исполнение программе соответствующую функцию.
Пример кода показывать специально не буду. Для начинающих пусть это будет домашним заданием. )
Внёс изменения, как Вы и сказали:
И вот что получил на экране:
Как исправить? (я новичёк)
Внёс изменения, как Вы и сказали:
И вот что получил на экране:
Как исправить? (я новичёк)
Вот так:
Отлично! Заработало.
Но вот как мои функции подцепить к кнопкам я не понял. Покажите на примере.
Отлично! Заработало.
Но вот как мои функции подцепить к кнопкам я не понял. Покажите на примере.
Хорошо, давайте продолжим начатую Вами игру в "новичка". )
На каком моменте застряли? Покажите попытку того, как поняли на текущий момент. Создайте перечисление с пятью идентификаторами и массив, элементам которого нужно назначить эти идентификаторы.
И что делать дальше?
И что делать дальше?
Вот такой массив нужен:
//--- Скрипты ENUM_SCRIPT buttons_scripts[NUMBER_BUTTONS_HEIGHT][NUMBER_BUTTONS_WIDTH]= { {SCRIPT_01,SCRIPT_02,SCRIPT_03,SCRIPT_04,SCRIPT_05} };
Затем нужно написать примерно вот такую функцию:
...и расположить эту функцию вот в этой части кода:
А дальше можно подумать, как оптимизировать код, если в этом есть необходимость. :)
Так у меня так и сделано.
Программа, в которой включается при запуске отслеживание, выключает его при выгрузке. А программа, которая осталась на графике и которой нужно отслеживание, проверяет, включено ли оно, и если отключено, то включает.
Желательно приводить свой вариант на примерах кода эксперта и индикатора из моего сообщения на предыдущей странице, чтобы исключить двоякость высказываний.
Нет необходимости постоянно проверять, не отключил ли кто отслеживание событий мыши. Точнее, если совсем от любых ситуаций защищаться, то можно и проверять, но, как по мне, это перебор.
Может, предложить разработчикам генерировать CHARTEVENT_CHART_CHANGE при изменении CHART_EVENT_MOUSE_MOVE? Тогда вообще можно будет элегантно восстанавливать необходимую настройку при работающем советнике.
А пока у меня получился вот такой вариант:
Сделал один индикатор, но с параметром: запускаем с EnableMouseDetect = true - управляет отслеживанием, false - просто принтит количество событий, если отслеживание включено.
------------------
Теперь еще подумал, и вынужден согласиться - такой вариант не подойдет. Если запустить сначала одну программу, отслеживающую мышь (она включит отслеживание), потом вторую (она увидит, что уже включено), а потом первую удалить, она отключит отслеживание, и вторая останется ни с чем. Т.е. нужно придумывать какой-то семафор, сигнализирующий о том, что отслеживание нужно.
А в свете проведенных тут исследований (про нагрузку на процессор) в таких костылях нет необходимости.
Так что предлагаю на голосование мое предложение разработчикам, и тему можно закрывать.