Exponential moving average maths
Qual é a fórmula de média móvel exponencial (EMA) e como é calculada a EMA A média móvel exponencial (EMA) é uma média móvel ponderada (WMA) que dá mais ponderação ou importância aos dados de preço recentes do que a média móvel simples (SMA) ) faz. O EMA responde mais rapidamente às mudanças de preço recentes do que o SMA. A fórmula para calcular o EMA envolve apenas usando um multiplicador e começando com o SMA. O cálculo para o SMA é muito simples. A SMA para qualquer determinado número de períodos de tempo é simplesmente a soma dos preços de fechamento para esse número de períodos de tempo, divididos pelo mesmo número. Assim, por exemplo, um SMA de 10 dias é apenas a soma dos preços de fechamento dos últimos 10 dias, divididos por 10. As três etapas para calcular o EMA são: Calcular o SMA. Calcule o multiplicador para ponderar o EMA. Calcule o EMA atual. A fórmula matemática, neste caso para o cálculo de uma EMA de 10 períodos, é semelhante a esta: SMA: 10 soma do período / 10 Cálculo do multiplicador da ponderação: (2 / (período de tempo selecionado 1)) (2 / (10 1)) 0,1818 (18.18) Cálculo do EMA: (Preço de fechamento-EMA (dia anterior)) x multiplicador EMA (dia anterior) A ponderação dada ao preço mais recente é maior para um período mais curto EMA do que para um período mais longo EMA. Por exemplo, um multiplicador 18.18 é aplicado aos dados de preço mais recentes para um EMA 10, enquanto que para um EMA 20, apenas um peso multiplicador de 9,52 é usado. Há também pequenas variações do EMA chegou usando o preço aberto, alto, baixo ou mediano em vez de usar o preço de fechamento. Use a média móvel exponencial (EMA) para criar uma estratégia de negociação forex dinâmica. Saiba como os EMAs podem ser utilizados muito. Leia a resposta Aprenda as vantagens potenciais importantes de usar uma média móvel exponencial ao negociar, em vez de um movimento simples. Leia a Resposta Aprenda sobre médias móveis simples e médias móveis exponenciais, o que estes indicadores técnicos medem e a diferença. Leia a resposta Aprenda a fórmula para o indicador do momento da divergência da convergência da média móvel e encontre como calcular o MACD. Leia a resposta Aprenda sobre os diferentes tipos de médias móveis, bem como os cruzamentos médios móveis, e entenda como eles são usados. Leia a resposta Descubra as principais diferenças entre indicadores de média móvel exponencial e simples, e quais desvantagens EMAs podem. Ler Resposta Um termo usado por John Maynard Keynes usado em um de seus livros de economia. Em sua publicação de 1936, The General Theory of Employment. Um ato de legislação que faz um grande número de reformas nas leis e regulamentos do plano de pensão dos EUA. Esta lei fez vários. Uma medida da parte ativa de uma força de trabalho da economia. A taxa de participação refere-se ao número de pessoas que são. Todo o estoque de moeda e outros instrumentos líquidos em uma economia do país a partir de um momento específico. A oferta de dinheiro. 1. Em geral, uma situação de igualdade. A paridade pode ocorrer em muitos contextos diferentes, mas sempre significa duas coisas. Uma classificação de ações negociadas quando um dividendo declarado pertence ao vendedor e não ao comprador. Um estoque será. Eu essencialmente tenho uma matriz de valores como este: A matriz acima é simplificada, Im coletando 1 valor por milissegundo no meu código real e eu preciso processar a saída em um algoritmo que escrevi para encontrar o pico mais próximo antes de um ponto no tempo. Minha lógica falha porque, no meu exemplo acima, 0,36 é o pico real, mas meu algoritmo olha para trás e vê o último número 0,25 como o pico, já que há uma diminuição para 0,24 antes dele. O objetivo é pegar esses valores e aplicar um algoritmo a eles, que irá suavizá-los um pouco para que eu tenha mais valores lineares. (isto é: Id como meus resultados para ser curvy, não jaggedy) Ive sido dito para aplicar um filtro médio móvel exponencial aos meus valores. Como posso fazer isso? É muito difícil para mim ler equações matemáticas, eu lido muito melhor com código. Como faço para processar valores em minha matriz, aplicando um cálculo de média móvel exponencial para equacioná-los perguntou 8 de fevereiro 12 em 20:27 Para calcular uma média móvel exponencial. você precisa manter algum estado ao redor e precisa de um parâmetro de ajuste. Isso exige uma pequena classe (supondo que você esteja usando o Java 5 ou posterior): Instancie com o parâmetro de decaimento desejado (a sintonização pode ser entre 0 e 1) e use average () para filtrar. Ao ler uma página sobre alguma recorrência matemática, tudo o que você realmente precisa saber ao transformá-la em código é que os matemáticos gostam de escrever índices em matrizes e seqüências com índices. (Eles também têm algumas outras notações, o que não ajuda.) No entanto, o EMA é bastante simples, pois você só precisa lembrar de um valor antigo que não é necessário usar matrizes de estado complicadas. respondeu 8 fev 12 at 20:42 TKKocheran: Muito bonito. Não é bom quando as coisas podem ser simples (Se começar com uma nova sequência, consiga um novo averager). Note que os primeiros termos na seqüência média irão saltar um pouco devido aos efeitos de limite, mas você obtém aqueles com outras médias móveis. também. No entanto, uma boa vantagem é que você pode envolver a lógica da média móvel no averager e experimentar sem perturbar demais o resto do seu programa. ndash Donal Fellows 9 de fevereiro de 2012 às 0:06 Eu estou tendo dificuldade em entender suas perguntas, mas vou tentar responder de qualquer maneira. 1) Se o seu algoritmo encontrou 0,25 em vez de 0,36, então está errado. Está errado porque assume um aumento ou diminuição monótona (que está sempre subindo ou sempre descendo). A menos que você calcule a média de TODOS os seus dados, seus pontos de dados - conforme você os apresenta - são não-lineares. Se você realmente quiser encontrar o valor máximo entre dois pontos no tempo, então divida sua matriz de tmin para tmax e encontre o máximo desse subarray. 2) Agora, o conceito de médias móveis é muito simples: imagine que eu tenho a seguinte lista: 1.4, 1.5, 1.4, 1.5, 1.5. Eu posso alisá-lo, tomando a média de dois números: 1,45, 1,45, 1,45, 1,5. Observe que o primeiro número é a média de 1,5 e 1,4 (segundo e primeiro números) o segundo (nova lista) é a média de 1,4 e 1,5 (terceira e segunda lista antiga) a terceira (nova lista) a média de 1,5 e 1,4 (quarto e terceiro), e assim por diante. Eu poderia ter feito o período de três ou quatro, ou n. Observe como os dados são muito mais suaves. Uma boa maneira de ver as médias móveis no trabalho é ir ao Google Finance, selecionar uma ação (experimente o Tesla Motors muito volátil (TSLA)) e clicar em technicals na parte inferior do gráfico. Selecione Média Móvel com um determinado período e Média Móvel Exponencial para comparar suas diferenças. A média móvel exponencial é apenas mais uma elaboração disso, mas pesa os dados mais antigos, menos que os novos dados, é uma maneira de influenciar a suavização em direção às costas. Por favor, leia a entrada da Wikipedia. Então, isso é mais um comentário do que uma resposta, mas a pequena caixa de comentários era apenas minúscula. Boa sorte. Se você está tendo problemas com a matemática, você poderia ir com uma média móvel simples em vez de exponencial. Assim, a saída que você obterá será o último x termos dividido por x. Pseudocódigo não testado: Note que você terá que lidar com as partes inicial e final dos dados, já que claramente você não consegue calcular a média dos últimos 5 termos quando está no seu segundo ponto de dados. Além disso, existem maneiras mais eficientes de calcular essa média móvel (soma total - a mais nova mais recente), mas isso é para obter o conceito do que está acontecendo. respondeu 08/02/2014 às 20:41 Sua resposta 2016 Stack Exchange, IncEu tenho um valor contínuo para o qual eu gostaria de calcular uma média móvel exponencial. Normalmente, use Id apenas a fórmula padrão para isso: onde S n é a nova média, alfa é o alfa, Y é a amostra e S n-1 é a média anterior. Infelizmente, devido a vários problemas, não tenho um tempo de amostra consistente. Eu posso saber que eu posso provar no máximo, digamos, uma vez por milissegundo, mas devido a fatores fora do meu controle, eu posso não ser capaz de tomar uma amostra por vários milissegundos de cada vez. Um caso provavelmente mais comum, no entanto, é que eu amostrar um pouco cedo ou tarde: em vez de amostrar em 0, 1 e 2 ms. Eu amostrar em 0, 0,9 e 2,1 ms. Eu antecipo que, independentemente dos atrasos, minha frequência de amostragem estará muito acima do limite de Nyquist e, portanto, não preciso me preocupar com o aliasing. Acredito que posso lidar com isso de uma maneira mais ou menos razoável, variando o alfa apropriadamente, com base no período de tempo desde a última amostra. Parte do meu raciocínio de que isso funcionará é que o EMA interpola linearmente entre o ponto de dados anterior e o atual. Se considerarmos o cálculo de uma EMA da seguinte lista de amostras em intervalos t: 0,1,2,3,4. Devemos obter o mesmo resultado se usarmos o intervalo 2t, onde as entradas se tornam 0,2,4, certo Se o EMA tivesse assumido que, em t 2 o valor tinha sido 2 desde t 0. isso seria o mesmo que o cálculo do intervalo t calculando em 0,2,2,4,4, o que não está fazendo. Ou isso faz sentido? Alguém pode me dizer como variar o alfa apropriadamente? Por favor, mostre seu trabalho. Ou seja mostre-me a matemática que prova que seu método realmente está fazendo a coisa certa. perguntou Jun 21 09 at 13:05 Você não deveria obter o mesmo EMA para entradas diferentes. Pense no EMA como um filtro, a amostragem em 2t equivale a down sampling e o filtro dará uma saída diferente. Isto claro para mim desde 0,2,4 contém componentes de frequência mais altos do que 0,1,2,3,4. A menos que a questão seja, como eu mudo o filtro rapidamente para que ele dê o mesmo resultado. Talvez eu esteja faltando algo ndash freespace Jun 21 09 at 15:52 Mas a entrada não é diferente, é apenas menos amostrada. 0,2,4 em intervalos 2t é como 0, 2, 4 em intervalos t, onde o indica que a amostra é ignorada ndash Curt Sampson Jun 21 09 at 23:45 Essa resposta baseia-se no meu bom entendimento de low-pass filtros (a média móvel exponencial é na verdade apenas um filtro lowpass de um só pólo), mas minha nebulosa compreensão do que você está procurando. Eu acho que o seguinte é o que você quer: Primeiro, você pode simplificar um pouco sua equação (parece mais complicado, mas é mais fácil no código). Vou usar Y para saída e X para entrada (em vez de S para saída e Y para entrada, como você fez). Segundo, o valor de alfa aqui é igual a 1-e-Deltat / tau, em que Deltat é o tempo entre as amostras e tau é a constante de tempo do filtro passa-baixo. Eu digo igual entre aspas porque isso funciona bem quando Deltat / tau é pequeno comparado a 1, e alfa 1-e-Deltat / tau asymp Deltat / tau. (Mas não muito pequeno: você encontrará problemas de quantização e, a menos que recorra a algumas técnicas exóticas, normalmente precisará de N bits extras de resolução na variável de estado S, onde N - log 2 (alfa).) Para valores maiores de Deltat / tau o efeito de filtragem começa a desaparecer, até chegar ao ponto em que alfa é próximo de 1 e você basicamente está apenas atribuindo a entrada para a saída. Isso deve funcionar corretamente com valores variados de Deltat (a variação do Deltat não é muito importante, desde que alpha seja pequena, caso contrário, você encontrará alguns problemas / aliasing / etc.) e se estiver trabalhando em um processador onde a multiplicação é mais barata que a divisão, ou questões de ponto fixo são importantes, pré-calcule o ômega 1 / tau, e considere tentar aproximar a fórmula do alfa. Se você realmente quiser saber como derivar a fórmula alfa 1-e-Deltat / tau, considere sua fonte de equação diferencial: que, quando X é uma função de etapa unitária, tem a solução Y 1 - e-t / tau. Para pequenos valores de Deltat, a derivada pode ser aproximada por DeltaY / Deltat, produzindo Y tau DeltaY / Deltat X DeltaY (XY) (Deltat / tau) alfa (XY) e a extrapolação de alfa 1-e-Deltat / tau vem de tentando combinar o comportamento com o caso da função step da unidade. Você poderia, por favor, elaborar sobre a questão de comparar a parte do comportamento? Eu compreendo sua solução de tempo contínuo Y 1 - exp (-t47) e sua generalização para uma função escalonada com magnitude x e condição inicial y (0). mas não estou vendo como juntar essas idéias para alcançar seu resultado. ndash Rhys Ulerich May 4 13 at 22:34 Esta não é uma resposta completa, mas pode ser o começo de uma. É tanto quanto eu cheguei com isso em uma hora ou mais de jogar Im postar como um exemplo do que estou procurando, e talvez uma inspiração para os outros que trabalham no problema. Eu começo com S 0. que é a média resultante da média anterior S -1 e a amostra Y 0 tomada em t 0. (t 1 - t 0) é o meu intervalo de amostragem e alfa é definido como o que for apropriado para esse intervalo de amostragem e o período sobre o qual desejo mediar. Eu considerei o que acontece se eu perder a amostra em t 1 e, em vez disso, tenho que me contentar com a amostra Y 2 tomada em t 2. Bem, podemos começar expandindo a equação para ver o que teria acontecido se tivéssemos Y 1: percebo que a série parece se estender infinitamente dessa forma, porque podemos substituir a S n no lado direito indefinidamente: Ok , então não é realmente um polinômio (bobinho), mas se multiplicarmos o termo inicial por um, então vemos um padrão: Hm: é uma série exponencial. Quelle surpresa Imagine que saindo da equação para uma média móvel exponencial Então, de qualquer forma, eu tenho este x 0 x 1 x 2 x 3. coisa acontecendo, e tenho certeza de que estou cheirando ou um logaritmo natural chutando por aqui, mas eu não consigo lembrar onde eu estava indo antes de ficar sem tempo. Qualquer resposta a esta pergunta, ou qualquer prova de correção de tal resposta, depende muito dos dados que você está medindo. Se suas amostras foram tiradas em t 0 0ms. t 1 0,9 e t 2 2,1 ms. mas a sua escolha de alfa é baseada em intervalos de 1 ms e, portanto, você quer um alpha n ajustado localmente. a prova de exatidão da escolha significaria conhecer os valores da amostra em t1ms e t2ms. Isto leva à pergunta: você pode interpolar os seus dados de forma razoável para ter suposições razoáveis de quais valores intermediários poderiam ter sido? Ou você pode interpolar a própria média? Se nenhum desses é possível, então, até onde eu vejo, a lógica A escolha de um valor intermediário Y (t) é a média calculada mais recentemente. isto é, Y (t) asymp S n onde n é maximal tal que t n ltt. Essa escolha tem uma consequência simples: deixar o alfa sozinho, independentemente da diferença de horário. Se, por outro lado, for possível interpolar seus valores, isso fornecerá amostras de intervalos constantes médias. Por fim, se é possível interpolar a própria média, isso tornaria a questão sem sentido. respondido Jun 21 09 at 15:08 balpha 9830 26.4k 9679 10 9679 84 9679 117 Eu acho que posso interpolar meus dados: dado que eu estou amostrando-o em intervalos discretos, eu já estou fazendo isso com uma EMA padrão De qualquer forma, suponho que eu preciso um quotproof que mostra que ele funciona tão bem quanto um EMA padrão, que também produzirá um resultado incorreto se os valores não estiverem mudando de forma bastante suave entre os períodos de amostragem. Mas isso é o que estou dizendo: se você considerar a EMA como uma interpolação de seus valores, estará pronto se deixar alfa como está (porque inserir a média mais recente como Y não altera a média). . Se você disser que precisa de algo que funcione como um EMA padrão - o que é errado com o original? A menos que você tenha mais informações sobre os dados que você está medindo, qualquer ajuste local para alfa será arbitrário. ndash balpha 9830 Jun 21 09 at 15:31 Eu deixaria o valor alfa sozinho e preencheria os dados que faltavam. Como você não sabe o que acontece durante o período em que não pode provar, é possível preencher essas amostras com 0s ou manter o valor anterior estável e usar esses valores para o EMA. Ou alguma interpolação de retrocesso, depois de ter uma nova amostra, preencher os valores ausentes e recompurar a EMA. O que eu estou tentando chegar é que você tem uma entrada xn que tem buracos. Não há como contornar o fato de você estar perdendo dados. Assim, você pode usar uma suspensão de ordem zero ou configurá-la para zero ou algum tipo de interpolação entre xn e xnM. onde M é o número de amostras ausentes e n o início da lacuna. Possivelmente até usando valores antes de n. respondeu em 21 de junho de 2009 às 13:35 De passar uma hora ou mais suando um pouco com a matemática para isso, eu acho que simplesmente variando o alpha vai realmente me dar a interpolação adequada entre os dois pontos que você fala, mas em um maneira muito mais simples. Além disso, acho que a variação do alfa também lidará adequadamente com amostras coletadas entre os intervalos de amostragem padrão. Em outras palavras, estou procurando o que você descreveu, mas tentando usar matemática para descobrir a maneira mais simples de fazê-lo. ndash Curt Sampson Jun 21 09 at 14:07 Acho que não existe uma fera como a interpolação adequada. Você simplesmente não sabe o que aconteceu no momento em que não está experimentando. Interpolação boa e má implica algum conhecimento do que você perdeu, já que você precisa medir contra isso para julgar se uma interpolação é boa ou ruim. Apesar disso, você pode colocar restrições, ou seja, com aceleração máxima, velocidade, etc. Acho que, se você souber modelar os dados ausentes, modelaria os dados ausentes e aplicaria o algoritmo EMA sem nenhuma alteração. do que mudar alfa. Just my 2c :) ndash freespace Jun 21 09 at 14:17 Isto é exatamente o que eu estava recebendo na minha edição da pergunta 15 minutos atrás: "Você simplesmente não sabe o que aconteceu no momento em que você não está experimentando," mas isso é verdade mesmo se você provar em cada intervalo designado. Assim, minha contemplação de Nyquist: desde que você saiba que a forma de onda não muda de direção mais do que a cada duas amostras, o intervalo de amostragem real não deve importar, e deve ser capaz de variar. A equação EMA parece-me exatamente calcular como se a forma de onda mudasse linearmente do último valor de amostra para o atual. ndash Curt Sampson Jun 21 09 at 14:26 Eu não acho que isso seja verdade. O teorema de Nyquist requer um mínimo de 2 amostras por período para poder identificar o sinal de forma única. Se você não fizer isso, você terá o aliasing. Seria o mesmo que amostragem como fs1 por um tempo, depois fs2, depois de volta para fs1, e você terá um aliasing nos dados quando você provar com fs2 se fs2 estiver abaixo do limite de Nyquist. Eu também devo confessar que não entendo o que você quer dizer com "onda de forma" muda linearmente da última amostra para a atual. Você poderia por favor explicar Felicidades, Steve. ndash freespace Jun 21 09 at 14:36 Isto é semelhante a um problema aberto na minha lista de afazeres. Eu tenho um esquema trabalhado até certo ponto, mas não tenho trabalho matemático para apoiar esta sugestão ainda. Atualize o resumo do amplificador: Gostaria de manter o fator de suavização (alfa) independente do fator de compensação (que eu chamo de beta aqui). Jasons excelente resposta já aceita aqui funciona muito bem para mim. Se você também pode medir o tempo desde que a última amostra foi tirada (em múltiplos arredondados de seu tempo de amostragem constante - então 7,8 ms desde a última amostra seria 8 unidades), isso poderia ser usado para aplicar o suavização várias vezes. Aplique a fórmula 8 vezes neste caso. Você efetivamente fez um suavização mais inclinada em relação ao valor atual. Para obter uma suavização melhor, precisamos ajustar o alfa ao aplicar a fórmula 8 vezes no caso anterior. O que essa aproximação de suavização perderá? Já perdeu 7 amostras no exemplo acima Isso foi aproximado na etapa 1 com uma reaplicação achatada do valor atual um adicional de 7 vezes Se definirmos um fator de aproximação beta que será aplicado junto com alfa (como alphabeta em vez de apenas alpha), estaremos assumindo que as 7 amostras perdidas estavam mudando suavemente entre os valores de amostra anteriores e atuais. respondeu 21 jun 09 at 13:35 Eu pensei sobre isso, mas um pouco de mexer com a matemática me levou ao ponto em que eu acredito que, ao invés de aplicar a fórmula oito vezes com o valor da amostra, eu posso fazer um cálculo de um novo alfa que me permitirá aplicar a fórmula uma vez e me dar o mesmo resultado. Além disso, isso lidaria automaticamente com a questão do deslocamento de amostras dos tempos exatos da amostra. ndash Curt Sampson Jun 21 09 at 13:47 O aplicativo único está bem. O que eu não tenho certeza ainda é quão boa é a aproximação dos 7 valores em falta. Se o movimento contínuo fizer o valor tremer muito ao longo dos 8 milissegundos, as aproximações podem estar completamente fora da realidade. Mas, se você estiver amostrando a 1ms (a maior resolução excluindo as amostras atrasadas), você já percebeu que o jitter dentro de 1ms não é relevante. Esse raciocínio funciona para você (eu ainda estou tentando me convencer). ndash nik Jun 21 09 at 14:08 Certo. Esse é o fator beta da minha descrição. Um fator beta seria calculado com base no intervalo de diferença e nas amostras atual e anterior. O novo alfa será (alphabeta), mas será usado apenas para essa amostra. Embora você pareça estar usando o alfa na fórmula, eu tento o alfa constante (fator de suavização) e um beta independentemente computado (um fator de ajuste) que compensa amostras perdidas no momento. ndash nik Jun 21 09 às 15:23
Comments
Post a Comment