Analisando os retornos de ações da UPS e da FedEx com o leitor de dados pandas em Python

Eu já demonstrei como você pode recuperar, por exemplo, dados do PIB do FRED usando pandas_datareader em Python. Também analisei os preços das ações da Procter & Gamble usando o Yahoo Finance como fonte e extraindo os dados via pandas_datareader.

Neste post quero analisar retornos diários de ações, para UPS e FedEx. Vou puxar os dados usando pandas_datareader. Vou realizar uma análise mais aprofundada dos dados e visualizar os resultados usando matplotlib.pyplot.

Como sempre, o primeiro passo é importar os módulos relevantes:

import pandas as pd
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt

O próximo passo é extrair os dados do preço das ações do Yahoo Finance via pandas_datareader:

start_date = datetime.datetime(2000, 1, 1)
end_date = datetime.datetime(2020, 9, 30)
ups = web.DataReader("UPS", "yahoo", start_date, end_date)
fedex = web.DataReader("FDX", "yahoo", start_date, end_date)

Vamos precisar de algumas funções auxiliares neste post. Primeiro defino uma função de plotagem de retorno de ações diário:

def plottingReturns(title,xtitle,ytitle,df1,df2,color1,color2,returns1,returns2,alpha1,alpha2):

    plt.figure(figsize=(17.5,10))
    plt.plot(df1.index,returns1,color=color1,alpha=alpha1)
    plt.plot(df1.index,returns2,color=color2,alpha=alpha2)
    plt.title(title, size=22)

    plt.xlabel(xtitle, size=16)
    plt.ylabel(ytitle, size=16)

Eu também defino uma função de plotagem de histograma para plotar a distribuição nos retornos diários das ações:

def histogramReturns(title,xtitle,ytitle,color1,color2,returns1,returns2,alpha1,alpha2,name1,name2):
    plt.figure(figsize=(17.5,10))
    plt.hist(returns1,histtype="bar",color=color1,alpha=alpha1,label=name1,bins=100)
    plt.hist(returns2,histtype="bar",color=color2,alpha=alpha2,label=name2,bins=100)
    plt.title(título, tamanho=22)
    plt.xlabel(xtitle, tamanho=16)
    plt.ylabel(ytitle, tamanho=16)

Além disso, defino uma função de plotagem de séries temporais de preços de ações:

def plottingPrices(title,xtitle,ytitle,df1,df2,color1,color2):
    plt.figure(figsize=(17.5,10))
    plt.plot(df1.index,df1["Fechar"],color=color1,alpha=0,5)
    plt.plot(df1.index,df2["Close"],color=color2,alpha=0.5)
    plt.title(título, tamanho=22)
    plt.xlabel(xtitle, tamanho=16)
    plt.ylabel(ytitle, tamanho=16)

Por fim, defino uma função de cálculo de retorno diário de ações:

def returns(df):
    prices = df["Close"]
    returns = [0 if i == 0 else 100*(prices[i]-prices[i-1])/(prices[i-1]) for i in range(0,len(prices))]
    return(returns)

Agora eu uso a função de cálculo de retorno diário de ações acima para calcular os retornos diários de ações da UPS e da FedEx desde 2020, com base nos preços diários de fechamento das ações:

return_ups = return(ups)
return_fedex = return(fedex)

Prossigo com a impressão do comprimento de ambas as listas de retorno, garantindo assim que os dados sejam consistentes:

print(len(return_ups))
5220
print(len(return_fedex))
5220

Também testo que o comprimento da lista de datas do quadro de dados ups e fedex é o mesmo que o comprimento da lista diária de retornos de ações:

print(len(ups.index))
5220
print(len(fedex.index))
5220

O teste é bem sucedido. Os dados parecem ser consistentes. Agora uso a função de plotagem já definida para visualizar os retornos diários de ações para UPS e FedEx desde 2000:

plottingReturns("UPS [black] vs. FedEx [orange] daily stock returns since 2000","Date","Daily stock return [%]",ups,fedex,"black","orange",return_ups,return_fedex,0.25,0.60)

Vejamos a distribuição de retornos diários de ações para UPS e FedEx, usando a função de plotagem de histograma acima:

histogramReturns("Histogram of daily stock returns for UPS [black] and FedEx [orange]","Daily return [%]","Absolute frequency [-]","black","orange",return_ups,return_fedex,0.25,0.60,"UPS","FedEx")

Por fim, para completar esta análise, vamos plotar a evolução do preço de fechamento das ações ao longo do tempo desde 2000. Para isso, uso a função de plotagem de preços definida no topo do post em questão:

plottingPrices("Daily stock price development for UPS [black] and FedEx [orange]","Date","Daily stock closing price [USD]",ups,fedex,"black","orange")

A FedEx tem sido um investimento mais lucrativo em média, mas também tem sido mais arriscado.

Leave a Reply

Deixe um comentário

O seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Close

Meta