- Получение общего списка свойств терминала и программы
- Номер сборки терминала
- Тип и лицензия программы
- Режимы работы терминала и программы
- Разрешения
- Проверка сетевых подключений
- Вычислительные ресурсы: память, диск, процессор
- Характеристики экрана
- Строковые свойства терминала и программы
- Настраиваемые свойства: лимит баров и язык интерфейса
- Привязка программы к свойствам среды исполнения
- Проверка состояния клавиатуры
- Проверка статуса и причины остановки MQL-программы
- Программное закрытие терминала и код возврата
- Обработка ошибок времени исполнения программы
- Пользовательские ошибки
- Управление отладкой
- Предопределенные переменные
- Предопределенные константы языка MQL5
Тип и лицензия программы
Один и тот же исходный код может тем или иным образом входить в состав MQL-программ разных типов. Кроме варианта включения исходных кодов (директивой препроцессора #include) в общий продукт на стадии компиляции, следует отметить возможность сборки библиотек — двоичных программных модулей, подключаемых к основной программе на стадии выполнения.
Однако некоторые функции разрешено использовать только в программах определенных типов. Например, функцию OrderCalcMargin нельзя использовать в индикаторах. Хотя это ограничение не представляется фундаментально обоснованным, разработчик универсального алгоритма подсчета залоговых средств, который может быть встроен не только в эксперты, но и в индикаторы, должен учитывать этот нюанс и предоставлять для индикаторов альтернативный способ расчета.
Полный список ограничений по типам программ будет приведен в соответствующем разделе каждой главы. Во всех подобных случаях бывает важно знать тип "родительской" программы.
Для определения типа программы существует свойство MQL_PROGRAM_TYPE в ENUM_MQL_INFO_INTEGER. Возможные значения свойства описаны в перечислении ENUM_PROGRAM_TYPE.
Идентификатор |
Значение |
Описание |
---|---|---|
PROGRAM_SCRIPT |
1 |
скрипт |
PROGRAM_EXPERT |
2 |
эксперт |
PROGRAM_INDICATOR |
4 |
индикатор |
PROGRAM_SERVICE |
5 |
сервис |
Во фрагменте журнала, приведенном в предыдущем разделе, мы видели что свойство PROGRAM_SCRIPT равно 1, потому что наш тест является скриптом. Для получения строкового описания можно применить функцию EnumToString.
ENUM_PROGRAM_TYPE type = (ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL_PROGRAM_TYPE);
|
Другим свойством MQL-программы, которое удобно анализировать для включения/отключения тех или иных возможностей, является тип лицензии. Как известно, MQL-программы могут распространяться свободно или в рамках онлайн магазина MQL5 Маркет. Более того, программа в магазине может быть куплена или скачана в виде демо-версии. Эти факторы легко проверить и, по желанию, адаптировать алгоритмы под них. Для этих целей существует свойство MQL_LICENSE_TYPE в ENUM_MQL_INFO_INTEGER, использующее в качестве типа перечисление ENUM_LICENSE_TYPE.
Идентификатор |
Значение |
Описание |
---|---|---|
LICENSE_FREE |
0 |
бесплатная неограниченная версия |
LICENSE_DEMO |
1 |
демо-версия платного продукта из Маркета, работает только в тестере стратегий |
LICENSE_FULL |
2 |
купленная лицензионная версия, допускает не менее 5 активаций (может быть увеличено продавцом) |
LICENSE_TIME |
3 |
версия с ограничением по времени (пока не реализовано) |
Здесь важно отметить, что лицензия относится к тому двоичному ex5-модулю, из которого делается запрос с помощью MQLInfoInteger(MQL_LICENSE_TYPE). Внутри библиотеки данная функцию вернет собственную лицензию библиотеки, а не основной программы, к которой подключена библиотека.
В качестве примера для проверки обеих функций раздела, к книге прилагается простой сервис EnvType.mq5. Он не содержит рабочего цикла и потому сразу же завершится после выполнения двух инструкций в OnStart.
#property service
|
Чтобы упростить его запуск, то есть исключить необходимость создавать экземпляр службы и запускать его через контекстное меню Навигатора в терминале, предлагается воспользоваться отладчиком: достаточно в MetaEditor открыть исходный код и выполнить команду Отладка -> Начать на реальных данных (F5, или кнопка в инструментальной панели).
Мы должны получить в журнале записи:
EnvType (debug) PROGRAM_SERVICE
|
Здесь наглядно видно, что тип программы — это сервис, а лицензия — фактически отсутствует (свободное пользование).