![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я конечно извиняюсь, но класс CiHigh не является классом буфера значений High. Это оболочка для буфера (для совместимости с индикаторами и другими таймсериями), а сам буфер внутри.
Перебирать данные можно так:
Я конечно извиняюсь, но класс CiHigh не является классом буфера значений High. Это оболочка для буфера (для совместимости с индикаторами и другими таймсериями), а сам буфер внутри.
Понятно. Я так этот класс и понимал.
А как понять, сколько значений в буфере ?
Вроде как функция Total() именно для этого и предназначена ?
Перебирать данные можно так:
Да, как выход этот вариант, конечно, сойдет. То есть, получается, что в объекте таймсерии нет стандартных методов для получения размера буффера значений. Жаль.
Хотел было создать класс-наследник СMyHigh, в котором переопределить функции ресайза и получения размера (чтобы хранить размер буффера внутри этой оболочки), но столкнулся с тем, что в этом случае придется переписывать и класс CExpert - в нем ведь создаются объекты CiHigh, а не СMyHigh...
Неприятно... Выходит, что в текущей реализации Стандартной Библиотеки размер внутреннего буффера надо хранить в отдельной переменной вне оболочки. И перебирать значения, основываясь на значениях EMPTY_VALUE.
А элементы CiTime, перебирать, основываясь на нулевых значенях ?
Мне кажется, это потенциально "багогенерирующее" место Стандартной Библиотеки...
Ну что же... Ничего не остается, как запоминать размер буффера вне оболочки...
Laryx:
Мне кажется, это потенциально "багогенерирующее" место Стандартной Библиотеки...
Ну что же... Ничего не остается, как запоминать размер буффера вне оболочки...
Laryx, Вы большой молодец, что заострили внимание на размере буффера значений! Может заявка в Сервисдеск что-то поможет улучшить...
Вижу такой "кривой" способ решения проблемы: самому вручную добавить данные-член (e.g. m_buffer_length) и функцию-член в файл, где определяется класс CiHigh, для работы с размером буфера. Тогда глобально ничего не придётся переписывать в других инклудниках...
Вижу такой "кривой" способ решения проблемы: самому вручную добавить данные-член (e.g. m_buffer_length) и функцию-член в файл, где определяется класс CiHigh, для работы с размером буффера. Тогда глобально ничего не придётся переписывать в других инклудниках...
Как же ? А CExpert ? Таймсерии создаются именно в нем - а значит, и его придется переписывать, а он - весьма объемный, не хочется с этим связываться.
Как "костыль" - сохраняю размер буффера во внешней переменной своего Эксперта, наследника от СExpert.
В сервисдеск - да, наверно, напишу.
Написал в Сервисдеск... Посмотрим, что скажут...
Ответили:
Добавлен метод в класс CSeries
int BufferSize(void);
Возвращает количество доступных данных в буфере таймсерии или индикатора.
Значит, я все понял правильно, действительно, в таймсериях не было функции, которая возвращает объем буффера. Теперь - будет. Нормально.
Значит, я все понял правильно, действительно, в таймсериях не было функции, которая возвращает объем буффера. Теперь - будет. Нормально.