Обсуждение статьи "Создай свои графические панели на MQL5"

 

Опубликована статья Создай свои графические панели на MQL5:

Удобство пользования MQL5-программой определяется не только её богатой функциональностью, но и продуманным графическим интерфейсом. Визуальное восприятие иногда гораздо важнее, чем быстрая и стабильная работа. Перед вами пошаговое руководство по самостоятельному созданию индикаторных панелей на основе классов Стандартной библиотеки.


Автор: MetaQuotes

 

На данный момент библиотека заточена под одну панель на графике.

Если попытаться влепить 2, то некорректно отлавливаются события - у элементов одинаковые Id, а родительский Id не проверяется.

Для проверки взял демонстрационный Controls.mq5 и продублировал панель - все события дублируются на обе панели, хотя не должны.

Файлы:
 
В пункте "Наполняем панель индикации" можно вместо
CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
 использовать что то вроде 
ObjCAppDialog.Create(chart,name,subwin,x1,y1,x2,y2))
?
 
Rorschach:
В пункте "Наполняем панель индикации" можно вместо  использовать что то вроде ?

Доброго дня, может подскажите что сделать.

Ваш пример експерт Controls.

При переключении на другой период эксперт выгружается, пробовал убрать ExtDialog.Destroy(reason); в OnDeinit().

Подскажите что необходимо сделать, что бы окно диалога продолжало работать при переходе на другие периоды. 

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
vdv2001:

Доброго дня, может подскажите что сделать.

Ваш пример експерт Controls.

При переключении на другой период эксперт выгружается, пробовал убрать ExtDialog.Destroy(reason); в OnDeinit().

Подскажите что необходимо сделать, что бы окно диалога продолжало работать при переходе на другие периоды. 

Большое спасибо за замечание. Ошибка исправлена. Обновление в след. билде.
 

ИМХО, я считаю что легче создать библиотеки собственноручно, чтобы знать что где и как нужно использовать или исправить если что не так. 

Пример написания панели без использования стандартных классов.: VirtualTradePad PositionsStyle 

 

 

Можно задаться вопросом, почему при использовании MQL5 Wizard для создания класса получается код, который не компилируется:


Как сказано в статье, вы должны добавить эту строку кода вручную, что немного странно для мастера, предназначенного для некодеров.

#include <Controls\Dialog.mqh>

Также :

This article will demonstrate how easy it is to create your own display panels in a separate chart subwindow using the Standard Library classes.

Я думаю, что это шутка, не так ли?

MQL5 Wizard: Creating Expert Advisors without Programming
  • 2011.01.11
  • MetaQuotes Software Corp.
  • www.mql5.com
Do you want to try out a trading strategy while wasting no time for programming? In MQL5 Wizard you can simply select the type of trading signals, add modules of trailing positions and money management - and your work is done! Create your own implementations of modules or order them via the Jobs service - and combine your new modules with existing ones.
 

"Это немного странно для мастера, предназначенного для некодеров".

Я не думаю, что этот мастер предназначен для некодеров.

Он может помочь вам (начинающему программисту) сделать первые шаги к созданию чего-либо.

Фреймворк MQL5 обладает большим потенциалом, и часть его можно раскрыть с помощью мастеров.

Но я думаю, что для создания чего-то более сложного, чем этот пример, вам всегда понадобятся основы программирования.

Но я согласен, что необходимо включать очевидные вещи, если вы создаете базовый класс...

 
ugo58:

" Это немного странно для мастера, предназначенного для некодеров".

Я не думаю, что этот мастер предназначен для некодеров.

Он может помочь вам (начинающему программисту) сделать первые шаги к созданию чего-либо.

Фреймворк MQL5 обладает большим потенциалом, и часть его можно раскрыть с помощью мастеров.

Но я думаю, что для создания чего-то более сложного, чем этот пример, вам всегда понадобятся основы программирования.

Но я согласен, что необходимо включать очевидные вещи, если вы выводите базовый класс...

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

MQL5 Wizard: Creating Expert Advisors without Programming
  • 2011.01.11
  • MetaQuotes Software Corp.
  • www.mql5.com
Do you want to try out a trading strategy while wasting no time for programming? In MQL5 Wizard you can simply select the type of trading signals, add modules of trailing positions and money management - and your work is done! Create your own implementations of modules or order them via the Jobs service - and combine your new modules with existing ones.
 

Обратил внимание что в библиотеке пользовательских графический интерфейсов (панелей) копируется не совсем удачная на мой взгляд событийная модель:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    ...
}

Во первых, далеко не все события имеют набор переменных соответствующих int, long, double и string. Где-то переменных описывающих событие может быть больше, где-то меньше, где-то они не совпадают с предложенными базовыми типами. По факту мы видим постоянную конвертацию вроде int -> bool, string -> int, double -> int и т.д. И если с точки зрения процедурного программирования практически ничего сделать нельзя (ведь не будешь создавать 1 000 000 перегруженных функций для каждого гипотетического случая), то в рамках ООП все можно сделать гораздо проще и изящней.

Но главная проблема OnEvent в том, что этот обработчик событий призван обрабатывать события получаемые с графика, в то время как событие может быть каким угодно, например открытие новой позиции, или изменение котировок. В общем OnEvent(...) как-то выглядит не достаточно универсальным обработчиком событий, ИМХО. Возможно разработчики как-то приловчились обрабатывать свои собственные события на базе существующего CWnd , но для меня использования стандартной библиотеки панелей видится пока проблемным.

Как использовать торговые классы Стандартной библиотеки при написании советника
Как использовать торговые классы Стандартной библиотеки при написании советника
  • 2010.11.10
  • Samuel
  • www.mql5.com
В статье рассказывается о том, как использовать основной функционал торговых классов Стандартной библиотеки при написании советников, в которых применяется открытие, закрытие и модификация позиции, проверка свободной маржи перед размещением торговых ордеров, размещение и удаление отложенных ордеров. Показано, как использовать торговые классы для получения свойств ордеров и сделок.
 

спасибо, изучил, полезно! несколько моментов: планируется ли создание какого-нибудь конструктора, что бы панели можно было собирать в конструкоторе форм как в VS? т.к. считать всё руками как-то не совсем удобно, может это и ялвяется признаком профессионализма, НО долго ))

с макросами явно перемудрили...