Инициализация динамического массива с типом данных "структура". - страница 2

 
Igor Makanu:

зависит от структуры данных, которую Вы хотите хранить/обрабатывать

если Вы можете "влезть" в double - однозначно индикаторные буфера с параметром INDICATOR_CALCULATIONS , эти буфера терминал сам и сдвигает по открытию бара и память для них распределяет

А вот про то, что там тип double я не подумал.

Тогда не получится с привязкой к индикаторным буферам, т.к. у меня в структуре присутствуют перечисления.

 
White Rabbit:

А вот про то, что там тип double я не подумал.

Тогда не получится с привязкой к индикаторным буферам, т.к. у меня в структуре присутствуют перечисления.

во первых перечисления "enum" - это int (возможно даже short, не пробовал) , то есть в 64 бита double он влетает со свистом

во вторых что-то не так с исходной подачей: вы уверенны что все данные 500тысяч экземпляров(баров) вам постоянно нужны ?

 

Если кому-то интересно, то вышел из ситуации следующим образом:

1. Написал свою функцию ArrayInitialize(), которая выполняет:

ArrayFree(array)
ArrayResize(array,Bars(_Symbol,PERIOD_CURRENT))

2. В функции, которая выполняет копирование и обработку, перед всеми действиями добавил проверку

if (ArraySize(Candle)!=Bars(_Symbol,PERIOD_CURRENT))
    ArrayResize(Candle,(Bars(_Symbol,PERIOD_CURRENT)),1000);
 
White Rabbit:

Если кому-то интересно, то вышел из ситуации следующим образом:

1. Написал свою функцию ArrayInitialize(), которая выполняет:

2. В функции, которая выполняет копирование и обработку, перед всеми действиями добавил проверку

Bars() может вернуть ноль.
 
Artyom Trishkin:
Bars() может вернуть ноль.

Да, я в курсе, об этом в справке написано.

Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, 
или данные таймсерии в момент вызова функции не синхронизированы с торговым сервером, 
то функция вернет нулевое значение.
 
White Rabbit:

Если кому-то интересно, то вышел из ситуации следующим образом:

1. Написал свою функцию ArrayInitialize(), которая выполняет:

2. В функции, которая выполняет копирование и обработку, перед всеми действиями добавил проверку

В mql5 после ресайза массива в нем может быть все, что угодно. Если это массив структур, то в структуру надо добавить конструктор, и в нем инициализировать поля. Тогда это сработает.

 
Dmitry Fedoseev:

В mql5 после ресайза массива в нем может быть все, что угодно. Если это массив структур, то в структуру надо добавить конструктор, и в нем инициализировать поля. Тогда это сработает.

Да, все верно.

На первой странице обсуждения моего топика я указал, что конструктор в структуре у меня присутствует и при ресайзе все поля инициализируются.

Спасибо за замечание :)


White Rabbit:

Да, я в курсе. Конструктор объявлен. Я только что отдебажил ArrayInitialize() и она работает только при связывании инициализируемого буфера с индикаторным буфером, а я этого не знал. Как я понял, ArrayInitialize() выполняет ArrayFree(),ArrayResize(),ArrayFill(). По сути моего вопроса, мне нужен ArrayResize() + конструктор структуры.

Причина обращения: