Общие свойства программ (#property)

С помощью директивы #property программист может установить некоторые свойства MQL-программы. Часть этих свойств носит общий характер, то есть применима к любой программе, и мы рассмотрим их здесь. Остальные свойства характерны для конкретных типов MQL-программ и будут рассмотрены в соответствующих разделах пятой Части при описании MQL5 API.

Директива #property имеет следующий формат:

#property ключ значение

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

Свойство

Значение

copyright

Строка с информацией о правообладателе

link

Строка с ссылкой на сайт разработчика

version

Строка с номером версии программы (для Маркета MQL5 она должна быть в формате "X.Y", где X и Y — целые числа, соответствующие основному и дополнительному номеру сборки)

description

Строка с описанием программы (допускается несколько директив #description, их содержимое объединяется)

icon

Строка, путь к файлу с логотипом программы в формате ICO

stacksize

Целое число, задающее размер стека в байтах (по умолчанию он равен от 4 до 16 Мбайт, в зависимости от типа программы и окружения, 1 МБайт = 1024*1024 байт); при необходимости размер увеличивается вплоть до 64 Мбайт (максимум)

Все вышеуказанные строковые свойства являются источником информации для диалога свойств программы, который открывается при её запуске. Однако для скриптов этот диалог по умолчанию не выводится. Чтобы изменить данное поведение, требуется дополнительно указать директиву #property script_show_inputs. Кроме того, информация о правах выводится во всплывающей подсказке при наведении курсора мыши на программу в Навигаторе MetaTrader 5.

Свойства copyright, link и version мы уже видели во всех предыдущих примерах данной книги.

Размер стека stacksize является рекомендательным: если компилятор обнаружит в исходном коде локальные переменные (как правило, массивы), превышающие заданное значение, стек будет автоматически увеличен в процессе компиляции, но не более чем до 64 МБайт. При превышении лимита программа не сможет даже стартовать: в журнале (вкладка Журнал, а не Эксперты) появится ошибка "Размер стека превысил 64Mb, уменьшите объем памяти локальных переменных" ("Stack size of 64MB exceeded. Reduce the memory occupied by local variables").

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

Директивы #property работают только в компилируемом mq5-файле, а во всех включенных с помощью #include — игнорируются.