Monday 30 October 2017

Movendo Média Pseudo Código


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 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 estou tentando calcular a média móvel de um sinal O sinal Valor um duplo é atualizado em tempos aleatórios Eu estou procurando uma maneira eficiente de calcular a média ponderada tempo s sobre uma janela de tempo, em tempo real eu poderia fazê-lo meu auto, mas é mais desafiador do que eu pensei. A maioria dos recursos Eu encontrei sobre a internet estão calculando a média móvel de sinal periódico, mas atualizações de minas em tempo aleatório. Do alguém sabe bons recursos para that. The truque é o seguinte Você começa atualizações em tempos aleatórios através de void update int tempo, valor float No entanto, você Também precisa acompanhar quando uma atualização cai fora da janela de tempo, então você define um alarme que chamado no tempo N que remove a atualização anterior de ser sempre considerado novamente no computation. If isso acontece em tempo real, você pode solicitar o funcionamento sistema Para fazer uma chamada para um método void dropoffoldestupdate int tempo para ser chamado no momento N. Se esta é uma simulação, você não pode obter ajuda do sistema operacional e você precisa fazê-lo manualmente Em uma simulação você chamaria métodos com o tempo fornecido Como um argumento que não se correlaciona com o tempo real No entanto, uma suposição razoável é que as chamadas são garantidas de tal forma que os argumentos de tempo estão aumentando Neste caso, você precisa manter uma lista ordenada de valores de tempo de alarme e para cada atualização e Ler chamar você verificar se o argumento de tempo é maior do que a cabeça da lista de alarme Enquanto é maior você faz o processamento relacionado com o alarme cair a atualização mais antiga, remova a cabeça e verifique novamente até todos os alarmes antes do tempo determinado são processados ​​Então Fazer a chamada de atualização. Eu até agora assumiu que é óbvio o que você faria para a computação real, mas vou elaborar apenas no caso de eu assumir que você tem um método float ler int tempo que você usa para ler os valores O objetivo é Para fazer essa chamada tão eficiente quanto possível Portanto, você não calcular a média móvel cada vez que o método de leitura é chamado Em vez disso, você precompute o valor da última atualização ou o último alarme e ajustar este valor por um par de operações de ponto flutuante para Conta para a passagem do tempo desde a última atualização ie um número constante de operações, exceto para talvez o processamento de uma lista de alarmes empilhados up. Hopefully isso é claro - este deve ser um algoritmo bastante simples e bastante eficiente. Otimização adicional um dos problemas restantes É se um grande número de atualizações acontecer dentro da janela de tempo, então há um longo tempo para que não há nem lê nem atualizações e, em seguida, uma leitura ou atualização vem Neste caso, o algoritmo acima será ineficiente na atualização incremental do Valor para cada uma das atualizações que está caindo Isso não é necessário porque nós só se preocupam com a última atualização além da janela de tempo, então se houver uma maneira de eficientemente cair todos os antigos upda Para fazer isso, podemos modificar o algoritmo para fazer uma busca binária de atualizações para encontrar a atualização mais recente antes da janela de tempo Se houver relativamente poucas atualizações que precisa ser descartado, então um pode atualizar o valor incrementalmente Para cada queda de atualização Mas se houver muitas atualizações que precisam ser descartados, então um pode recomputer o valor do zero após deixar cair fora as atualizações antigas. Apêndice sobre Computação Incremental Eu deveria esclarecer o que quero dizer por computação incremental acima na frase tweak este valor Por um par de operações de ponto flutuante para contabilizar a passagem de tempo desde a última atualização Cálculo não incremental inicial. Então iterar sobre relevantes atualizações em ordem de aumento de tempo. movendo suma de economia lastupdate timesincelastupdate windowlength. Now se exatamente uma atualização cai fora da janela mas Não há novas atualizações chegar, ajustar a soma como. Note que é priorupdate que tem o seu timestamp modificado para iniciar o início da última janela e se exatamente uma atualização entra na janela, mas não novas atualizações cair, ajustar a soma as. As deve ser óbvio, este é um esboço, mas espero que mostre como você Pode manter a média de tal forma que é O 1 operações por atualização em uma base amortizada Mas note otimização adicional no parágrafo anterior Observe também as questões de estabilidade aludidas em uma resposta mais antiga, o que significa que os erros de ponto flutuante podem acumular sobre um grande número de tais incremental Operações tais que há uma divergência do resultado do cálculo completo que é significativo para o aplicativo. Se uma aproximação é OK e há um mínimo de tempo entre as amostras, você poderia tentar super-amostragem tem uma matriz que representa intervalos de tempo uniformemente espaçados que São mais curtos do que o mínimo, e em cada período de tempo armazenar a última amostra que foi recebida Quanto mais curto o intervalo, mais próxima a média será para o verdadeiro valor E O período não deve ser maior do que a metade do mínimo ou há uma chance de faltar uma amostra. Respondida em Dez 15 11 em 18 12.Thanks para a resposta Uma melhoria que seria necessário para realmente armazenar em cache o valor da média total assim Nós don t loop o tempo todo Também, pode ser um ponto menor, mas não seria mais eficiente usar um deque ou uma lista para armazenar o valor, uma vez que assumimos que a atualização virá na ordem certa Inserção seria mais rápido Que no mapa Arthur Dec 16 11 at 8 55.Sim, você poderia armazenar em cache o valor da soma Subtrair os valores das amostras que você apagar, adicione os valores das amostras que você inserir Também, sim, um par deque Exemplo, Data pode ser Mais eficiente Eu escolhi o mapa para a legibilidade, ea facilidade de invocar o mapa upperbound Como sempre, escreva código correto primeiro, então perfil e medida mudanças incrementais Rob Dec 16 11 at 15 00.Note Aparentemente esta não é a maneira de abordar isto Deixando-o aqui Para referência sobre o que está errado com esta abordagem Verifique os comentários. UP DATADO - com base no comentário de Oli não sei sobre a instabilidade de que ele está falando though. Use um mapa ordenado de tempos de chegada contra valores Após a chegada de um valor adicionar a hora de chegada para o mapa ordenado juntamente com o seu valor s e atualizar o movimento Average. warning isso é pseudo-code. There Não totalmente expandido, mas você começa a idéia. Coisas a nota Como eu disse o acima é pseudo-código Você precisará escolher um mapa apropriado Don t remover os pares como você percorrer como você Invalidará o iterador e terá que começar novamente Veja o comentário de Oli abaixo também. Respondido Dec 15 11 at 12 22. Isso não funciona, não leva em conta que proporção do comprimento da janela de cada valor existe para também, esta abordagem De somar e depois subtrair é apenas estável para tipos inteiros, não flutuadores Oliver Charlesworth 15 de dezembro de 11 em 12 29. OliCharlesworth - desculpe eu perdi alguns pontos-chave na descrição dupla e ponderada no tempo vou atualizar Agradecimentos Dennis Dec 15 11 at 12 33 . O tempo-peso é ye T outro problema Mas isso não é o que eu estou falando eu estava se referindo ao fato de que quando um novo valor entra pela primeira vez na janela de tempo, sua contribuição para a média é mínima Sua contribuição continua a aumentar até um novo valor entra Oliver Charlesworth 15 de dezembro 11 em 12 35.Movendo exponencial média - EMA. BREAKING DOWN média móvel exponencial - 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 de convergência média móvel MACD E os osciladores de preço PPO em geral, os EMAs de 50 e 200 dias são usados ​​como sinais de tendências de longo prazo. Os traders que empregam a análise técnica acham médias móveis muito úteis e perspicazes quando aplicadas corretamente, mas criam estragos quando usados ​​indevidamente ou são Mal interpretadas Todas as médias móveis normalmente utilizadas na análise técnica são, pela sua própria natureza, indicadores atrasados ​​Consequentemente, as conclusões tiradas da aplicação de uma média móvel a um determinado mercado O gráfico deve ser para confirmar um movimento de mercado ou para indicar a sua força Muito frequentemente, pelo tempo uma linha de indicador de média móvel fez uma mudança para refletir uma mudança significativa no mercado, o ponto ideal de entrada no mercado já passou Um EMA serve Para aliviar este dilema de alguma forma Porque o cálculo EMA coloca mais peso sobre os dados mais recentes, abraça 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. Como todos os indicadores de média móvel, eles são muito mais adequados para mercados de tendências Quando o mercado está em uma tendência de alta forte e 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 A 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, como a ação de preço de uma forte tendência de alta começa a nivelar e reverter, a taxa de EMA s cha Nge de uma barra para a próxima vai começar a diminuir até que o tempo que a linha de indicador aplana ea taxa de mudança é zero. Por causa do efeito retardado, por este ponto, ou mesmo alguns bares antes, a ação de preço já deve ter Inversa. Portanto, segue-se que a observação de uma diminuição consistente na taxa de variação da EMA poderia ser utilizada como um indicador que pudesse contrariar o dilema causado pelo efeito retardado das médias móveis. Usos da EMA. As EM são comumente usadas em conjunto com Outros indicadores para confirmar os movimentos significativos do mercado e para avaliar a sua validade Para os comerciantes que comercializam os mercados intraday e rápido, a EMA é mais aplicável Muitas vezes os comerciantes usam EMAs para determinar um viés de negociação Por exemplo, se um EMA em um gráfico diário mostra um Forte tendência ascendente, a estratégia de um comerciante intraday pode ser o comércio apenas a partir do lado de longo em um gráfico intraday.

No comments:

Post a Comment