Обсуждение статьи "Сделайте торговые графики лучше с интерактивным графическим интерфейсом на основе MQL5 (Часть II): Перемещаемый интерфейс (II)"

 

Опубликована статья Сделайте торговые графики лучше с интерактивным графическим интерфейсом на основе MQL5 (Часть II): Перемещаемый интерфейс (II):

Раскройте потенциал динамического представления данных в своих торговых стратегиях и утилитах с помощью нашего подробного руководства по созданию перемещаемых графических интерфейсов в MQL5. Погрузитесь в фундаментальные принципы объектно-ориентированного программирования и узнайте, как легко и эффективно разрабатывать и использовать один или несколько перемещаемых графических интерфейсов на одном графике.

Теперь создадим панель с нуля, используя файл .mqh. При необходимости позаимствуем фрагменты нашего предыдущего кода. Чтобы эффективно организовать наши файлы, создадим новую папку Movable Dashboard MQL5.

Далее создадим два новых файла: Movable_Dashboard_MQL5.mq5 будет служить нашим основным файлом .mq5, а в файле GUI_Movable.mqh будет храниться код для перемещения панели. Правильное присвоение имен этим файлам имеет решающее значение для удобного управления несколькими файлами.

С помощью этих шагов мы повторили то, чего достигли в части 1, используя более эффективный код. Обратите внимание на значительную разницу в объеме кода, используемого в основном файле .mq5 в частях 1 и 2. И самое приятное то, что дальше будет только лучше.


Результат:

Рис. 2. Простая перемещаемая панель

Автор: Kailash Bai Mina

 

Привет,

Я как-то пропустил ваше второе сообщение; я только вчера увидел его. Хорошая работа. Я взял вашу основу и расширил ее, чтобы сделать приборную доску более функциональной. Я добавил свою функцию CreatePael и скопировал дополнительные параметры в ваш Creat DashBoard, чтобы позволить установить цвет фона, цвет и стиль бодера. Прилагаю снимок экрана, файлы mq5 и mqh.

Позвольте предложить вам следующий шаг. Создайте класс Text, содержащий функции label, button, text box и т. д. Пользователи могут использовать класс Test напрямую, но, что более важно, ваш класс Moveable DashBoard может наследовать класс text, и тогда каждому экземпляру будут доступны все текстовые функции.Когда определенная функция будет размещена на приборной панели, она будет связана с перемещением приборной панели. Я прилагаю заголовочный файл GUI, который я не использовал в качестве примера. Возможно, вам следует попытаться найти последнюю версию или, возможно, такая уже существует в MQL5.


Будьте здоровы, я с нетерпением жду вашей следующей статьи.


Кейп-Кодда

 
Привет,

Спасибо за статью!

Я хотел бы динамически создавать несколько "приборных панелей", щелкая левой кнопкой мыши по графику. При каждом щелчке будет создаваться новая панель. Не могли бы вы подсказать, как нужно изменить ваш код, чтобы добиться этого?

Спасибо

 
komlos щелкая левой кнопкой мыши по графику. При каждом щелчке будет создаваться новая панель. Не могли бы вы подсказать, как нужно изменить ваш код, чтобы добиться этого?

Спасибо

Здравствуйте,

Мне очень приятно, что вам понравилась моя статья! Спасибо за ваш отзыв.

Я не думаю, что вам нужно модифицировать мой код, чтобы достичь того, к чему вы стремитесь, поскольку ваша цель, похоже, отличается от того, для чего мой код был изначально разработан. Однако вы можете использовать мой код, чтобы сделать динамически создаваемые панели подвижными.

Для обнаружения щелчков мыши на графике можно использовать событие ChartEvent, в частности CHARTEVENT_CLICK. Это событие предоставит координаты щелчка мыши, что позволит вам создать новую приборную панель в этом месте. Затем вы можете применить мой код, чтобы сделать эту вновь созданную панель подвижной.

Если вы хотите узнать больше о ChartEvent, я рекомендую обратиться к первой части этой серии, а именно к разделу под названием"Расшифровка событий диаграммы": Строительные блоки подвижного графического интерфейса".

Кроме того, я настоятельно рекомендую использовать классы, так как они упростят вашу задачу при правильном использовании. Если вы не знакомы с концепцией классов, вам стоит обратиться к моей статье"Понимание концепции классов".

Надеюсь, это вам поможет!

Improve Your Trading Charts With Interactive GUI's in MQL5 (Part I): Movable GUI (I)
Improve Your Trading Charts With Interactive GUI's in MQL5 (Part I): Movable GUI (I)
  • www.mql5.com
Unleash the power of dynamic data representation in your trading strategies or utilities with our comprehensive guide on creating movable GUI in MQL5. Dive into the core concept of chart events and learn how to design and implement simple and multiple movable GUI on the same chart. This article also explores the process of adding elements to your GUI, enhancing their functionality and aesthetic appeal.
 
komlos щелкая левой кнопкой мыши по графику. При каждом щелчке будет создаваться новая панель. Не могли бы вы подсказать, как нужно изменить ваш код, чтобы добиться этого?

Спасибо

Здравствуйте, CapeCoddah,

Ваш отзыв искренне радует меня. Цель моих статей - вдохновить читателей, таких как вы, на то, чтобы они взяли концепции и расширили их своими собственными уникальными способами. Тот факт, что вы именно так и поступили, подтверждает полезность моих статей.

Что касается вашего предложения о создании класса Text, включающего в себя метку, кнопку, текстовое поле и т. д., то интересно отметить, что моя предстоящая статья на самом деле развивается в аналогичном направлении. Я создаю функциональную торговую панель, которая может выполнять команды на покупку и продажу, запрашивать размеры лотов, и да, она также будет подвижной со всеми элементами, содержащимися внутри, как вы и предложили.

Однако я считаю, что создание класса Text не может быть универсально полезным, учитывая разнообразные потребности каждого пользователя. Вместо этого я рекомендую читателям создавать классы, отвечающие их специфическим требованиям.

Просмотрев ваши файлы, я обнаружил, что ваш графический интерфейс очень похож на то, что я приготовил для третьей части. Я с нетерпением жду ее скорой публикации.

Вот небольшой обзор того, что будет в следующей части:


Да, это подвижная приборная панель со всеми ее элементами!

Следите за новостями и еще раз спасибо за активное участие и отзывы.

Счастливого кодинга!

 
Kailash Bai Mina #:

Привет, Кейп-Кодда,

Ваш отзыв искренне радует меня. Цель моих статей - вдохновить читателей, таких как вы, на то, чтобы они взяли концепции и расширили их своими собственными уникальными способами. Тот факт, что вы именно так и поступили, подтверждает полезность моих статей.

Что касается вашего предложения о создании класса Text, включающего в себя метку, кнопку, текстовое поле и т. д., интересно отметить, что моя предстоящая статья на самом деле идет в аналогичном направлении. Я создаю функциональную торговую панель, которая может выполнять команды на покупку и продажу, запрашивать размеры лотов, и да, она также будет подвижной со всеми элементами, содержащимися внутри, как вы и предложили.

Однако я считаю, что создание класса Text не может быть универсально полезным, учитывая разнообразные потребности каждого пользователя. Вместо этого я призываю читателей создавать классы, соответствующие их специфическим требованиям.

Просмотрев ваши файлы, я обнаружил, что ваш графический интерфейс очень похож на то, что я приготовил для третьей части. Я с нетерпением жду ее скорой публикации.

Вот краткий обзор того, что будет в следующей части:


Да, это подвижная приборная панель со всеми ее элементами!

Следите за новостями и еще раз спасибо за активное участие и отзывы.

Счастливого кодинга!

Кайлаш Бай Мина #:

Привет, CapeCoddah,

Ваш отзыв действительно радует меня. Цель моих статей - вдохновить читателей, таких как вы, на то, чтобы они взяли концепции и расширили их своими собственными уникальными способами. Тот факт, что вы именно так и поступили, подтверждает полезность моих статей.

Что касается вашего предложения о создании класса Text, включающего в себя метку, кнопку, текстовое поле и т. д., интересно отметить, что моя предстоящая статья на самом деле идет в аналогичном направлении. Я создаю функциональную торговую панель, которая может выполнять команды на покупку и продажу, запрашивать размеры лотов, и да, она также будет подвижной со всеми элементами, содержащимися внутри, как вы и предложили.

Однако я считаю, что создание класса Text не может быть универсально полезным, учитывая разнообразные потребности каждого пользователя. Вместо этого я призываю читателей создавать классы, соответствующие их специфическим требованиям.

Просмотрев ваши файлы, я обнаружил, что ваш графический интерфейс очень похож на то, что я задумал для третьей части. Я с нетерпением жду ее скорой публикации.

Вот краткий обзор того, что будет в следующей части:


Да, это подвижная приборная панель со всеми ее элементами!

Следите за новостями и еще раз спасибо за активное участие и отзывы.

Счастливого кодинга!

 

Привет, Кайлаш,


Ваше превью заинтриговало меня. Это то, что является моей конечной целью. Концепция класса Text - это набор функций, которые используются для создания панелей торговой панели. Ваше превью иллюстрирует несколько членов моего класса Text: Label, Input Box, Buttons, Panel и, возможно, Text Panel, сейчас я использую кнопки. Я хочу инкапсулировать детали создания Label внутри вызываемой функции класса Text, CreateLabel(....), чтобы пользователи могли делать несколько вызовов функции label для размещения разного текста в разных местах на панели Moveable.

