Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть IX): Совместимость с MQL4 - Подготовка данных"

 

Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть IX): Совместимость с MQL4 - Подготовка данных:

В предыдущих статьях мы начали создавать большую кроссплатформенную библиотеку, целью которой является упростить написания программ для платформы MetaTrader 5 и MetaTrader 4. В восьмой части сделали класс для отслеживания событий модификации рыночных ордеров и позиций. В данной статье начнём доработку библиотеки с целью полной её совместимости с MQL4.

Доработка

В корневой папке библиотеки DoEasy создадим новый включаемый файл ToMQL4.mqh — здесь будем описывать все необходимые константы и перечисления для MQL4. И сразу же подключим его к файлу Defines.mqh для MQL4-компиляции в самом начале листинга Defines.mqh:

//+------------------------------------------------------------------+
//|                                                      Defines.mqh |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                             https://mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://mql5.com/ru/users/artmedia70"
//+------------------------------------------------------------------+
//| Включаемые файлы                                                 |
//+------------------------------------------------------------------+
#ifdef __MQL4__      
#include "ToMQL4.mqh"
#endif               
//+------------------------------------------------------------------+

После этого полключения вся библиотека при компиляции для MQL4 будет видеть всё, что будет прописано в файле ToMQL4.mqh.

Перейдём в самое начало списка ошибок в журнале редактора "Ошибки", нажав клавишу NumPad "Home", или просто перемотав мышкой на начало, сделаем двойной клик по самой первой ошибке:

Автор: Artyom Trishkin

 

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

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

Можете ли вы показать в этом Вашем пробном советнике, как можно програмно нажимать на кнопки???

Есть есть подходящая функция - можете ли Вы ею поделиться?

Или подскажите как это лучше всего сделать, плиз.

 
Sergey Voytsekhovsky:

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

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

Можете ли вы показать в этом Вашем пробном советнике, как можно програмно нажимать на кнопки???

Есть есть подходящая функция - можете ли Вы ею поделиться?

Или подскажите как это лучше всего сделать, плиз.

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

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

 
Artyom Trishkin:

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

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

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

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

Вот так вот я заморочился.

 
Sergey Voytsekhovsky:

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

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

Вот так вот я заморочился.

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

Сейчас же, пока нет там такого функционала, вы можете посмотреть как в тестовом советнике сделана работа с торговым классом CTrade , включенного в стандартную библиотеку в MQL5, и писать похожие конструкции для вызова нужных торговых функций. Там же (в тестовом советнике) есть вызов тестерных торговых функций для MQL4.

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 
Artyom Trishkin:

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

Сейчас же, пока нет там такого функционала, вы можете посмотреть как в тестовом советнике сделана работа с торговым классом CTrade , включенного в стандартную библиотеку в MQL5, и писать похожие конструкции для вызова нужных торговых функций. Там же (в тестовом советнике) есть вызов тестерных торговых функций для MQL4.

Спасибо, буду изучать.

 
Sergey Voytsekhovsky:

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

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

Можете ли вы показать в этом Вашем пробном советнике, как можно програмно нажимать на кнопки???

Есть есть подходящая функция - можете ли Вы ею поделиться?

Или подскажите как это лучше всего сделать, плиз.

Добрый день! 

Sergey, поддержу вас, потому что вижу вы в схожей ситуации. 

Да, статьи замечательные, но в них очень мало информации о том, как использовать написанный код. Библиотеки, вообще говоря, ценны сокрытием реализации и предоставлением понятного интерфейса для выполнения практических задач. В справке функции https://docs.mql4.com/strings/stringsubstr нет ни слова о ее внутреннем устройстве. Описание входящих параметров, результат их обработки и пример(ы). Вот что хотелось бы видеть. 

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

Это уже не первый мой пост на эту тему ). Ни в коем случае не хочу умалить достоинств серии. Напротив - надеюсь, Артем, вы примите во внимание просьбы форумчан и написанные библиотеки будут использоваться в советниках с такой же охотой, как разбирают на цитаты хорошие фильмы. 

StringSubstr - String Functions - MQL4 Reference
StringSubstr - String Functions - MQL4 Reference
  • docs.mql4.com
StringSubstr - String Functions - MQL4 Reference
 
Nikolai Karetnikov:

Добрый день! 

Sergey, поддержу вас, потому что вижу вы в схожей ситуации. 

Да, статьи замечательные, но в них очень мало информации о том, как использовать написанный код. Библиотеки, вообще говоря, ценны сокрытием реализации и предоставлением понятного интерфейса для выполнения практических задач. В справке функции https://docs.mql4.com/strings/stringsubstr нет ни слова о ее внутреннем устройстве. Описание входящих параметров, результат их обработки и пример(ы). Вот что хотелось бы видеть. 

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

Это уже не первый мой пост на эту тему ). Ни в коем случае не хочу умалить достоинств серии. Напротив - надеюсь, Артем, вы примите во внимание просьбы форумчан и написанные библиотеки будут использоваться в советниках с такой же охотой, как разбирают на цитаты хорошие фильмы. 

