Да, массивы могут приподнести сюрпризы в MQL4. Смотрите ветку https://www.mql5.com/ru/forum
Благодарю, Rosh, за ссылку.
Оказывается об этой проблеме заговорили более года назад, "а воз и ныне там..." Не понимаю разработчиков. Ведь можно же в справке честно написать, что локальные массивы требуют явной инициализации. И все. Не будет досадной траты времени на то, чтобы устанавливать это экспериментальным путем.
Частично указано в справке по функции ArrayResize():
Устанавливает новый размер в первом измерении массива. При успешном выполнении функция возвращает количество всех элементов, содержащихся в массиве после изменения размера, в противном случае возвращает -1, и массив не меняет размеры.
Замечание: массив, объявленный на локальном уровне в какой-либо
функции, у которого был изменен размер, останется неизменным после
завершения работы функции. При повторном вызове функции такой массив
будет иметь размер, отличный от объявленного.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Приветствую всех.
Поиск причины странного поведения собственного индикатора привел к излагаемому здесь результату.
В разделе "Инициализация переменных" справочной системы (223 билд) читаем:
Создаем простой индикатор.
Вариант 1:
Ясно, что индикатор ничего не рисует, результат смотрим в окне «Терминал» на закладке Эксперты. Видим:
Неожиданный результат - только один раз проходит инициализация элементов массива, далее локальный массив ведет себя как статический.
Вариант 2. Читаем об инициализации массивов:
Исправляем строку кода, помеченную /*!*/ на:
и имеем:
Каждый раз обнуляется только 0-ой элемент массива, в остальном – аналогично предыдущему случаю.
Вариант 3. Bypass несложен. Добавим после строки /*!*/ вызов:
Теперь все в порядке:
Вывод. Да он уже сформулирован в заголовке.
Скорее всего, программеры с многолетним опытом уже натыкались на это, а для новичков мой пост будет предостережением от досадной ошибки. Ну а если разработчики компилятора исправят либо инициализацию локальных массивов, либо описание в справке, будет совсем хорошо.