Memória média móvel buffer


MetaTrader 5 - Indicadores A classe para desenhar MACD usando o buffer do anel - indicador para MetaTrader 5 A classe CMACDOnRingBuffer foi projetada para o cálculo do indicador técnico Divisão de Convergência Média em Movimento (Muding Average ConvergenceDivergence. MACD) usando o algoritmo do buffer de anel. O arquivo da classe CMACDOnRingBuffer. mqh deve ser colocado na pasta IncOnRingBuffer que precisa ser estabelecida em MQL5Include. Dois arquivos com os exemplos usados ​​pela classe dessa pasta são anexados à descrição. O arquivo com a classe do buffer do anel e a classe de média móvel também devem estar nesta pasta. Para obter os dados calculados do indicador a partir do buffer de anel é possível a partir da matriz usual. Por exemplo: Observe que a indexação no buffer do anel é a mesma que na série temporal. O arquivo TestMACDOnArrayRB. mq5 calcula o indicador com base em séries de tempo de preço. O aplicativo do método MainOnArray () é demonstrado O arquivo TestMACDOnValueRB. mq5 demonstra o uso do método MainOnValue (). Inicialmente, o indicador MACD é calculado e desenhado. Então, com base no buffer do anel deste indicador, um indicador MACD mais é desenhado. O resultado do trabalho do TestMACDOnArrayRB. mq5 com o tamanho do buffer de anel de 256 elementos o resultado do trabalho do TestMACDOnValueRB. mq5 com o tamanho do buffer do anel de 256 elementosMetaTrader 5 - Indicadores A classe para o desenho de Média em Movimento usando O indicador de buffer do anel para o MetaTrader 5 A classe CMAOnRingBuffer foi projetada para o cálculo de médias móveis (média móvel) usando o algoritmo do buffer do anel. O arquivo da classe CMAOnRingBuffer. mqh deve ser colocado na pasta IncOnRingBuffer que precisa ser estabelecida no MQL5Include. Dois arquivos com os exemplos usados ​​pela classe dessa pasta são anexados à descrição. O arquivo com a classe do buffer do anel também deve estar nesta pasta. Para obter os dados calculados do indicador a partir do buffer de anel é possível a partir da matriz usual. Por exemplo: Observe que a indexação no buffer do anel é a mesma que em uma série de tempo. O indicador calcula o arquivo TestMAOnArrayRB. mq5 com base nas séries de tempo de preço. O aplicativo do método MainOnArray () está demonstrado O arquivo TestMAOnValueRB. mq5 demonstra o uso do método MainOnValue (). No início, o indicador MA é calculado e desenha. Então, com base no buffer do anel desse indicador, um outro indicador é calculado. O resultado do trabalho do TestMAOnArrayRB. mq5 com o tamanho do buffer do anel de 256 elementos O resultado do trabalho do TestMAOnValueRB. mq5 com o tamanho do buffer de anel de 256 elementos Eu sei que isso é viável com o impulso de acordo com: Mas Eu realmente gostaria de evitar o uso de impulso. Eu mencionei e não encontrei nenhum exemplo adequado ou legível. Basicamente eu quero acompanhar a média móvel de um fluxo contínuo de um fluxo de números de ponto flutuante usando os 1000 números mais recentes como amostra de dados. Qual é a maneira mais fácil de alcançar isso, experimentei usar uma matriz circular, uma média móvel exponencial e uma média móvel mais simples e descobriu que os resultados da matriz circular adequavam minhas necessidades. 12 de junho 12 às 4:38 Se suas necessidades são simples, você pode tentar usar uma média móvel exponencial. Simplificando, você faz uma variável de acumulador e, à medida que seu código examina cada amostra, o código atualiza o acumulador com o novo valor. Você escolhe um alfa constante que está entre 0 e 1 e calcula isso: você precisa apenas encontrar um valor de alfa onde o efeito de uma determinada amostra dura apenas cerca de 1000 amostras. Hmm, na verdade, não tenho certeza de que isso é adequado para você, agora que eu já coloquei aqui. O problema é que 1000 é uma janela bastante longa para uma média móvel exponencial. Não tenho certeza se houver um alfa que espalhe a média nos últimos 1000 números, sem fluxo inferior no cálculo do ponto flutuante. Mas se você quisesse uma média menor, como 30 números ou mais, esta é uma maneira muito fácil e rápida de fazê-lo. Respondeu 12 de junho 12 às 4:44 1 na sua postagem. A média móvel exponencial pode permitir que o alfa seja variável. Assim, isso permite que ele seja usado para calcular médias base de tempo (por exemplo, bytes por segundo). Se o tempo desde a última atualização do acumulador for superior a 1 segundo, você deixa alfa ser 1.0. Caso contrário, você pode deixar alpha be (usecs desde a última atualização1000000). Ndash jxh 12 de junho 12 às 6:21 Basicamente eu quero acompanhar a média móvel de um fluxo contínuo de um fluxo de números de ponto flutuante usando os 1000 números mais recentes como uma amostra de dados. Observe que as atualizações abaixo atualizam o total como elementos como adicionados, evitando a trajetória O (N) cara para calcular a soma - necessária para a média - na demanda. Total é feito um parâmetro diferente de T para suportar, e. Usando um longo tempo quando totalizando 1000 long s, um int para char s, ou um duplo para float total s. Isso é um pouco falho em que numsamples poderia ultrapassar o INTMAX - se você se importar, você poderia usar um sinal não assinado por muito tempo. Ou use um membro extra de dados do bool para gravar quando o recipiente é preenchido pela primeira vez ao andar de bicicleta numsamples em torno da matriz (melhor então renomeado algo inócuo como pos). Respondeu 12 de junho 12 às 5:19 um assume que quotvoid operator (T sample) quot é realmente quotvoid operatorltlt (T sample) quot. Ndash oPless Jun 8 14 às 11:52 oPless ahhh. Bem manchado. Na verdade, eu quis dizer que ele seria um operador vazio () (amostra T), mas é claro que você poderia usar qualquer notação que você gostasse. Vou consertar, obrigado. Ndash Tony D 8 de junho às 14:27

Comments