Como realizar a média móvel em Python

Melhor resposta

Escrevi um artigo no Medium que apresenta os diferentes tipos de médias móveis e a codificação de suas funções em Python (Completo link para o código, pois a formatação é difícil: Como codificar diferentes tipos de médias móveis em Python. ). Aqui está o artigo:

Os softwares de negociação vêm com diferentes tipos de médias móveis já pré-instaladas e prontas para mapear. Mas pode ser interessante entender como calcular essas médias móveis para poder usá-las quando estiver testando estratégias em potencial.

Se você quiser um método “faça você mesmo”, então o que está abaixo certamente irá interessá-lo Tudo o que é necessário é um interpretador python, como SPYDER. Os diferentes tipos “conhecidos” de médias móveis são:

  • Média móvel simples.
  • Média móvel exponencial.
  • Média móvel suavizada.
  • Média móvel ponderada linear.

Nós irá percorrer cada um, definir, codificar e traçar um gráfico.

Gráfico diário GBPUSD. Em preto, MA de 200 dias, em carmesim, EMA de 200 dias, em amarelo MA suavizado de 200 dias e em rosa, MA de peso linear de 200 dias.

Média móvel simples

Como o nome sugere, esta é a sua média simples que é usada em toda parte nas estatísticas e basicamente em qualquer outra parte de nossas vidas. São simplesmente os valores totais das observações divididos pelo número de observações.

Matematicamente falando, pode ser escrito como:

Em python, podemos definir uma função que calcula médias móveis da seguinte maneira:

[O código Python vai aqui, por favor consulte o link do artigo original acima, pois colar o código é demorado]

A função usa a estrutura de dados representada pelos Dados variável, o período de média móvel (20, 60, 200, etc.) representado pela variável período , em que você deseja aplicá-lo ( em estruturas de dados OHLC, escolha 3 para preços de fechamento porque a indexação python começa em zero) representado pela variável onwhat e onde variável é onde você deseja que a coluna de média móvel apareça. Observe que você deve ter um array de mais de 4 colunas para que isso funcione, porque ele não cria automaticamente uma nova coluna, mas simplesmente a preenche.

EURUSD Horizonte de tempo diário com média móvel simples de 200 dias.

Média móvel exponencial

Ao contrário da média móvel simples que dá pesos iguais a todas as observações, a média móvel exponencial dá mais peso às observações mais recentes. Ele reage mais do que a simples média móvel em relação aos movimentos recentes.

Matematicamente falando, pode ser escrito como:

O fator de suavização é geralmente 2. Observe que, se aumentarmos o fator de suavização (também conhecido como alfa), as observações mais recentes terão mais peso.

Na linguagem python , podemos definir uma função que calcula a EMA da seguinte maneira:

[o código Python vai aqui, consulte o link do artigo original acima para colar o código é demorado]

A função é autoexplicativa, pois apenas reproduz a função EMA apresentada acima.

EURUSD Horizonte de tempo diário com média móvel exponencial de 200 dias.

Média móvel suavizada

Esta média móvel leva em consideração o quadro geral e é menos impactada pelos movimentos recentes. É meu indicador de tendência favorito. Matematicamente falando, ele pode ser encontrado simplesmente multiplicando a variável Dias na função EMA por 2 e subtrair 1. Isso significa que para transformar uma média móvel exponencial em uma suavizada, seguimos esta equação em linguagem python, que transforma o movimento exponencial média para uma suavizada:

smoothed = (exponential * 2) - 1 # From exponential to smoothed

EURUSD Horizonte de tempo diário com média móvel suavizada de 200 dias.

Média móvel linear ponderada

É uma média móvel simples que dá mais peso aos dados recentes. A observação mais recente tem o maior peso e cada uma das anteriores tem um peso decrescente progressivamente.Intuitivamente, tem menos lag do que as outras médias móveis, mas também é o menos usado e, portanto, o que ganha em redução de lag, perde popularidade.

Matematicamente falando, pode ser escrito como:

Na linguagem python, podemos definir uma função que calcula as médias móveis da seguinte maneira:

[O código Python vai aqui, consulte o link do artigo original acima, pois colar o código é demorado]

EURUSD Horizonte de tempo diário com média móvel ponderada de 200 dias.

Basicamente, se tivermos um conjunto de dados composto por dois números [1, 2] e queremos calcular uma média ponderada linear, então faremos o seguinte:

  • (2 x 2) + (1 x 1) = 5
  • 5/3 = 1,66

Isso pressupõe uma série de tempo com o número 2 como sendo a observação mais recente.

Conclusão

Então, qual escolher? Essa questão é deixada para o perfil de risco do trader e sua familiaridade com a média móvel. Alguns preferem médias móveis simples, enquanto outros tentam ir mais fundo usando combinações de médias móveis exponenciais e suavizadas. Tudo depende de você encontrar o seu favorito. Meu conselho? Considere as médias móveis de longo prazo.

Resposta

Por que ninguém mencionou os Pandas ainda? Biblioteca de análise de dados Python

import pandas as pd, numpy as np

np.random.seed(1)

random\_walk = pd.Series(

np.random.randn(100)

).cumsum() # dummy data

random\_walk.ewm(span=10).mean() # ema

random\_walk.rolling(20).mean() # simple moving average

random\_walk.expanding().mean() # expanding average

index = pd.bdate\_range("2012","2013",freq="1h") # time series

series = pd.Series(

np.random.randn(index.shape[0]),index

)

series.rolling("100h").mean() # 100 hours, time based window

series.rolling(pd.Timedelta(hours=30)).mean() # You may use any offset compatible with index

series.rolling(10, win\_type="triang").mean() # triangle weights

series.rolling(10,center=True).mean() # value in the middle of window

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *