Не должны затираться данные при вызове ArrayResize.
Проверим
Если приведенный код расположен в теле одной и той же функции, то ничего удивительного нет - на каждой новой итерации массив Bars создается заново с нулевым количеством элементов в первом измерении.
Способы лечения:
1. Объявить массив статическим.
2. Вынести объявление массива на глобальный уровень.
P. S. Название массива совпадает с именем предопределенной переменной. Желательно переименовать массив.
Смотрите также справку https://docs.mql4.com/ru/mql4changes
Старый компилятор MQL4 |
Новый компилятор MQL4 |
Новый компилятор MQL4 с #property strict |
Точки входа init(), start(), deinit() могут иметь любые параметры и любой тип возврата |
init(), start(), deinit(), оставленные для совместимости, и новые OnInit(), OnStart(), OnCalculate(), OnTick(), OnTimer(), OnChartEvent(), OnTester(), OnDeinit() должны точно соответствовать своим сигнатурам |
То же |
Результат возврата из функции init() никак не анализируется исполняющей подсистемой |
Результат возврата из функций init() и OnInit() никак не анализируется исполняющей подсистемой |
При возврате из OnInit() ненулевого значения выполнение эксперта или индикатора прекращается, программа выгружается |
Имена переменных практически любые (кроме зарезервированных слов), включая спецсимволы и точки |
Имена переменных не могут иметь спецсимволы и точки. Список зарезервированных слов расширен, поэтому именами не могут быть такие широко распространенные слова, как short, long, const и т.д. |
То же |
Область видимости переменной - от объявления (даже во вложенном блоке) до конца функции |
То же |
Область видимости переменной - от объявления до конца блока, в котором переменная объявлена |
Неявная инициализация всех переменных (и глобальных и локальных) нулями |
То же |
Инициализация только глобальных переменных. Из локальных переменных неявно инициализируются только строки |
Локальные массивы при выходе из функции не освобождаются |
Локальные массивы освобождаются при выходе из функции |
Локальные массивы освобождаются при выходе из блока {} |
Если приведенный код расположен в теле одной и той же функции, то ничего удивительного нет - на каждой новой итерации массив Bars создается заново с нулевым количеством элементов в первом измерении.
Способы лечения:
1. Объявить массив статическим.
2. Вынести объявление массива на глобальный уровень.
P. S. Название массива совпадает с именем предопределенной переменной. Желательно переименовать массив.
Массив double Bars[] объявлен приватным свойством класса. Функция, которая занимается заполнением массива, это метод класса, который вызывается во время появления нового бара. Данный массив был специально засунут в класс, чтобы избежать "непредвиденного" доступа к нему и изменения какой-либо функцией. Объявление массива статическим не помогло, компилятор ругается (я так понимаю потому что массив инициализирован, как динамический).
P.S. Bars[] - в коде название массива другое и не совпадает с названием предопределенной переменной, для удобства данный массив носит подобное название исключительно на данном форуме.
Всем спасибо!!! Так сказать подтолкнули на путь истинный. Вся проблема заключалась в создании объекта класса, а если быть точнее, в конструкторе. Создание объекта класса происходило в момент образования новой свечи (а не как нужно, во время инициализации), в это же время создавался новый массив, старый перезаписывался, а так как данных не было для заполнения, все элементы забивались "0".
P.S. Всем спасибо за помощь.
P.S.S. Только начинаю осваивать классы.
Если приведенный код расположен в теле одной и той же функции, то ничего удивительного нет - на каждой новой итерации массив Bars создается заново с нулевым количеством элементов в первом измерении.
Способы лечения:
1. Объявить массив статическим.
2. Вынести объявление массива на глобальный уровень.
P. S. Название массива совпадает с именем предопределенной переменной. Желательно переименовать массив.
Не примите за предвзятость.
Имхенько, не бывает статических массивов, а потому - не следует назначать их таковыми; они и так в статическом режиме управления памятью числятся.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте всем!
В чем суть, есть динамический двумерный массив. На каждой итерации цикла происходит изменение размера массива, после чего, якобы в конец массива записываются новые данные.
Интересует вопрос, сохраняются ли ранее записанные данные во время изменения размера массива? Потому что на выходе я получаю массив заполненный нулями, кроме последних записанных данных (они сохраняются).
double Bars[][10000];
ArrayResize(Bars,qwer+1);
for(int i=0;i<k;i++){
Bars[qwer][i]=iTime(NULL,0,i+1);
}
qwer++; //глобальная переменная