Tuesday 24 October 2017

Movendo Média Algoritmo 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 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, usar 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, isso é 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 média móvel - a mais antiga, mas isso é para obter o conceito do que está acontecendo em toda a gente. Eu preciso 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 detalhado e eu não tenho certeza se há um padrão que é mais sucinta. Currently, 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 o outro 6 por uma semana rolling total de volta por um O processamento desta matriz estática é feito em seu próprio Método ou seja. Minha pergunta é esta uma abordagem de design razoável, ou há algo de cegueira óbvia e simples para fazer essa tarefa Obrigado guys. asked ago 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, todas o 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 que 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 amo sobre este site de alta qualidade, respostas relevantes de pessoas que conhecem seus sh Pete855217 ago 30 11 at 15 05. Por que você inicializar runningTotal para null Qual é o seu tipo Onde ele é declarado faria bem se você colocar algumas amostras de código que se assemelham ao código Java real. Movendo, minha crítica seria a seguinte sua função faz muito Uma função ou método, deve ser coeso Mais apropriadamente, eles devem fazer um Coisa e uma coisa só. Desordem ainda, o que acontece no seu loop for 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.In seu projeto, sua função. moves shuffles Os itens em seu array. calcula o material total. prints Para o erro padrão. Retorna o total. Faz muito. Minha primeira sugestão não é mover coisas em torno 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 é quebrar As coisas em funções que são coesivas. Têm uma estrutura de dados um buffer circular que lhe permite adicionar a ele e que cai a entrada mais antiga sempre que atinge a sua capacidade. Ter a estrutura de dados implementar um interator. have uma função que calcula o total no Iterador 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á computing. That s que eu d do. That s grande info luis, No entanto lembre-se esta função é uma pequena parte da funcionalidade da classe, e seria um exagero para adicionar muito código para torná-lo perfeito Você está tecnicamente correto, e eu entendo o meu código faz muito, mas ao mesmo tempo às vezes é Melhor errar no si De código menor, mais claro do que ir para a perfeição Dado o meu Java habilidades, mesmo fazendo o pseudocódigo você descreve compilação teria me soprar meu orçamento sobre isso, mas obrigado pela descrição clara Pete855217 31 de agosto 11 às 2 23.Hmmm, não é Sobre a perfeição, mas sobre práticas industriais estabelecidas que conhecemos há três décadas. Código limpo sempre é dividido. Temos décadas de evidências que indicam que esse é o caminho a seguir no caso geral em termos de custo-eficiência, defeito Redução, compreensão, etc, a menos que seja throw-away código para um tipo de tempo único 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 Ago 31 11 às 15 55. Sua tarefa é muito simples eo aproach 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ê usar melhor um Fila FIFO e fazer Bom uso de métodos push e pop que forma o código não irá refletir qualquer movimento de dados, apenas as duas ações de lógica de novos dados e remover dados mais de 7 days. answered Aug 30 11 at 14 49.Moving Média - MA. BREAKING DOWN Moving Average - MA. As um exemplo de SMA, considere uma segurança com os seguintes preços de fechamento sobre 15 days. Week 1 5 dias 20, 22, 24, 25, 23.Week 2 5 dias 26, 28, 26, 29, 27.Week 3 5 dias 28, 30, 27, 29, 28.A MA 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 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 muito Maior grau de atraso do que um MA de 20 dias, porque ele contém preços para os últimos 200 dias O comprimento da MA para usar depende dos objetivos de negociação, com MA mais curto usado para shor T-termo de negociação e MA de 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 considerada como importante trading signals. MAs também transmitir importantes sinais de negociação Por conta própria, ou quando duas médias se cruzam Uma MA em ascensão indica que a segurança está em uma tendência de alta enquanto uma MA declinante indica que ela está em uma tendência de baixa Da mesma forma, a dinâmica ascendente é confirmada com um crossover de alta que ocorre quando uma MA de curto prazo Cruza acima de um MA de longo prazo O impulso descendente é confirmado com um crossover de baixa, que ocorre quando um MA de curto prazo cruza abaixo de um MA de longo prazo.

No comments:

Post a Comment