Получится ли с помощью этого класса уменьшить потребляемую индикатором память?
А потребляемую экспертом, использующим несколько таких индикаторов?
Или задача ставилась другая - просто обеспечить удобный доступ к потоковым данным?
Получится ли с помощью этого класса уменьшить потребляемую индикатором память?
А потребляемую экспертом, использующим несколько таких индикаторов?
Или задача ставилась другая - просто обеспечить удобный доступ к потоковым данным?
Конечно уменьшит. Именно для уменьшения памяти и писался класс. Во всех буферах, включая буфера для промежуточных данных, в памяти хранится только тот размер последних данных, который указывается пользователем.
Должны опубликовать примеры.
Должны опубликовать примеры.
Примеры
На момент публикации подготовлено три примера использования кольцевого буфера:
Класс для построения Moving Average
Класс для построения Average True Range
Класс для построения Average Directional Movement Index
Уже есть примеры, только 2 и 3 ссылки битые.
Немного аналогии для большего понимания:
- кольцевой буфер в данной реализации это аналог таймсерии, т.е. самые свежие данные имеют индекс 0, самые старые "размер буфера"-1
- размер кольцевого буфера это аналог TERMINAL_MAXBARS, но в отличии от TERMINAL_MAXBARS, размер буфера устанавливает пользователь во время инициализации и может менять в процессе использования, сохраняя, при этом, самые последние данные.
- точно так же, как и с TERMINAL_MAXBARS, данные за пределом размера буфера не доступны, но все последние данные в пределах размера буфера доступны.
- в кольцевом буфере можно хранить данные индикатора, как в индикаторном буфере, но чтобы их отобразить на графике нужно скопировать данные в индикаторный буфер.
- если данные индикатора не нужно отображать, то их не нужно копировать в индикаторные буфера, а использовать для своих расчетов прямо из кольцевого буфера (смотрите примеры), что существенно позволяет экономить память и время при перерасчетах индикатора.
- в кольцевом буфере можно хранить данные индикатора, как в индикаторном буфере, но чтобы их отобразить на графике нужно скопировать данные в индикаторный буфер.
- если данные индикатора не нужно отображать, то их не нужно копировать в индикаторные буфера, а использовать для своих расчетов прямо из кольцевого буфера (смотрите примеры), что существенно позволяет экономить память и время при перерасчетах индикатора.
Я об этом и спрашивал.
Каким образом экономится память, если все равно нужен полноценный индикаторный буфер?
Получается, что сэкономить можно, только если перенести в кольцевой буфер промежуточные расчеты, а это решает далеко не все проблемы.
Чего хочется мне - это чтоб индикатор с 20 отображаемыми буферами, обсчитывающий последние 1000 баров, занимал одинаковое количество памяти при "Макс. баров в окне" = 1000 и при "Макс. баров в окне" = 9999999999.
А это, видимо, невозможно =(
Я об этом и спрашивал.
Каким образом экономится память, если все равно нужен полноценный индикаторный буфер?
Получается, что сэкономить можно, только если перенести в кольцевой буфер промежуточные расчеты, а это решает далеко не все проблемы.
Чего хочется мне - это чтоб индикатор с 20 отображаемыми буферами, обсчитывающий последние 1000 баров, занимал одинаковое количество памяти при "Макс. баров в окне" = 1000 и при "Макс. баров в окне" = 9999999999.
А это, видимо, невозможно =(
Да, экономить возможно только на тех данных, которые не нужно загонять в индикаторный буфер.
Есть пара идей как и в этом случае иногда можно уменьшить потребление памяти.
Индикаторные буфера нужны в двух случая: когда нужно видеть на графике картинку и когда из индикаторных буферов нужно получать данные в других индикаторах или эксперте. Например, в тестере (не в режиме визуализации) можно использовать кольцевой буфер вместо индикаторного, если он использовался исключительно для визуализации, а в обычном режиме обычный индикаторный. Это позволит при оптимизации экономить память. У меня даже получалось увеличить скорость оптимизации. Аналогично с передачей данных из индикаторных буферов, можно попробовать использовать другие способы получения данных из индикатора и тогда можно использовать кольцевые вместо индикаторных.
Да, экономить возможно только на тех данных, которые не нужно загонять в индикаторный буфер.
Есть пара идей как и в этом случае иногда можно уменьшить потребление памяти.
Индикаторные буфера нужны в двух случая: когда нужно видеть на графике картинку и когда из индикаторных буферов нужно получать данные в других индикаторах или эксперте. Например, в тестере (не в режиме визуализации) можно использовать кольцевой буфер вместо индикаторного, если он использовался исключительно для визуализации, а в обычном режиме обычный индикаторный. Это позволит при оптимизации экономить память. У меня даже получалось увеличить скорость оптимизации. Аналогично с передачей данных из индикаторных буферов, можно попробовать использовать другие способы получения данных из индикатора и тогда можно использовать кольцевые вместо индикаторных.
Жаль, конечно, я уже успел обрадоваться.
Все равно спасибо.
Буду ждать нормального решения от разработчиков.
Жаль, конечно, я уже успел обрадоваться.
Все равно спасибо.
Буду ждать нормального решения от разработчиков.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Класс для создания кольцевого буфера:
Автор: Konstantin Gruzdev