- Общие принципы работы с локальными проектами
- План проекта веб-сервиса копирования сделок и сигналов
- Веб-сервер на основе nodejs
- Теоретические основы протокола WebSockets
- Серверная часть веб-сервисов на базе WebSocket-протокола
- Протокол WebSocket-ов на MQL5
- Клиентские программы эхо и чат-сервисов на MQL5
- Сервис торговых сигналов и тестовая веб-страница
- Клиентская программа сигнального сервиса на MQL5
Общие принципы работы с локальными проектами
Локальный проект (mqproj-файл) можно создать из главного меню MetaEditor или из контекстного меню Навигатора командами Новый проект или Новый проект из исходного файла. В последнем случае файл следует предварительно выделить в Навигаторе или выбрать в открывшемся диалоге Открыть — в результате в проект сразу будет включен указанный mq5-файл. Первая из упомянутых команд запускает Мастер MQL, в котором следует выбрать тип программы или вариант пустого проекта (исходные файлы в него можно добавить позже). При выборе типа MQL-программы под проект, далее следуют привычные шаги Мастера по настройке свойств.
Проект содержит в себе несколько логических разделов — своего рода дерево (иерархию) со всеми компонентами — они отображаются в левой панели Навигатора, в отдельной закладке Проект.
Навигатор и свойства проекта индикатора
Сразу после создания проекта или затем по двойному щелчку мыши на корне дерева — в правой части окна открывается панель настройки свойств MQL-программы. Набор свойств меняется в зависимости от типа программы.
Большинство свойств соответствует каким-либо директивам #property в исходном коде, но имеет приоритет: если вы укажете свойства и в проекте, и в исходном коде, будут использоваться значения из проекта.
Некоторым разработчиком может понравиться устанавливать свойства интерактивно в диалоге, а не прописывать в исходном коде. Кроме того, вы можете использовать один и тот же mq5-файл в разных проектах и собирать версии MQL-программы с разными настройками (не меняя исходный код).
Некоторые свойства доступны только в проекте. К ним относятся, например, включение/отключение оптимизации компиляции и встроенные проверки на деление на ноль.
В процессе компиляции проекта автоматически анализируются зависимости, то есть включенные заголовочные файлы, ресурсы и так далее. Зависимости отображаются в различных ветвях иерархии проекта. В частности, заголовочные файлы из стандартных папок MQL5/Include, включенные в директивах #include с помощью угловых скобок (<filename>), попадают в Dependecies, а пользовательские заголовочные файлы, включенные с помощью двойных кавычек (#include "filename") - в раздел Headers.
Дополнительно пользователь может добавить в проект файлы, которые относятся к законченному программному продукту и, возможно, требуются для его нормальной работы или демонстрации (например, файлы с обученными моделями нейронных сетей), но напрямую не встроены в исходный код. Для этих целей подойдет ветвь Settings and files. В её контекстном меню есть команды для добавления в проект одного файла или целиком какого-либо каталога.
В частности, мы далее рассмотрим примеры проектов, которые будут включать не только клиентские MQL-программы, но и серверную часть.
Команды Новый файл и Новая папка добавляют новый элемент в папку с файлом проекта: такие элементы всегда ищутся относительно самого проекта (в mqproj-файле они помечаются свойством relative_to_project, равным true, см. далее).
Команды Добавить существующий файл и Добавить существующую папку позволяют выбрать один или несколько элементов из существующей структуры каталогов внутри папки MQL5, причем на эти элементы внутри mqproj-файла делается ссылка относительно корневой MQL5 (свойство relative_to_project равно false).
Свойство relative_to_project — лишь одно из немногих, определенных разработчиками MetaTrader 5 для представления проекта в формате JSON. Напомним, что в результате редактирования проекта (иерархии и свойств) формируется mqproj-файл формата JSON.
Вот как выглядит этот файл для проекта на вышеприведенном изображении.
{
|
О технических особенностях формата JSON мы поговорим более подробно в последующих разделах, потому что применим его и в своих демонстрационных проектах.
Важно отметить, что все файлы, на которые ссылается проект, не хранятся внутри mqproj-файла, и потому копирование в новое место или перемещение на другой компьютер только файла проекта не обеспечит его восстановление. Чтобы иметь возможность переноса проекта, организуйте для него разделяемый проект и загрузите в облако все содержимое проекта. Однако это может потребовать реорганизации структуры локальной файловой системы, т.к. все компоненты должны находиться внутри папки разделяемого проекта, в то время как mqproj-формат этого не требует.