Programa para calcular médias móveis em Python, com plotagem de gráfico

Calcular médias móveis em Python

Problema:

“Escreva um programa em Python que receba uma lista de preços de fechamento de uma ação da Bolsa de Valores, durante um período de 30 dias, calcule as médias móveis de 15 dias e plote um gráfico mostrando essas médias ao longo desse período.”

O que é uma média móvel

Média móvel é um método estatístico usado para analisar dados de séries temporais, como preços de ações, dados de vendas ou outras métricas que variam ao longo do tempo. Uma média móvel calcula o valor médio de um conjunto de dados durante um período especificado e, em seguida, desloca a janela de cálculo (intervalo) em uma unidade de tempo e repete o processo.

Os valores resultantes formam um novo conjunto de dados, que geralmente é plotado em um gráfico para revelar tendências ou padrões.

Por exemplo, uma média móvel simples (MMS) do preço de fechamento de uma ação em um período de 15 dias calcularia o preço médio de fechamento dos últimos 15 dias, avançaria um dia e recalcularia a média com base nos 15 dias anteriores, e assim por diante. Isso pode ajudar a suavizar os dados e destacar tendências ao longo do tempo, reduzindo o impacto de flutuações de curto prazo ou ruído nos dados.

Existem diferentes tipos de médias móveis, como médias móveis exponenciais (MME) e médias móveis ponderadas (MMP), que colocam mais ou menos ênfase em pontos de dados recentes, dependendo do método usado. As médias móveis são comumente usadas na análise técnica para identificar tendências, níveis de suporte e resistência e possíveis sinais de compra ou venda de ações.

Vamos escrever um script em Python que permita calcular as médias móveis de um conjunto de preços de fechamento de ações ao longo de 30 dias. Para tal, vamos usar uma lista com 30 valores (que são os preços de fechamento).

Vamos lá!

Código: Médias Móveis em Python

import matplotlib.pyplot as plt

def media_movel(dados, janela):
  media_movel_lista = []
  for i in range(len(dados) - janela + 1):
    media_movel = sum(dados[i:i+window])/janela
    media_movel_lista.append(media_movel)
  return media_movel_lista

if __name__=="__main__":
  precos_fechamento = [100, 105, 102, 108, 110, 110, 115, 118, 103, 121, 123, 125, 123, 121,119, 118, 116, 115, 113, 110, 115, 118, 117, 120, 119, 119, 116, 117, 114, 115]
  janela = 15
  media_movel_15 = media_movel(precos_fechamento, janela)
  
  # Plotar o gráfico
  plt.plot(media_movel_15)
  plt.xlabel('Dias')
  plt.ylabel('Média Móvel de 15 dias')
  plt.title('Média Móvel de Preços de Ações')
  plt.show()

Resultado

Ao rodar o script acima será exibido o seguinte gráfico de linha, com as médias móveis calculadas:

Médias Móveis em Python

Funcionamento do código

Este código usa a função media_movel para calcular as médias móveis dos preços das ações.

O argumento janela especifica o tamanho da janela da média móvel, que neste caso é definido como 15 dias. A lista precos_fechamento contém as cotações de fechamento da ação do período de 30 dias.

A função retorna uma lista de médias móveis, que é plotada usando a biblioteca matplotlib. O eixo x do gráfico representa os dias e o eixo y representa os valores das médias móveis calculadas.

Variação: lendo os preços de fechamento a partir de um arquivo de texto csv

Uma forma mais prática de usar esse script é ler os preços das ações a partir de um arquivo de texto .csv, de modo que não precisemos escrever esses valores diretamente no código. O script a seguir mostra essa modificação aplicada a nosso exemplo:

Código

import matplotlib.pyplot as plt
import csv

def media_movel(dados, janela):
  media_movel_lista = []
  for i in range(len(dados) - janela + 1):
    media_movel = sum(dados[i:i+window])/janela
    media_movel_lista.append(media_movel)
  return media_movel_lista

if __name__=="__main__":
  arquivo = 'precos_fechamento.csv'
  precos_fechamento = []
  with open(arquivo, 'r') as arq:
    reader = csv.reader(arq)
    for linha in reader:
      precos_fechamento.append(float(linha[0]))
  janela = 15
  media_movel_15 = media_movel(precos_fechamento, janela)

  plt.plot(media_movel_15)
  plt.xlabel('Dias')
  plt.ylabel('Média Móvel de 15 dias')
  plt.title('Média Móvel de Preços de Ações')
  plt.show()

Agora o código lê os preços de fechamento a partir de um arquivo CSV chamado precos_fechamento.csv, usando o módulo csv.

Esse arquivo deve conter um preço de fechamento por linha. O script abre o arquivo, lê seu conteúdo para uma lista e então fecha o arquivo. O restante do código permanece o mesmo de antes, com a função media_movel sendo usada para calcular a média móvel de 15 dias dos preços das ações e os dados resultantes sendo plotados usando a biblioteca matplotlib.

 

Sobre Fábio dos Reis (1197 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*