Как вы сами, наверное, уже догадались, комментарии используются для отображения, чтобы облегчить пользователю понимание их предназначения.
Здесь также видно, что входными параметрами могут быть не только отдельные переменные, но и перечисления, которые отображаются в виде выпадающих списков.
Для индикатора MACD используется встроенное перечисление ENUM_APPLIED_PRICE, но можно также определить и свое перечисление.
В справочнике приводится соответствующий пример.
В этом примере команда #property script_show_inputs используется для скриптов, для индикаторов ее можно опустить.
Основное отличие input переменных от других типов переменных состоит в том, что изменить их значение может только пользователь в диалоговом окне индикатора.
Если в коде индикатора попытаться изменить значение входного параметра, при компиляции возникнет ошибка.
Поэтому, если вы хотите при расчетах использовать измененное значение входного параметра, нужно использовать промежуточную переменную.
Помимо input переменных MQL5-код использует локальные переменные, статические переменные, глобальные переменные и extern переменные.
С локальными переменными в принципе все понятно, они объявляются в блоке кода, например, в цикле или функции, там же инициализируются, и, после выполнения блока кода, память, выделенная под локальные переменные в программном стеке, освобождается.
Тут особо надо отметить, что для локальных объектов, созданных с помощью оператора new, в конце блока кода нужно применить оператор delete для освобождения памяти.
Глобальные переменные, как правило, объявляются после свойств индикатора, входных параметров и массивов буферов индикатора, перед функциями.
Глобальные переменные видны в пределах всей программы, их значение может быть изменено в любом месте программы и память, выделяемая под глобальные переменные вне программного стека, освобождается при выгрузке программы.
Здесь видно, что input переменные это те же глобальные переменные, за исключением опции — их значение не может быть изменено в любом месте программы.
Если глобальную или локальную переменную объявить со спецификатором const — это так же не позволит изменять значение этой переменной в процессе выполнения программы.
Статические переменные определяются модификатором static, который указывается перед типом данных.
Со статическими переменными все немного сложнее, но легче всего их понять, сравнивая статические переменные с локальными и глобальными переменными.
В принципе, статическая переменная, объявленная там же, где и глобальная переменная, ничем не отличается от глобальной переменной.
Хитрость начинается, если локальную переменную объявить с модификатором static.
В этом случае, после выполнения блока кода, память, выделенная под статическую переменную, не освобождается. И при следующем выполнении того же блока кода, предыдущее значение статической переменной можно использовать.
Хотя область видимости такой статической переменной ограничивается те же самым блоком кода, в котором она была объявлена.
extern переменные это аналог статических глобальных переменных. Нельзя объявить локальную переменную с модификатором extern.
Отличие extern переменных от статических глобальных переменных проще всего продемонстрировать на индикаторе MACD.
Индикатор MACD имеет включаемый файл MovingAverages, обозначенный с помощью директивы #include и расположенный в папке Include.
Если в файле MovingAverages и файле MACD одновременно объявить extern-переменную:
extern int a=0;
то при компиляции обоих файлов все пройдет удачно, и переменную можно будет использовать.
Если же в файле MovingAverages и файле MACD одновременно объявить статическую глобальную переменную:
static int a=0;
тогда при компиляции обоих файлов возникнет ошибка.
Помимо команды #include полезной является также директива #define, которая позволяет делать подстановку выражения вместо идентификатора, например:
#define PI 3.14
Хэндл индикатора
Начнем с цитаты:
HANDLE идентифицирует объект, которым Вы можете манипулировать. Джеффри РИХТЕР «Windows для профессионалов».
Переменные типа handle представляют собой указатель на некоторую системную структуру или индекс в некоторой системной таблице, которая содержит адрес структуры.
Таким образом, получив хэндл некоторого индикатора, мы можем использовать его данные для построения своего индикатора.
Хэндл индикатора представляет собой переменную типа int и объявляется, как правило, после объявления массивов буферов индикатора, вместе с глобальными переменными, например в индикаторе MACD:
Объявляются два хэндла — int ExtFastMaHandle и int ExtSlowMaHandle.
Здесь хэндлы индикаторов — это указатели на индикатор скользящего среднего с разными периодами 12 и 26.
Объявив эти переменные, мы естественно реально ничего не получаем, так как объекта индикатора, данные которого мы хотим использовать, еще не существует.
Создать в глобальном кеше клиентского терминала копию соответствующего технического индикатора и получить ссылку на нее можно несколькими способами.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии