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.

Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python
Leave a Reply