Saturday 25 August 2018

T-sql simple moving average


Média móvel ponderada em T-SQL Em um post anterior, eu demonstrei o cálculo de médias móveis em T-SQL. No entanto, há uma grande desvantagem com médias móveis simples. As alterações de preços no início do período têm a mesma importância que as alterações de preços mais recentes. De alguma forma você gostaria de atribuir pesos diferentes às mudanças de preço, de modo que as mudanças mais recentes ganhem mais peso. Para este propósito, uma Média Móvel Ponderada (WMA) pode ser calculada. Nesta postagem do blog vou mostrar dois métodos diferentes para calcular WMA, um que pode ser usado no SQL Server 2005 e posterior, ea outra versão é para SQL Server versões anteriores a 2005. Para calcular o peso relativo de cada mudança de preço, nós Precisam saber a posição de cada mudança de preço em relação ao dia calculado. Devido a isso, uma função de janela não pode ser usada. Não é possível obter informações das linhas individuais na janela. No exemplo abaixo, calcularemos a média móvel ponderada de 9 dias (WMA9). O exemplo usa o TAdb. Um script para criar TAdb pode ser encontrado aqui. Independentemente da versão do SQL Server, para cada linha precisamos acessar as 8 linhas anteriores, 9 com a linha atual incluída. Essas 9 linhas serão a janela que contém nossas mudanças de preço. Cada linha nessa janela será atribuída um peso linear que está aumentando com a mesma quantidade para cada linha até a linha atual. O peso para cada linha será calculado usando a posição da linha da janela relativa à linha atual. Let8217s dizem que queremos calcular WMA para a linha 9: th (citações de TAdb StockId 1): 1 30,02 30,02 2 30,33 60,66 3 30,33 90,99 4 30,44 121,76 5 30,24 151,20 6 30,27 181,62 7 29,87 209,09 8 30,00 240,00 9 30,02 270,18 A soma dos anteriores é 1355,52. Isto é então dividido pela soma dos pesos, isto é 123456789 45. O WMA9 para a linha 9 é 1355,52 / 45 30,12. Se você deseja calcular WMA diferente de 9 dias, use o seguinte T-SQL (obter a função GetNums2 aqui) para obter o divisor para o comprimento do período (por exemplo, 45 para 9 dias WMA): Divisão de Média Móvel Ponderada (WMA) Média móvel ponderada SQL Server 2005 e posterior Esta versão usa um CTE para calcular o WMA: Resultado para 9 dias Média móvel ponderada (WMA9) Nos resultados acima, você pode ver o WMA9 para a linha 9 é 30,12, como calculado anteriormente. Média móvel ponderada antes do SQL Server 2005 A única diferença entre a versão do SQL Server 2005 e esta é a utilização de uma expressão de tabela comum. A versão anterior a 2005 usa tabelas reais em vez de CTE8217s: Desempenho Ao calcular uma média móvel simples e usar o SQL Server 2017 ou posterior, um grande aperfeiçoamento no desempenho pode ser visto ao usar funções de janela em comparação com os metohods alternativos usados ​​em versões mais antigas do SQL Server . Contudo, os cálculos das médias móveis ponderadas podem utilizar as funções de janelas da mesma maneira. Uma comparação entre a versão do WMA do SQL Server 2005 mostra uma pequena melhoria em relação às versões usadas em versões anteriores do SQL Server: T-SQL WMA SQL Server 2005 em comparação com a versão anterior a 2005. Devido aos cálculos dispendiosos envolvidos no WMA, pode ser uma boa idéia para persistir os resultados. WMA são utilizados da mesma forma que SMA, na análise de tendências. WMA tem mais peso nas mudanças de preços recentes no entanto. Este blog é parte de uma série sobre análise técnica, TA, no SQL Server. Veja os outros posts aqui. Tomas Lind - Serviços de consultoria como SQL Server DBA e desenvolvedor de banco de dados em High Coast Database Solutions AB. Média móvel em T-SQL Um cálculo comum na análise de tendência é a média móvel (ou contínua). Uma média móvel é a média das, por exemplo, as últimas 10 linhas. A média móvel mostra uma curva mais suave do que os valores reais, mais ainda com um período mais longo para a média móvel, tornando-se uma boa ferramenta para análise de tendências. Esta postagem no blog mostrará como calcular a média móvel em T-SQL. Diferentes métodos serão usados ​​dependendo da versão do SQL Server. O gráfico abaixo demonstra o efeito de alisamento (linha vermelha) com uma média móvel de 200 dias. As cotações de ações são a linha azul. A tendência a longo prazo é claramente visível. T-SQL Movendo Avergage 200 dias A demonstração abaixo requer o banco de dados TAdb que pode ser criado com o script localizado aqui. No próximo exemplo vamos calcular uma média móvel para os últimos 20 dias. Dependendo da versão do SQL Server, haverá um método diferente para fazer o cálculo. E, como veremos mais adiante, as versões mais recentes do SQL Server têm funções que permitem um cálculo muito mais eficaz. SQL Server 2017 e posterior Moving Average Esta versão faz uso de uma função de janela agregada. O que há de novo no SQL 2017 é a possibilidade de restringir o tamanho da janela, especificando quantas linhas que precedem a janela devem conter: Linhas precedentes é 19, porque incluiremos a linha atual também no cálculo. Como você pode ver, o cálculo da média móvel no SQL Server 2017 é bastante simples. A figura abaixo demonstra o princípio windowing. A linha atual é marcada com amarelo. A janela é marcada com um fundo azul. A média móvel é simplesmente a média de QuoteClose nas linhas azuis: T-SQL Moving average window. Os resultados dos cálculos em versões mais antigas do SQL Server são os mesmos, para que eles não serão mostrados novamente. SQL Server 2005 8211 2008R2 Moving Average Esta versão faz uso de uma expressão de tabela comum. O CTE é auto referenciado para obter as últimas 20 linhas para cada linha: Movendo Média antes do SQL Server 2005 A versão anterior a 2005 usará uma junção externa esquerda na mesma tabela para obter as últimas 20 linhas. Comparação de desempenho Se executamos os três métodos diferentes simultaneamente e verificamos o plano de execução resultante, há uma diferença dramática no desempenho entre os métodos: Comparação de três Diferentes métodos para calcular a média móvel Como você pode ver, as melhorias na janela de função no SQL 2017 faz uma enorme diferença no desempenho. Como mencionado no início deste post, as médias móveis são usadas como uma ferramenta para ilustrar tendências. Uma abordagem comum é combinar médias móveis de diferentes comprimentos, a fim de detectar alterações nas tendências a curto, médio e longo prazo, respectivamente. De particular interesse são a passagem de linhas de tendência. Por exemplo, quando a tendência curta se move sobre a tendência de longo ou médio, isso pode ser interpretado como um sinal de compra em análise técnica. E quando a tendência curta se move sob uma linha de tendência mais longa, isso pode ser interpretado como um sinal de venda. O gráfico abaixo mostra Cotações, Ma20, Ma50 e Ma200. T-SQL Ma20, Ma50, Ma200 comprar e vender sinais. Este blog é parte de uma série sobre análise técnica, TA, no SQL Server. Veja os outros posts aqui. Uma de minhas tabelas contém medidas meteorológicas por minuto (por exemplo, temperatura e umidade) e I39m tentando usar uma cláusula GROUP BY para calcular uma média diária móvel por mês para essas medições. Eu quero expressar essa média em um tipo de dados smalldatetime. Calcular uma temperatura média diária é fácil, mas eu quero unir essas médias por um mês. Como posso criar os dados necessários Para ver como você pode retornar a média móvel, primeiro crie uma tabela de Medidas e preencha-a com dados de amostra para testes. A Listagem 1 preenche a tabela Medidas com um valor de um ano de seis medições diárias aleatórias de temperatura. O truque no cálculo de uma média diária de temperatura é usar uma expressão na cláusula GROUP BY. A expressão CONVERT (char (10), DT, 112) na Listagem 2 39s script extrai apenas a parte da data da coluna DT, que contém a data ea hora da medição. Usando essa expressão na cláusula GROUP BY, você retornar uma linha separada para cada dia. Em seguida, você precisa solicitar a temperatura média e filtrar o mês desejado, como mostra a Listagem 2. Esta declaração retorna um mês de valor de médias diárias de temperatura, que constituem a média móvel. Tabela 1 mostra a saída da Listagem 2. Compartilhe este artigo Discuta este artigo 1 simon (não verificado) Isso não é uma média móvel - é a média por mês de calendário - não média dos últimos 30 dias para cada dia. Como seria uma média móvel Faça o login ou registre-se para postar comentários. Artigos relacionados Copyright copy 2017 Penton

No comments:

Post a Comment