Продвинутое использование торговой платформы MetaTrader 5. Создание индикаторов и торговых роботов на MQL5 и Python. Издание 3-е, исправленное и дополненное
В принципе, статическая переменная, объявленная там же, где и глобальная переменная, ничем не отличается от глобальной переменной.
Хитрость начинается, если локальную переменную объявить с модификатором static.
В этом случае, после выполнения блока кода, память, выделенная под статическую переменную, не освобождается. И при следующем выполнении того же блока кода, предыдущее значение статической переменной можно использовать.
Хотя область видимости такой статической переменной ограничивается те же самым блоком кода, в котором она была объявлена.
extern переменные это аналог статических глобальных переменных. Нельзя объявить локальную переменную с модификатором extern.
Отличие extern переменных от статических глобальных переменных проще всего продемонстрировать на индикаторе MACD.
Индикатор MACD имеет включаемый файл MovingAverages, обозначенный с помощью директивы #include и расположенный в папке Include.
Если в файле MovingAverages и файле MACD одновременно объявить extern-переменную: