Análisis de devoluciones de acciones de UPS y FedEx con pandas_datareader en Python

Ya he demostrado cómo se puede recuperar, p. Ej. datos del producto interno bruto de FRED usando pandas_datareader en Python. También analicé los precios de las acciones de Procter & Gamble utilizando Yahoo Finance como fuente y extrayendo los datos a través de pandas_datareader.

En este post quiero analizar las devoluciones de stock diarias, para UPS y FedEx. Extraeré los datos usando pandas_datareader. Realizaré un análisis adicional de los datos y visualizaré los resultados usando matplotlib.pyplot.

Como siempre, el primer paso es importar módulos relevantes:

# importar módulos relevantes
import pandas as pd
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt

El siguiente paso es extraer los datos del precio de las acciones de Yahoo Finance a través de pandas_datareader:

# definir fechas para las fechas de inicio y finalización
start_date = datetime.datetime(2000, 1, 1)
end_date = datetime.datetime(2020, 9, 30)
# importar datos de stock para un período determinado entre la fecha de inicio y la fecha de finalización de yahoo finance
ups = web.DataReader("UPS", "yahoo", start_date, end_date)
fedex = web.DataReader("FDX", "yahoo", start_date, end_date)

Necesitaremos algunas funciones auxiliares en esta publicación. Primero defino una función de trazado de retorno de stock diario:

def plottingReturns(title,xtitle,ytitle,df1,df2,color1,color2,returns1,returns2,alpha1,alpha2):
    # crear figura
    plt.figure(figsize=(17.5,10))
    # crear gráficos de líneas para devoluciones diarias
    plt.plot(df1.index,returns1,color=color1,alpha=alpha1)
    plt.plot(df1.index,returns2,color=color2,alpha=alpha2)
    # agregar título a la trama
    plt.title(title, size=22)
    # agregar etiqueta del eje x
    plt.xlabel(xtitle, size=16)
    # agregar etiqueta del eje y
    plt.ylabel(ytitle, size=16)

También defino una función de trazado de histograma para trazar la distribución en los rendimientos de existencias diarias:

def histogramReturns(title,xtitle,ytitle,color1,color2,returns1,returns2,alpha1,alpha2,name1,name2):
    # crear figura
    plt.figure(figsize=(17.5,10))
    # crear gráficos de líneas para devoluciones diarias
    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)
    # agregar título a la trama
    plt.title(title, size=22)
    # agregar etiqueta del eje x
    plt.xlabel(xtitle, size=16)
    # agregar etiqueta del eje y
    plt.ylabel(ytitle, size=16)

Además, defino una función de trazado de series de tiempo de precios de acciones:

def plottingPrices(title,xtitle,ytitle,df1,df2,color1,color2):
    # crear figura
    plt.figure(figsize=(17.5,10))
    # crear gráficos de líneas para los precios de cierre diarios
    plt.plot(df1.index,df1["Close"],color=color1,alpha=0.5)
    plt.plot(df1.index,df2["Close"],color=color2,alpha=0.5)
    # agregar título a la trama
    plt.title(title, size=22)
    # agregar etiqueta del eje x
    plt.xlabel(xtitle, size=16)
    # agregar etiqueta del eje y
    plt.ylabel(ytitle, size=16)

Finalmente, defino una función de cálculo de retorno de stock diario:

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)

Ahora utilizo la función de cálculo de retorno de stock diario anterior para calcular los retornos de stock diarios de UPS y FedEx desde 2020, en función de los precios de cierre de stock diarios:

return_ups = returns(ups)
return_fedex = returns(fedex)

Procedo a imprimir la longitud de ambas listas de devolución, asegurándome así de que los datos sean consistentes:

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

También pruebo que la longitud de la lista de fechas del marco de datos de ups y fedex es la misma que la longitud de la lista diaria de devoluciones de acciones:

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

La prueba es exitosa. Los datos parecen ser consistentes. Ahora uso la función de trazado ya definida para visualizar las devoluciones diarias de existencias de UPS y 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)

Veamos la distribución de las devoluciones de stock diarias para UPS y FedEx, usando la función de trazado de histograma de arriba:

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")

Finalmente, para completar este análisis, tracemos la evolución del precio de cierre de las acciones a lo largo del tiempo desde 2000. Para esto, utilizo la función de gráfico de precios definida en la parte superior de la publicación en cuestión:

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

FedEx ha sido una inversión más rentable en promedio, pero también ha sido más arriesgada.

You May Also Like

Leave a Reply

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.