Sunday 21 May 2017

Calculate Exponential Moving Average Java


Eu tenho essencialmente uma matriz de valores como este: A matriz acima é simplificada, estou coletando um valor por milissegundo no meu código real e eu preciso processar a saída em um algoritmo que eu 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 olharia para trás e verá o último número 0.25 como o pico, pois há uma diminuição para 0.24 antes dele. O objetivo é tomar esses valores e aplicar um algoritmo para eles que irá suavizar-los um pouco para que eu tenha mais valores lineares. (Ou seja: Id como meus resultados para ser curvy, não jaggedy) Ive foi dito para aplicar um filtro exponencial de média móvel para os meus valores. Como posso fazer isso É muito difícil para mim ler equações matemáticas, eu lidar muito melhor com o código. Como processar valores em minha matriz, aplicando um cálculo exponencial de média móvel para igualá-los out perguntou Feb 8 12 at 20:27 Para calcular uma média móvel exponencial. Você precisa manter algum estado ao redor e você precisa de um parâmetro de ajuste. Isso requer uma pequena classe (supondo que você está usando o Java 5 ou posterior): Instantiate com o parâmetro de decadência desejado (pode ter ajuste deve estar entre 0 e 1) e use a média () para filtrar. Ao ler uma página sobre alguma recorrência matemática, tudo o que você realmente precisa saber ao transformá-lo em código é que os matemáticos gostam de escrever índices em matrizes e seqüências com subscritos. (Eles têm algumas outras notações também, o que não ajuda.) No entanto, o EMA é bastante simples, como você só precisa se lembrar de um antigo valor não arrays estado complicado necessário. Respondeu 8 fevereiro às 20:42 TKKocheran: Muito bonito. Não é bom quando as coisas podem ser simples (se começar com uma nova seqüência, obter um novo averager.) Observe que os primeiros termos na seqüência média saltarão um pouco devido a 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 de média móvel para o averager e experimentar sem perturbar o resto do seu programa demais. Ndash Donal Fellows Feb 9 12 em 0:06 Estou tendo dificuldade em entender suas perguntas, mas vou tentar responder de qualquer maneira. 1) Se o seu algoritmo encontrado 0,25 em vez de 0,36, então ele está errado. É errado porque assume um aumento ou uma diminuição monotônica (que está sempre subindo ou sempre indo para baixo). A menos que você média TODOS os seus dados, seus pontos de dados --- como você apresentá-los --- são não-lineares. Se você realmente deseja encontrar o valor máximo entre dois pontos no tempo, corte sua matriz de tmin para tmax e localize 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 suavizar isto 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) a segunda (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 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 um estoque (tente Tesla Motors bastante volátil (TSLA)) e clique em technicals na parte inferior do gráfico. Selecione Média Móvel com um determinado período e Média Mínima exponencial para comparar suas diferenças. A média móvel exponencial é apenas mais uma elaboração disto, mas pondera os dados mais antigos menos do que os novos dados, isto é uma forma 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 pequena. 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. Então a saída que você obtém seria o último x termos dividido por x. Pseudocódigo não testado: Note que você precisará manipular as partes inicial e final dos dados, uma vez que claramente você não consegue média dos últimos 5 termos quando você está no seu 2º ponto de dados. Além disso, há maneiras mais eficientes de calcular essa média móvel (soma sum - mais antigo mais recente), mas isso é para obter o conceito do que está acontecendo em toda. Respondeu 8 de fevereiro em 20: 41Motiva exponencial móvel A média móvel exponencial A média móvel exponencial difere de uma média móvel simples, tanto pelo método de cálculo como pela forma como os preços são ponderados. A Média Móvel Exponencial (abreviada para as iniciais EMA) é efetivamente uma média móvel ponderada. Com a EMA, a ponderação é tal que os preços dias recentes são dadas mais peso do que os preços mais antigos. A teoria subjacente é que os preços mais recentes são considerados mais importantes do que os preços mais antigos, particularmente porque uma média simples a longo prazo (por exemplo, 200 dias) coloca o mesmo peso nos dados de preços com mais de 6 meses de idade e poderia ser pensado De como ligeiramente fora de data. Cálculo da EMA é um pouco mais complexo do que a média móvel simples, mas tem a vantagem de que um grande registro de dados cobrindo cada preço de fechamento para os últimos 200 dias (ou quantos dias estão sendo considerados) não tem que ser mantido . Tudo que você precisa é a EMA para o dia anterior e hoje fechar preço para calcular a nova média móvel exponencial. Calculando o Exponente Inicialmente, para o EMA, um expoente precisa ser calculado. Para começar, tome o número de dias EMA que você deseja calcular e adicione um ao número de dias que você está considerando (por exemplo, para uma média móvel de 200 dias, adicione um para obter 201 como parte do cálculo). Bem, chame isso Days1. Então, para obter o Exponente, simplesmente pegue o número 2 e divida-o por Dias1. Por exemplo, o Exponente para uma média móvel de 200 dias seria: 2 201. O que equivale a 0,01 Cálculo total se a média móvel exponencial Uma vez que temos o expoente, tudo o que precisamos agora são mais dois bits de informação que nos permitem realizar o cálculo completo . A primeira é a média móvel exponencial de ontem. Bem, suponha que já sabemos isso como teríamos calculado ontem. No entanto, se você já não está ciente de EMA ontem, você pode começar por calcular a média móvel simples para ontem, e usando isso em vez da EMA para o primeiro cálculo (ou seja, cálculo de hoje) da EMA. Então amanhã você pode usar o EMA que você calculou hoje, e assim por diante. A segunda peça de informação que precisamos é hoje preço de fechamento. Vamos supor que queremos calcular hoje 200 dias Exponential Moving Average para uma ação ou ação que tem dias anteriores EMA de 120 pence (ou centavos) e um preço de fechamento de dias atuais de 136 pence. O cálculo completo é sempre como segue: Hoje Motivação Exponencial Movente (dias atuais que fecham o preço x Exponente) (dias precedentes EMA x (1- Exponent)) Assim, usando nosso exemplo figuras acima, hoje EMA de 200 dias seria: (136 x 0.01 Calculando a Média Móvel Exponencial - um Tutorial A Média Móvel Exponencial (EMA para breve) é um dos indicadores mais utilizados na análise técnica hoje. Mas como você o calcula para o senhor mesmo, usando um papel e uma pena ou 8211 preferiu um programa de planilha de sua escolha. Vamos descobrir nesta explicação do cálculo EMA. Calculando a média móvel exponencial (EMA) é naturalmente feito automaticamente pela maioria de software negociando e de análise técnica para fora lá hoje. Aqui está como calculá-lo manualmente que também contribui para a compreensão sobre como ele funciona. Neste exemplo vamos calcular EMA para um o preço de uma ação. Nós queremos um EMA de 22 dias que seja um espaço de tempo bastante comum para uma EMA longa. A fórmula para calcular EMA é a seguinte: EMA Preço (t) k EMA (y) (1 8211 k) t hoje, y ontem, N número de dias em EMA, k 2 (N1) Use as seguintes etapas para calcular um 22 Dia EMA: 1) Comece por calcular k para o período determinado. 2 (22 1) 0,0869 2) Adicione os preços de fechamento para os primeiros 22 dias juntos e dividi-los por 22. 3) Você está agora pronto para começar a obter o primeiro dia EMA, tendo os seguintes dias (dia 23) preço de fechamento multiplicado Por k. Em seguida, multiplique a média móvel dias anteriores por (1-k) e adicione os dois. 4) Fazer a etapa 3 repetidamente para cada dia que segue para começar a escala cheia de EMA. Isso pode, naturalmente, ser colocado em Excel ou algum outro software de planilha para tornar o processo de cálculo EMA semi-automática. Para dar-lhe uma visão algorítmica sobre como isso pode ser realizado, veja abaixo. Flutuante público CalculateEMA (float todaysPrice, flutuante numberOfDays, float EMAYesterday) float k 2 (numberOfDays 1) return todaysPrice k EMAYesterday (1 8211 k) Este método normalmente seria chamado de um loop através de seus dados, procurando algo como isto: foreach (DailyRecord Sdr em DataRecords) chamar o cálculo de EMA calculateEMA (sdr. Close, numberOfDays, yesterdayEMA) colocar o ema calculado em uma matriz memaSeries. Items. Add (sdr. TradingDate, ema) certifique-se de que yesterdayEMA fica preenchido com o EMA que usamos neste momento Around yesterdayEMA ema Note que este é o código psuedo. Você normalmente precisaria enviar o valor de ontem ontem como yesterdayEMA até o yesterdayEMA é calculado a partir de hoje EMA. Isso está acontecendo somente após o ciclo ter executado mais dias do que o número de dias que você calculou seu EMA para. Para um EMA de 22 dias, é somente no tempo 23 no laço e depois disso que o ema ema yesterdayEMA é válido. Este não é nenhum negócio grande, desde que você necessitará dados de pelo menos 100 dias de troca para um dia 22 EMA para ser válido. Posts Relacionados

No comments:

Post a Comment