Продвинутое использование торговой платформы MetaTrader 5. Создание индикаторов и торговых роботов на MQL5 и Python. Издание 3-е, исправленное и дополненное. Тимур Машнин
Чтение книги онлайн.

Читать онлайн книгу Продвинутое использование торговой платформы MetaTrader 5. Создание индикаторов и торговых роботов на MQL5 и Python. Издание 3-е, исправленное и дополненное - Тимур Машнин страница 8

СКАЧАТЬ rel="nofollow" href="#_48.jpg"/>

      Поэтому, если вы хотите при расчетах использовать измененное значение входного параметра, нужно использовать промежуточную переменную.

      Помимо 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 одновременно объявить статическую глобальную переменную:

СКАЧАТЬ