Общие принципы работы с локальными проектами

Локальный проект (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.

Вот как выглядит этот файл для проекта на вышеприведенном изображении.

{
  "platform"    :"mt5",
  "program_type":"indicator",
  "copyright"   :"Copyright (c) 2015-2022, Marketeer",
  "link"        :"https:\/\/www.mql5.com\/en\/users\/marketeer",
  "version"     :"1.0",
  "description" :"Create 2 trend lines on highs and lows using Hough transform.",
  "optimize"    :"1",
  "fpzerocheck" :"1",
  "tester_no_cache":"0",
  "tester_everytick_calculate":"0",
  "unicode_character_set":"0",
  "static_libraries":"0",
  
  "indicator":
  {
    "window":"0"
  },
  
  "files":
  [
    {
      "path":"HoughChannel.mq5",
      "compile":true,
      "relative_to_project":true
    },
    {
      "path":"MQL5\\Include\\MQL5Book\\HoughTransform.mqh",
      "compile":false,
      "relative_to_project":false
    }
  ]
}

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

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