Tuesday, 7 November 2017

Algoritmo java exponencial móvel médio


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 mesmo-los 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 ajuda 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 do 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 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ê 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 de média móvel - a mais antiga, mas isso é para obter o conceito do que está acontecendo em toda a linha. EMA. BREAKING DOWN Exponential Moving Average - 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 média de convergência móvel MACD ea osciladora de preços PPO. Em geral, as EMA de 50 e 200 dias são Utilizados como sinais de tendências de longo prazo. Os traders que empregam análises técnicas acham que as médias móveis são muito úteis e perspicazes quando aplicadas corretamente, mas causam estragos quando usadas indevidamente ou são mal interpretadas. Todas as médias móveis normalmente usadas na análise técnica são, por sua própria natureza, Por conseguinte, as conclusões tiradas da aplicação de uma média móvel a um gráfico de mercado específico devem ser para confirmar um movimento de mercado ou para indicar a sua força Muito frequentemente, no momento em que uma média móvel E linha de indicador tem feito uma alteração para refletir uma mudança significativa no mercado, o ponto ideal de entrada no mercado já passou Um EMA serve para aliviar este dilema em certa medida Como o cálculo EMA coloca mais peso sobre os dados mais recentes, abraços A ação de 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 de negociação. Interpretando o EMA. Like todos os indicadores de média móvel, eles são muito mais adequados para tendências mercados Quando o mercado está em uma forte E tendência de alta sustentada a linha de indicador EMA também mostrará uma tendência de alta e vice-versa para uma tendência para baixo Um comerciante vigilante não só prestar atenção à 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 de preço de uma forte tendência de alta começar a nivelar e reverter, a taxa de mudança da EMA de uma barra para a próxima começará a diminuir até que a linha de indicador se aplainar e A taxa de variação é zero. Por causa do efeito retardado, por este ponto, ou até mesmo algumas barras antes, a ação de preço deveria já ter invertido. Portanto, segue-se 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 retardado da mudança de médias. Usos do EMA. EMAS são comumente usados ​​em conjunto com outros indicadores para confirmar movimentos significativos do mercado e para avaliar a sua validade Para os comerciantes que negociam intraday e fast-moving Por exemplo, se um EMA em um gráfico diário mostra uma forte tendência ascendente, a estratégia de um comerciante intraday pode ser o comércio apenas a partir do lado longo em um intraday Eu preciso de manter o controle dos últimos 7 dias de horas de trabalho em um loop de leitura de arquivo plano Ele está sendo usado para medir a fatigueability de rosters. Right trabalho agora tenho algo que funciona, mas parece bastante v Erbose e eu não tenho certeza se há um padrão que é mais sucinta. Atualmente, eu tenho uma classe Java com uma matriz estática para armazenar os últimos dados x dias, então como eu leio através do arquivo, eu cortar o primeiro elemento e mover Os outros 6 por uma semana rolando volta total por um O processamento desta matriz estática é feito em sua própria pergunta ie. My método é esta uma abordagem de design razoável, ou há algo de cegueira óbvia e simples para fazer essa tarefa Obrigado guys. asked Aug 30 11 at 14 33.Thanks alot guys Eu tenho a mensagem usar um objeto de nível mais alto e explorar os métodos relevantes ou um buffer circular Grandes respostas, todos eles Quando você pensa sobre isso, você sempre precisa de acesso a toda a matriz Para que você possa se livrar da primeira entrada - que eu não tinha 100 certeza de no meu próprio eu estou aliviado que eu não tinha perdido um liner e foi basicamente em uma pista razoável, se não eficiente e concisa Isso é o que eu adoro Este site de alta qualidade, respostas relevantes de pessoas que sabem o seu sh t Pet E855217 Aug 30 11 at 15 05.Por que você inicializar runningTotal para null Qual é o seu tipo Onde é declarado Faria bem se você colocar algumas amostras de código que se assemelham a Java real code. Moving, minha crítica seria a seguinte a sua função Faz muito Uma função, ou método, deve ser coeso Mais apropriadamente, eles devem fazer uma coisa e uma coisa só. Worse ainda, o que acontece em seu para loop quando x 5 Você copia runningTotal 6 em runningTotal 5, mas então você tem duas cópias Do mesmo valor na posição 5 e 6. Em seu projeto, seu function. moves baralha os itens em seu array. calcula o material de total. prints para o erro padrão. Retorna o total. Faz muito. Minha primeira sugestão não é Mover coisas ao redor da matriz Em vez disso, implementar um buffer circular e usá-lo em vez da matriz Ele irá simplificar o seu design Minha segunda sugestão é dividir as coisas em funções que são coesos. Tenha uma estrutura de dados um buffer circular que permite adicionar E que d Rops a entrada mais antiga sempre que atinge sua capacidade. Tenha a estrutura de dados implementar um interator. have uma função que calcula o total no iterador que você não se importa se você está calculando o total de uma matriz, lista ou circular bufer. don t Chamá-lo total Chamá-lo de soma, que é o que você está computando. Isso é o que eu d. That s grande info luis, no entanto lembre-se esta função é uma pequena parte da funcionalidade da classe, e seria exagero para adicionar também Muito código para torná-lo perfeito Você está tecnicamente correto, e eu entendo meu código faz muito, mas ao mesmo tempo às vezes é melhor errar do lado do código menor, mais claro do que ir para a perfeição Dado o meu Java habilidades, mesmo fazendo o Pseudocode você descreve compilação teria me soprar meu orçamento sobre isso, mas obrigado pela descrição clara Pete855217 Aug 31 11 at 2 23.Hmmm, não é sobre a perfeição, mas sobre as práticas industriais estabelecidas que temos conhecimento para as últimas 3 décadas Clean Código é sempre um Está dividido Temos décadas de evidência que indicam que este é o caminho a percorrer no caso geral em termos de custo-eficiência, redução de defeitos, compreensão, etc, a menos que seja um código desprezível para um tipo único de coisa É Nunca é caro para fazer isso quando se inicia qualquer análise do problema desta maneira Codificação 101, quebrar o problema eo código segue, nem exagerar nem difícil 31 de agosto 11 às 15 55. Sua tarefa é muito simples ea abordagem que você adotou é certamente Bom para o trabalho No entanto, se você quiser usar um projeto melhor, você deve se livrar de todo esse movimento número você melhor usar uma fila FIFO e fazer bom uso de push e pop métodos que forma o código não vai refletir qualquer movimento de dados, apenas As duas ações lógicas de novos dados e remover dados anteriores a 7 dias.

No comments:

Post a Comment