Краудсорсовый GUI. Открытое бета-тестирование.

 

Предлагаю сообществу конструктор GUI для MQL-программ для свободного использования.  

  • Конструктор GUI отдаю закрытым файлом .ex5, с целью централизовать его развитие и исключить путаницу при распостранении версий. 
  • Движок GUI присоеденяю открытым файлом .mqh, НО! - Не рекомендую менять код по своему усмотрению, без консультации со мною, т.к. это может привести к ошибкам и потере функциональности.
  • Прошу сообщать о багах и недоработках. 

 За конструктивное участие.

P.S. Проект краудсорсовый, а значит мы реализуем его вместе.

//-----------------------------------------------------------------------------------------------------------------

СБОРКА:

  • Советник KIB.ex5                  - конструктор GUI.
  • Файл GUI_DRIVE.mqh            - движок GUI в пользовательском приложении. Подключается файлом.
  • Индикатор KIB-source.mqh   - передатчик разметочного кода из файлов польз.проекта в конструктор.

ИНСТРУКЦИЯ К УСТАНОВКЕ:

Шаг 1 - распаковка:

  • Советник KIB.ex5 поместить в папку Экспертов. (Не помещать в подпапки).
  • Файл GUI_DRIVE.mqh поместить в папку include. (Не помещать в подпапки).
  • Индикатор KIB-source.mqh поместить в папку Indicators. (Не помещать в подпапки).

Шаг 2 - установка файлов:

  • Установить советник KIB.ex5 на свободный график.
  • Открыть индикатор KIB-source.mqh в редакторе Метаэдитор и скомпилировать для получения файла .ex5.
  • Полученный файл KIB-source.ex5 установить на тот же график, где находится советник KIB.ex5.

Шаг 3 - подготовка к работе:

  • Создать папку "MyProjects" для своего нового проекта GUI внутри папки include.  
  • Создать файл Window_1.mqh для написания разметки. Открыть этот файл.
  • Прописать подключение этого файла внизу KIB-source.mqh внутри инициализации массива "source" (#include <MyProjects\Window_1.mqh>).

Шаг 4 - начало работы:

  • Написать простейший код:

//----------------------------------------------------------------------------------
NEW_WINDOW,  W_NAME, " Hello World! ",  W_ICON, "::Images\\16x16\\Folder.bmp",  W_TYPE, SETTINGS, ALWAYS_ON_TOP,
//----------------------------------------------------------------------------------
GROUP, "Кнопка",

__,BUTTON, "Hello World!",

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//----------------------------------------------------------------------------------
END_WINDOW,

  • Скомпилировать файл KIB-source.mqh. На графике должно отобразится окно с кнопкой.

Шаг 5 - проектирование пользовательского GUI:

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

Шаг 6 - сохранение пользовательского GUI:

  • Вызвать дабл-кликом на график контекстное меню конструктора. 
  • Выбрать последний пункт "Save project and print API file".
  • В папке "Files" сохранятся два файла: "CORES.mqh" и "Internal_API.mqh". 
  • Вручную перенести эти файлы внутрь папки MyProjects из папки "Files".
  • Проект сохранен.

Шаг 7 - подключение пользовательского GUI к советнику:

//+------------------------------------------------------------------+
//|                                                   GUI Expert.mq5 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
//--------------------------------------------------------------------
#include<GUI_DRIVE.mqh>
#include<MyProject_1\CORES.mqh>
#include<MyProject_1\Internal_API.mqh> 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- create timer
   EventSetMillisecondTimer(25);
   //-------------------------
   D_OnInit();
   //-------------------------
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
   //-------------------------
   D_OnDeinit();
   //-------------------------
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //УСТАНОВИТЬ ВЫЗОВ В САМОМ НИЗУ, ПОД ПОЛЬЗ.КОДОМ.------------------
   //---------------------------
   RMSG(1);
   //---------------------------
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   //УСТАНОВИТЬ ВЫЗОВ НА САМОМ ВЕРХУ, НАД ПОЛЬЗ.КОДОМ.---------------
   //----------------------------------------------------------------
   D_OnChartEvent(id,lparam,dparam,sparam);
   //----------------------------------------------------------------
  }
//+------------------------------------------------------------------+


Шаг 8 - получение событий от элементов управления:

  • События приходят в функцию внутри файла "Internal_API.mqh".

//========================================================================================================= 
void On_Gui_Event(int Element, string value, double Magic = 0)
{
 string action = value, selected_option = value; //DON'T CHANGE THIS LINE
//------------------------------------
 switch(Element)
   {
//=====================================================================================================================
//WINDOW:   Checkboxes | element: CHECKBOX  | name: Checkbox 1  |  Location: Window's Main Frame
//=====================================================================================================================
case CHECKBOX3___Checkbox_1:
               //------------------------------------------------------------------------------------------------------
               //What to do when checkbox checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case checked:     break;
  
                case unchecked:     break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
  
...

  • Прописать в ее кейсах нужные реакции пользовательского функционала.


ЗЫ. В блоге есть скомпилированная версия конструктора с интегрированными ресурсами : https://www.mql5.com/ru/blogs/post/733356

В этой версии есть только открытый код, потому как ресурсы находятся в различных папках (звуки и вложенные подпапки с картинками) и переносить все сюда с огромным количеством пояснений нет смысла.

Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Функция ArrayResize() позволяет задать для массива размер с некоторым запасом для его будущего увеличения без физического перераспределения памяти. Это сделано для улучшения быстродействия, так как операции по распределению памяти...
Файлы:
KIB-source.mq5  132 kb
GUI_DRIVE.mqh  2013 kb
KIB.zip  1470 kb
 

Закрытый код -> Маркет.

Открытый код -> Форум.

 
Vladimir Karputov:

Закрытый код -> Маркет.

Открытый код -> Форум.

Хорошо. Я опубликую открытый код конструктора. Но, мне нужно пара дней на его причесывание. Согласитесь подождать?

 
Реter Konow:

Хорошо. Я опубликую открытый код конструктора. Но, мне нужно пара дней на его причесывание. Согласитесь подождать?

Ваша теме никуда не денется.

 
"Шо? Опять?!))
 
Dmitriy Skub:
"Шо? Опять?!))
Ещё не причесали, погодь
 
Реter Konow:


Кстати, а попробуйте создать Проект:


 
Vladimir Karputov:

Кстати, а попробуйте создать Проект:


Хорошо. Только поясню. Сам код конструктора или движка более 20 000 строк кода. В этой ветке, я хотел научить людей создавать GUI на языке разметки, а не разбираться в кодах самого конструктора. Поэтому, код конструктора я хочу выложить одним файлом, для удобства пользователей.

 
Реter Konow:

Хорошо. Только поясню. Сам код конструктора или движка более 20 000 строк кода. В этой ветке, я хотел научить людей создавать GUI на языке разметки, а не разбираться в кодах самого конструктора. Поэтому, код конструктора я хочу выложить одним файлом, для удобства пользователей.

Неа. Так каждый продавец Маркета начнёт свою ветку вида "Протестируй мой самый лучший советник".

 
Vladimir Karputov:

Неа. Так каждый продавец Маркета начнёт свою ветку вида "Протестируй мой самый лучший советник".

Ладно. Без разницы. Опубликую как есть.

 
Реter Konow:

P.S. Проект краудсорсовый, а значит мы реализуем его вместе.

а что хоть краудсорс в этом проекте есть или будет?

по моему Вы тестировщиков ищете , а не тех кто объединится и "допилит код" до продакшена (даже если код на бесплатной основе)

Причина обращения: