Média móvel exponencial - EMA BREAKING DOWN Média móvel exponencial - EMA As EMAs de 12 e 26 dias são as médias de curto prazo mais populares e são usadas para criar indicadores como a divergência de convergência média móvel (MACD) eo oscilador de preço percentual (PPO). Em geral, as EMAs de 50 e 200 dias são usadas como sinais de tendências de longo prazo. Os comerciantes que empregam análises técnicas consideram as médias móveis muito úteis e perspicazes quando aplicadas corretamente, mas criam havoc quando usadas de forma incorreta ou são mal interpretadas. Todas as médias móveis comumente utilizadas na análise técnica são, por sua própria natureza, indicadores de atraso. Consequentemente, as conclusões extraídas da aplicação de uma média móvel a um gráfico de mercado específico devem ser confirmar um movimento de mercado ou indicar sua força. Muitas vezes, no momento em que uma linha de indicador de média móvel fez uma mudança para refletir um movimento significativo no mercado, o ponto ótimo de entrada no mercado já passou. Um EMA serve para aliviar esse dilema até certo ponto. Como o cálculo EMA coloca mais peso sobre os dados mais recentes, ele abraça a ação do preço um pouco mais apertado e, portanto, reage mais rápido. Isso é desejável quando um EMA é usado para derivar um sinal de entrada comercial. Interpretando o EMA Como todos os indicadores de média móvel, eles são muito mais adequados para mercados de tendências. Quando o mercado está em uma tendência de alta forte e sustentada. A linha indicadora EMA também mostrará uma tendência de alta e vice-versa para uma tendência descendente. Um comerciante vigilante não só prestará atenção na direção da linha EMA, mas também a relação da taxa de mudança de uma barra para a próxima. Por exemplo, à medida que a ação do preço de uma forte tendência de alta começa a achatar e reverter, a taxa de troca de EMAs de uma barra para a próxima começará a diminuir até que a linha do indicador aplique e a taxa de mudança seja zero. Devido ao efeito de atraso, neste ponto, ou mesmo algumas barras anteriores, a ação de preço já deveria ter sido revertida. Portanto, segue que a observação de uma diminuição consistente na taxa de mudança da EMA poderia ser usada como um indicador que poderia contrariar ainda mais o dilema causado pelo efeito de atraso das médias móveis. Os usos comuns das EMA EMAs são comumente usados em conjunto com outros indicadores para confirmar movimentos significativos no mercado e avaliar sua validade. Para os comerciantes que comercializam mercados intradía e de rápido movimento, o EMA é mais aplicável. Muitas vezes, os comerciantes usam EMAs para determinar um viés de negociação. Por exemplo, se um EMA em um gráfico diário mostra uma forte tendência ascendente, uma estratégia de comerciantes intradiários pode ser trocar apenas pelo lado longo em um gráfico intradía. Eu sei que isso é viável com o aumento de acordo com: Mas eu realmente gostaria de Evite usar 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 números 1000 mais recentes como uma amostra de dados. Qual é a maneira mais fácil de conseguir 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 correspondiam melhor às 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, conforme 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ê só precisa encontrar um valor de alfa onde o efeito de uma determinada amostra dura apenas cerca de 1000 amostras. Hmmm, na verdade, não tenho certeza de que isso é adequado para você, agora que eu 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. Então isso permite que ele seja usado para calcular médias base de tempo (por exemplo, bytes por segundo). Se o tempo decorrido desde a última atualização do acumulador for superior a 1 segundo, você deixa alfa ser 1.0. Caso contrário, você pode deixar o alfa ser (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 amostra de dados. Observe que as atualizações abaixo atualizam o total como elementos como adicionados substituídos, evitando a passagem O (N) dispendiosa para calcular a soma - necessária para a demanda média. 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 adicional de dados do bool para gravar quando o recipiente é preenchido pela primeira vez ao andar de bicicleta numsamples em torno da matriz (o melhor que renomeou 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 visto. 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 14 às 14: 27 É possível implementar uma média móvel em C sem a necessidade de uma janela de amostras Achei que posso otimizar um pouco, escolhendo um tamanho de janela que seja um poder de dois para permitir o bit - shifting em vez de dividir, mas não precisar de um buffer seria bom. Existe uma maneira de expressar um novo resultado de média móvel apenas como função do resultado antigo e da nova amostra. Definir um exemplo de média móvel, em uma janela de 4 amostras para ser: Adicionar nova amostra e: Uma média móvel pode ser implementada de forma recursiva , Mas para uma computação exata da média móvel você deve lembrar a amostra de entrada mais antiga na soma (ou seja, a no seu exemplo). Para um comprimento N média móvel você calcula: onde yn é o sinal de saída e xn é o sinal de entrada. Eq. (1) pode ser escrito de forma recursiva, então você sempre precisa se lembrar da amostra xn-N para calcular (2). Conforme indicado por Conrad Turner, você pode usar uma janela exponencial (infinitamente longa) em vez disso, o que permite calcular a saída apenas da saída passada e da entrada atual: mas esta não é uma média móvel padrão (não ponderada), mas exponencialmente Média móvel ponderada, onde as amostras no passado obtêm um peso menor, mas (pelo menos em teoria) você nunca esquece nada (os pesos ficam menores e menores para amostras no passado). Eu implementei uma média móvel sem memória de item individual para um programa de rastreamento de GPS que escrevi. Comece com 1 amostra e divida em 1 para obter o valor médio atual. Em seguida, adicione uma amostra e divida em 2 para a média atual. Isso continua até chegar ao comprimento da média. Cada vez, adiciono na nova amostra, obtenho a média e retire essa média do total. Eu não sou um matemático, mas isso pareceu uma boa maneira de fazê-lo. Achei que isso tornaria o estômago de um verdadeiro matemático, mas, é uma das maneiras aceitas de fazê-lo. E funciona bem. Basta lembrar que, quanto mais alto for seu comprimento, mais lento seguirá o que deseja seguir. Isso pode não ser importante na maioria das vezes, mas ao seguir os satélites, se você estiver lento, a trilha pode estar longe da posição atual e parecerá ruim. Você poderia ter uma lacuna entre o Sáb e os pontos de fuga. Eu escolhi um comprimento de 15 atualizado 6 vezes por minuto para obter um alisamento adequado e não chegar muito longe da posição real de SAT com os pontos de trilhos alisados. Respondeu 16 de novembro 16 às 23:03 inicialize o total 0, count0 (cada vez que vê um novo valor) Então uma entrada (scanf), um add totalnewValue, um incremento (contagem), uma média de divisão (quantidade total) Esta seria uma média móvel em relação a Todas as entradas Para calcular a média apenas nas últimas 4 entradas, seria necessário 4 variáveis de entrada, talvez copiando cada entrada para uma variável de entrada mais antiga e, em seguida, calculando a nova média móvel. Como soma das 4 variáveis de entrada, divididas por 4 (o turno direito 2 seria Bom, se todas as entradas fossem positivas para que o cálculo médio fosse respondido em 3 de fevereiro de 15 às 4:06 Isso realmente calculará a média total e NÃO a média móvel. À medida que a contagem aumenta, o impacto de qualquer nova amostra de entrada se torna ndash extremamente lento Hilmar Feb 3 15 às 13:53 Sua resposta 2017 Stack Exchange, algoritmo IncC para média móvel exponencial de latência zero Última modificação: 2012-08-13 Tenho tentado implementar um corte de baixa freqüência em c que essencialmente leva um fluxo de números e smoo A saída dos resultados (filtragem do movimento de alta freqüência), no entanto, é importante que os números ponderados da frente sejam considerados imediatamente, pois os dados são críticos no tempo (é controlar uma base de simulação de movimento usando o resultado de um software de jogo). Eu tenho um algoritmo de média móvel ponderada trabalhando, mas poderia fazer com algo um pouco mais responsivo no front-end, e eu achei isso: - O pseudo-código é o seguinte: Entradas: Preço (NumericSeries), Periodo (NumericSimple) Variáveis: Fator (0), lag (0) se CurrentBar lt 1 começar ZLEMA Fator de preço 2 (Período1) atraso (Período-1) 2 final, então, começar Fator ZLEMA (2Preço-Pricelag) (1 fator) ZLEMA1 fim Eu traduzi isso em Para C e meu código é o seguinte: No entanto, ele não parece se comportar bem como espero. Parece estar quase lá, mas às vezes eu recebo um valor ligeiramente inferior ao de todos os itens na fila (quando eles são todos mais altos). Minha fila e o número de itens nele são passados como parâmetros, sendo o mais recente na frente em todos os momentos, também passo um contador de incrementos a partir de 0, conforme exigido pela função. Eu não tenho certeza de que interpretei o significado do ZLEMA1 corretamente, pois não está claro em seu pseudocódigo, então eu considerei que isso é o último zlema de chamadas e também suponho que o preço realmente significa Price0. Talvez eu tenha feito isso errado. Eu deveria estar copiando os valores calculados zlema reais de volta para minha fila original antes da próxima chamada. Eu não mudo a fila original, exceto simplesmente deslocando todos os valores um para o final e inserindo o último no começo . O código que eu uso para fazer isso é: ficaria extremamente agradecido se alguém com uma melhor compreensão da matemática pudesse sanar a sanidade verifique isso para mim para ver se eu tenho algo um pouco errado. Agradeço muito com antecedência se você puder ajudar. Em primeiro lugar, agradeço tudo por Sua contribuição, muito apreciada. Isso faz sentido, acho, então suponho que o melhor que eu possa esperar é simplesmente uma média móvel exponencial, aceitando que haverá um pouco de atraso, mas isso será minimizado pela ponderação frontal mais pesada do que a dada em tipical ponderada Média móvel também tenho esse algoritmo, mas um problema semelhante na medida em que os valores não parecem bastante corretos (a menos que esta seja a natureza da fórmula). Por exemplo, diga que minha matriz contém 16 valores, todos os 0.4775 - a saída é 0.4983, mas espero que seja 0.4775 Isso parece diretamente para você. Média móvel exponencial. Float ema (float vals, int numVals, int currentSample) static float factor 0 static float lastema 0 float ema if (currentSample lt 1) ema vals0 factor 2.0 ((float) numVals) 1.0) else ema (factor vals0) ((1.0 - factor) lastema) lastema ema return ema Inversamente, as vezes a saída é inferior a todas e cada uma das entradas, mesmo que todas sejam mais altas. É chamado da mesma maneira que zlema (.) Acima, com um contador de incremento. A fórmula e o pseudocódigo para este estão aqui: - autotradingstrategy. wordpress20091130exposential-moving-average Obrigado novamente, desculpas pelo meu mal-entendido de alguns dos conceitos básicos: (Atenciosamente, Chris J Quanto ao código que postei, você está certo sobre o tamanho da matriz Situação. Isso deve ser facilmente corrigido. Quanto às suas perguntas: 1) A constante do filtro representa um corte de freqüência. Utilizei um Processamento de Sinal Digital (DSP) para esta técnica. En. wikipedia. orgwi kiLow-pas sfilter é uma explicação simples. Você quer a seção Realização de Tempo Discreto. No meu caso, o A é o RC-Constant de que falam. Portanto, a freqüência que ele corta é acima de 1 (2piA). Se você não tem uma compreensão da teoria do domínio de freqüência, isso pode se tornar complicado. No seu caso, quanto maior você fizer A, menor será a frequência que este filtro permitirá, o que significa que irá suavizar a curva mais e mais. Quanto mais baixo você conseguir, mais ruído é permitido no sistema. Lembre-se de que A deve ser maior ou igual a 1 para ser efetivo. Voltei a colocar o XLS novamente, desta vez sem os números mut rand (). Ajuste a constante A e veja como quotsmoothsquot (ou filtra) as variações de alta freqüência. 2) O último ponto da matriz de entrada tem o valor mais recente. 3) O mesmo é verdadeiro para a matriz de saída. O último é o valor mais recente. 5) O NUMVALS é arbitrário. Você pode adicionar continuamente à matriz de entrada e saída, quantas vezes você quiser e não afetará o filtro. Em particular, usei 49 pontos. Mas eu posso excluir facilmente os últimos 20 e as primeiras 29 saídas permaneceriam as mesmas. A função não é baseada em quantos pontos estão sendo usados. Gostaria de mencionar que desenvolvi essa função para uma conversão única. Se você quisesse fazer uma conversão para o próximo valor, pode tentar algo mais simples (em anexo). Novamente estou enferrujado em c. Espero que isso esteja certo. A única coisa que você precisaria fornecer é a constante de entrada e filtro. Avise-me se isso ajudar.
Comments
Post a Comment