Я правильно понял, что объединить массивы используемые как буфера данных индикатора в один массив массивов (либо массив структур/классов) невозможно?
Взять/сохранить указатель на такой массив/буфер тоже нельзя?
Т.е. если у меня 28 буферов, то их не получится обработать красиво в цикле а нужно будет 28 раз вставить одинаковые блоки кода с разницей лишь в названии буфера/массива.
А так пробовали?
#define TOTAL_BUFFERS 28 double DataBuffer[TOTAL_BUFFERS][]; void Func(double &Arr, int Index) { SetIndexBuffer(Index, Arr, INDICATOR_DATA); } int OnInit() { for (int i=0;i<=TOTAL_BUFFERS-1;i++) { Func(DataBuffer[i],i); } }
А так пробовали?
Попробовал.
Требует определения последней размерности массива - '[' - invalid index value
т.е. массив указателей вникуда (нулевых) впринципе недопустим.
Но даже если полностью определить размер
не может передать массив - invalid array access
Я правильно понял, что объединить массивы используемые как буфера данных индикатора в один массив массивов (либо массив структур/классов) невозможно?
Взять/сохранить указатель на такой массив/буфер тоже нельзя?
Т.е. если у меня 28 буферов, то их не получится обработать красиво в цикле а нужно будет 28 раз вставить одинаковые блоки кода с разницей лишь в названии буфера/массива.
Структура или класс
В MQL5 нет возможности использовать указатель на базовые переменные или массив их них. Но можно использовать указатели на экземпляры структур и классов.
Поэтому можно объявить класс для буфера:
class IndicatorBuffer { public: double data[]; };
Теперь можете объявить массив из буферов, менять его размер динамически.
IndicatorBuffer buffer[];
ArrayResize( bufer , sizeOfBuffer );
А доступ к данным осуществлять так:
SetIndexBuffer( 0 , buffer[ index ].data );
Структура или класс
Массив/Структура/Класс, без разницы. Любая сущность, которая позволит объединить однотипные массивы данных и обращаться к ним итеративно в цикле.
В MQL5 нет возможности использовать указатель на базовые переменные или массив их них. Но можно использовать указатели на экземпляры структур и классов.
Поэтому можно объявить класс для буфера:
Теперь можете объявить массив из буферов, менять его размер динамически.
А доступ к данным осуществлять так:
Спасибо большое, это действительно работает!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я правильно понял, что объединить массивы используемые как буфера данных индикатора в один массив массивов (либо массив структур/классов) невозможно?
Взять/сохранить указатель на такой массив/буфер тоже нельзя?
Т.е. если у меня 28 буферов, то их не получится обработать красиво в цикле а нужно будет 28 раз вставить одинаковые блоки кода с разницей лишь в названии буфера/массива.