Análise de uma Ação em Python

Thalissa Reis
Turing Talks
Published in
9 min readOct 4, 2020

Nosso primeiro passo para Wall Street

Texto escrito por Diego Lottermann, GuiCola e Thalissa Reis

No Turing Talks de hoje, vamos explorar as bases das finanças quantitativas, desde a extração dos dados até o cálculo de retorno de uma ação. Você, que não sabe nada sobre finanças quantitativas ou programação, fique tranquilo, pois o propósito deste artigo é, justamente, tratar de conceitos básicos.

Photo by lo lo on Unsplash

Extração de Dados

Para que possamos começar qualquer tipo de análise, é preciso coletar os dados!

É importante deixar claro que não existe um caminho único para obtenção dos dados, já que a série temporal com os preços de fechamento dos ativos analisados pode ser obtida a partir de diferentes canais, como em arquivos csv em sites de investimentos ou em API´s diversas. No presente artigo, coletaremos os dados da API do Yahoo Finance.

Por quê? Simplesmente pela facilidade e gratuidade (analisamos ativos, mas ainda não somos ricos). Existem outras API´s interessantes, mas que demandam cadastro para obtenção de uma key, como o Alpha Vantage, ou são pagas, como a Morningstar e a IEX.

Para obtenção dos dados no Alpha vantage seria necessário instalar a biblioteca alpha-vantage (pip install alpha-vantage) e realizar um cadastro no site da API (url). Dessa maneira, você obterá uma key, utilizada para validação da coleta de dados. Vamos explorar um exemplo de extração dos dados da Microsoft (MSFT).

Tal API retorna um arsenal maior de dados, como o pagamento dos dividendos e ocorrência de split (desdobramento) do papel, por exemplo. Contudo, para os propósitos deste artigo, não serão necessárias tais informações adicionais.

Por isso, é mais fácil extrair os dados (de frequência diária) da API do Yahoo Finance, através do Pandas Data Reader. Para extração de dados de uma única empresa, é necessário importar o pandas e o adicional “data” do leitor de dados do pandas, o qual chamaremos, carinhosamente, de wb em homenagem ao William Bonner.

Agora, basta preenchê-lo, com as informações disponíveis do ticker desejado (no caso, MSFT — Microsoft) e a data de início da série (no caso, 01/01/2015) e a função nos retornará um dataframe!

Para conferir se deu tudo certo, basta realizar uma consulta ao nosso df!

Com o df em mãos, é necessário entender as features obtidas:

  • Open — preço de abertura do ativo no dia de negociação
  • High — preço mais alto do ativo no dia de negociação
  • Low — preço mais baixo do ativo no dia de negociação
  • Close — preço de fechamento do ativo no dia de negociação
  • Volume — Volume de negociação do ativo em USD
  • Adjusted Close — preço de fechamento ajustado (eventuais pagamentos de dividendos e outros)

Caso você queira apenas o preço de fechamento diretamente em seu dataframe, é possível adicionar a coluna de preenchimento exclusiva ao final do comando!

Retorno de um ativo

A melhor parte do investimento

Retorno Simples

Agora que já temos os dados do nosso ativo, vamos realizar algumas análises. Começando pelo principal fator que motiva a realização de um investimento: o retorno. Para calculá-lo, normalmente, deve-se considerar os dividendos pagos pela empresa ao longo do período analisado. Contudo, não possuímos essa informação em nosso dataset. Portanto, nesse primeiro momento, consideraremos apenas o retorno advindo do aumento (ou queda) do preço da ação. Em linhas gerais, calculamos o retorno utilizando a seguinte fórmula:

Fórmula do Retorno

Sendo:

  • R: retorno da ação;
  • P_t: preço da ação no dia em que foi vendida (preço final);
  • P_ti: preço da ação no dia em que foi comprada (preço inicial).

Essa fórmula trata do chamado retorno simples — ou aritmético — da ação. Esse pode ser facilmente calculado usando uma função do pandas. Para exemplificar, calcularemos o retorno diário da ação da Apple ao longo do período de um ano (de 28/08/2019 a 28/08/2020).

Com apenas duas linhas de código, adicionamos uma coluna com o retorno simples do ativo calculado para cada dia do período em questão. Mas, esse retorno dia a dia não nos diz muito sobre o ganho do investidor ao final do período. Para isso, podemos utilizar o retorno cumulativo simples, que é dado pela fórmula:

Fórmula do Retorno Simples Cumulativo

Sendo:

  • R_cum: retorno simples cumulativo;
  • R_t1: retorno simples do primeiro dia de investimento;
  • R_t2: retorno simples do segundo dia de investimento;
  • R_n: retorno simples do último dia.

Talvez seja contra-intuitivo tratar-se de uma multiplicação ao invés de um somatório. Mas, considerando que cada retorno é percentual, essa lógica mostra-se coerente. Por exemplo, se você comprou uma ação e ela valorizou 5% em um dia e, no dia seguinte, ela desvalorizou 2%, quanto ela valorizou (ou desvalorizou) ao todo considerando esse período? 3%? Não, pois repare que ela desvalorizou 2% considerando a valorização de 5% do dia anterior. Ou seja, ela diminuiu 2% do 105% do valor original. Portanto, ela valorizou 2,9%. E como fazemos para calcular isso em Python?

Conseguimos calcular o retorno cumulativo simples por dia em poucas linhas de código! Nesse caso, percebemos que a ação da Apple deu um retorno cumulativo de 142,90% no período de um ano. E se calculássemos pela primeira forma mostrada, considerando apenas o preço de compra e venda?

Cálculo do Retorno Simples da Apple

Como podemos perceber (e prever), obtivemos o mesmo número, mostrando que as duas formas para o cálculo do retorno simples em um dado período são eficazes.

Retorno Logarítmico

Mas sabia que não existe apenas o retorno simples? Também podemos calcular o retorno logarítmico. Então, tome um gole d’água e vamos ver como o fazemos.

Fórmula do Retorno Logarítmico

Sendo:

  • R_log: retorno logarítmico da ação;
  • P_t: preço da ação no dia em que foi vendida (preço final);
  • P_ti: preço da ação no dia em que foi comprada (preço inicial).

Cabe aqui lembrar que o logaritmo neperiano ou natural (ln) corresponde a um log de base e (número de Euler). E como podemos calculá-lo em Python? Para demonstrar, utilizaremos a mesma ação e período dos exemplos anteriores.

Com o auxílio de uma função da biblioteca Numpy, criamos uma coluna com os retornos logarítmicos diários durante o período analisado. Mais uma vez, nos deparamos com o mesmo problema: os retornos diários não dizem muita coisa sobre o ganho do investidor ao final do período. Para tal, utilizaremos novamente o retorno cumulativo. Neste caso, o retorno cumulativo logarítmico apresenta a seguinte fórmula:

Fórmula do Retorno Logarítmico Cumulativo

Sendo:

  • R_cum: retorno logarítmico cumulativo;
  • R_t1: retorno logarítmico do primeiro dia de investimento;
  • R_t2: retorno logarítmico do segundo dia de investimento;
  • R_n: retorno logarítmico do último dia de investimento.

Bem mais simples do que a fórmula do retorno simples cumulativo, né? Essa é justamente uma das razões pelas quais, em certas situações, é preferível utilizarmos o retorno logarítmico ao invés do simples. Sua implementação em Python pode ser feita de modo igualmente fácil, como mostrado abaixo:

Assim, podemos ver que o investidor teve um retorno logarítmico cumulativo de 88,75%. Analogamente ao feito anteriormente, vamos substituir os valores na fórmula original de retorno logarítmico para atestar a equivalência entre as fórmulas:

Cálculo do Retorno Logarítmico da Apple

Conforme o esperado, obtivemos o mesmo valor ao calcularmos o cumulativo. Contudo, este está um tanto quanto discrepante do retorno simples obtido. Agora você pode estar se perguntando: qual a relação entre os dois retornos? Esta é dada pela seguinte fórmula:

Relação entre Retorno Logarítmico e Retorno Simples

Sendo:

  • R_log: retorno logarítmico;
  • R_sim: retorno simples.

Substituindo os números obtidos anteriormente nesta fórmula, podemos conferir a relação entre os dois retornos. Além disso, podemos observar essa relação graficamente:

Equivalência entre o Retorno Simples e o Logarítmico

Assim, está nítido que, quanto mais próximo de 0, menor é a diferença entre o valor obtido pelo retorno simples e pelo logarítmico. Isso pode ser também observado nas colunas do nosso dataset mostradas no decorrer do texto. No dia 28/8/2019, observamos um retorno simples de 0.016932 e um logarítmico de 0.016790. Nesses, a diferença entre os dois é de 0,8%. Já no dia 30/8/2019, obtivemos um retorno simples de -0.001292 e um logarítmico de 0.001293, com uma diferença de apenas 0,07% — uma diferença menor ainda — haja vista que estes estavam mais próximos de 0 do que os anteriores.

