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.

Leave a Reply

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

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

Close

Meta