• Início
  • Conteúdo
  • Artigos
  • Blog
  • Análise de Série Temporal e Normalização a 100 de Ações Usando Python

Análise de Série Temporal e Normalização a 100 de Ações Usando Python

Escrito por Fabio Leonidas

Esse é um artigo introdutório, em que você verá como começar a analisar um gráfico de uma ação através do Python e suas bibliotecas, utilização do Google Colab (eu utilizo o tema escuro) e entregar explicações sobre os códigos e a lógica utilizada. Apesar de simples, esse conhecimento servirá como base para trabalhos mais elaborados.

Utilizei o Google Colab e optei por colocar os códigos em imagens, juntamente com alguns comentários feitos.

De maneira sucinta, uma Série Temporal é um conjunto de observações ordenadas no tempo. Não precisa necessariamente ser relacionada ao mercado de ações.

Importando as Bibliotecas

Para explicar passo a passo, começarei importando o que já sei que vou precisar.

Nesse caso precisarei de uma fonte de dados, que usarei o Yahoo Finance, e o Matplotlib, uma biblioteca para visualização de dados das séries dos ativos escolhidos.

Image for post

Image for post

 

Para o artigo em questão, usarei os dados de Fechamento Ajustado, ‘Adj Close’ em inglês, da VALE3.

Obtendo Dados da VALE3

Criamos um dataframe e nomeamos ‘serie_vale’.

Para pegar esses dados, nesse caso, utilizei o Yahoo finance. Ele me pede argumentos como ‘ticker’ (código do ativo), start (período de início da série), end (período final da série). Há outros, mas não vamos nos aprofundar. Aproveitei esse método e já arredondei os valores do ativo (rounding=True).

Um outro método poderia ser utilizando uma função do numpy (np.round) onde podemos escolher até o número de casas decimais.

 

Image for post

Nota: podemos utilizar a função ‘type()’ para vermos de qual tipo é o objeto.

Image for post

Após pegar os dados é preciso olhar como está nosso dataframe. Sendo assim, a dica é utilizar o método head() para exibir, por padrão, as 10 primeiras linhas do seu dataframe. Caso queira um número específico, você pode inserir um parâmetro dentro desse método, como fiz abaixo:

 

Image for post

 

Acima podemos ver que tenho os dados de abertura (open), máxima (high), mínima (low), fechamento (close),fechamento ajustado (adj close) e volume desde a data que inseri quando fiz o ‘yf.download’ dos dados da VALE3.

Desenvolvendo a Visualização dos Dados da VALE3

Agora vamos utilizar o Matplotlib, onde utilizo diversos métodos para customizar essa visualização e dentro desses métodos insiro argumentos.

Fiz algumas modificações que não precisariam ser feitas, mas achei interessante para fins de estudo e entendimento do que é possível fazer, como mudança da cor da linha, do título, customização do eixo X e do eixo Y, tamanho de fonte, dentre outros.

Ao mesmo tempo em que busquei mexer um pouco no gráfico, também acho interessante não me aprofundar tanto para não confundir e para que você busque mais informações sobre.

 

Image for post

 

Veja como ficou:

 

Image for post

 

Indo Um Pouco Além: Normalização a 100

Como é possível ver, o trabalho é razoavelmente simples para um iniciante. Por isso eu quis mostrar algo a mais.

Agora que plotamos um gráfico com um ativo, vamos um pouco além para que eu possa mostrar uma maneira de comparar dois (ou mais) ativos no mesmo gráfico e também utilizar a normalização a 100 para que os preços no gráfico tenham o mesmo ponto de partida.

Isso permite que realizemos uma análise melhor da comparação dos dois ativos em questão, uma vez que sem a normalização eles têm valores diferentes.

Para isso, vamos obter os dados da PETR4.

 

Image for post

Image for post

Image for post

 

Veja como ficou:

 

Image for post

 

Colocando Os Dados Das Duas Ações em Um DataFrame

Como estou utilizando o Fechamento Ajustado (Adj Close) como parâmetro em meus gráficos, vou colocar ambos em um df para que você veja uma maneira de fazê-lo.

Insiro especificamente a coluna que quero de cada série e adiciono ‘.T’ pois meu dataframe estava com os fechamentos ajustados como linhas e não colunas.

 

Para deixar mais claro a quais ativos pertencem as colunas, modifico seus respectivos títulos:
 
Image for post
 

Finalmente, normalizando Preço das Ações a 100

A fórmula utilizada é: Pt/P0∗100

Dessa forma, dividiremos o preço de uma determinada data pelo primeiro número e o quociente será multiplicado por 100.

Logo, o primeiro número (P0) dividido por ele mesmo e multiplicado por 100 será igual a 100, independente da ação.

Com isso, ambos os preços desses ativos iniciarão em 100.

Sobre o método .iloc:

 

Image for post

 

Plotagem da Comparação Normalizada a 100

Abaixo coloco os dois ativos no mesmo gráfico, adiciono título, rótulo (label) para o eixo X e para o eixo Y e aproveito para mostrar como mudar as legendas.

Abaixo do gráfico normalizado a 100 plotei os preços sem utilizar a fórmula para que seja possível ver a diferença.

 

Image for post

 

Image for post

Visualizando as Séries Sem a Normalização a 100

Note como muda a análise uma vez que cada ação parte de um valor diferente.

Image for post


Image for post

 

O Que Podemos Observar

Uma vez normalizado a 100 podemos ter uma base adequada para comparar a evolução de cada ação.

Utilizando o contexto de pandemia, podemos notar, com base apenas no que fizemos, que a PETR4 sofreu mais com o covid-19 e que também teve uma recuperação menor. Os motivos disso pode ser tema para outro artigo.

Note que em algumas ocasiões ambos ativos caem ou sobem juntos e em outras apenas um cai/sobe. Isso nos leva a outro tema bom para abordar, que é mostrar a diferença entre risco sistemático e não-sistemático e a importância da diversificação de portfólio.

Conclusão

Se você possui conhecimento de Python e suas bibliotecas é razoavelmente simples dar início a análises e outros projeto mais aprofundados na área de Mercado Financeiro.

Esse artigo servirá como ponto de partida para novas publicações. Espero que tenha gostado e acompanhe as futuras postagens!

Contato

Redes Sociais

  • Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.