На самом деле я представляю себе несколько независимых подпанелей, которые вместе будут составлять мою торговую станцию, например, индикаторы ATR, кроссоверы индикаторов, открытие сделок, статус активных сделок, управление капиталом, управление стоп-лоссами и тейк-профитами и т.д. Как я себе это представляю, функция OnInit будет использоваться для вызова разработки каждой панели, а OnTick обеспечит обновление функций для различных панелей и, возможно, будет панель функций, которая может открывать и закрывать панели по требованию.

 
CapeCoddah тейк-профитами и т.д. Как я себе это представляю, функция OnInit будет использоваться для вызова разработки каждой панели, а OnTick обеспечит обновление функций для различных панелей и, возможно, будет панель функций, которая может открывать и закрывать панели по требованию.

Я рассматриваю возможность создания такого текстового класса, вероятно, с именем 'GUI', для размещения всех объектов, включая прямоугольную метку, метку, редактирование и кнопку.


Ваша идея о создании нескольких, но независимых подпанелей для каждой задачи, такой как индикаторы и управление торговлей, как раз и является моей целью для будущих статей. Хотя достижение этой цели сопряжено с определенными трудностями - такими, как работа с z-order, различные размеры экрана, влияющие на размеры панелей, и так далее, - я уверен, что мы сможем преодолеть эти препятствия вместе.


Концепция менеджера панелей также звучит многообещающе. Мы сможем создать его в ближайшее время".

 
Kailash Bai Mina #:

Привет,

Мне очень приятно, что вам понравилась моя статья! Спасибо за ваш отзыв.

Я не думаю, что вам нужно модифицировать мой код, чтобы достичь того, к чему вы стремитесь, поскольку ваша цель, похоже, отличается от того, для чего мой код был изначально разработан. Однако вы можете использовать мой код, чтобы сделать динамически создаваемые панели подвижными.

Для обнаружения щелчков мыши на графике можно использовать событие ChartEvent, в частности CHARTEVENT_CLICK. Это событие предоставит координаты щелчка мыши, что позволит вам создать новую приборную панель в этом месте. Затем вы можете применить мой код, чтобы сделать эту вновь созданную панель подвижной.

Если вы хотите узнать больше о ChartEvent, я рекомендую обратиться к первой части этой серии, а именно к разделу под названием"Расшифровка событий диаграммы": Строительные блоки подвижного графического интерфейса".

Кроме того, я настоятельно рекомендую использовать классы, так как они упростят вашу задачу при правильном использовании. Если вы не знакомы с концепцией классов, вам стоит обратиться к моей статье"Понимание концепции классов".

Надеюсь, это вам поможет!

Моя проблема в том, что я не знаю, как я могу вызвать функцию OnEvent в OnChartEvent на каждом динамически созданном экземпляре приборной панели (поскольку каждый экземпляр приборной панели должен обрабатывать событие независимо, как вы упоминаете в статье). В том виде, в котором ваш код работает сейчас, функция OnEvent вызывается для каждого ранее созданного экземпляра, предварительно определив их отдельно в OnChartEvent. Но при динамическом создании экземпляров приборной панели вы не можете просто определить их в OnChartEvent заранее, потому что они еще не были созданы...
Спасибо
 
komlos #:
Моя проблема заключается в том, что я не знаю, как я могу вызвать функцию OnEvent в OnChartEvent для каждого динамически создаваемого экземпляра приборной панели (поскольку каждый экземпляр приборной панели должен обрабатывать событие независимо, как вы упоминаете об этом в статье). В том виде, в котором ваш код работает сейчас, функция OnEvent вызывается для каждого ранее созданного экземпляра, предварительно определив их отдельно в OnChartEvent. Но при динамическом создании экземпляров приборной панели вы не можете просто определить их в OnChartEvent заранее, потому что они еще не были созданы...
Спасибо

О, я вижу, где вы испытываете трудности. Позвольте мне помочь вам.

Я написал советник под названием MultiDash именно так, как вы хотели, немного изменив свой код.

Я прикрепил его ниже для ознакомления. Пожалуйста, проверьте его и не стесняйтесь спрашивать, если вам что-то непонятно в моем коде. Я буду рад помочь.


Файлы:
 
Kailash Bai Mina #:

О, я вижу, где вы испытываете затруднения. Позвольте мне помочь вам.

Я написал советник MultiDash именно так, как вы хотели, немного изменив свой код.

Я прикрепил его ниже для ознакомления. Пожалуйста, проверьте его и не стесняйтесь спрашивать, если что-то в моем коде вам непонятно. Я буду рад помочь.


Вау, спасибо, это очень любезно с вашей стороны! Я обязательно проверю!