Thursday 21 September 2017

Exponencial Móvel Média Matemática


Eu tenho essencialmente uma matriz de valores como este: A matriz acima é simplificada, estou coletando um 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. Minha lógica falha porque no meu exemplo acima, 0.36 é o pico real, mas meu algoritmo olharia para trás e verá 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 valores lineares. (Ou seja: Id como meus resultados para ser curvy, não jaggedy) Ive 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 processar valores em minha matriz, aplicando um cálculo exponencial de média móvel para igualá-los out perguntou Feb 8 12 at 20:27 Para calcular uma média móvel exponencial. Você precisa manter algum estado ao redor e você precisa de um parâmetro de ajuste. Isso requer uma pequena classe (supondo que você está usando o Java 5 ou posterior): Instantiate com o parâmetro de decadência desejado (pode ter ajuste deve estar entre 0 e 1) e use a média () para filtrar. Ao ler uma página sobre alguma recorrência matemática, tudo o que você realmente precisa saber ao transformá-lo em código é que os matemáticos gostam de escrever índices em matrizes e seqüências com subscritos. (Eles têm algumas outras notações também, o que não ajuda.) No entanto, o EMA é bastante simples, como você só precisa se lembrar de um antigo valor não arrays estado complicado necessário. Respondeu 8 fevereiro às 20:42 TKKocheran: Muito bonito. Não é bom quando as coisas podem ser simples (se começar com uma nova seqüência, obter uma nova média.) Observe que os primeiros termos na seqüência média saltarão em torno de um pouco 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 o resto do seu programa demais. Ndash Donal Fellows Feb 9 12 em 0:06 Estou tendo dificuldade em compreender suas perguntas, mas vou tentar responder de qualquer maneira. 1) Se o seu algoritmo encontrado 0,25 em vez de 0,36, então ele está errado. É errado porque assume um aumento ou uma diminuição monotônica (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 valor máximo entre dois pontos no tempo, corte sua matriz de tmin para tmax e localize 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 (segundo e primeiro números) a segunda (nova lista) é a média de 1,4 e 1,5 (terceira e segunda lista antiga) a terceira (nova lista) a média de 1,5 e 1,4 (Quarto e terceiro), e assim por diante. Eu poderia ter feito o período três ou quatro, ou n. Observe como os dados são muito mais suaves. Uma boa maneira de ver as médias móveis no trabalho é ir ao Google Finance, selecionar um estoque (tente Tesla Motors bastante volátil (TSLA)) e clique em technicals na parte inferior do gráfico. Selecione Média Móvel com um determinado período e Média Mínima 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, isto é uma forma de influenciar a suavização em direção às costas. Por favor, leia a entrada da Wikipedia. Então, isso é mais um comentário do que uma resposta, mas a pequena caixa de comentários era apenas 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ê precisará manipular as partes inicial e final dos dados, uma vez que claramente você não consegue média dos últimos 5 termos quando você está no seu 2º ponto de dados. Além disso, há maneiras mais eficientes de calcular essa média móvel (soma sum - mais antigo mais recente), mas isso é para obter o conceito do que está acontecendo em toda. Respondeu 8 de fevereiro às 20:41 Eu tenho um valor contínuo para o qual Id gostaria de calcular uma média móvel exponencial. Normalmente, apenas use a fórmula padrão para isto: onde S n é a nova média, alfa é o alfa, Y é a amostra, e S n-1 é a média anterior. Infelizmente, devido a várias questões que eu não tenho um tempo de amostragem consistente. Eu posso saber que posso provar no máximo, digamos, uma vez por milissegundo, mas devido a fatores fora do meu controle, eu não posso ser capaz de tomar uma amostra por vários milissegundos de cada vez. Um caso provável mais comum, no entanto, é que eu simples amostra um pouco cedo ou tarde: em vez de amostragem em 0, 1 e 2 ms. I amostra a 0, 0,9 e 2,1 ms. Eu antecipo que, independentemente dos atrasos, a minha frequência de amostragem será muito, muito acima do limite de Nyquist, e assim eu não preciso se preocupar com aliasing. Eu acho que eu posso lidar com isso de uma forma mais ou menos razoável, variando o alfa adequadamente, com base no período de tempo desde a última amostra. Parte do meu raciocínio de que isso irá funcionar é que o EMA interpola linearmente entre o ponto de dados anterior eo atual. Se considerarmos o cálculo de um EMA da seguinte lista de amostras a intervalos t: 0,1,2,3,4. Devemos obter o mesmo resultado se usarmos o intervalo 2t, onde os inputs se tornam 0,2,4, right Se o EMA tivesse assumido que, em t 2, o valor tinha sido 2 desde t 0. Que seria o mesmo que o cálculo do intervalo t calculando em 0,2,2,4,4, o que não está fazendo. Ou isso faz sentido em tudo Alguém pode me dizer como variar o alfa adequadamente Por favor, mostre seu trabalho. I. e. Mostre-me a matemática que prova que seu método realmente está fazendo a coisa certa. Perguntou Jun 21 09 at 13:05 Você shouldn39t obter o mesmo EMA para entrada diferente. Pense em EMA como um filtro, amostragem em 2t é equivalente a amostragem para baixo, eo filtro vai dar uma saída diferente. Isto é claro para mim já que 0,2,4 contém componentes de freqüência mais alta do que 0,1,2,3,4. A menos que a questão seja, como faço para alterar o filtro na mosca para torná-lo dar a mesma saída. Talvez eu estou faltando algo ndash freespace Jun 21 09 em 15:52 Mas a entrada não é diferente, it39s apenas amostrado menos frequentemente. 0,2,4 em intervalos 2t é como 0,, 2, 4 em intervalos t, onde o indica que a amostra é ignorada ndash Curt Sampson Jun 21 09 at 23:45 Esta resposta baseada na minha boa compreensão do low-pass Filtros (média móvel exponencial é realmente apenas um filtro singlepass pólo único), mas a minha compreensão obscuros do que você está procurando. Eu acho que o seguinte é o que você quer: Primeiro, você pode simplificar a sua equação um pouco (parece mais complicado, mas seu mais fácil no código). Vou usar Y para saída e X para entrada (em vez de S para saída e Y para entrada, como você fez). Em segundo lugar, o valor de alfa aqui é igual a 1-e-Delatattau, onde Deltat é o tempo entre as amostras, e tau é a constante de tempo do filtro passa-baixa. Digo igual entre aspas porque isso funciona bem quando Deltattau é pequeno em comparação com 1, e alfa 1-e-Delatattau asymp Deltattau. (Mas não é muito pequeno: você terá problemas de quantização e, a menos que você recorra a algumas técnicas exóticas, geralmente precisa de mais N bits de resolução na sua variável de estado S, onde N - log 2 (alfa).) Para valores maiores de Deltattau O efeito de filtragem começa a desaparecer, até chegar ao ponto em que o alfa está próximo de 1 e você basicamente está apenas atribuindo a entrada à saída. Isso deve funcionar corretamente com vários valores de Deltat (a variação de Deltat não é muito importante, desde que o alfa é pequeno, caso contrário, você vai correr em alguns problemas bastante estranho Nyquist aliasing etc), e se você estiver trabalhando em um processador onde a multiplicação É mais barato do que a divisão, ou questões de ponto fixo são importantes, precalculate omega 1tau, e considerar tentar aproximar a fórmula para alfa. Se você realmente quer saber como derivar a fórmula alfa 1-e-Dtattattau, então considere sua fonte de equação diferencial: que, quando X é uma função de etapa unitária, tem a solução Y 1 - e - ttau. Para valores pequenos de Deltat, a derivada pode ser aproximada por DeltaYDeltat, produzindo Y tau DeltaYDeltat X DeltaY (XY) (Deltattau) alfa (XY) ea extrapolação de alfa 1-e - Detatatta vem da tentativa de igualar o comportamento com o Caso de função de etapa unitária. Você poderia por favor elaborar sobre o quottrying para combinar o behaviorquot parte Eu entendo sua solução de tempo contínuo Y 1 - exp (-t47) e sua generalização para uma função escalonada escalonada com magnitude x e condição inicial y (0). Mas não vejo como juntar essas idéias para alcançar seu resultado. Ndash Rhys Ulerich May 4 13 at 22:34 Esta não é uma resposta completa, mas pode ser o início de um. Seu até onde eu com isto em uma hora ou assim de jogar Im que afixa isto como um exemplo de que Im que procuram, e talvez uma inspiração a outro que trabalha no problema. Começo com S 0. Que é a média resultante da média anterior S -1 e da amostra Y 0 tomada em t 0. (T 1 - t 0) é o meu intervalo de amostra e alfa é ajustado para o que é apropriado para esse intervalo de amostra eo período sobre o qual eu desejo a média. Eu considerei o que acontece se eu perder a amostra em t 1 e em vez disso ter que se contentar com a amostra Y 2 tomada em t 2. Bem, podemos começar expandindo a equação para ver o que teria acontecido se tivéssemos tido Y 1: Observo que a série parece estender-se infinitamente desta maneira, porque podemos substituir o S n no lado direito indefinidamente: Ok , Então não é realmente um polinômio (bobo-me), mas se multiplicarmos o termo inicial por um, então vemos um padrão: Hm: é uma série exponencial. Quelle surpresa Imagine que saindo da equação para uma média móvel exponencial Então, de qualquer maneira, eu tenho esse x 0 x 1 x 2 x 3. Coisa que vai, e Im certeza estou cheirando e ou um logaritmo natural chutando por aqui, mas eu não consigo lembrar onde eu estava indo em seguida antes de eu acabar o tempo. Qualquer resposta a esta pergunta, ou qualquer prova de correção de tal resposta, depende muito dos dados que você está medindo. Se suas amostras foram coletadas em t 0 0ms. T 1 0,9ms e t2 2,1ms. Mas sua escolha de alfa é baseada em intervalos de 1 ms e, portanto, você quer um alfa n ajustado localmente. A prova de correção da escolha significaria conhecer os valores da amostra em t1ms e t2ms. Isso leva à pergunta: Você pode interpolar os seus dados de forma sensata para ter suposições sãs do que valores intermédios poderiam ter sido? Ou você pode mesmo interpolar a própria média? Se nenhum destes é possível, então, tanto quanto eu vejo, o lógico A escolha de um valor intermediário Y (t) é a média calculada mais recentemente. I. e. Y (t) asymp S n em que n é maxmial tal que t n ltt. Esta escolha tem uma conseqüência simples: Deixe o alfa sozinho, não importa o que a diferença de tempo era. Se, por outro lado, é possível interpolar seus valores, então isto lhe dará amostras de intervalo constante averagable. Por último, se é mesmo possível interpolar a própria média, isso tornaria a pergunta sem sentido. Respondeu Jun 21 09 at 15:08 balpha 9830 27.2k 9679 10 9679 87 9679 117 Eu acho que posso interpolar meus dados: dado que I39m amostragem em intervalos discretos, I39m já fazê-lo com um padrão EMA Anyway, presumir que eu preciso Um quotproofquot que mostra que funciona bem como um padrão EMA, que também tem irá produzir um resultado incorreto se os valores não estão mudando muito bem entre períodos de amostra. Ndash Curt Sampson Jun 21 09 at 15:21 Mas isso é o que I39m dizendo: Se você considerar a EMA uma interpolação de seus valores, youre feito se você deixar alfa como é (porque inserir a mais recente média como Y não muda a média) . Se você disser que precisa de algo que funciona bem como um padrão EMAquot - o que está errado com o original A menos que você tenha mais informações sobre os dados que você está medindo, quaisquer ajustes locais para alfa será no melhor arbitrário. Ndash balpha 9830 Jun 21 09 at 15:31 Eu deixaria o valor alfa sozinho, e preencher os dados ausentes. Uma vez que você não sabe o que acontece durante o tempo quando você não pode amostra, você pode preencher essas amostras com 0s, ou manter o valor anterior estável e usar esses valores para a EMA. Ou alguma interpolação para trás uma vez que você tiver uma nova amostra, preencha os valores ausentes e recompite a EMA. O que estou tentando obter é que você tem uma entrada xn que tem buracos. Não há como contornar o fato de que você está faltando dados. Assim, você pode usar uma retenção de ordem zero ou defini-la como zero ou algum tipo de interpolação entre xn e xnM. Onde M é o número de amostras em falta e n o início do intervalo. Possivelmente mesmo usando valores antes de n. De gastar uma hora ou assim muco sobre um pouco com a matemática para isso, eu acho que simplesmente variando o alfa vai realmente me dar a interpolação adequada entre os dois pontos que você fala, mas em um Muito mais simples. Além disso, eu acho que a variação do alfa também irá tratar adequadamente amostras tomadas entre os intervalos de amostragem padrão. Em outras palavras, eu estou procurando o que você descreveu, mas tentando usar matemática para descobrir a maneira simples de fazê-lo. Ndash Curt Sampson Jun 21 09 at 14:07 Eu não acho que há uma besta tão quotproper interpolationquot. Você simplesmente não sabe o que aconteceu no momento em que você não está amostragem. Interpolação boa e má implica algum conhecimento do que você perdeu, uma vez que você precisa medir contra isso para julgar se uma interpolação é bom ou ruim. Embora isso seja dito, você pode colocar restrições, ou seja, com aceleração máxima, velocidade, etc. Eu acho que se você sabe como modelar os dados faltantes, então você apenas modelar os dados ausentes, em seguida, aplicar o algoritmo EMA sem alteração, Do que alterar alfa. Just my 2c :) ndash freespace Jun 21 09 em 14:17 Isto é exatamente o que eu estava começando em minha edição para a pergunta 15 minutos atrás: QuotYou simplesmente don39t saber o que aconteceu no tempo que você não está amostragem, mas isso é verdade Mesmo se você amostra em cada intervalo designado. Assim, minha contemplação Nyquist: desde que você saiba que a forma de onda não muda de direção mais do que cada par de amostras, o intervalo de amostra real não deve ser importante e deve ser capaz de variar. A equação de EMA parece-me exatamente calcular como se a forma de onda mudasse linearmente do último valor de amostra ao atual. Ndash Curt Sampson Jun 21 09 em 14:26 Eu don39t acho que é muito verdadeiro. O teorema de Nyquist requer requer mínimo de 2 amostras por período para ser capaz de identificar exclusivamente o sinal. Se você don39t fazer isso, você começa aliasing. Seria o mesmo que amostragem como fs1 por um tempo, então fs2, então de volta a fs1, e você começa aliasing nos dados quando você amostra com fs2 se fs2 está abaixo do limite de Nyquist. Eu também devo confessar que eu não entendo o que você quer dizer com quotwaveform muda linearmente da última amostra para um onequot atual. Poderia explicar Cheers, Steve. Ndash freespace Jun 21 09 at 14:36 ​​Isso é semelhante a um problema aberto na minha lista de tarefas. Eu tenho um esquema funcionou até certo ponto, mas não tem trabalho matemático para apoiar esta sugestão ainda. Update amp resumo: Gostaria de manter o fator de alisamento (alfa) independente do fator de compensação (que eu me refiro como beta aqui). Jasons excelente resposta já aceito aqui funciona muito bem para mim. Se você também pode medir o tempo desde a última amostra foi tomada (em múltiplos arredondados do seu tempo de amostragem constante - 7,8 ms desde a última amostra seria de 8 unidades), que poderia ser usado para aplicar o alisamento várias vezes. Aplicar a fórmula 8 vezes neste caso. Você efetivamente fez um alisamento mais inclinado para o valor atual. Para obter uma melhor suavização, precisamos ajustar o alfa, aplicando a fórmula 8 vezes no caso anterior. O que esta aproximação de suavização perde? Já perdeu 7 amostras no exemplo acima Isto foi aproximado no passo 1 com uma aplainada re-aplicação do valor atual um adicional de 7 vezes Se definimos um fator de aproximação beta que será aplicado junto com alfa (Como alphabeta em vez de apenas alfa), estaremos assumindo que as 7 amostras perdidas estavam mudando suavemente entre os valores da amostra anterior e atual. Eu pensei sobre isso, mas um pouco de mucking sobre com a matemática me levou ao ponto onde eu acredito que, ao invés de aplicar a fórmula de oito vezes com o valor da amostra, eu posso fazer um cálculo De um novo alfa que me permitirá aplicar a fórmula uma vez, e me dar o mesmo resultado. Além disso, isso iria lidar automaticamente com a questão das amostras desviadas de tempos de amostra exata. Ndash Curt Sampson Jun 21 09 at 13:47 A única aplicação está bem. O que eu não tenho certeza sobre ainda é quão boa é a aproximação dos 7 valores em falta. Se o movimento contínuo faz com que o jitter de valor muito ao longo dos 8 milissegundos, as aproximações podem ser completamente fora da realidade. Mas, então, se você está amostragem em 1ms (resolução mais alta, excluindo as amostras atrasadas) você já percebeu que o jitter dentro de 1 ms não é relevante. Este raciocínio funciona para você (eu ainda estou tentando me convencer). Ndash nik Jun 21 09 em 14:08 Direito. Esse é o fator beta da minha descrição. Um fator beta seria calculado com base no intervalo de diferença e nas amostras atual e anterior. O alfa novo será (alphabeta) mas será usado somente para essa amostra. Enquanto você parece estar alinhando a alfa na fórmula, eu tento para alfa constante (fator de alisamento) e um beta independentemente calculado (um fator de ajuste) que compensa amostras perdidas agora. A média móvel exponencial (EMA) é uma média móvel ponderada (WMA) que dá mais peso, ou importância, ao preço recente (EMA) Dados que a média móvel simples (SMA). A EMA responde mais rapidamente às mudanças de preços recentes do que a SMA. A fórmula para calcular a EMA envolve apenas o uso de um multiplicador e começando com o SMA. O cálculo para a SMA é muito simples. A SMA para um determinado número de períodos de tempo é simplesmente a soma dos preços de fechamento para esse número de períodos de tempo, dividido pelo mesmo número. Assim, por exemplo, um SMA de 10 dias é apenas a soma dos preços de fechamento para os últimos 10 dias, dividido por 10. Os três passos para calcular o EMA são: Calcular o SMA. Calcule o multiplicador para a ponderação da EMA. Calcule a EMA atual. A fórmula matemática, neste caso para calcular uma EMA de 10 períodos, tem a seguinte aparência: SMA: 10 sum10 de período Cálculo do multiplicador de ponderação: (2 (período de tempo selecionado 1)) (2 (10 1)) 0,1818 (18,18) Cálculo O EMA: (Preço de fechamento - EMA (dia anterior)) x multiplicador EMA (dia anterior) A ponderação dada ao preço mais recente é maior para um EMA de período mais curto do que para um EMA de período mais longo. Por exemplo, um multiplicador de 18,18 é aplicado aos dados de preços mais recentes para um EMA de 10, enquanto que para um EMA de 20, apenas é utilizada uma ponderação de multiplicador de 9,52. Há também pequenas variações da EMA chegou a usando o preço aberto, alto, baixo ou mediano em vez de usar o preço de fechamento. Use a média móvel exponencial (EMA) para criar uma estratégia dinâmica de negociação forex. Saiba como EMAs podem ser utilizados muito. Leia a resposta Aprenda as vantagens potenciais importantes de usar uma média móvel exponencial ao negociar, em vez de um movimento simples. Leia a resposta Saiba mais sobre médias móveis simples e médias móveis exponenciais, o que esses indicadores técnicos medem ea diferença. Leia a resposta Aprenda a fórmula para o indicador de momento de convergência divergente e veja como calcular o MACD. Leia a resposta Saiba mais sobre os diferentes tipos de médias móveis, bem como os cruzamentos de média móvel e compreenda como eles são usados. Leia a resposta Descubra as diferenças primárias entre os indicadores de média móvel exponencial e simples, e quais as desvantagens dos EMAs. O artigo 50 é uma cláusula do tratado da UE que descreve as medidas que um país membro deve tomar para sair da União Europeia. Grã-Bretanha. Beta é uma medida da volatilidade, ou risco sistemático, de um título ou de uma carteira em comparação com o mercado como um todo. Um tipo de imposto incidente sobre ganhos de capital incorridos por pessoas físicas e jurídicas. Os ganhos de capital são os lucros que um investidor. Uma ordem para comprar um título igual ou inferior a um preço especificado. Uma ordem de limite de compra permite que traders e investidores especifiquem. Uma regra do Internal Revenue Service (IRS) que permite retiradas sem penalidade de uma conta IRA. A regra exige que. DESCRIÇÃO Este módulo calcula uma média móvel exponencial pela seguinte fórmula onde alfa é um número entre 0 e 1. Isso significa que um novo valor influencia a média com um determinado peso (1-alfa). Esse peso, então, aumenta exponencialmente quando outros valores são adicionados. Como escolher o alfa O valor do alfa determina o quão rápido um valor dado flui, mas nunca cai completamente. Suponha que você pode definir um limite dizer após 10 iterações o peso de um determinado valor deve ser 1 ou 0,01. Então Math :: EMA-gtnew (keygtvalue.) Cria um novo objeto Math :: EMA. Os parâmetros são passados ​​como pares keygtvalue. Atualmente essas chaves são reconhecidas: inicializa alfa. O alfa deve estar no intervalo de 0 a 1. Inicializa a média. Se um e-mail não inicializado for usado, o primeiro valor adicionado será inicializado. Obj-gtalpha define ou recupera o conjunto obj-gtema atual ou recupera a média atual obj-gtsetparam (iterações, endweight) calcula o alfa dos valores passados. Depois de iterações novos valores um determinado valor deve ter um peso de endweight na média. Torsten Foumlrtsch, lttorsten. foertschgmxgt COPYRIGHT E LICENÇA Copyright (C) 2008 por Torsten Foertsch Esta biblioteca é um software livre que você pode redistribuí-lo e / ou modificá-lo sob os mesmos termos do Perl, ou a versão 5.10.0 do Perl ou, à sua escolha, qualquer Versão posterior do Perl 5 você pode ter disponível. Instruções de Instalação do Módulo Para instalar o Math :: EMA, basta copiar e colar qualquer um dos comandos no seu terminal Para obter mais informações sobre a instalação do módulo, visite o guia de instalação detalhado do módulo CPAN.

No comments:

Post a Comment