Por fim, cabe mencionar que, nos cálculos de retorno apresentados acima, não consideramos o efeito da inflação. Como os preços tendem a subir (ou até descer) com o passar do tempo, o valor do dinheiro (em termos de poder aquisitivo) muda também. Por exemplo, se no período de um ano, houve uma inflação de 5% e uma ação deu um retorno de 14,5%, o retorno real do investimento foi de 9,5%.

Cálculo de Risco

Risco, o que é e como calcular?

Todos nós temos uma breve noção do que risco significa em nossas vidas: que risco estou passando ao deixar meu carro destrancado a noite em uma rua deserta? Que risco passo ao apostar na mega sena? Qual é o risco de um investimento?

Fazendo uma breve consulta ao dicionário, podemos ver a seguinte definição para risco:

“Probabilidade de insucesso/sucesso de determinado empreendimento, em função de acontecimento eventual, incerto, cuja ocorrência não depende exclusivamente da vontade dos interessados.”

Se enxergamos nossos investimentos como empreendimentos, temos até que uma boa primeira definição para o risco dentro do mercado financeiro. Mas, diferentemente do risco de ser roubado a noite em uma rua escura, o risco do retorno de um ativo pode ser mensurado!

Tome o gráfico do retorno (e não preços!) das ações da LATAM (LTM) e da Telefônica (TEF) entre o final de 2018 e 2020, por exemplo.

Retornos diários LATAM (LTM) e Telefônica (TEF).

Note que o retorno da LATAM sofreu variações muito maiores do que da Telefônica, ou seja, os retornos da Telefônica ficaram próximos da média, enquanto que o da LATAM não.

Em outras palavras, a volatilidade da empresa aérea para um determinado período de tempo foi maior do que da empresa de telefonia.

Desvio padrão

Como podemos metrificar essa volatilidade? Há uma série de maneiras para mensurar o risco, mas, em sua forma mais simples, o risco pode ser calculado pelo desvio padrão.

Fórmula do desvio padrão

Sendo:

  • x_i: retorno do dia
  • x_barra: média dos retornos
  • n: número de retornos

Basicamente, a partir do (x_i — x_barra), vemos o quanto os retornos estão divergindo da média. Somamos todas essas diferenças e elevamos ao quadrado, para ter um valor positivo. Tiramos a média ao dividir por n e, finalmente, desfazemos o efeito do “elevar ao quadrado” ao tirar a raiz quadrada.

Felizmente, não precisamos implementar essa fórmula na mão, o pandas faz isso com o método .std():

Repare que, de fato, o desvio padrão da LATAM (6,20%) foi maior que o da Telefônica (2,15%) no período.

Desvio Padrão a cada período t

Ainda no gráfico, vemos que alguns meses de 2020 foram aqueles com os maiores picos de retornos (positivos ou negativos), devido à crise do coronavírus, e isso interfere no cálculo do desvio padrão para anos anteriores.

Para superar esse problema, podemos calcular o desvio padrão a cada t períodos de tempo, nesse caso, usaremos t = 30 (1 mês).

Note que agora conseguimos isolar o efeito de períodos mais voláteis, como é o caso de abril de 2020 em diante, e focar apenas em períodos que queremos estudar.

Outras medidas de risco

Existem diversas outras medidas de risco que podemos usar, como o Desvio padrão exponencial móvel (EWMA), o desvio padrão estimado pelo High e Low (Parkinson Number) e o desvio padrão estimado por High, Low, Close e Open (Garman-Klass). Em um futuro não tão distante, faremos um Turing Talks apenas para medidas de risco, então, acompanhe!

Mas, caso esteja muito ansioso, temos uma breve explicação desses estimadores de volatilidade em nosso Turing Talks: Construindo uma Estratégia de Investimentos Quantitativa — Time Series Momentum.

Obrigada por nos acompanharem até aqui e até o próximo Turing Talks!

--

--

Thalissa Reis
Turing Talks

Estudante de Engenharia de Produção na Poli-USP. Membro do Grupo Turing. Entusiasta em Inteligência Artificial e Finanças Quantitativas.