Ich habe bereits gezeigt wie bspw. BIP-Daten von FRED mit pandas_datareader in Python abgerufen bzw. angefragt werden können. Ich habe auch die Aktienkurse für bspw. Procter & Gamble unter Verwendung von Yahoo Finance als Quelle analysiert und die Daten über pandas_datareader abgerufen.
In diesem Beitrag möchte ich die täglichen Aktienrenditen für UPS und FedEx analysieren. Ich werde die Daten mit pandas_datareader einsammeln. Ich werde die Daten weiter analysieren und die Ergebnisse mit matplotlib.pyplot visualisieren.
Wie immer besteht der erste Schritt aus dem Import von relevante Modulen:
# relevante module importieren import pandas as pd import pandas_datareader.data as web import datetime import matplotlib.pyplot as plt
Der nächste Schritt besteht darin die Aktienkursdaten von Yahoo Finance über pandas_datareader abzurufen:
# Datum und Uhrzeit für Start- und Enddatum definieren start_date = datetime.datetime(2000, 1, 1) end_date = datetime.datetime(2020, 9, 30) # Importiere Bestandsdaten für einen bestimmten Zeitraum zwischen Start- und Enddatum von Yahoo Finance ups = web.DataReader("UPS", "yahoo", start_date, end_date) fedex = web.DataReader("FDX", "yahoo", start_date, end_date)
In diesem Beitrag benötigen wir einige Hilfsfunktionen. Ich definiere zuerst eine tägliche Aktienrendite-Plotfunktion:
def plottingReturns(title,xtitle,ytitle,df1,df2,color1,color2,returns1,returns2,alpha1,alpha2): # figur erzeugen plt.figure(figsize=(17.5,10)) # linienplot zur darstellung täglicher rendite erstellen plt.plot(df1.index,returns1,color=color1,alpha=alpha1) plt.plot(df1.index,returns2,color=color2,alpha=alpha2) # df1.index absichtlich hier # titel hinzufügen plt.title(title, size=22) # x-achse beschriften plt.xlabel(xtitle, size=16) # y-achse beschriften plt.ylabel(ytitle, size=16)
Ich definiere auch eine Histogramm-Plotfunktion zum Plotten der Verteilung täglicher Aktienrenditen:
def histogramReturns(title,xtitle,ytitle,color1,color2,returns1,returns2,alpha1,alpha2,name1,name2): # Figur erzeugen plt.figure(figsize=(17.5,10)) # linienplot der täglichen rendite erzeugen 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) # df1.index placed here on purpose # titel hinzufügen plt.title(title, size=22) # x-achse beschriften plt.xlabel(xtitle, size=16) # y-achse beschriften plt.ylabel(ytitle, size=16)
Zusätzlich definiere ich eine Aktienkurs-Zeitreihe-Plotfunktion:
def plottingPrices(title,xtitle,ytitle,df1,df2,color1,color2): # Figur erzeugen plt.figure(figsize=(17.5,10)) # linien-plot der Kursentwicklung erzeugen plt.plot(df1.index,df1["Close"],color=color1,alpha=0.5) plt.plot(df1.index,df2["Close"],color=color2,alpha=0.5) # df1.index placed here on purpose # Titel hinzufügen plt.title(title, size=22) # x-Achse beschriften plt.xlabel(xtitle, size=16) # y-Achse beschriften plt.ylabel(ytitle, size=16)
Schließlich definiere ich eine Funktion zur Berechnung der täglichen Aktienrendite:
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)
Jetzt verwende ich die oben genannte Funktion zur Berechnung der täglichen Aktienrendite, um die täglichen Aktienrenditen von UPS und FedEx seit 2020 auf der Grundlage der täglichen Aktienschlusskurse zu berechnen:
return_ups = returns(ups) return_fedex = returns(fedex)
Ich drucke die Länge beider Rückgabelisten aus und stelle dabei sicher, dass die Daten konsistent sind:
print(len(return_ups))
5220
print(len(return_fedex))
5220
Ich teste auch, dass die Länge der Datumsliste für Ups und Fedex-Datenrahmen der Länge der Liste der täglichen Aktienrenditen entspricht:
print(len(ups.index))
5220
print(len(fedex.index))
5220
Der Test ist erfolgreich. Die Daten scheinen konsistent zu sein. Jetzt verwende ich die bereits definierte Plotfunktion um die täglichen Aktienrenditen für UPS und FedEx seit 2000 zu visualisieren:
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)

Betrachten wir die Verteilung der täglichen Aktienrenditen für UPS und FedEx mithilfe der Histogramm-Plotfunktion von oben:
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")

Um diese Analyse abzuschließen lasset mich abschließend die Entwicklung des Schlusskurses der Aktie im Laufe der Zeit seit 2000 darstellen. Dazu verwende ich die oben im vorliegenden Beitrag definierte Preisdiagrammfunktion:
plottingPrices("Daily stock price development for UPS [black] and FedEx [orange]","Date","Daily stock closing price [USD]",ups,fedex,"black","orange")

FedEx war im Durchschnitt eine rentablere Investition, aber auch riskanter.

Wirtschaftsingenieur mit Interesse an Optimierung, Simulation und mathematischer Modellierung in R, SQL, VBA und Python
Leave a Reply