Sunday 22 October 2017

Exponencial Moving Average Sql


Eu li a discussão que você mencionou. É aplicável ao PostgreSQL, uma vez que é permitido criar uma função agregada definida pelo usuário usando SQL no PostgreSQL, mas não é permitido no SQL Server. O uso de CTE recursivo é uma maneira viável no SQL Server, mas percebo que a maneira CTE pode resultar em mais varredura de tabela do que as funções da janela. Então eu faço essa publicação para perguntar se é possível calcular a média móvel exponencial usando a função de janela do SQL Server 2012, como calcular a média móvel simples. Ndash xiagao1982 14 de abril de 13 às 2:53 Primeiro, você calcula o EMA (SMA (x)) em vez do EMA (x). Em segundo lugar, seu quotmoothing constantquot é, na verdade, o valor beta da minha fórmula, e não o alfa. Com essas duas mudanças, o SQLFiddle parece assim: sqlfiddle6191921 No entanto, ainda existe uma pequena diferença entre o resultado real e o resultado esperado. Eu voltaria e veria se a sua definição EMA corresponde ao que eu conheço. Ndash Sebastian Meine 7 de maio 13 às 13:46 Eu simplesmente olhei para o formulário na planilha que você anexou e está fora da definição EMA padrão. Minha fórmula calcula a média móvel exponencial das últimas dez linhas. A planilha calcula primeiro a média padrão nas últimas dez linhas e, em seguida, a média móvel ponderada exponencialmente irrestrita em todas as médias. Isso segue o formulário aqui: en. wikipedia. orgwikiEWMAchart ndash Sebastian Meine 7 de maio 13 às 13: 52 A 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 Para 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) e a linha anterior recebe 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