Skip to main content

Filtro De Média Ponderada Filtro C ++


Uma média móvel simples é uma média de dados calculada ao longo de um período de tempo. A média móvel é o indicador de preço mais popular usado nas análises técnicas. Esta média pode ser usada com qualquer preço incluindo Hi, Low, Open ou Close, e também pode ser aplicada a outros indicadores. Uma média móvel suaviza uma série de dados, que é muito importante em um mercado volátil, pois ajuda a identificar tendências significativas. Dundas Chart para ASP. NET tem quatro tipos de médias móveis, incluindo Simple, Exponential. Triangular. E Ponderado. A diferença mais importante entre as médias móveis acima é a forma como eles pesam seus pontos de dados. Recomendamos que você leia usando fórmulas financeiras antes de prosseguir. O uso de fórmulas financeiras fornece uma explicação detalhada sobre como usar fórmulas e também explica as várias opções disponíveis para você ao aplicar uma fórmula. Um gráfico de linha é uma boa opção ao exibir uma média móvel simples. Interpretação financeira: a média móvel é usada para comparar os preços de segurança com sua média móvel. O elemento mais importante usado no cálculo da média móvel é um período de tempo, que deve ser igual ao ciclo de mercado observado. A média móvel é um indicador de atraso, e sempre estará por trás do preço. Quando o preço segue uma tendência, a média móvel é muito próxima do preço de segurança. Quando um preço está subindo, a média móvel provavelmente permanecerá baixa devido à influência dos dados históricos. Cálculo: a média móvel é calculada utilizando a seguinte fórmula: na fórmula anterior o valor-n representa um período de tempo. Os períodos de tempo mais comuns são: 10 dias, 50 dias e 200 dias. Uma média móvel se move porque, à medida que cada novo ponto de dados é adicionado, o ponto de dados mais antigo é descartado. Uma média móvel simples dá igual peso a cada preço do ponto de dados. Este exemplo demonstra como calcular uma média móvel de 20 dias usando o método Formula. Estou tentando calcular a média móvel de um sinal. O valor do sinal (um duplo) é atualizado em horários aleatórios. Estou procurando uma maneira eficiente de calcular sua média ponderada no tempo ao longo de uma janela de tempo, em tempo real. Eu poderia fazê-lo sozinho, mas é mais desafiante do que eu pensava. A maioria dos recursos que encontrei através da internet calculam a média móvel do sinal periódico, mas as atualizações das minas em tempo aleatório. Alguém conhece bons recursos para isso. O truque é o seguinte: você obtém atualizações em horários aleatórios através de atualização vazia (tempo int, valor flutuante). No entanto, você também precisa acompanhar quando uma atualização cai na janela de tempo, de modo que você configure um alarme chamado no momento N, que remove a atualização anterior de ser novamente considerado novamente na computação. Se isso acontecer em tempo real, você pode solicitar o sistema operacional para fazer uma chamada para um método void dropoffoldestupdate (int time) para ser chamado no tempo N Se esta é uma simulação, você não pode obter ajuda do sistema operacional e você precisa Faça-o 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 hora do alarme e, para cada atualização e leitura, você verifica se o argumento de tempo é maior que o cabeçalho da lista de alarmes. Embora seja maior, você faz o processamento relacionado ao alarme (abandone a atualização mais antiga), remova a cabeça e verifique novamente até que todos os alarmes anteriores ao tempo fornecido sejam processados. Em seguida, faça a chamada de atualização. Tenho até agora assumido que é óbvio o que você faria para a computação real, mas vou elaborar apenas no caso. Eu suponho que você tenha um método flutuante lido (int time) que você usa para ler os valores. O objetivo é tornar este chamado tão eficiente quanto possível. Então você não calcula a média móvel sempre que o método de leitura é chamado. Em vez disso, você precomputa o valor a partir da última atualização ou o último alarme, e ajuste esse valor por algumas operações de ponto flutuante para explicar a passagem do tempo desde a última atualização. (I. E. Um número constante de operações, exceto para talvez processar uma lista de alarmes empilhados). Esperemos que isso seja 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 acontecerem dentro da janela de tempo, então há muito tempo para o qual não há leituras nem atualizações e, em seguida, uma leitura ou atualização vem junto. Nesse caso, o algoritmo acima será ineficiente ao atualizar de forma incremental o valor de cada uma das atualizações que está caindo. Isso não é necessário, porque nós só nos preocupamos com a última atualização além da janela de tempo, então, se houver uma maneira de descartar todas as atualizações mais antigas, isso ajudaria. Para fazer isso, podemos modificar o algoritmo para fazer uma pesquisa binária de atualizações para encontrar a atualização mais recente antes da janela de tempo. Se houver relativamente poucas atualizações que precisam ser descartadas, pode-se incrementar o valor para cada atualização descartada. Mas se houver muitas atualizações que precisam ser descartadas, pode-se recalcular o valor a partir do zero depois de deixar as atualizações antigas. Apêndice em Computação Incremental: Devo esclarecer o que quero dizer pela computação incremental acima na frase ajustar esse valor por um par de operações de ponto flutuante para explicar a passagem do tempo desde a última atualização. Computação inicial não incremental: então iterar sobre os atuais relevantes em ordem crescente de tempo: tempo de exibição de motionaverage (sum tempo de atraso). Agora, se exatamente uma atualização cai fora da janela, mas nenhuma nova atualização chegou, ajuste a soma como: (note que é priorupdate, que tem seu timestamp modificado para iniciar o início da última janela). E se exatamente uma atualização entrar na janela, mas nenhuma nova atualização cai, ajuste a soma como: Como deve ser óbvio, este é um esboço áspero, mas espero que mostre como você pode manter a média de que é O (1) operações por atualização Em uma base amortizada. Mas observe uma 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 se acumulam em um grande número dessas operações incrementais, de modo que existe uma divergência com o resultado da computação total que é significativa para o aplicativo. Se uma aproximação é OK e há um tempo mínimo entre amostras, você pode tentar super-amostragem. Tenha uma matriz que represente intervalos de tempo uniformemente espaçados que sejam menores do que o mínimo, e em cada período de tempo armazene a última amostra que foi recebida. Quanto menor o intervalo, mais próxima será a média para o valor verdadeiro. O período não deve ser superior a metade do mínimo ou há uma chance de perder uma amostra. Respondeu 15 de dezembro às 18:12 Obrigado pela resposta. Uma melhoria que seria necessária para que o quotcachequot fosse o valor da média total, de modo que não estivemos todos os dias. Além disso, pode ser um ponto menor, mas não seria mais eficiente usar um deque ou uma lista para armazenar o valor, já que assumimos que a atualização virá na ordem correta. A inserção seria mais rápida do que no mapa. Ndash Arthur 16 de dezembro 11 às 8:55 Sim, você pode armazenar em cache o valor da soma. Submeta os valores das amostras que você apaga, adicione os valores das amostras que você inseriu. Além disso, sim, um dequeltpairltSample, Dategtgt pode ser mais eficiente. Eu escolhi o mapa para a legibilidade e a facilidade de invocar o mapa :: upperbound. Como sempre, escreva o código correto primeiro, depois faça o perfil e mude as mudanças incrementais. Ndash Rob Dec 16 11 at 15:00 Nota: Aparentemente, esta não é a maneira de abordar isso. Deixando-o aqui para referência sobre o que está errado com essa abordagem. Verifique os comentários. ATUALIZADO - com base no comentário Olis. Não tenho certeza sobre a instabilidade de que ele está falando. Use um mapa ordenado de tempos de chegada contra valores. Após a chegada de um valor, adicione a hora de chegada ao mapa ordenado juntamente com seu valor e atualize a média móvel. Advertindo isso é pseudo-código: aí. Não totalmente elaborado, mas você consegue a ideia. Coisas a serem observadas. Como eu disse, o acima é pseudo-código. Você precisará escolher um mapa apropriado. Não remova os pares conforme você itera, pois você invalidará o iterador e terá que começar de novo. Veja o comentário Olis abaixo também. Respondeu 15 de dezembro às 12:22 Isso não funciona: ele não leva em consideração a proporção do comprimento de janela de cada valor para. Além disso, essa abordagem de adicionar e depois subtrair é apenas estável para tipos inteiros, não flutuadores. Ndash Oliver Charlesworth 15 de dezembro às 12:29 OliCharlesworth - desculpe, perdi alguns pontos-chave na descrição (dupla e ponderada no tempo). Vou atualizar. Obrigado. Ndash Dennis 15 de dezembro 11 às 12:33 A ponderação do tempo é mais um problema. Mas isso não é o que eu estou falando. Eu estava me referindo ao fato de que quando um novo valor primeiro entra na janela de tempo, sua contribuição para a média é mínima. Sua contribuição continua a aumentar até um novo valor entrar. Ndash Oliver Charlesworth 15 de dezembro 11 às 12: 35A Média de movimento ponderada é uma média de dados calculada ao longo de um período de tempo, onde maior peso é anexado aos dados mais recentes. A média móvel ponderada pode ser usada com qualquer preço, incluindo o preço Hi, Low, Open ou Close, e também pode ser aplicada a outros indicadores. A média ponderada ponderada suaviza uma série de dados, que é importante em um mercado volátil, pois ajuda a identificar tendências muito mais facilmente. A ponderação é calculada a partir de uma soma de dias. Dundas Chart para Windows Forms tem quatro tipos de médias móveis, incluindo o Simple. Exponencial. Triangular. E Ponderado. A diferença mais importante entre as médias móveis acima é a forma como eles pesam seus pontos de dados. Recomendamos que você leia usando fórmulas financeiras antes de prosseguir. O uso de fórmulas financeiras fornece uma explicação detalhada sobre como usar fórmulas e também explica as várias opções disponíveis para você ao aplicar uma fórmula. Um gráfico de linha é uma boa opção ao exibir uma média móvel ponderada. Interpretação financeira: a média móvel ponderada é usada para comparar um valor com sua média móvel ponderada e dá mais influência para dados recentes e menos influência em dados passados. O elemento mais importante usado no cálculo da média móvel é um período de tempo, que deve ser igual ao ciclo de mercado observado. A média móvel ponderada é indicador de atraso, e sempre estará por trás do preço. Quando o preço segue uma tendência, a média móvel ponderada é muito próxima do preço. Quando um preço está aumentando, a média móvel ponderada provavelmente permanecerá baixa por causa da influência dos dados históricos. Cálculo: A média móvel ponderada é calculada usando uma soma de índices de períodos de tempo (pontos de dados). O peso para cada período é calculado como índice (Número de pontos de dados). A tabela a seguir demonstra como calcular uma média móvel ponderada de 5 dias:

Comments