Работа с таймсериями в Стандартной Библиотеке - страница 2

 

Я конечно извиняюсь, но класс CiHigh не является классом буфера значений High. Это оболочка для буфера (для совместимости с индикаторами и другими таймсериями), а сам буфер внутри.

Перебирать данные можно так:

int    total=1000; // хочу просмотреть 1000 значений
double high;
for(int i=0;i<total;i++)
  {
   if((high=High(i))== EMPTY_VALUE) break;
   // получено значение
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
uncleVic:
 

Я конечно извиняюсь, но класс CiHigh не является классом буфера значений High. Это оболочка для буфера (для совместимости с индикаторами и другими таймсериями), а сам буфер внутри.

Понятно. Я так этот класс и понимал.

А как понять, сколько значений в буфере ?

Вроде как функция Total() именно для этого и предназначена ?  

 Перебирать данные можно так:

Да, как выход этот вариант, конечно, сойдет. То есть, получается, что в объекте таймсерии нет стандартных методов для получения размера буффера значений. Жаль.

Хотел было создать класс-наследник СMyHigh, в котором переопределить функции ресайза и получения размера (чтобы хранить размер буффера внутри этой оболочки), но столкнулся с тем, что в этом случае придется переписывать и класс CExpert - в нем ведь создаются объекты CiHigh, а не СMyHigh...

Неприятно...   Выходит, что в текущей реализации Стандартной Библиотеки размер внутреннего буффера надо хранить в отдельной переменной вне оболочки. И перебирать значения, основываясь на значениях EMPTY_VALUE.

А элементы CiTime, перебирать, основываясь на нулевых значенях ?

Мне кажется, это потенциально "багогенерирующее" место Стандартной Библиотеки...

Ну что же... Ничего не остается, как запоминать размер буффера вне оболочки...  

 

 

Laryx:

Мне кажется, это потенциально "багогенерирующее" место Стандартной Библиотеки...

Ну что же... Ничего не остается, как запоминать размер буффера вне оболочки...  

LaryxВы большой молодец, что заострили внимание на размере буффера значений! Может заявка в Сервисдеск что-то поможет улучшить...

Вижу такой "кривой" способ решения проблемы: самому вручную добавить данные-член (e.g. m_buffer_length) и функцию-член в файл, где определяется класс CiHigh, для работы с размером буфера. Тогда глобально ничего не придётся переписывать в других инклудниках...

 
denkir:
 

Вижу такой "кривой" способ решения проблемы: самому вручную добавить данные-член (e.g. m_buffer_length) и функцию-член в файл, где определяется класс CiHigh, для работы с размером буффера. Тогда глобально ничего не придётся переписывать в других инклудниках...

Как же ? А CExpert ? Таймсерии создаются именно в нем - а значит, и его придется переписывать, а он - весьма объемный, не хочется с этим связываться.

Как "костыль" - сохраняю размер буффера во внешней переменной своего Эксперта, наследника от СExpert.

В сервисдеск - да, наверно, напишу. 

 

Написал в Сервисдеск... Посмотрим, что скажут...

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 

Ответили:

 

Добавлен метод в класс CSeries

int BufferSize(void);

Возвращает количество доступных данных в буфере таймсерии или индикатора.

 

Значит, я все понял правильно, действительно, в таймсериях не было функции, которая возвращает объем буффера. Теперь - будет. Нормально.  

 
Laryx:

Значит, я все понял правильно, действительно, в таймсериях не было функции, которая возвращает объем буффера. Теперь - будет. Нормально.  

5++