Цель - провести читателя от начала создания библиотеки до её завершения.
Понимаете - статьи имеют больше обучающий характер, неся при этом полезную практическую цель, и не одну. Конструкция кодов - доступная для понимания, без использования изворотов и недокументированных возможностей ради изворотов и "крутизны". Зато есть неоспоримый плюс - сколько вышло бета-версий терминала, и сколько людей уже сказали, что их коды перестали работать, а библиотека - живёт от билда к билду без вынужденных исправлений из-за того, что что-то вдруг работать перестало...

Библиотека на данный момент имеет одну точку входа - класс CEngine (будет ещё вторая точка входа, но много позже), и объект этого класса в советнике даёт полный доступ ко всем возможностям.

А делее - не сложно создать такой объект, например: CEngine lib; и в коде набрать lib и поставить точку (вот так: lib.) - после точки редактор покажет вам окно со списком всех доступных для использования методов библиотеки. В основном у них осмысленные названия - при небольшой практике можно применять. Все методы описаны в статьях. В каждой статье - пример тестовой программы, отображающей, впрочем, малую часть возможностей.

Согласен - искать показанные методы и их применение по многочисленным статьям, не имея на руках справочного материала - то ещё занятие... Но цикл статей - на то и цикл, чтобы читатель прошёл его вместе со мной, и тогда уж что-то, да отложится в голове :) А цель, напомню - обучающая.

Справочный материал будет. Но в самом конце - когда будет создана библиотека. И примеры, конечно же тоже.

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

 
Artyom Trishkin:

Цель - провести читателя от начала создания библиотеки до её завершения.
Понимаете - статьи имеют больше обучающий характер, неся при этом полезную практическую цель, и не одну. Конструкция кодов - доступная для понимания, без использования изворотов и недокументированных возможностей ради изворотов и "крутизны". Зато есть неоспоримый плюс - сколько вышло бета-версий терминала, и сколько людей уже сказали, что их коды перестали работать, а библиотека - живёт от билда к билду без вынужденных исправлений из-за того, что что-то вдруг работать перестало...

Библиотека на данный момент имеет одну точку входа - класс CEngine (будет ещё вторая точка входа, но много позже), и объект этого класса в советнике даёт полный доступ ко всем возможностям.

А делее - не сложно создать такой объект, например: CEngine lib; и в коде набрать lib и поставить точку (вот так: lib.) - после точки редактор покажет вам окно со списком всех доступных для использования методов библиотеки. В основном у них осмысленные названия - при небольшой практике можно применять. Все методы описаны в статьях. В каждой статье - пример тестовой программы, отображающей, впрочем, малую часть возможностей.

Согласен - искать показанные методы и их применение по многочисленным статьям, не имея на руках справочного материала - то ещё занятие... Но цикл статей - на то и цикл, чтобы читатель прошёл его вместе со мной, и тогда уж что-то, да отложится в голове :) А цель, напомню - обучающая.

Справочный материал будет. Но в самом конце - когда будет создана библиотека. И примеры, конечно же тоже.

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

я понимаю, намерения у вас самые добрые и, наверное, много свободного времени )

Просто увидев ваши статьи серии "ДелатьПростой"[Библиотека для простого и быстрого создания программ для MetaTrader], я решил, что через 10-15 минут чтения уже смогу применять полезный код. Ожидал увидеть классическую статью вроде https://www.mql5.com/ru/articles/272, где скрыта логика и открыт интерфейс, даны ответы на вопросы: "зачем это нужно", "как с этим работать", приведены примеры. Оказалось, что цель - обучение, а не RAD (быстрая разработка). 

Что же, ждем с нетерпением когда и вы такую напишете! ))

Трассировка, отладка и структурный анализ кода
Трассировка, отладка и структурный анализ кода
  • www.mql5.com
В данной статье речь пойдет про один из способов создания стека вызовов на этапе выполнения. Возможности, которые описаны в статье следующие: Составление структуры используемых классов, функций, файлов. Создание стека вызова, с сохранением всех прошлых стеков. Их последовательности вызовов. Просматривать состояние Watch-параметров на этапе...
 
Nikolai Karetnikov:

я понимаю, намерения у вас самые добрые и, наверное, много свободного времени )

Просто увидев ваши статьи серии "ДелатьПростой"[Библиотека для простого и быстрого создания программ для MetaTrader], я решил, что через 10-15 минут чтения уже смогу применять полезный код. Ожидал увидеть классическую статью вроде https://www.mql5.com/ru/articles/272, где скрыта логика и открыт интерфейс, даны ответы на вопросы: "зачем это нужно", "как с этим работать", приведены примеры. Оказалось, что цель - обучение, а не RAD (быстрая разработка). 

Что же, ждем с нетерпением когда и вы такую напишете! ))

Цель - обучение + быстрая разработка. О быстрой разработке стоит лишь задавать вопросы практического применения, если читать лень, и пока нет справочного материала с примерами.

Название скорее переводится как "Делай легко". (Английский.., позволяет переводить как угодно, если нет контекста)

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