Sunday, 19 November 2017

Moving Average In Oracle Sql


Se você vir essa mensagem, seu navegador desativou ou não aceita JavaScript. Para usar os recursos completos deste sistema de ajuda, como a pesquisa, seu navegador deve ter o suporte a JavaScript habilitado. Médias móveis ponderadas com médias móveis simples, cada valor de dados no quotwindowquot em que o cálculo é realizado tem uma significância ou peso iguais. É frequentemente o caso, especialmente na análise de dados de preços financeiros, que mais dados cronologicamente recentes devem ter um peso maior. Nesses casos, a média média móvel ponderada (ou a média móvel exponencial - veja o tópico a seguir) é muitas vezes preferida. Considere a mesma tabela de valores de dados de vendas por doze meses: para calcular uma média móvel ponderada: Calcule quantos intervalos de dados estão participando do cálculo da Média Mover (ou seja, o tamanho do cálculo quotwindowquot). Se a janela de cálculo for dita n, então o valor de dados mais recente na janela é multiplicado por n, o próximo mais recente multiplicado por n-1, o valor anterior ao multiplicado por n-2 e assim por diante para todos os valores na janela. Divida a soma de todos os valores multiplicados pela soma dos pesos para dar a média móvel ponderada sobre essa janela. Coloque o valor da média móvel ponderada em uma nova coluna de acordo com o posicionamento de médias avançadas descrito acima. Para ilustrar estas etapas, considere se é necessária uma média móvel de vendas de 3 meses em dezembro (usando a tabela acima de valores de vendas). O termo quot3-monthquot implica que o quotwindowquot de cálculo é 3, portanto, o algoritmo de cálculo da média móvel ponderada para este caso deve ser: Ou, se uma Média de Movimento Ponderada de 3 meses fosse avaliada em toda a gama original de dados, os resultados seriam : Média móvel de 3 meses na média móvel expressiva em T-SQL As médias móveis exponentes são semelhantes às médias móveis ponderadas, na medida em que atribuem menos peso às mudanças há muito tempo e mais peso às mudanças recentes. As médias móveis ponderadas são lineares, mas as médias móveis exponenciais são exponenciais. Ou seja, o peso pode ser expresso como uma curva: existe uma ótima maneira de calcular as médias móveis exponenciais no T-SQL usando um recurso indocumentado sobre variáveis ​​e execução de totais no SQL Server. Nesta publicação do blog, vou mostrar como usar esse método para calcular a média móvel exponencial em T-SQL, mas também apresentarei um método que está usando recursos padrão no SQL Server. Infelizmente, isso significa usar um loop. Nos exemplos, calculo uma média móvel exponencial de 9 dias. Os exemplos usam o banco de dados TAdb. Um script para criar TAdb pode ser encontrado aqui. Média de Movimento Exponencial (EMA): Método de Execução de Totais A teoria por trás dos recursos totais em execução em atualizações é descrita em detalhes por Jeff Moden em seu artigo, Resolvendo os Problemas de Roteamento Total e Ordenado Ordem. Outros recursos que descrevem o uso desse método para calcular EMA são as postagens do blog Calculando as médias móveis com o T-SQL por Gabriel Priester e o desafio do fórum Expponential Moving Average Challenge. Ambos no SQL Server Central. Basicamente, no T-SQL você pode atualizar variáveis, bem como colunas em uma declaração de atualização. As atualizações são feitas linha a linha internamente pelo SQL Server. Este comportamento de linha por linha é o que torna o cálculo de um total executável possível. Este exemplo mostra como funciona: Observe que 8220ColumnRunningTotal8221 é um total em execução de 8220ColumnToSum8221. Usando esse método, podemos calcular EMA9 com este T-SQL: o cálculo do EMA é bastante simples. Usamos a linha atual e a anterior, mas com mais peso para a linha atual. O peso é calculado pela fórmula 2 / (19), onde 822098221 é o parâmetro para o comprimento da EMA. Para calcular EMA9 para a linha 10 acima, o cálculo é: neste caso, a linha atual obtém 20 do peso (2 / (19) 0.2) ea linha anterior obtém 80 do peso (1-2 / (19) 0.8) . Você encontra este cálculo na declaração acima na instrução CASE: Média de Movimento Exponencial (EMA): Método de Looping Tanto quanto eu sei, exceto o método de totais em execução descrito acima, não há nenhuma maneira de calcular EMA usando uma instrução SQL baseada em conjunto . Portanto, o T-SQL abaixo está usando um loop while para calcular EMA9: os resultados são os mesmos que no exemplo de totais em execução acima. Desempenho Como esperado, a versão de totais em execução baseada em conjunto é muito mais rápida do que a versão do loop. Na minha máquina, a solução baseada em conjunto era de cerca de 300 ms, em comparação com cerca de 1200 com a versão do loop. A versão de loop está mais em conformidade com os padrões SQL, no entanto. Portanto, a escolha entre os métodos depende do que seja o mais importante para você, desempenho ou padrões. A média móvel exponencial pode ser utilizada na análise de tendências, como acontece com os outros tipos de médias móveis, média móvel simples (SMA) e média móvel ponderada (WMA). Há também outros cálculos em análises técnicas que usam o EMA, MACD, por exemplo. Esta publicação no blog faz parte de uma série sobre análise técnica, TA, no SQL Server. Veja as outras publicações aqui. Postado por Tomas Lind Tomas Lind - serviços de consultoria como SQL Server DBA e desenvolvedor de banco de dados no High Coast Database Solutions AB.

No comments:

Post a Comment