Essa classe pode reduzir a memória consumida pelo indicador?
E quanto à memória consumida por um Expert Advisor que usa vários desses indicadores?
Ou a tarefa foi definida de forma diferente - apenas para fornecer acesso conveniente a dados de fluxo contínuo?
Essa classe pode reduzir a memória consumida pelo indicador?
E quanto à memória consumida por um Expert Advisor que usa vários desses indicadores?
Ou a tarefa foi definida de forma diferente - apenas para fornecer acesso conveniente a dados de fluxo contínuo?
É claro que sim. A classe foi escrita precisamente para reduzir a memória. Em todos os buffers, incluindo buffers para dados intermediários, apenas o tamanho dos últimos dados especificados pelo usuário é armazenado na memória.
Eles deveriam publicar exemplos.
Deve publicar exemplos.
Exemplos
No momento da publicação, há três exemplos de uso do buffer em anel:
Class for building Moving Average
Class for building Average True Range
Class for building Average Directional Movement Index.
Já existem exemplos, apenas o segundo e o terceiro links estão quebrados.
Uma pequena analogia para melhor compreensão:
- o buffer em anel nessa implementação é um análogo de uma série temporal, ou seja, os dados mais recentes têm índice 0, o "tamanho do buffer" mais antigo é -1
- o tamanho do buffer em anel é um análogo do TERMINAL_MAXBARS, mas, ao contrário do TERMINAL_MAXBARS, o tamanho do buffer é definido pelo usuário durante a inicialização e pode ser alterado durante o uso, mantendo os dados mais recentes.
- Assim como no TERMINAL_MAXBARS, os dados além do tamanho do buffer não estão disponíveis, mas todos os dados recentes dentro do tamanho do buffer estão disponíveis.
- Os dados do indicador podem ser armazenados no buffer de anel como no buffer do indicador, mas para exibi-los no gráfico é necessário copiar os dados para o buffer do indicador.
- Se os dados do indicador não precisarem ser exibidos, eles não precisarão ser copiados para os buffers de indicadores, mas usados para seus cálculos diretamente do buffer de anel (veja exemplos), o que economiza significativamente memória e tempo ao recalcular o indicador.
- Os dados do indicador podem ser armazenados no buffer de anel como no buffer de indicador, mas, para exibi-los no gráfico , é necessário copiar os dados para o buffer de indicador.
- Se os dados do indicador não precisarem ser exibidos, eles não precisarão ser copiados para os buffers de indicadores, mas usados para seus cálculos diretamente do buffer de anel (consulte os exemplos), o que economiza bastante memória e tempo ao recalcular o indicador.
É sobre isso que eu estava perguntando.
Como é possível economizar memória se você ainda precisa de um buffer de indicador completo?
Acontece que você pode economizar memória somente se transferir cálculos intermediários para o buffer de anel, e isso não resolve todos os problemas.
O que eu quero é que um indicador com 20 buffers exibidos, calculando as últimas 1.000 barras, ocupe a mesma quantidade de memória quando "Max. bars in window" = 1.000 e quando "Max. bars in window" = 9999999999.
E isso é aparentemente impossível =(
É isso que eu estava perguntando.
Como você economiza memória se ainda precisa de um buffer de indicador completo?
Acontece que você pode economizar memória somente se transferir cálculos intermediários para o buffer em anel, e isso não resolve todos os problemas.
O que eu quero é que um indicador com 20 buffers exibidos, calculando as últimas 1.000 barras, ocupe a mesma quantidade de memória quando "Max. bars in window" = 1.000 e quando "Max. bars in window" = 9999999999.
E isso é aparentemente impossível =(
Sim, é possível salvar apenas os dados que não precisam ser armazenados no buffer do indicador.
Há algumas ideias de como você pode reduzir o consumo de memória nesse caso também.
Os buffers de indicadores são necessários em dois casos: quando você precisa ver uma imagem no gráfico e quando precisa obter dados dos buffers de indicadores em outros indicadores ou no Expert Advisor. Por exemplo, no testador (não no modo de visualização), você pode usar o buffer de anel em vez do buffer de indicador, se ele foi usado somente para visualização, e no modo normal o buffer de indicador usual. Isso permitirá que você economize memória durante a otimização. Eu até consegui aumentar a velocidade da otimização. Da mesma forma, com a transferência de dados dos buffers de indicadores, você pode tentar usar outras formas de obter dados do indicador e, então, usar buffers de anel em vez de buffers de indicadores.
Sim, é possível economizar apenas os dados que não precisam ser armazenados no buffer do indicador.
Há algumas ideias de como você pode, às vezes, reduzir o consumo de memória nesse caso também.
Os buffers de indicadores são necessários em dois casos: quando você precisa ver uma imagem no gráfico e quando precisa obter dados dos buffers de indicadores em outros indicadores ou no Expert Advisor. Por exemplo, no testador (não no modo de visualização), você pode usar o buffer de anel em vez do buffer de indicador, se ele foi usado somente para visualização, e no modo normal o buffer de indicador usual. Isso permitirá que você economize memória durante a otimização. Eu até consegui aumentar a velocidade da otimização. Da mesma forma, com a transferência de dados dos buffers de indicadores, você pode tentar usar outras formas de obter dados do indicador e, então, poderá usar buffers de anel em vez de buffers de indicadores.
É uma pena, é claro, pois eu já estava empolgado.
De qualquer forma, obrigado.
Vou esperar por uma solução normal dos desenvolvedores.
É uma pena, é claro, eu já estava animado.
De qualquer forma, obrigado.
Vou esperar por uma solução normal dos desenvolvedores.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
A classe para criar o buffer anel:
Autor: Konstantin Gruzdev