Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5. Издание 2-е, исправленное и дополненное. Тимур Машнин. Читать онлайн. Newlib. NEWLIB.NET

Автор: Тимур Машнин
Издательство: Издательские решения
Серия:
Жанр произведения: Компьютеры: прочее
Год издания: 0
isbn: 9785449681850
Скачать книгу
их значение не может быть изменено в любом месте программы.

      Если глобальную или локальную переменную объявить со спецификатором 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.

      Объявив эти переменные, мы естественно