Friday 16 June 2017

Movendo Média Filtro Java


Eu tenho essencialmente uma matriz de valores como this. A matriz acima é simplificada demais, estou coletando 1 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 Meu A lógica falha porque no meu exemplo acima, 0 36 é o pico real, mas meu algoritmo olharia para trás e veria 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 linear valores ou seja, eu d como meus resultados para ser curvy, não jaggedy. I 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 posso processar valores em minha matriz, aplicando um cálculo de média móvel exponencial para até mesmo out. asked Feb 8 12 at 20 27.To computa Uma média móvel exponencial que você precisa para manter algum estado ao redor e Você precisa de um parâmetro de ajuste Isso chama para uma pequena classe supondo que você está usando o Java 5 ou posterior. Instantiar com o parâmetro de decadência que você quer pode ter ajuste deve estar entre 0 e 1 e, em seguida, use a média para filter. When ler uma página em alguns mathmatical Recorrência, tudo o que você realmente precisa saber quando transformá-lo em código é que os matemáticos gostam de escrever índices em matrizes e seqüências com subscritos Eles ve algumas outras notações, bem como, o que doesn t ajudar No entanto, o EMA é bastante simples, como você só precisa Para lembrar um valor antigo sem arrays de estado complicado required. answered Feb 8 12 at 20 42. TKKocheran Muito bonito Isn t it nice quando as coisas podem ser simples Se começar com uma nova seqüência, obter um novo averager Note que os primeiros termos no A seqüência média saltará em torno de um bit 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 t Ele resto de seu programa muito Donal Fellows Feb 9 12 em 0 06.Eu estou tendo um tempo difícil entender suas perguntas, mas vou tentar responder anyway.1 Se o algoritmo encontrado 0 25 em vez de 0 36, então é errado É errado porque ele assume um aumento ou diminuição monotônico 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 máximo Valor entre dois pontos no tempo, então corte 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 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 segundos e primeiros números a segunda nova lista É a média de 1 4 e 1 5 terceira e segunda lista antiga a terceira lista nova a média de 1 5 e 1 4 quarto e terceiro, e assim por diante eu poderia Ter feito período de três ou quatro, ou n Observe como os dados são muito mais suave Uma boa maneira de ver as médias móveis no trabalho é ir para o Google Finance, selecione um estoque tentar Tesla Motors bastante volátil TSLA e clique em technicals na parte inferior da O gráfico Selecionar 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 disto, mas pondera os dados mais antigos menos do que os novos dados esta é uma forma de polarizar o alisamento em direção à parte traseira Por favor, leia a entrada da Wikipedia. Então, isso é mais um comentário do que uma resposta, mas a pequena caixa de comentário foi apenas a pequena boa sorte. Se você está tendo problemas com a matemática, você poderia ir com uma simples média móvel 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ê vai precisar para lidar com o início e fim partes dos dados uma vez que claramente você não pode média t os últimos 5 termos quando você está em seu ponto de dados 2 , a São formas mais eficientes de calcular esta soma média móvel - a mais antiga, mas isso é para obter o conceito do que está acontecendo em toda a gente. Queria computar métricas simples em meus aplicativos Java, por exemplo, o número de hits por hora, ou erros durante um período de tempo Enquanto a computação de métricas simples não é muito difícil, é apenas trabalho extra e eu prefiro gastar esse tempo no domínio do problema Fiquei surpreso ao não encontrar nenhuma solução amplamente aceita para métricas em Java Eu encontrei Metrics, mas pareceu um pouco complicado e não bem documentado - Tudo o que eu realmente queria era calcular uma média móvel Eu pensei sobre o problema um pouco mais e decidiu Não é um problema difícil Aqui está a minha solução. Isso funciona criando uma matriz de tamanho de freqüência de atualização de janela, então um segmento define a contagem para o próximo índice na matriz na freqüência de atualização A contagem para o intervalo é Basta arranjar i-array i 1, que é a contagem mais recente menos a contagem mais antiga Para um intervalo de 10 minutos, a contagem mais antiga i 1 é exatamente 10 minutos old. To adicionar uma média móvel para o nosso primeiro código nós precisamos de um contador, Usando AtomicLong. Este contador deve ser incrementado com base nos eventos que você está interessado em computação, por exemplo, pedidos POST para um serviço REST. Precisamos fornecer a implementação com acesso ao contador e que é realizado através da interface GetCount Aqui vou criar um movimento Média com uma janela de 5 minutos que atualiza a cada segundo. E para obter a média atual, chamamos simplesmente o método getAverage. Um detalhe de implementação chave é como o tamanho da matriz é determinado dividindo a janela pela frequência de atualização. Assim, uma janela grande com uma freqüência Freqüência de atualização pode consumir uma quantidade significativa de memória Neste exemplo o tamanho da matriz é razoável 300 No entanto, se criamos uma média móvel de 24 horas com um intervalo de 1 segundo o tamanho seria 86400 A mais reasonabl E freqüência de atualização para um período de 24 horas pode ser a cada 5 minutos tamanho da matriz de 288. Outra consideração de escolher a janela e freqüência de atualização é a janela deve ser divisível pela freqüência Por exemplo, uma janela de 2 minutos com uma freqüência de atualização de 6 segundos é ok , Mas uma frequência de atualização de 7 segundos não é, uma vez que não é divisível por 120. Uma IllegalArgumentException é acionada se a freqüência de atualização do módulo de janela não for zero. Esta implementação requer um thread por média móvel, o que não é muito eficiente. Para compartilhar um segmento através de muitas médias Atualização Eu atualizei o código para compartilhar um tópico aqui. Ultimamente, há um problema de estado inicial que don t tem dados ainda para toda a janela Por exemplo, se você tem uma janela de 5 minutos e apenas 15 segundos De dados Esta implementação retorna nulo até que tenhamos 5 minutos de dados Outra abordagem é estimar a média Suponha que temos uma contagem de 10 em 30 segundos, então podemos estimar a média como 40 em 2 minutos Como Por exemplo, se tivéssemos uma explosão de 20 acessos em 2 segundos, estaríamos estimando 1200 por 2 minutos, o que com toda a probabilidade é muito longe. Moving Average - MA. BREAKING DOWN Moving Average - MA. Como um exemplo de SMA, considere uma garantia com os seguintes preços de fechamento em 15 dias. Week 1 5 dias 20, 22, 24, 25, 23.Week 2 5 dias 26, 28, 26, 29, 27. Semana 3 5 dias 28, 30, 27, 29, 28.A MA de 10 dias seria média os preços de fechamento para os primeiros 10 dias como o primeiro ponto de dados O próximo ponto de dados iria cair o preço mais cedo, adicione o preço no dia 11 e tomar a média, e assim por diante, como mostrado abaixo. Como observado anteriormente, MAs atraso ação de preço atual, porque eles são baseados em preços passados ​​quanto maior o período de tempo para o MA, maior o atraso Assim, um MA de 200 dias terá Um grau muito maior de atraso do que um MA de 20 dias, porque ele contém preços para os últimos 200 dias O comprimento do MA para usar depende dos objetivos comerciais, com curto Er MAs usado para negociação de curto prazo e MA de mais longo prazo mais adequado para investidores de longo prazo O MA de 200 dias é amplamente seguido por investidores e comerciantes, com quebras acima e abaixo desta média móvel considerado como importante trading signals. MAs também Transmitir sinais importantes de negociação por conta própria, ou quando duas médias se cruzam Um aumento MA indica que a segurança está em uma tendência de alta, enquanto um declínio MA indica que está em uma tendência de baixa Da mesma forma, impulso ascendente é confirmada com um crossover de alta que ocorre quando um A MA de curto prazo cruza acima de um MA a longo prazo O impulso descendente é confirmado com um cruzamento de baixa, que ocorre quando um MA de curto prazo cruza abaixo de um MA de longo prazo.

No comments:

Post a Comment