Médias móveis: quais são eles entre os indicadores técnicos mais populares, as médias móveis são usadas para avaliar a direção da tendência atual. Todo o tipo de média móvel (comumente escrito neste tutorial como MA) é um resultado matemático que é calculado pela média de um número de pontos de dados passados. Uma vez determinado, a média resultante é então plotada em um gráfico para permitir que os comerciantes vejam os dados suavizados, em vez de se concentrar nas flutuações de preços do dia a dia que são inerentes a todos os mercados financeiros. A forma mais simples de uma média móvel, apropriadamente conhecida como média móvel simples (SMA), é calculada tomando a média aritmética de um determinado conjunto de valores. Por exemplo, para calcular uma média móvel básica de 10 dias, você adicionaria os preços de fechamento dos últimos 10 dias e depois dividiria o resultado em 10. Na Figura 1, a soma dos preços nos últimos 10 dias (110) é Dividido pelo número de dias (10) para chegar à média de 10 dias. Se um comerciante deseja ver uma média de 50 dias, o mesmo tipo de cálculo seria feito, mas incluiria os preços nos últimos 50 dias. A média resultante abaixo (11) leva em conta os últimos 10 pontos de dados para dar aos comerciantes uma idéia de como um recurso tem um preço relativo aos últimos 10 dias. Talvez você esteja se perguntando por que os comerciantes técnicos chamam essa ferramenta de uma média móvel e não apenas de uma média regular. A resposta é que, à medida que novos valores se tornam disponíveis, os pontos de dados mais antigos devem ser descartados do conjunto e novos pontos de dados devem vir para substituí-los. Assim, o conjunto de dados está constantemente em movimento para contabilizar os novos dados à medida que ele se torna disponível. Este método de cálculo garante que apenas as informações atuais estão sendo contabilizadas. Na Figura 2, uma vez que o novo valor de 5 é adicionado ao conjunto, a caixa vermelha (representando os últimos 10 pontos de dados) se move para a direita e o último valor de 15 é descartado do cálculo. Uma vez que o valor relativamente pequeno de 5 substitui o valor elevado de 15, você esperaria ver a diminuição da média do conjunto de dados, o que faz, neste caso, de 11 a 10. O que as médias móveis parecem Uma vez que os valores da MA foi calculado, eles são plotados em um gráfico e depois conectados para criar uma linha média móvel. Essas linhas curvas são comuns nos gráficos dos comerciantes técnicos, mas como eles são usados podem variar drasticamente (mais sobre isso mais tarde). Como você pode ver na Figura 3, é possível adicionar mais de uma média móvel a qualquer gráfico, ajustando o número de períodos de tempo usados no cálculo. Essas linhas curvas podem parecer distrativas ou confusas no início, mas você se acostumará a elas com o passar do tempo. A linha vermelha é simplesmente o preço médio nos últimos 50 dias, enquanto a linha azul é o preço médio nos últimos 100 dias. Agora que você entende o que é uma média móvel e o que parece, bem, introduza um tipo diferente de média móvel e examine como isso difere da média móvel simples anteriormente mencionada. A média móvel simples é extremamente popular entre os comerciantes, mas, como todos os indicadores técnicos, tem seus críticos. Muitos indivíduos argumentam que a utilidade do SMA é limitada porque cada ponto na série de dados é ponderado o mesmo, independentemente de onde ocorre na sequência. Os críticos argumentam que os dados mais recentes são mais significativos do que os dados mais antigos e devem ter uma maior influência no resultado final. Em resposta a esta crítica, os comerciantes começaram a dar mais peso aos dados recentes, que desde então levaram à invenção de vários tipos de novas médias, sendo a mais popular a média móvel exponencial (EMA). (Para leitura adicional, veja Noções básicas de médias móveis ponderadas e qual a diferença entre uma SMA e uma EMA) Média móvel exponencial A média móvel exponencial é um tipo de média móvel que dá mais peso aos preços recentes na tentativa de torná-lo mais responsivo Para novas informações. Aprender a equação um tanto complicada para calcular uma EMA pode ser desnecessária para muitos comerciantes, já que quase todos os pacotes de gráficos fazem os cálculos para você. No entanto, para você geeks de matemática lá fora, aqui está a equação EMA: Ao usar a fórmula para calcular o primeiro ponto da EMA, você pode notar que não há nenhum valor disponível para usar como EMA anterior. Este pequeno problema pode ser resolvido iniciando o cálculo com uma média móvel simples e continuando com a fórmula acima a partir daí. Nós fornecemos uma amostra de planilha que inclui exemplos da vida real de como calcular uma média móvel simples e uma média móvel exponencial. A Diferença entre o EMA e o SMA Agora que você tem uma melhor compreensão de como o SMA e o EMA são calculados, vamos dar uma olhada em como essas médias diferem. Ao analisar o cálculo da EMA, você notará que é dada mais ênfase aos pontos de dados recentes, tornando-se um tipo de média ponderada. Na Figura 5, o número de períodos de tempo utilizados em cada média é idêntico (15), mas a EMA responde mais rapidamente aos preços em mudança. Observe como o EMA tem um valor maior quando o preço está subindo e cai mais rápido do que o SMA quando o preço está em declínio. Essa capacidade de resposta é a principal razão pela qual muitos comerciantes preferem usar o EMA sobre o SMA. O que os dias diferentes significam As médias em movimento são um indicador totalmente personalizável, o que significa que o usuário pode escolher livremente o período de tempo que deseja ao criar a média. Os períodos de tempo mais comuns utilizados nas médias móveis são 15, 20, 30, 50, 100 e 200 dias. Quanto menor o intervalo de tempo usado para criar a média, mais sensível será para as mudanças de preços. Quanto maior o período de tempo, menos sensível ou mais suavizado, a média será. Não há um marco de tempo certo para usar ao configurar suas médias móveis. A melhor maneira de descobrir qual é o melhor para você é experimentar vários períodos de tempo diferentes até encontrar um que se encaixa na sua estratégia. Médias móveis: como usar eles. Eu sei que esta é uma questão antiga, mas aqui está uma solução que não usa nenhuma estrutura de dados ou bibliotecas adicionais. É linear no número de elementos da lista de entrada e não consigo pensar em outra maneira de torná-la mais eficiente (na verdade, se alguém sabe de uma maneira melhor de alocar o resultado, avise-me). NOTA: isso seria muito mais rápido usando um array numpy em vez de uma lista, mas eu queria eliminar todas as dependências. Também seria possível melhorar o desempenho por execução multi-threaded. A função assume que a lista de entrada é de uma dimensão, então tenha cuidado. UPD: soluções mais eficientes foram propostas por Alleo e jasaarim. Você pode usar np. convolve para isso: O argumento modo especifica como lidar com as bordas. Eu escolhi o modo válido aqui porque acho que é assim que a maioria das pessoas espera correr significa trabalhar, mas você pode ter outras prioridades. Aqui está um gráfico que ilustra a diferença entre os modos: respondeu 24 de março às 22:01. Eu gosto desta solução porque é limpo (uma linha) e relativamente eficiente (trabalho feito dentro de numpy). Mas Alleo39s quot Solução eficiente usando numpy. cumsum tem melhor complexidade. Ndash Ulrich Stern 25 de setembro 15 às 0:31 Você pode calcular uma média de corrida com: Felizmente, numpy inclui uma função de convolve que podemos usar para acelerar as coisas. A média de corrida é equivalente a convolver x com um vetor que é N longo, com todos os membros iguais a 1N. A implementação numpy de convolve inclui o transiente inicial, então você deve remover os primeiros pontos N-1: Na minha máquina, a versão rápida é 20-30 vezes mais rápida, dependendo do comprimento do vetor de entrada e do tamanho da janela de média . Observe que convolve inclui um mesmo modo que parece que ele deve abordar o problema transitório inicial, mas ele o divide entre o início eo fim. Ele remove o transiente do final, e o começo não tem um. Bem, acho que é uma questão de prioridades, não preciso do mesmo número de resultados a expensas de obter uma inclinação em direção a zero que não existe nos dados. BTW, aqui está um comando para mostrar a diferença entre os modos: modos (39full39, 39same39, 39valid39) trama (convolve (uns ((200,)), uns ((50,)) 4750, modem)) para modos m in Eixo (-10, 251, -.1, 1.1) legenda (modos, loc39lower center39) (com piplot e numpy importados). Ndash lapis 24 mar 14 às 13:56 pandas é mais adequado para isso do que NumPy ou SciPy. Sua função rollingmean faz o trabalho convenientemente. Ele também retorna uma matriz NumPy quando a entrada é uma matriz. É difícil vencer o rolamento em desempenho com qualquer implementação Pure Python personalizada. Aqui é um exemplo de desempenho em relação a duas das soluções propostas: também há boas opções sobre como lidar com os valores de borda. I39m sempre irritado pela função de processamento de sinal que retorna sinais de saída de forma diferente dos sinais de entrada quando ambas as entradas e saídas são da mesma natureza (por exemplo, ambos os sinais temporais). Ele quebra a correspondência com a variável independente relacionada (por exemplo, tempo, frequência) fazendo complicação ou comparação não é uma questão direta. De qualquer forma, se você compartilhar o sentimento, você pode querer mudar as últimas linhas da função proposta como ynp. convolve (ww. sum (), s, mode39same39) return ywindowlen-1 :-( windowlen-1) ndash Christian O39Reilly Ago 25 15 às 19:56 Um pouco atrasado para a festa, mas eu fiz minha própria função pequena que NÃO envolve as extremidades ou almofadas com zeros que são usados para encontrar a média também. Como um tratamento adicional é, que também re-amostras o sinal em pontos espaçados linearmente. Personalize o código à vontade para obter outros recursos. O método é uma simples multiplicação da matriz com um kernel gaussiano normalizado. Um uso simples em um sinal sinusoidal com ruído distribuído normal adicionado: esta questão é agora mais antiga do que quando o NeXuS escreveu sobre isso no mês passado, MAS Gosto de como seu código lida com casos de ponta. No entanto, porque é uma média móvel simples, seus resultados ficam atrás dos dados aos quais se aplicam. Eu pensei que lidar com casos de ponta de uma maneira mais satisfatória do que os modos NumPys válidos. mesmo. E cheio poderia ser alcançado aplicando uma abordagem semelhante a um método baseado em convolução (). Minha contribuição usa uma média de execução central para alinhar seus resultados com seus dados. Quando existem dois pontos disponíveis para a janela de tamanho completo, as médias correntes são calculadas a partir de janelas sucessivamente menores nas margens da matriz. Na verdade, de janelas sucessivamente maiores, mas isso é um detalhe de implementação. É relativamente lento porque usa convolve (). E provavelmente poderia ser bem sucedido por um verdadeiro Pythonista, no entanto, acredito que a idéia está em pé. Respondeu 10 horas atrás Se você não precisa de uma saída de matriz e você não quer nenhuma dependência, você pode fazer isso. Que é quase tão rápido como talib e mais rápido do que qualquer outro método anteriormente mencionado. Respondeu 20 de dezembro 15 às 16:50 Esta não é uma média de corrida, é apenas uma média dos elementos do último período. Ndash lapis 23 de fevereiro 16 às 20:45 lapis sim, mas dizemos que você usa o método cumsum no primeiro tiquetaque e salve sua matriz média rolante para o próximo tiquetaque. Cada anotação depois disso você só precisa anexar o valor médio móvel mais recente à sua matriz em armazenamento. Usando este método, você não recalcula as coisas que você já calculou: no primeiro teste, você cumsum depois disso, você apenas adiciona o quotmean dos elementos do último período que é 2 vezes mais rápido para todos os carrapatos subsequentes. Ndash litepresence 10 de junho 16 às 12:29 Se você optar por rolar o seu próprio, em vez de usar uma biblioteca existente, esteja consciente do erro de ponto flutuante e tente minimizar seus efeitos: se todos os seus valores forem aproximadamente a mesma ordem de grandeza , Então isso ajudará a preservar a precisão sempre adicionando valores de magnitudes aproximadamente semelhantes. Na minha última frase, eu estava tentando indicar por que isso ajuda o erro de ponto flutuante. Se dois valores são aproximadamente da mesma ordem de grandeza, então adicioná-los perde menos precisão do que se você adicionasse um número muito grande a um número muito pequeno. O código combina quotadjacentquot valores de uma maneira que mesmo as somas intermediárias devem ser sempre razoavelmente próximas em magnitude, para minimizar o erro de ponto flutuante. Nada é à prova de engano, mas este método salvou alguns projetos muito pouco implementados na produção. Ndash Mayur Patel 15 de dezembro às 17:22 Alleo: Em vez de fazer uma adição por valor, você estará fazendo dois. A prova é a mesma coisa que o problema do lançamento de bits. No entanto, o ponto desta resposta não é necessariamente desempenho, mas precisão. O uso de memória para valores médios de 64 bits não excederia 64 elementos no cache, de modo que também é amigável no uso de memória. Ndash Mayur Patel 29 de dezembro 14 às 17:04
Comments
Post a Comment