Проекты

Программные продукты, как правило, развиваются в рамках стандартного жизненного цикла:

  • Сбор и дополнение требований
  • Проектирование
  • Разработка
  • Тестирование
  • Эксплуатация

В результате постоянного совершенствования и расширения функционала обычно возникает необходимость систематизации исходных файлов, ресурсов и используемых сторонних библиотек (здесь имеются в виду не только библиотеки двоичного формата, но и, в более общем смысле, любые наборы файлов, например, заголовочных). Более того, отдельные программы интегрируются в некий общий продукт, воплощающий прикладную идею.

Структура и жизненный цикл проекта

Структура и жизненный цикл проекта

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

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

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

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

При работе с проектами на MQL5 следует учитывать, что на платформе термин "проект" применяется для двух разных сущностей:

  • локального проекта в виде mqproj-файла;
  • папки в облачном хранилище MQL5.

Локальный проект позволяет систематизировать, собрать воедино всю информацию об исходных кодах, ресурсах и настройках, необходимых для сборки конкретной MQL-программы. Такой проект находится только на вашем компьютере и может ссылаться на файлы из разных папок.

Файл с расширением mqproj имеет широко распространенный, универсальный, текстовый формат JSON (JavaScript Object Notation). Он удобен, прост и хорошо подходит для описания данных любой предметной области: вся информации группируется в объекты или массивы с именованными свойствами, с поддержкой значений разных типов. Все это делает JSON особенно близким по духу к ООП языкам, да и сам он родом из объектно-ориентированного JavaScript, как легко догадаться по названию.

Облачное хранилище функционирует на основе системы контроля версий и коллективной работы над ПО под названием SVN (Subversion). Здесь под проектом понимается папка верхнего уровня, внутри локальной папки MQL5/Shared Projects, причем для этой папки назначается одноименная папка, расположенная на сервере MQL5 Хранилища. Внутри папки проекта можно организовать иерархию вложенных папок. Как видно из названия, сетевые проекты можно "разделять" с другими разработчиками и делать вообще публичными (содержимое смогут скачивать любые желающие, зарегистрированные на mql5.com).

Система обеспечивает синхронизацию по запросу (с помощью специальных команд пользователя) между образом папки в облаке и на локальном диске, и наоборот — то есть можно как "подтягивать" чужие изменения проекта к себе на компьютер, так и "отправлять" в облако свои правки. Синхронизироваться может как полный образ папки, так и выборочные файлы, включая, разумеется, mq5-файлы, заголовочные mqh-файлы, мультимедиа, настройки (set-файлы), а также и mqproj-файлы. Более подробно об облачном хранилище читайте документацию MetaEditor и системы SVN.    

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

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

В данной главе мы опишем основные функции по созданию и организации mqproj-проектов и приведем серию примеров.