Python im algorithmischen Handel - Seite 23

 

RNN-Sequenzdaten ausgleichen – Deep Learning mit Python, TensorFlow und Keras S.10



RNN-Sequenzdaten ausgleichen – Deep Learning mit Python, TensorFlow und Keras S.10

Hallo zusammen und willkommen zu einem weiteren Tutorial-Video zum Deep Learning mit Python, TensorFlow und Keras. In diesem Video werden wir mithilfe eines wiederkehrenden neuronalen Netzwerks (RNN) weiter auf unserem zukünftigen Prädiktor für die Preisbewegung von Kryptowährungen aufbauen.

Das Tutorial-Video konzentriert sich auf die Erstellung eines Prädiktors für die Preisbewegung von Kryptowährungen mithilfe von Deep-Learning-Techniken.

Der Moderator erwähnt, dass sie bereits Vorverarbeitungsschritte durchgeführt haben, einschließlich der Erstellung sequenzieller Daten und der Trennung der Validierungsdaten. Sie haben auch die Daten normalisiert.

Der nächste Schritt im Prozess besteht darin, die Daten auszugleichen. Es ist wichtig, dass der Datensatz die gleiche Anzahl an Kauf- und Verkaufsinstanzen enthält. Liegt ein Ungleichgewicht vor, kann dies Auswirkungen auf die Leistung des Modells haben. Der Vortragende schlägt vor, dass es selbst bei einem leichten Ungleichgewicht besser ist, die Daten auszugleichen, um zu vermeiden, dass das Modell eine Klasse gegenüber der anderen bevorzugt.

Um die Daten auszugleichen, erstellt der Moderator zwei Listen: Käufe und Verkäufe. Sie durchlaufen die sequentiellen Daten und prüfen, ob das Ziel 0 (Verkauf) oder 1 (Kauf) ist. Wenn es sich um einen Verkauf handelt, fügen sie die Sequenz der Verkaufsliste hinzu. Wenn es sich um einen Kauf handelt, fügen sie ihn der Kaufliste hinzu. Anschließend mischen sie beide Listen.

Als nächstes ermitteln sie die Mindestlänge zwischen den beiden Listen (Käufe und Verkäufe). Sie aktualisieren die Kauf- und Verkaufslisten so, dass sie nur die Elemente bis zur Länge der kürzeren Liste enthalten. Dadurch wird sichergestellt, dass beide Listen die gleiche Anzahl an Instanzen haben.

Anschließend kombiniert der Präsentator die Kauf- und Verkaufslisten in der Liste „sequential_data“. Sie mischen die Liste „sequential_data“ erneut, um die Reihenfolge der Daten weiter zu randomisieren.

Der nächste Schritt besteht darin, die sequenced_data in Features (X) und Labels (Y) aufzuteilen. Sie erstellen leere Listen x und y, um die Features bzw. Beschriftungen zu speichern. Sie durchlaufen die sequenced_data und hängen die Sequenz an die x-Liste und das Ziel an die y-Liste an.

Schließlich geben sie die Arrays von x und y als vorverarbeitete Daten zurück.

Anschließend druckt der Moderator einige Statistiken zu den Daten aus, beispielsweise die Größe der Trainings- und Validierungsdatensätze und das Gleichgewicht zwischen den Kauf- und Verkaufsinstanzen.

Im nächsten Video planen sie, das Modell mithilfe der vorverarbeiteten Daten zu erstellen und zu trainieren.
Balancing RNN sequence data - Deep Learning w/ Python, TensorFlow and Keras p.10
Balancing RNN sequence data - Deep Learning w/ Python, TensorFlow and Keras p.10
  • 2018.09.17
  • www.youtube.com
Welcome to the next part of our Deep Learning with Python, TensorFlow, and Keras tutorial series. In this tutorial, we're going to continue building our cryp...
 

RNN-Modell zur Vorhersage von Kryptowährungen – Deep Learning mit Python, TensorFlow und Keras S.11



RNN-Modell zur Vorhersage von Kryptowährungen – Deep Learning mit Python, TensorFlow und Keras S.11

Hallo zusammen und willkommen zu einem weiteren Deep-Learning-Tutorial mit Python, TensorFlow und Keras. In diesem Tutorial machen wir dort weiter, wo wir im vorherigen Tutorial aufgehört haben. Unser Ziel ist es, die zukünftigen Preisbewegungen einer bestimmten Kryptowährung auf der Grundlage ihrer historischen Preise, ihres Volumens und anderer wichtiger Kryptowährungen vorherzusagen. Dies erreichen wir mithilfe eines rekurrenten neuronalen Netzwerks (RNN).

Zunächst müssen wir die erforderlichen Bibliotheken importieren. Wir werden die Zeitbibliothek zur späteren Verwendung importieren. Als nächstes definieren wir einige Konstanten. Die erste Konstante ist die Anzahl der Epochen, für die wir das Modell trainieren möchten. Wir legen die Batch-Größe zunächst auf 64 fest, können sie aber später bei Bedarf anpassen. Abschließend definieren wir mithilfe eines F-Strings einen Namen für das Modell. Für einen einfachen Vergleich und eine einfache Identifizierung ist es wichtig, einen eindeutigen Namen für das Modell und die TensorBoard-Protokolle zu haben.

Jetzt importieren wir die erforderlichen TensorFlow-Module. Wir importieren TensorFlow als tf und die erforderlichen Submodule: tf.keras.models, tf.keras.layers, tf.keras.optimizers, tf.keras.callbacks und tf.keras.backend. Wir importieren auch Numpy und Matplotlib für die Datenverarbeitung und Visualisierung.

Als nächstes beginnen wir mit dem Aufbau unseres Modells. Wir erstellen ein sequentielles Modell mit model = tf.keras.models.Sequential(). Innerhalb des Modells fügen wir Ebenen mithilfe der Funktion model.add() hinzu. Unsere erste Schicht ist eine LSTM-Schicht mit 128 Knoten. Wir setzen return_sequences=True, da wir die Ausgabe an die nächste Ebene übergeben möchten. Wir geben die Eingabeform als train_X.shape[1:] an, wobei train_X die Eingabedaten sind. Wir fügen außerdem eine Dropout-Schicht mit einer Rate von 0,2 und eine Batch-Normalisierungsschicht hinzu.

Wir wiederholen diesen Vorgang noch zweimal und fügen zwei weitere LSTM-Schichten mit jeweils 128 Knoten hinzu. Wir entfernen return_sequences=True für die letzte LSTM-Schicht, da darauf eine dichte Schicht folgt. Wir fügen jeder LSTM-Schicht auch Dropout- und Batch-Normalisierungsschichten hinzu.

Nach den LSTM-Schichten fügen wir eine dichte Schicht mit 32 Knoten und einer gleichgerichteten linearen Aktivierungsfunktion hinzu. Wir fügen eine Dropout-Schicht mit einer Rate von 0,2 und schließlich die Ausgabeschicht mit zwei Knoten und einer Softmax-Aktivierungsfunktion hinzu.

Jetzt geben wir den Optimierer für unser Modell an. Wir verwenden den Adam-Optimierer mit einer Lernrate von 0,001 und einer Abklingrate von 1e-6. Wir kompilieren das Modell mit model.compile() und geben die Verlustfunktion als spärliche kategoriale Kreuzentropie und die Metriken als Genauigkeit an.

Als nächstes definieren wir die Rückrufe für unser Modell. Wir erstellen einen TensorBoard-Rückruf, wobei das Protokollverzeichnis auf „logs“ eingestellt ist. Wir erstellen außerdem einen ModelCheckpoint-Rückruf, um das beste Modell während des Trainings zu speichern. Wir geben den Dateipfad zum Speichern der Prüfpunkte mithilfe einer Zeichenfolgenformatierung an.

Abschließend trainieren wir das Modell mit model.fit(). Wir übergeben die Trainingsdaten (train_X und train_Y), die Batchgröße, die Anzahl der Epochen und die Validierungsdaten (validation_X und validation_Y). Wir übergeben auch die zuvor definierten Rückrufe.

Nach dem Training können wir das Modell mit model.save() für die zukünftige Verwendung speichern.

Das ist es! Wir haben erfolgreich ein wiederkehrendes neuronales Netzwerkmodell zur Vorhersage der zukünftigen Preisbewegungen einer Kryptowährung erstellt und trainiert. Wir haben den Trainingsfortschritt auch mithilfe von TensorBoard visualisiert.

Cryptocurrency-predicting RNN Model - Deep Learning w/ Python, TensorFlow and Keras p.11
Cryptocurrency-predicting RNN Model - Deep Learning w/ Python, TensorFlow and Keras p.11
  • 2018.09.18
  • www.youtube.com
Welcome to the next tutorial covering deep learning with Python, Tensorflow, and Keras. We've been working on a cryptocurrency price movement prediction recu...
 

Algorithmische Handelsstrategie in Python


Algorithmische Handelsstrategie in Python

Im heutigen Tutorial werden wir eine algorithmische Aktienhandelsstrategie mit Python implementieren. Lassen Sie uns gleich eintauchen.

Bevor wir beginnen, möchte ich betonen, dass dieses Video nicht als Anlage- oder Finanzberatung gedacht ist. Ich bin kein Aktienprofi, Anlageexperte oder Finanzprofi. Der Zweck dieses Videos besteht darin, zu demonstrieren, wie man eine algorithmische Handelsstrategie mit Python implementiert. Ob Sie es für Ihre Investitionen nutzen, liegt allein in Ihrer Entscheidung und Verantwortung. Ich werde mich nur auf den Programmieraspekt konzentrieren.

Zunächst müssen wir zwei Bibliotheken installieren: „pandas-datareader“ zum Abrufen von Bestandsdaten und „matplotlib“ zur Datenvisualisierung. Öffnen Sie die Eingabeaufforderung (CMD) und installieren Sie diese Bibliotheken. Nach der Installation können wir mit der Codierung fortfahren.

Zuerst importieren wir die notwendigen Module: „datetime“ für die Handhabung von Datum und Uhrzeit, „matplotlib.pyplot“ für das Plotten von Diagrammen und „pandas_datareader“ als „web“ für den Abruf von Bestandsdaten.

Als nächstes definieren wir die gleitenden Durchschnitte (MA), die wir verwenden werden. Gleitende Durchschnitte stellen den durchschnittlichen Aktienkurs über einen bestimmten Zeitraum dar, beispielsweise 30 Tage oder 100 Tage. Wir erstellen zwei Variablen, „ma1“ und „ma2“, die auf 30 bzw. 100 gesetzt werden. Diese Werte bestimmen die Länge der gleitenden Durchschnitte, die wir analysieren werden.

Legen wir nun den Zeitrahmen für unsere Analyse fest. Wir definieren das Start- und Enddatum anhand des aktuellen Datums und eines Zeitdeltas von 3 Jahren. Dieser Zeitraum wird zum Abrufen der Bestandsdaten verwendet.

Mithilfe der „datareader“-Bibliothek rufen wir die Bestandsdaten für ein bestimmtes Unternehmen (in diesem Fall Facebook) von der Yahoo Finance API ab. Wir übergeben das Start- und Enddatum, um die relevanten Daten abzurufen.

Um die gleitenden Durchschnitte zu berechnen, fügen wir dem Daten-DataFrame zwei neue Spalten hinzu. Wir verwenden die Funktion „gleitend“, um den gleitenden Durchschnitt für die Perioden „ma1“ und „ma2“ zu berechnen. Die Spalte „Angepasster Schlusskurs“ stellt den um Aktiensplits angepassten Schlusskurs dar. Die gleitenden Durchschnitte speichern wir in den jeweiligen Spalten.

Bevor wir fortfahren, visualisieren wir die Daten und gleitenden Durchschnitte. Wir stellen die angepassten Schlusswerte als Aktienkurs dar, und die gleitenden Durchschnitte werden in derselben Grafik dargestellt. Wir stellen den Diagrammstil so ein, dass er einen dunklen Hintergrund verwendet und entsprechende Beschriftungen und Farben zur Unterscheidung der Linien bereitstellt. Abschließend fügen wir eine Legende hinzu, um die gezeichneten Linien zu identifizieren und das Diagramm anzuzeigen.

Kommen wir nun zur Implementierung der algorithmischen Handelsstrategie. Wir erstellen zwei leere Listen, „buy_signals“ und „sell_signals“, in denen die Kauf- bzw. Verkaufssignale gespeichert werden. Darüber hinaus führen wir eine „Trigger“-Variable ein, die uns hilft, Änderungen in der Strategie zu verfolgen.

Mithilfe einer for-Schleife iterieren wir über den Daten-DataFrame. Innerhalb der Schleife prüfen wir zwei Bedingungen: ob der erste gleitende Durchschnitt („ma1“) größer als der zweite gleitende Durchschnitt („ma2“) ist und ob der Trigger ungleich 1 ist. Wenn beide Bedingungen erfüllt sind, addieren wir Fügen Sie der Liste „buy_signals“ ein Kaufsignal hinzu und hängen Sie „NaN“ (keine Zahl) an die Liste „sell_signals“ an. Wir aktualisieren auch den Trigger auf 1.

Im umgekehrten Fall, wenn „ma1“ kleiner als „ma2“ ist und der Auslöser nicht gleich -1 ist, fügen wir ein Verkaufssignal zur Liste „sell_signals“ hinzu und hängen den tatsächlichen Aktienkurs an die Liste „buy_signals“ an. Wir aktualisieren den Trigger auf -1.

Wenn keine der Bedingungen erfüllt ist, hängen wir „NaN“-Werte an beide Listen an, um konsistente Längen zu gewährleisten.

Schließlich fügen wir dem Daten-DataFrame zwei weitere Spalten hinzu, um die Kauf- und Verkaufssignale zu speichern.

Wir werden auch die Verkaufssignale streuen, also fügen wir mit plt.scatter ein weiteres Streudiagramm hinzu. Dieses Mal verteilen wir die Verkaufssignale auf data.index als x-Werte und die entsprechenden Verkaufssignalpreise als y-Werte. Wir bezeichnen dieses Streudiagramm als „Verkaufssignal“, um es von den Kaufsignalen zu unterscheiden.

Abschließend fügen wir mit plt.legend eine Legende zum Plot hinzu, um die Beschriftungen für die verschiedenen Elemente anzuzeigen. Dann rufen wir plt.show() auf, um den Plot anzuzeigen.

Der Code:

plt.plot(data.index, data[ 'Adj Close' ], label= 'Share Price' , color= 'lightgray' )
plt.plot(data.index, data[ 'sma_{}' .format(ma1)], label= 'SMA {}' .format(ma1), linestyle= '--' )
plt.plot(data.index, data[ 'sma_{}' .format(ma2)], label= 'SMA {}' .format(ma2), linestyle= '--' )
plt.scatter(data.index, data[ 'Buy Signal' ], label= 'Buy Signal' )
plt.scatter(data.index, data[ 'Sell Signal' ], label= 'Sell Signal' )
plt.legend(loc= 'upper left' )
plt.show()
Wenn Sie nun den Code ausführen, sollten Sie ein Diagramm sehen, das den Aktienkurs, die gleitenden Durchschnitte sowie die Kauf- und Verkaufssignale zeigt.

Denken Sie daran, dass es sich lediglich um eine einfache algorithmische Handelsstrategie handelt, die in Python implementiert ist, und nicht als Finanz- oder Anlageberatung gedacht ist. Es ist wichtig, gründliche Recherchen durchzuführen und sich mit Fachleuten zu beraten, bevor Sie Investitionsentscheidungen treffen.

Algorithmic Trading Strategy in Python
Algorithmic Trading Strategy in Python
  • 2021.07.04
  • www.youtube.com
In this video we learn how to implement an algorithmic trading strategy in Python.DISCLAIMER: This is not investing advice. I am not a professional who is qu...
 

Einführung in den algorithmischen Handel mit Python – So erstellen und testen Sie einen Handelsalgorithmus


Einführung in den algorithmischen Handel mit Python – So erstellen und testen Sie einen Handelsalgorithmus

In diesem Video befassen wir uns mit der Entwicklung einer algorithmischen Handelsstrategie. Es ist wichtig zu beachten, dass dieses Video nur zu Bildungszwecken gedacht ist und nicht als Anlageberatung betrachtet werden sollte. Die Strategie, die wir untersuchen werden, wird allgemein als Momentum-Strategie bezeichnet, obwohl der Begriff selbst mehrdeutig und interpretierbar sein kann.

Bei einer Momentum-Strategie geht es im Wesentlichen darum, Wertpapiere zu identifizieren, die eine klare Richtungsbewegung aufweisen. In unserem Fall führen wir zunächst einen Screening-Prozess durch, um Wertpapiere zu identifizieren, die über ihrem gleitenden 50-Tage-Durchschnitt oder einer anderen von uns untersuchten vorgegebenen Kennzahl gehandelt werden.

Diese Strategie wird oft als Trendfolgestrategie bezeichnet, da sie darauf abzielt, von Wertpapieren zu profitieren, die sich in eine bestimmte Richtung bewegen, sei es nach oben oder nach unten. Es ist wichtig zu beachten, dass dieser Ansatz eine gründliche Recherche erfordert, um potenziell profitable Handelssignale zu identifizieren, die auf verschiedene Wertpapiere angewendet werden können.

In diesem Video konzentrieren wir uns auf die Analyse eines einzelnen Wertpapiers, um dessen Potenzial zu ermitteln. Zunächst importieren wir die erforderlichen Bibliotheken und richten unsere Umgebung ein. Das Notebook mit dem Code wird über einen GitHub-Link verfügbar gemacht, der in der Videobeschreibung zu finden ist.

Als nächstes laden wir die erforderlichen Daten zur Analyse herunter. In diesem Fall verwenden wir die Yahoo Finance API, um Daten für den Gold ETF (Exchange Traded Fund) mit dem Symbol „GLD“ abzurufen. Wir werden den Pandas-Datenleser verwenden, um die Daten abzurufen, wobei wir das Symbol angeben und das Start- und Enddatum als Standard belassen, was uns Daten von etwa fünf Jahren liefern sollte. Nach dem Herunterladen prüfen wir die ersten Zeilen der Daten, um deren Richtigkeit sicherzustellen.

Um unsere Analyse zu erleichtern, werden wir dem Datenrahmen zusätzliche Spalten hinzufügen. Zunächst fügen wir eine Tageszählerspalte ein, um den Tag in der Zeitreihe zu verfolgen. Dies wird mithilfe der NumPy-Bibliothek erreicht, um ein Bereichsarray zu erstellen, das der Anzahl der Beobachtungen im Gold-Datenrahmen entspricht. Anschließend wird die Tageszählerspalte zum Datenrahmen hinzugefügt und wir passen die Spaltenreihenfolge an, um sicherzustellen, dass der Tag auf die Datumsspalte folgt.

Darüber hinaus werden wir für unsere spezifische Analyse unnötige Spalten wie den angepassten Schlusskurs und das angepasste Volumen entfernen. Erwähnenswert ist, dass für bestimmte Wertpapiere der angepasste Schlusskurs nützlich sein kann, insbesondere in Fällen, in denen Aktiensplits stattgefunden haben. Für unsere Zwecke werden wir diese Spalten jedoch ausschließen.

Nachdem wir die vorbereitenden Schritte abgeschlossen haben, können wir die Struktur der Daten untersuchen, indem wir den Befehl „info“ auf dem Datenrahmen ausführen. Dies liefert Informationen über die Anzahl der im Datenrahmen vorhandenen Beobachtungen und Datentypen und bestätigt, dass alle Spalten numerisch sind.

Als Nächstes führen wir die Momentum-Strategie ein, indem wir dem Datenrahmen Spalten mit gleitendem Durchschnitt hinzufügen. Wir werden zwei gleitende Durchschnitte nutzen, einen schnellen (9 Tage) und einen langsamen (21 Tage), um Trades auszulösen. Konkret gehen wir einen Trade ein, wenn der schnelle gleitende Durchschnitt den langsam gleitenden Durchschnitt überschreitet, und wir steigen aus oder gehen eine Short-Position ein, wenn der schnell gleitende Durchschnitt den langsam gleitenden Durchschnitt unterschreitet. Es ist wichtig zu beachten, dass diese Strategie davon ausgeht, dass wir uns immer in einem Trade befinden, sei es Long oder Short.

Um die gleitenden Durchschnitte basierend auf dem Schlusskurs zu berechnen, verwenden wir die von Pandas bereitgestellte Rollmethode. Mit dieser Methode können wir die Anzahl der Tage für den gleitenden Durchschnitt angeben. Darüber hinaus können wir auf Wunsch verschiedene Aggregatoren anwenden, beispielsweise Standardabweichung oder Median. In diesem Fall konzentrieren wir uns ausschließlich auf den gleitenden Durchschnitt. Wir werden diesen Vorgang sowohl für die schnellen als auch für die langsamen gleitenden Durchschnitte duplizieren, was zu zwei zusätzlichen Spalten im Datenrahmen führt.

Da die gleitenden Durchschnitte um 9 bzw. 21 Tage verzögert sind, müssen wir sie anpassen, indem wir die Daten mithilfe der Verschiebungsmethode in Pandas um einen Tag nach vorne verschieben.

Nachdem wir die gleitenden Durchschnitte berechnet haben, passen wir sie an, indem wir die Daten mithilfe der Verschiebungsmethode in Pandas um einen Tag nach vorne verschieben. Dadurch wird sichergestellt, dass die gleitenden Durchschnitte des aktuellen Tages mit der Preisentwicklung des nächsten Tages übereinstimmen.

Nachdem wir nun die Spalten für den gleitenden Durchschnitt angepasst haben, können wir Handelssignale basierend auf dem Schnittpunkt der schnellen und langsamen gleitenden Durchschnitte generieren. Dazu erstellen wir eine neue Spalte mit dem Namen „Signal“ und weisen ihr den Wert 1 zu, wenn der schnelle gleitende Durchschnitt über dem langsamen gleitenden Durchschnitt liegt, was ein bullisches Signal anzeigt, und -1, wenn der schnelle gleitende Durchschnitt unter dem langsamen liegt gleitender Durchschnitt, was auf ein rückläufiges Signal hinweist.

Um die Ein- und Ausstiegspunkte für unsere Trades zu bestimmen, werden wir eine weitere Spalte namens „Position“ hinzufügen. Zunächst weisen wir ihm den Wert 0 zu, was bedeutet, dass wir uns nicht in einem Handel befinden. Wenn ein bullisches Signal auftritt (der schnelle gleitende Durchschnitt kreuzt den langsamen gleitenden Durchschnitt) und wir uns derzeit nicht in einem Trade befinden (Position = 0), weisen wir der Positionsspalte den Wert 1 zu, was auf eine Long-Position hinweist. Wenn umgekehrt ein rückläufiges Signal auftritt (der schnelle gleitende Durchschnitt kreuzt den langsamen gleitenden Durchschnitt) und wir uns derzeit nicht in einem Handel befinden, weisen wir der Positionsspalte den Wert -1 zu, was auf eine Short-Position hinweist. Dadurch wird sichergestellt, dass wir nur dann einen Trade eingehen, wenn ein neues Signal vorliegt und wir uns nicht bereits in einem Trade befinden.

Um die täglichen Renditen unserer Handelsstrategie zu verfolgen, erstellen wir eine weitere Spalte mit dem Namen „Strategierenditen“. Wir berechnen die täglichen Renditen, indem wir die Positionsspalte mit der täglichen prozentualen Änderung des Schlusskurses multiplizieren. Dadurch erhalten wir die Rendite, die wir erzielt hätten, wenn wir den Handelssignalen gefolgt wären.

Abschließend berechnen wir die kumulierten Renditen unserer Strategie, indem wir die Cumprod-Methode auf die Spalte „Strategierenditen“ anwenden. Dadurch erhalten wir die Gesamtleistung unserer Strategie über den angegebenen Zeitraum.

An diesem Punkt können wir die Leistung unserer Strategie visualisieren, indem wir die kumulierten Renditen grafisch darstellen. Wir werden die Matplotlib-Bibliothek verwenden, um ein Liniendiagramm zu erstellen, das das Wachstum der Renditen unserer Strategie im Laufe der Zeit zeigt.

In der Darstellung können wir die kumulative Renditekurve beobachten, die uns einen Eindruck von der Wirksamkeit unserer Momentum-Strategie geben sollte. Positive kumulierte Renditen weisen auf Rentabilität hin, während negative kumulierte Renditen auf Verluste hinweisen.

Bedenken Sie, dass dies ein vereinfachtes Beispiel einer Momentum-Handelsstrategie ist und dass bei der Entwicklung einer realen Handelsstrategie viele Faktoren zu berücksichtigen sind, wie z. B. Transaktionskosten, Slippage und Risikomanagement. Es ist wichtig, jede Handelsstrategie gründlich zu testen und zu validieren, bevor Sie sie auf den realen Handel anwenden.

<
Introduction to Algorithmic Trading Using Python - How to Create & Test Trading Algorithm
Introduction to Algorithmic Trading Using Python - How to Create & Test Trading Algorithm
  • 2021.04.12
  • www.youtube.com
#python #algorithmic #trading How to create a Trading Algorithm - Algorithmic Trading Using Pythonhttps://alphabench.com/data/python-algorithm-trading...
 

So verwenden Sie die kostenlose Echtzeit-Aktien-API und Python von Alpha Vantage, um die Zeit der täglichen Höchst- und Tiefststände zu extrahieren


So verwenden Sie die kostenlose Echtzeit-Aktien-API und Python von Alpha Vantage, um die Zeit der täglichen Höchst- und Tiefststände zu extrahieren

In diesem Video werden wir ein Jupyter-Notebook verwenden, um die Alpha Vantage API zu erkunden und anhand von einminütigen Handelsdaten die höchsten und niedrigsten Handelspreise für eine Aktie zu extrahieren. Alpha Vantage ist eine von mehreren verfügbaren APIs zum Abrufen von Handelsdaten in Echtzeit und basiert auf einem Freemium-Modell. Um zu beginnen, müssen wir uns für ein kostenloses Konto anmelden und einen API-Schlüssel von der Alpha Vantage-Website erhalten.

Wir werden die Alpha Vantage-Hilfsbibliothek namens „alpha_vantage“ verwenden, die den Prozess der Durchführung von API-Aufrufen vereinfacht. Wenn Sie die Bibliothek nicht installiert haben, können Sie dies tun, indem Sie den Befehl „pip install alpha_vantage“ in Ihrer Befehlszeile ausführen.

Zunächst richten wir unsere Umgebung ein, indem wir die erforderlichen Bibliotheken von Drittanbietern importieren. Sobald dies erledigt ist, speichern wir unseren API-Schlüssel in einer Variablen. Wenn Sie Ihren API-Schlüssel lieber privat halten möchten, können Sie ihn in einer separaten Textdatei speichern und in Ihr Notizbuch einlesen. Als nächstes erstellen wir ein Zeitreihenobjekt, indem wir den API-Schlüssel und das gewünschte Ausgabeformat angeben. In diesem Fall entscheiden wir uns für die Verwendung der Pandas-Bibliothek, da sie eine einfachere Möglichkeit bietet, mit den Ausgabedaten zu arbeiten, die standardmäßig im JSON-Format vorliegen.

Um die Handelsdaten abzurufen, rufen wir die Alpha Vantage API mit der Funktion „get_intraday“ auf. Mit dieser Funktion können wir das Symbol der Aktie und das gewünschte Intervall angeben, beispielsweise eine Minute, fünf Minuten oder eine Stunde. Wir können auch die Ausgabegröße festlegen, die die Menge der historischen Daten bestimmt, die wir abrufen möchten. Für dieses Video haben wir es auf „vollständig“ eingestellt, was uns Daten von etwa zehn Tagen liefert.

Sobald wir die Daten abgerufen haben, können wir die damit verbundenen Metadaten untersuchen, indem wir auf das Attribut „meta“ zugreifen. Das Metaobjekt stellt Informationen zu den heruntergeladenen Daten bereit, beispielsweise das Intervall, das Datum der Daten und die darin enthaltenen Spalten. Anschließend können wir die Daten selbst überprüfen, indem wir die Methode „info“ aufrufen, die die Spaltennamen und den Datum-Uhrzeit-Index anzeigt.

Um eine visuelle Darstellung der Daten zu erhalten, können wir eine der Spalten, beispielsweise die Schlusskurse, grafisch darstellen. Die von Alpha Vantage zurückgegebenen Spaltennamen sind jedoch möglicherweise nicht einfach zu handhaben, sodass wir sie in aussagekräftigere Namen umbenennen können.

Als Nächstes extrahieren wir die Daten, die den regulären Handelszeiten entsprechen, mit Ausnahme des Handels außerhalb der Geschäftszeiten, der zu Verzerrungen führen kann. Wir erstellen eine neue Variable namens „Markt“, indem wir einen zeitbasierten Filter auf die Daten anwenden. Pandas bietet eine praktische Funktion, „between_time“, mit der wir die Start- und Endzeiten für den Markt festlegen können.

An diesem Punkt sind wir bereit, die Daten und Zeiten der Hochs und Tiefs zu extrahieren. Wir tun dies auf zwei Arten. Zuerst gruppieren wir die Daten nach Handelsdatum und verwenden die „ag“-Methode, um die Mindest- und Höchstwerte für die Spalte „Low“ bzw. „High“ zu berechnen. Dieser Ansatz liefert uns die tatsächlichen Tiefst- und Höchstwerte für jeden Handelstag.

Zweitens verfolgen wir einen anderen Ansatz und konzentrieren uns auf die Minute, in der das Tief und das Hoch auftraten. Wir verwenden die Funktion „loc“, um die spezifischen Zeilen zu lokalisieren, in denen an jedem Handelstag die Tiefs und Hochs auftreten. Anschließend extrahieren wir den Index (Datum und Uhrzeit) für den Minimal- bzw. Maximalwert. Dadurch können wir den genauen Zeitpunkt ermitteln, zu dem die Tiefst- und Höchstpreise erreicht wurden.

Durch die Untersuchung der Ergebnisse können wir interessante Muster beobachten, wie zum Beispiel den Zeitpunkt von Tiefs und Hochs im Laufe der Handelstage.

Dieses Video bietet einen grundlegenden Überblick über die Verwendung der Alpha Vantage API, um minutengenaue Handelsdaten abzurufen und die Höchst- und Tiefststände für die Analyse zu extrahieren. Es dient als Ausgangspunkt für die Erkundung und Nutzung der Alpha Vantage API in Ihren eigenen Projekten.

Abschließend zeigt dieses Video-Tutorial, wie Sie die Alpha Vantage-API und die Alpha Vantage-Hilfsbibliothek in einem Jupyter-Notebook verwenden, um anhand von einminütigen Handelsdaten hohe und niedrige Handelspreise für eine Aktie zu extrahieren. Indem Sie die im Video beschriebenen Schritte befolgen, können Sie Echtzeit-Handelsdaten abrufen, diese mit Pandas analysieren und Einblicke in den zeitlichen Ablauf von Höchst- und Tiefstständen innerhalb eines bestimmten Handelstages gewinnen.

Es ist wichtig zu beachten, dass die Alpha Vantage API über die in diesem Video behandelten Funktionen und Datenoptionen hinausgeht. Sie können verschiedene Intervalle, beispielsweise Fünf-Minuten- oder Ein-Stunden-Daten, sowie verschiedene Datentypen, einschließlich täglicher oder historischer Daten, untersuchen. Die API bietet außerdem zusätzliche Funktionen wie technische Indikatoren und Fundamentaldaten.

Um Ihre Analyse weiter zu verbessern, können Sie zusätzliche Datenmanipulations- und Visualisierungstechniken integrieren. Sie können beispielsweise zusätzliche Kennzahlen auf Basis der extrahierten Höchst- und Tiefstpreise berechnen, statistische Analysen durchführen oder interaktive Visualisierungen erstellen, um die Daten intuitiver darzustellen.

Denken Sie daran, detaillierte Informationen zu verfügbaren API-Aufrufen, Parametern und Optionen in der Alpha Vantage-Dokumentation zu finden. Stellen Sie außerdem sicher, dass Sie die Allgemeinen Geschäftsbedingungen der Alpha Vantage API einhalten, einschließlich aller Einschränkungen oder Nutzungsbeschränkungen, die mit Ihrem kostenlosen Konto verbunden sind.

Durch die Nutzung der Alpha Vantage API und deren Kombination mit den Funktionen von Jupyter Notebook und der Pandas-Bibliothek können Sie eine Fülle von Handelsdaten freischalten und verschiedene Strategien und Erkenntnisse erkunden, um Ihre Anlageentscheidungen und quantitativen Analysen zu unterstützen.

How to Use Alpha Vantage Free Real Time Stock API & Python to Extract Time of Daily Highs and Lows
How to Use Alpha Vantage Free Real Time Stock API & Python to Extract Time of Daily Highs and Lows
  • 2021.01.11
  • www.youtube.com
#alphavantage #pythonUsing the free API to download minute by minute trading data and extract daily highs and lowsTutorial demonstrates using downloaded d...
 

Einführung in Streudiagramme mit matplotlib Python für Data Science


Einführung in Streudiagramme mit matplotlib Python für Data Science

Dies ist das zweite Video meiner Einführungsreihe zu Matplotlib. In diesem Video konzentrieren wir uns auf Streudiagramme. Streudiagramme sind eine visuelle Hilfe, die uns hilft, die Stärke und Art einer Beziehung zwischen zwei Variablen zu bestimmen. Wir behandeln die Grundlagen der Erstellung von Streudiagrammen, einschließlich der Festlegung von Themen, dem Hinzufügen einer Farbkarte, der Erstellung eines Blasendiagramms und dem Hinzufügen von Dimensionalität.

Zunächst richten wir unsere Umgebung ein, indem wir die erforderlichen Bibliotheken importieren. Wir werden NumPy, Matplotlib und den Pandas-Datenleser importieren. Mit dem Pandas-Datenleser können wir echte Daten herunterladen, um damit zu arbeiten. In diesem Fall laden wir Daten für Google, Amazon und den Gold-ETF im Wert von drei bis vier Monaten herunter.

Sobald wir die Daten haben, können wir einen Blick auf die ersten paar Zeilen werfen, um uns mit dem Datensatz vertraut zu machen. Wir können sehen, dass die Daten am 1. August beginnen und die Schlusskurse umfassen.

Lassen Sie uns nun ein einfaches Streudiagramm mit der Streumethode von Matplotlib erstellen. Wir können zwei Spalten aus dem Datensatz auswählen und sie grafisch darstellen. Dieses einfache Streudiagramm liefert jedoch nicht viele Informationen über die Beziehung zwischen den Variablen.

Zur weiteren Untersuchung können wir die momentane Rendite für jedes Wertpapier berechnen. Dadurch erhalten wir ein besseres Verständnis dafür, wie sich die Preisänderungen zueinander verhalten. Wir entfernen den absoluten Preis und reduzieren ihn auf eine prozentuale Änderung. Wenn wir uns die ersten paar Beobachtungen ansehen, können wir sehen, dass alle Wertpapiere einen Rückgang verzeichneten, wobei Amazon und Google einen Rückgang von über 1 % verzeichneten, während Gold relativ unverändert blieb.

Als Nächstes entfernen wir die erste Beobachtung, bei der es sich nicht um eine Zahl handelt, und erstellen ein Streudiagramm, um zu sehen, ob die Änderung bei Google für die Änderung bei Amazon relevant ist. Dieses Streudiagramm erzählt eine andere Geschichte als das vorherige. Wir können eine allgemeine Tendenz beobachten, dass mit dem Wachstum von Google auch Amazon steigt, was auf eine starke positive Beziehung zwischen den beiden Variablen hindeutet.

Nachdem wir nun das Basis-Streudiagramm haben, können wir einige Funktionen hinzufügen, um es zu verbessern. Ändern wir zunächst die Größe des Diagramms, um es besser sichtbar zu machen. Wir können dies tun, indem wir das Parametermodul aus Matplotlib importieren.

Wir können das Streudiagramm auch optisch ansprechender gestalten, indem wir Hilfslinien hinzufügen, um die Bewegung von Punkten in verschiedene Richtungen anzuzeigen. Indem wir Linien durch den Nullpunkt auf der X- und Y-Achse zeichnen, können wir schnell erkennen, wann sich die Punkte zusammen, auseinander oder in entgegengesetzte Richtungen bewegen.

Um die Sichtbarkeit der Hilfslinien zu verbessern, können wir deren Farbe mithilfe der RGB-Notation auf einen Grauton einstellen. Darüber hinaus können wir den Linienstil auf gestrichelt einstellen, um einen anderen visuellen Effekt zu erzielen.

Um das Streudiagramm weiter zu verbessern, können wir ein Farbschema hinzufügen. Obwohl wir keine dritte Variable zur Darstellung haben, können wir dem Streudiagramm dennoch eine Farbkarte hinzufügen. Wir ändern den Streudiagrammcode so, dass er die Farbe der Retouren für Amazon enthält, und wählen die Spektralfarbkarte aus. Diese Farbkarte weist den Punkten basierend auf den Rückgabewerten unterschiedliche Farben zu, wobei Rot die negativsten Werte und Violett die positivsten Werte darstellt.

Allerdings können einige Punkte im mittleren Bereich aufgrund des Farbverlaufs schwer zu erkennen sein. Um dieses Problem zu beheben, können wir die Kantenfarbe der Punkte in Schwarz ändern, um sie deutlicher zu machen.

Um zusätzliche Informationen über die Farbabstufungen bereitzustellen, können wir einen Farbbalken hinzufügen. Der Farbbalken stellt eine Legende dar, die die Farbzuordnung basierend auf den Ergebnissen angibt.

Darüber hinaus können wir durch die Anwendung eines Themas das Gesamtbild der Handlung verbessern. Wir können Seaborn als Theme verwenden, eine Hülle um Matplotlib, die einen optisch ansprechenden Stil bietet. Dieses Thema ändert den Hintergrund und fügt Gitterlinien hinzu, ohne die dargestellten Daten zu beeinträchtigen.

Schließlich können wir die Grenzen des Diagramms anpassen, um die Hilfslinien zu zentrieren.

Schließlich können wir die Grenzen des Diagramms anpassen, um die Hilfslinien zu zentrieren und das Streudiagramm optisch ausgewogener zu gestalten. Wir können die X- und Y-Achsen-Grenzwerte auf die minimalen und maximalen Werte der Renditen festlegen, um sicherzustellen, dass sich die Hilfslinien in der Mitte des Diagramms schneiden. Diese Anpassung hilft uns, die Bewegung von Punkten im Verhältnis zu den Hilfslinien effektiver zu visualisieren.

Nachdem wir diese Verbesserungen vorgenommen haben, ist unser Streudiagramm informativer und optisch ansprechender. Wir können den Zusammenhang zwischen den Retouren von Google und Amazon sowie die Verteilung der Retouren anhand der Farbkarte deutlich erkennen. Die Hilfslinien bieten eine visuelle Referenz zur Interpretation der Bewegung von Punkten in verschiedene Richtungen.

Zusätzlich zu einfachen Streudiagrammen können wir mit Matplotlib auch ein Blasendiagramm erstellen. Ein Blasendiagramm fügt dem Diagramm eine dritte Dimension hinzu, indem es die Größe der Markierungen basierend auf einer dritten Variablen variiert. In unserem Fall können wir als dritte Variable das Volumen jedes Wertpapiers verwenden.

Um ein Blasendiagramm zu erstellen, ändern wir unseren Streudiagrammcode, indem wir den Größenparameter angeben und das Volumen jedes Wertpapiers als Markierungsgröße übergeben. Dadurch entstehen Kreise, deren Größe proportional zum Volumen jedes Wertpapiers ist, sodass wir die Beziehung zwischen Rendite, Volumen und der Bewegung von Punkten visualisieren können.

Durch das Hinzufügen dieser dritten Dimension zum Streudiagramm erhalten wir ein tieferes Verständnis der Beziehung zwischen den Variablen. Wir können sehen, dass größere Kreise höhere Handelsvolumina darstellen und die Bewegung der Punkte sowohl mit den Renditen als auch mit dem Volumen korreliert werden kann.

Zusammenfassend lässt sich sagen, dass Streudiagramme und Blasendiagramme leistungsstarke Visualisierungswerkzeuge sind, die uns helfen, die Beziehung zwischen Variablen zu verstehen. Wir können sie nutzen, um Daten zu analysieren und zu interpretieren, Muster und Trends zu erkennen und fundierte Entscheidungen zu treffen. Mit Matplotlib können wir individuelle und optisch ansprechende Streudiagramme erstellen und diese mit verschiedenen Funktionen wie Farbkarten, Hilfslinien und Themen erweitern.

Introduction to Scatter Plots with matplotlib Python for Data Science
Introduction to Scatter Plots with matplotlib Python for Data Science
  • 2019.11.18
  • www.youtube.com
#scatterplot #matplotlib #python‡‡‡Learn how to use matplotlib with examples of scatter plots Please SUBSCRIBE:https://www.youtube.com/subscription_cente...
 

Einführung in den algorithmischen Handel mit Python: Erstellen Sie einen Mean-Reverting-Handelsalgorithmus


Einführung in den algorithmischen Handel mit Python: Erstellen Sie einen Mean-Reverting-Handelsalgorithmus

In diesem Video werden wir einen Mean-Reverting-Handelsalgorithmus nur zu Bildungszwecken untersuchen. Bitte beachten Sie, dass dieses Video keine Anlageberatung darstellt. Der Algorithmus wird mithilfe eines Jupyter-Notebooks implementiert. In der Videobeschreibung finden Sie einen Link zum Herunterladen des Notebooks. Dieses Video dient als Ergänzung zur zuvor besprochenen Momentum-Trading-Strategie und es wird auch ein Link zu diesem Video bereitgestellt.

Die Mean-Reverting-Handelsstrategie geht davon aus, dass sich ein Wertpapier immer dann wieder einem Durchschnittswert annähert, wenn es zu weit von diesem abweicht. Es gibt mehrere Möglichkeiten, diese Strategie anzugehen, beispielsweise die Verwendung einer linearen Regression oder eines gleitenden Durchschnitts. Die Bestimmung von „zu weit“ und die verwendete Messung können variieren. Manche Leute verwenden einen absoluten Dollarwert, während wir in diesem Video Perzentile verwenden. Zusätzlich wird ein gleitender Durchschnitt zur Ermittlung des Mittelwerts herangezogen.

Zunächst importieren wir die erforderlichen Bibliotheken, darunter Pandas für die Datenbearbeitung, den Pandas DataReader zum Herunterladen von Live-Daten (andere Dienste können ebenfalls verwendet werden), NumPy für numerische Operationen, Matplotlib für die grafische Darstellung und Seaborn für die Gestaltung der Diagramme. Die erforderlichen Bibliotheken werden durch Ausführen der entsprechenden Codezelle importiert.

Als nächstes erhalten wir die Daten zur Analyse. Während ein guter Handelsalgorithmus auf mehrere Wertpapiere anwendbar sein sollte, konzentriert sich dieses Video auf ein einzelnes Wertpapier: den Gold-ETF. Mit dem Pandas DataReader werden Daten für den Gold-ETF im Wert von etwa fünf Jahren heruntergeladen. Da nur der Schlusskurs von Interesse ist, beschränken wir den Download auf diese Spalte. Sobald die Daten vorliegen, untersuchen wir die ersten Zeilen, um sicherzustellen, dass sie ordnungsgemäß abgerufen werden.

Nachdem wir die Daten erhalten haben, fügen wir dem Datenrahmen einige Spalten hinzu. Die erste hinzugefügte Spalte ist für den gleitenden Durchschnitt. Wir legen eine Variable fest, um den Zeitraum des gleitenden Durchschnitts zu definieren, der leicht manipuliert werden kann. Die momentane Rendite vom Schlusskurs des Vortages wird berechnet und in einer neuen Spalte gespeichert. Eine weitere Spalte mit der Bezeichnung „gleitender Durchschnitt“ wird erstellt, um den Mittelwert basierend auf dem Schlusskurs unter Verwendung eines 21-Tage-Durchschnitts (oder eines Handelsmonats) zu verfolgen. Zusätzlich wird eine Spalte „Verhältnis“ hinzugefügt, die die Division des Schlusskurses durch den gleitenden Durchschnitt darstellt. Mithilfe dieser Spalte können Sie ermitteln, wann der Preis zu weit vom Mittelwert entfernt ist.

Für die Spalte „Verhältnis“ werden beschreibende Statistiken berechnet, um Erkenntnisse über die Datenverteilung zu gewinnen. Erwartungsgemäß bleiben die Preise im Allgemeinen nahe dem Mittelwert. Das 25. und 75. Perzentil definieren die Unter- und Obergrenzen der Daten, während die Minimal- und Maximalwerte extreme Abweichungen vom Mittelwert anzeigen. Für die Analyse werden zusätzliche Preispunkte ausgewählt, beispielsweise das 5., 10., 90. und 95. Perzentil, um signifikante Abweichungen vom Mittelwert zu ermitteln. Mithilfe der Numpy-Perzentilfunktion werden die jeweiligen Werte auf Basis der Spalte „Gold-Ratio“ berechnet. Vor der Berechnung werden fehlende Werte gelöscht.

Um die Bewegung der Verhältnisspalte um den Mittelwert zu visualisieren, wird ein Diagramm erstellt. Die irrelevanten Werte werden gelöscht und die Verhältnisspalte wird mit einer Legende dargestellt. Horizontale Linien werden hinzugefügt, um die Preisnachlässe an den ausgewählten Perzentilen (5., 50. und 95.) darzustellen. Diese visuelle Darstellung hilft dabei, die zyklische Bewegung der Verhältnisspalte um den Mittelwert zu beobachten, was auf eine Tendenz zur Korrektur von Abweichungen hinweist.

Als nächstes werden spezifische Schwellenwerte definiert, um zu bestimmen, wann Short- oder Long-Positionen eingegangen werden sollen. Die Short-Position ist als 95. Perzentil definiert, während die Long-Position als 5. Perzentil definiert ist. Dem Datenrahmen wird eine neue Spalte hinzugefügt, die angibt, ob die Position long oder short ist. Die „where“-Funktion von Numpy wird verwendet, um Werte basierend auf der Gold-Ratio-Spalte zuzuweisen. Ein Wert von -1 wird zugewiesen, wenn das Verhältnis unter dem Short-Schwellenwert liegt, was auf eine Short-Position hinweist, und ein Wert von 1 wird zugewiesen, wenn das Verhältnis über dem Long-Schwellenwert liegt, was auf eine Long-Position hinweist. Abschließend wird ein Plot zur Visualisierung der Positionen erstellt. Das Diagramm zeigt die Verhältnisspalte und hebt die Long- und Short-Positionen mit unterschiedlichen Farben hervor.

Nach der Identifizierung der Positionen besteht der nächste Schritt darin, die täglichen Renditen zu berechnen. Dies erfolgt durch Multiplikation der Positionsspalte mit der Tagesrenditespalte, was die Rendite für jeden Tag basierend auf der gehaltenen Position ergibt. Dem Datenrahmen wird eine neue Spalte mit dem Namen „Strategie“ hinzugefügt, um die täglichen Erträge zu speichern.

Um die Leistung der Strategie zu bewerten, werden kumulierte Renditen berechnet. Die kumulativen Renditen werden ermittelt, indem man das kumulative Produkt der Strategierenditen nimmt, 1 zum Ergebnis hinzufügt und es zur prozentualen Darstellung mit 100 multipliziert. Es wird ein Diagramm erstellt, um die kumulierten Renditen im Zeitverlauf zu visualisieren.

Anschließend werden zusätzliche Leistungskennzahlen berechnet, um die Leistung der Strategie zu bewerten. Es werden die Gesamtrendite, die durchschnittliche Tagesrendite, die Standardabweichung der Tagesrenditen, die Sharpe-Ratio und der maximale Drawdown berechnet. Diese Kennzahlen bieten Einblicke in die Rentabilität, das Risiko und die risikobereinigte Rendite der Strategie. Die Werte sind zum leichteren Nachschlagen ausgedruckt.

Abschließend wird ein Diagramm erstellt, um die kumulierten Renditen der Mean-Reverting-Strategie mit der Buy-and-Hold-Strategie zu vergleichen. Die Buy-and-Hold-Strategie geht davon aus, dass der Vermögenswert über den gesamten Zeitraum gehalten wird, ohne dass Handelsentscheidungen getroffen werden. Dieses Diagramm ermöglicht einen visuellen Vergleich der beiden Strategien.

Zusammenfassend zeigt dieses Video die Implementierung einer Mean-Reverting-Handelsstrategie mit Python und Jupyter Notebook. Es umfasst den Datenabruf, die Berechnung gleitender Durchschnitte, die Bestimmung von Schwellenwerten, die Visualisierung von Positionen, die Berechnung von Tagesrenditen, die Auswertung von Leistungskennzahlen und den Vergleich mit einer Buy-and-Hold-Strategie. Das beigefügte Jupyter-Notizbuch bietet eine Schritt-für-Schritt-Anleitung zur Nachbildung der Strategie und zur weiteren Untersuchung ihrer Umsetzung. Denken Sie daran, dass dieses Video nur zu Bildungszwecken dient und keine Anlageberatung bietet.

Introduction to Algorithmic Trading with Python: Create a Mean Reverting Trading Algorithm
Introduction to Algorithmic Trading with Python: Create a Mean Reverting Trading Algorithm
  • 2021.05.14
  • www.youtube.com
#python #stocktrading #algorithmHow to create a Trading Algorithm - Algorithmic Trading Using Pythonhttps://alphabench.com/data/python-algorithm-trading...
 

Python-Pandas || Gleitende Durchschnitte und Rolling-Window-Statistiken für Aktienkurse


Python-Pandas || Gleitende Durchschnitte und Rolling-Window-Statistiken für Aktienkurse

In diesem Video-Tutorial zeige ich, wie man die Pandas-Rolling-Methode verwendet, die Berechnungen für gleitende Durchschnitte und rollierende Standardabweichungen automatisiert. Die Rolling-Methode ist ein leistungsstarkes Tool zum Durchführen rollierender Fensteraggregationen und kann problemlos mit Pandas Version 0.21 implementiert werden. Ich werde als Referenz einen Link zum Jupyter-Notizbuch bereitstellen, das in diesem Tutorial verwendet wird.

Zunächst müssen wir die Umgebung einrichten. Wir importieren die Numpy-Bibliothek, da Pandas darauf angewiesen ist. Obwohl wir Numpy nicht direkt direkt verwenden, ist es für die ordnungsgemäße Funktion von Pandas notwendig. Darüber hinaus importieren wir den Pandas-Datenleser zum Abrufen von Daten und Matplotlib zum Plotten. Durch den Einsatz der Magic-Funktion stellen wir sicher, dass die Plots im Jupyter Notebook angezeigt werden.

Als nächstes erfassen wir die Daten zur Analyse. Ich werde die Daten für den Gold-ETF (Exchange-Traded Fund) von Yahoo Finance herunterladen. Um den gewünschten Zeitrahmen festzulegen, habe ich das Startdatum auf den Tag der Präsidentschaftswahl vor etwa einem Jahr festgelegt. Um zu bestätigen, dass die Daten korrekt abgerufen wurden, zeige ich die ersten Zeilen des Datensatzes an. Da uns in erster Linie die Schlusskurse dieser Demonstration interessieren, entferne ich die anderen Spalten. Da es sich bei dem heruntergeladenen Datenrahmen außerdem um eine Reihe von Serien handelt und bestimmte von mir benötigte Eigenschaften fehlen, habe ich ihn als Datenrahmen umgewandelt.

Jetzt sind wir bereit, die Rollmethode zu demonstrieren. Ich werde dem Datenrahmen eine neue Spalte namens „MA9“ hinzufügen, um den gleitenden Neun-Tage-Durchschnitt darzustellen. Mit der rollierenden Methode berechne ich den Durchschnitt für die angegebene Anzahl von Perioden oder Zeilen. Ich wiederhole diesen Vorgang für einen längeren Zeitraum von 21 Tagen. Diese beiden neuen Spalten stellen die von uns berechneten gleitenden Durchschnitte dar. Um die Daten zu visualisieren, trage ich die Schlusskurse, den gleitenden Neun-Tage-Durchschnitt und den gleitenden 21-Tage-Durchschnitt ein.

Manchmal ist es sinnvoll, den gleitenden Durchschnitten hinterherzuhinken. Durch das Hinzufügen des Parameters „center=True“ bei Verwendung der Rollmethode können wir die Linie des gleitenden Durchschnitts für das 21-Tage-Fenster um zehn Tage nach hinten verschieben. Dadurch wird eine verzögerte Linie erstellt, die mit den entsprechenden Daten übereinstimmt. Wir können diese Verschiebung im gezeichneten Diagramm beobachten.

Ich sollte beachten, dass bei der Berechnung gleitender Durchschnitte die aktuelle Beobachtung in den Durchschnitt einbezogen wird. Wenn Sie es als herkömmliches Prognosetool verwenden möchten, möchten Sie möglicherweise den gleitenden Durchschnitt nach vorne verschieben. Durch die Verwendung der Verschiebungsmethode und die Angabe einer positiven Ganzzahl können wir den gleitenden Durchschnitt um die gewünschte Anzahl von Perioden nach vorne verschieben. Dadurch wird sichergestellt, dass die aktuelle Beobachtung nicht in den Durchschnitt einfließt.

Darüber hinaus bietet die rollierende Methode weitere Parameter, wie z. B. die Möglichkeit, einen beliebigen Verzögerungswert festzulegen oder sogar den gleitenden Durchschnitt mithilfe einer negativen Ganzzahl auf den ersten Tag zu verschieben.

Darüber hinaus zeige ich, wie man die historische Volatilität berechnet, die häufig bei der Optionspreisgestaltung verwendet wird. Dazu müssen wir dem Datenrahmen eine weitere Spalte hinzufügen. Mit Numpy berechne ich die logarithmischen Renditen, indem ich die Schlusskurse durch den Schlusskurs des Vortages dividiere. Die Darstellung dieser Renditen zeigt ein verrauschtes Diagramm mit der Mitte um Null.

Um die historische Volatilität zu ermitteln, verwenden wir eine rollierende Standardabweichung mit einem Fenster von 21 Tagen, da ein Monat normalerweise 21 Handelstage hat. Diese Berechnung umfasst die einundzwanzigste Beobachtung. Um die Volatilität genau wiederzugeben, verschieben wir das Ergebnis um einen Tag nach vorne. Dies vermeidet den Eindruck, dass wir über zukünftiges Wissen verfügen. Die grafische Darstellung der Volatilität ermöglicht eine klarere Darstellung der Daten und zeigt Phasen hoher und niedriger Volatilität des Goldpreises auf.

In einem zukünftigen Video werde ich weitere Preisanalysetechniken mit Pandas behandeln. Ich hoffe, dass dieses Tutorial eine hilfreiche Einführung in die Verwendung der Rollmethode in Pandas für gleitende Durchschnitte und rollierende Standardabweichungen gegeben hat.

Python Pandas || Moving Averages and Rolling Window Statistics for Stock Prices
Python Pandas || Moving Averages and Rolling Window Statistics for Stock Prices
  • 2017.12.21
  • www.youtube.com
#pandas #python #rollingPlease SUBSCRIBE:https://www.youtube.com/subscription_center?add_user=mjmacartyTry my Hands-on Python for Finance course on Udemy...
 

Quantitative Aktienkursanalyse mit Python, Pandas, NumPy Matplotlib und SciPy


Quantitative Aktienkursanalyse mit Python, Pandas, NumPy Matplotlib und SciPy

In diesem Video stellt der Referent quantitative Analysemethoden zur Analyse von Aktienkursänderungen vor. Das Hauptziel besteht darin, festzustellen, ob die Aktienpreisänderung einer Normalverteilung folgt, etwaige Richtungsverzerrungen in der täglichen Änderung zu identifizieren und zu beurteilen, ob die Preisbewegung als Zufallsbewegung beschrieben werden kann. Der Redner erwähnt die Verwendung eines Jupyter-Notebooks und stellt einen Link zum Herunterladen des Notebooks bereit.

Der Referent beginnt mit der Einrichtung der Umgebung und dem Import von Datenanalysebibliotheken wie NumPy, Pandas und Matplotlib. Sie erwähnen auch die Verwendung der Pandas Data Reader-Bibliothek zum Herunterladen von Live-Daten von der Yahoo API. Der Sprecher ruft dann die Bestandsdaten für Amazon ab und gibt das Start- und Enddatum an, wobei standardmäßig die Preisdaten der letzten fünf Jahre verwendet werden.

Nach Erhalt der Daten untersucht der Sprecher die ersten Zeilen, um die verfügbaren Informationen zu überprüfen. Sie weisen auf die Spalten hin, die Höchst-, Tiefst-, Eröffnungs-, Schluss-, Volumen- und angepasste Schlusskurse darstellen. Da sie in erster Linie am Schlusskurs interessiert sind, diskutieren sie die Möglichkeit, entweder die Spalte „Schlusskurs“ oder „angepasster Schlusskurs“ zu verwenden, wobei letztere für Aktien nützlich ist, bei denen ein Split stattgefunden hat. In diesem Fall spielt die Wahl zwischen den beiden Spalten keine große Rolle, da die letzte Aufteilung von Amazon im Jahr 1999 erfolgte.

Als nächstes extrahiert der Redner die Schlusskursspalte in eine separate Variable und berechnet die momentane Rendite anhand des Logarithmus der Differenz zwischen aufeinanderfolgenden Schlusskursen. Sie zeigen die resultierenden Werte an und weisen darauf hin, dass die erste Zeile einen NaN-Wert (keine Zahl) enthält, da die Rendite für den ersten Tag nicht berechnet werden kann.

Anschließend visualisiert der Redner die tägliche Preisänderung, indem er die Daten mithilfe von Matplotlib als Liniendiagramm darstellt. Sie beobachten, dass die Preisveränderung erheblich schwankt und sich um den Nullpunkt herum konzentriert, wobei im Laufe des Fünfjahreszeitraums gelegentlich große Ereignisse unvorhersehbar auftreten. Um einen bestimmten Zeitrahmen zu analysieren, zeichnen sie die Daten des letzten Jahres auf, die eine geringere Dichte aufweisen, aber das gleiche Gesamtmuster beibehalten.

Beschreibende Statistiken für die Preisbewegung werden mit der Pandas-Funktion „describe“ erstellt. Der Referent erwähnt die Möglichkeit, die Statistiken einzeln zu erhalten oder andere Tools zu verwenden, findet aber, dass die Pandas-Methode für ihre Zwecke ausreichend ist. Sie stellen außerdem die SciPy-Bibliothek vor und demonstrieren eine andere Möglichkeit, deskriptive Statistiken mithilfe der Funktion „describe“ von SciPy stats zu berechnen. Sie erwähnen, dass einige Werte aufgrund der Behandlung fehlender Werte in NumPy und SciPy als „NaN“ angezeigt werden.

Um die Zahlen besser interpretierbar zu machen, multipliziert der Sprecher die Werte mit 100, um sie in Prozentsätze umzuwandeln. Diese Änderung verbessert die Lesbarkeit der Ausgabe, ohne die Daten zu verändern.

Anschließend vergleicht der Referent die Verteilung der täglichen Preisänderung mit einer Stichprobe aus einer Normalverteilung. Sie erstellen ein Histogramm der Amazon-Return-Daten und stellen fest, dass es um die Mitte herum eine signifikante Aktivität aufweist, wobei sich die Returns nach links und rechts ausbreiten, was auf breitere Enden im Vergleich zu einer Normalverteilung hindeutet. Anschließend generieren sie mithilfe des SciPy-Statistikmoduls eine Stichprobe derselben Größe aus einer Normalverteilung und zeichnen sie als Histogramm neben den Amazon-Rückgabedaten auf. Die Normalverteilungsstichprobe erscheint gedrungener und gleichmäßiger verteilt als die Amazon-Daten.

Als nächstes führt der Sprecher einen statistischen Test, insbesondere einen Kurtosis-Test, sowohl für die Normalvariable als auch für die Amazon-Ergebnisse durch. Der Kurtosis-Test prüft, ob die Verteilung als normal angesehen werden kann, wobei die Nullhypothese von einer Normalverteilung ausgeht. Es werden die Teststatistik und der p-Wert ermittelt, wobei der Sprecher die Interpretation der Ergebnisse erläutert. Für die Normalvariable ist die Teststatistik leicht negativ, was darauf hindeutet, dass keine eindeutigen Beweise gegen die Nullhypothese vorliegen. Im Gegensatz dazu ist die Teststatistik für die Amazon-Retouren viel größer, was auf eine Ablehnung der Nullhypothese und die Schlussfolgerung hindeutet, dass die Preisänderung von Amazon nicht als normalverteilt beschrieben werden kann.

Um den Unterschied weiter zu veranschaulichen, modifiziert der Sprecher das Histogramm, indem er Proportionen anstelle von Häufigkeiten anzeigt und wie gut es zur Verteilung passt. Dazu nehme ich einige Änderungen am ursprünglichen Histogramm vor. Anstatt Häufigkeiten anzuzeigen, zeige ich Proportionen an. Auf diese Weise kann ich eine theoretische Normalkurve über das Histogramm legen und sehen, wie gut sie passt.

Lassen Sie uns fortfahren und das Histogramm mit der Normalkurve zeichnen. Ich verwende das Normmodul von scipy.stats, um die Normalkurve zu generieren, und trage sie dann im selben Diagramm wie das Histogramm ein.

import matplotlib.pyplot as plt

# Plot histogram
plt.hist(amazon_return, bins= 50 , density=True, alpha= 0.5 , label= 'Amazon Returns' )

# Generate normal curve
x = np.linspace(amazon_return.min(), amazon_return.max(), 100 )
normal_curve = norm.pdf(x, mu, sigma)

# Plot normal curve
plt.plot(x, normal_curve, 'r-' , label= 'Normal Distribution' )

# Add labels and legend
plt.xlabel( 'Daily Price Change' )
plt.ylabel( 'Proportion' )
plt.title( 'Histogram of Amazon Returns with Normal Distribution' )
plt.legend()

# Show the plot
plt.show()
Werfen wir nun einen Blick auf die Handlung. Wir haben das Histogramm der Amazon-Renditen sowie die Überlagerung der theoretischen Normalverteilungskurve. Durch diesen visuellen Vergleich können wir beurteilen, wie gut die täglichen Preisänderungen mit einer Normalverteilung übereinstimmen.

Bei der Betrachtung des Diagramms können wir erkennen, dass das Histogramm der Amazon-Renditen erheblich von der Form einer Normalverteilung abweicht. Die Verteilung weist breitere Enden auf, was auf ein höheres Auftreten extremer Preisbewegungen hinweist, verglichen mit dem, was wir von einer Normalverteilung erwarten würden. Dies steht im Einklang mit unserer vorherigen Analyse der Kurtosis, die auf eine übermäßige Kurtosis in den Amazon-Retourendaten hinwies.

Zusammenfassend können wir anhand der von uns eingesetzten quantitativen Analysemethoden feststellen, dass die Aktienkursänderung von Amazon nicht als normalverteiltes Phänomen beschrieben werden kann. Die Daten weisen Merkmale wie Schiefe und übermäßige Kurtosis auf, die auf Abweichungen von einer Normalverteilung hinweisen. Die täglichen Preisänderungen konzentrieren sich eher um den Nullpunkt, wobei es häufig zu größeren, unvorhersehbaren Bewegungen kommt. Diese Informationen sind wertvoll für das Verständnis der Natur des Aktienkursverhaltens von Amazon und können bei der Entwicklung von Anlagestrategien oder Risikomanagementansätzen hilfreich sein.

Quantitative Stock Price Analysis with Python, pandas, NumPy matplotlib & SciPy
Quantitative Stock Price Analysis with Python, pandas, NumPy matplotlib & SciPy
  • 2021.06.07
  • www.youtube.com
#pythonprogramming #Stock #DataAnalysishttps://alphabench.com/data/pandas-quantitative-analysis-tutorial.html✅ Please SUBSCRIBE:https://www.youtube...
 

Lineare Regressionsmodelltechniken mit Python, NumPy, Pandas und Seaborn


Lineare Regressionsmodelltechniken mit Python, NumPy, Pandas und Seaborn

In diesem Video werden wir einige einfache Regressionstechniken in Python erkunden. Für die Implementierung der Regression in Python stehen mehrere Tools zur Verfügung, wir werden uns jedoch auf einige davon konzentrieren, insbesondere auf die Verwendung von NumPy. Bitte beachten Sie, dass dieses Tutorial keinen Anspruch auf Vollständigkeit erhebt und wir keine statistischen Tests durchführen. Wir passen einfach eine Linie an und visualisieren die Ausgabe.

Sie können das Notizbuch über den Link in der Videobeschreibung auf GitHub herunterladen, um es mitzuverfolgen. Beginnen wir mit der Einrichtung unserer Umgebung und dem Import der erforderlichen Bibliotheken. Wir werden NumPy, Pandas, Yahoo Finance API zum Abrufen von Live-Daten, Matplotlib zur Visualisierung und Seaborn verwenden, um ein Thema auf unsere Plots anzuwenden.

Als nächstes müssen wir die Daten abrufen. Wir werden Daten für Google und den S&P 500 ETF erhalten, die etwa ein Jahr zurückreichen. Zu diesem Zweck verwenden wir den Pandas Data Reader und die Yahoo Finance API. Sobald wir die Daten haben, können wir einen kurzen Blick darauf werfen. Da uns für unsere Analyse nur die „Schlusskurse“ interessieren, werden wir die Daten entsprechend anpassen.

Um eine Regression durchzuführen, berechnen wir die momentane Rendite sowohl für Google als auch für den S&P 500 ETF. Nachdem wir alle ungültigen Werte gelöscht haben, können wir die Korrelation zwischen den beiden Variablen berechnen. Wir stellen fest, dass sie stark korrelieren, werden in dieser Analyse jedoch nicht versuchen, die Kausalität festzustellen. Stattdessen betrachten wir den S&P 500 als unabhängige Variable.

Um die Visualisierung zu vereinfachen, werden wir eine kleinere Teilmenge von Datenpunkten abtasten. In diesem Fall nehmen wir zufällig Stichproben aus 60 Renditen und beobachten die Korrelation, die dem Gesamtdatensatz ähnlich bleibt. Anschließend visualisieren wir die Daten, indem wir ein Streudiagramm mit dem S&P 500 auf der x-Achse und Google auf der y-Achse zeichnen.

Als Nächstes werden wir mit der Polyfit-Funktion von NumPy ein lineares Modell anpassen. Wir übergeben die Beispieldaten mit dem S&P 500 als unabhängiger Variable und Google als abhängiger Variable zusammen mit dem Grad unseres Polynoms (1 für einfache lineare Regression). Dadurch erhalten wir die Steigung und den Y-Achsenabschnitt der am besten passenden Linie, die als Beta-Wert interpretiert werden können.

Um die Trendlinie darzustellen, verwenden wir die Polyvalenfunktion von NumPy und übergeben die Regression und die unabhängige Variable. Wir können diese Trendlinie über das Streudiagramm legen. Darüber hinaus kann die Regression als technischer Indikator zur Vorhersage zukünftiger Preise verwendet werden. In diesem Beispiel führen wir eine Regression der Schlusskurse des S&P 500 gegen die Zeit durch.

Nachdem wir die Regressionskoeffizienten erhalten haben, können wir vorhergesagte Werte für zukünftige Zeitpunkte berechnen. Wir zeichnen die tatsächlichen Daten gegen die Zeit auf, fügen die Trendlinie hinzu und erstellen einen Kanal, indem wir eine Standardabweichung zum linearen Modell addieren und subtrahieren. Dieser Kanal bietet eine visuelle Darstellung des Konfidenzintervalls der Vorhersage.

Abschließend zeigen wir, wie man mithilfe des Regressionsmodells Vorhersagen für bestimmte Zeitpunkte treffen kann. Indem wir ein poly1d-Objekt mit den Regressionskoeffizienten erstellen, können wir einen Wert einfügen (der einen zukünftigen Zeitpunkt darstellt) und den vorhergesagten Wert erhalten. Wir erwähnen auch kurz den Regplot von Seaborn, der eine alternative Möglichkeit zur Visualisierung des Streudiagramms mit einer Trendlinie und einem Konfidenzintervall bietet.

Wenn Sie diesem Tutorial folgen, können Sie mit der linearen Regression in Python beginnen und verschiedene Techniken zur Analyse und Vorhersage erkunden.

Nachdem wir nun die Grundlagen der linearen Regression in Python behandelt haben, wollen wir einige zusätzliche Techniken und Konzepte untersuchen.

Ein wichtiger Aspekt der Regressionsanalyse ist die Bewertung der Anpassungsgüte des Modells. Mit anderen Worten: Wie gut stellt die lineare Regressionslinie die Beziehung zwischen den Variablen dar? Es gibt verschiedene statistische Maße, die zur Beurteilung der Anpassung verwendet werden können, beispielsweise der R-Quadrat-Wert, der den Anteil der Varianz in der abhängigen Variablen angibt, der durch die unabhängige(n) Variable(n) erklärt werden kann.

Um den R-Quadrat-Wert zu berechnen, können wir die Statsmodels-Bibliothek in Python verwenden. Wir importieren das erforderliche Modul und passen das lineare Regressionsmodell an unsere Daten an. Dann können wir den R-Quadrat-Wert mithilfe des rsquared-Attributs des Modells extrahieren.

Lassen Sie uns dies anhand eines Beispiels demonstrieren. Angenommen, wir haben einen Datensatz mit zwei Variablen, X und Y, und möchten ein lineares Regressionsmodell anpassen, um Y basierend auf X vorherzusagen. Wir verwenden die Funktion sm.OLS (Ordinary Least Squares) aus der Statistikmodellbibliothek, um die Regression durchzuführen Analyse.

Zuerst importieren wir die benötigten Module:

import statsmodels.api as sm
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Als nächstes laden wir die Daten in einen Pandas DataFrame und extrahieren die X- und Y-Variablen:

data = pd.read_csv( 'data.csv' )
X = data[ 'X' ]
Y = data[ 'Y' ]
Anschließend fügen wir der unabhängigen Variablen X einen konstanten Term hinzu. Dies ist erforderlich, damit die Statistikmodellbibliothek den Intercept-Term in das Regressionsmodell einbezieht:

X = sm.add_constant(X)
Jetzt können wir das lineare Regressionsmodell anpassen und den R-Quadrat-Wert berechnen:

model = sm.OLS(Y, X).fit()
r_squared = model.rsquared
Schließlich können wir den R-Quadrat-Wert ausdrucken, um die Güte der Anpassung zu beurteilen:

print( "R-squared:" , r_squared)
Der R-Quadrat-Wert reicht von 0 bis 1, wobei 1 eine perfekte Anpassung angibt. Im Allgemeinen deutet ein höherer R-Quadrat-Wert auf eine bessere Anpassung des Modells an die Daten hin.

Zusätzlich zum R-Quadrat-Wert ist es auch wichtig, die Residuendiagramme zu untersuchen, um nach Mustern oder Trends zu suchen, die auf Verstöße gegen die Annahmen der linearen Regression hinweisen könnten. Residuen sind die Unterschiede zwischen den beobachteten und vorhergesagten Werten der abhängigen Variablen. Ein gutes lineares Regressionsmodell sollte zufällige und gleichmäßig verteilte Residuen um Null haben.

Um die Residuen zu visualisieren, können wir ein Streudiagramm der vorhergesagten Werte gegenüber den Residuen zeichnen. Wenn das Diagramm ein Muster oder eine systematische Abweichung von der Zufälligkeit aufweist, deutet dies darauf hin, dass das lineare Regressionsmodell möglicherweise nicht für die Daten geeignet ist.

Um den Restplot zu erstellen, können wir die Matplotlib-Bibliothek in Python verwenden:

predicted_values = model.predict(X)
residuals = Y - predicted_values

plt.scatter(predicted_values, residuals)
plt.axhline(y= 0 , color= 'r' , linestyle= '-' )
plt.xlabel( 'Predicted Values' )
plt.ylabel( 'Residuals' )
plt.title( 'Residual Plot' )
plt.show()
Das Streudiagramm der vorhergesagten Werte gegenüber den Residuen sollte ein wolkenartiges Muster ohne klare Struktur oder Trend zeigen. Wenn wir eindeutige Muster beobachten, wie etwa eine gekrümmte Form oder eine zunehmende/abnehmende Streuung, deutet dies darauf hin, dass die Annahmen der linearen Regression möglicherweise nicht zutreffen.

Zusammenfassend lässt sich sagen, dass die lineare Regression eine leistungsstarke und weit verbreitete Technik zur Modellierung der Beziehung zwischen Variablen ist. Indem wir eine Regressionslinie an die Daten anpassen, können wir Vorhersagen treffen und auf der Grundlage der unabhängigen Variablen Einblicke in die abhängige Variable gewinnen. Es ist wichtig, die Güte der Anpassung mithilfe von Maßen wie dem R-Quadrat-Wert zu bewerten und die Residuendiagramme zu überprüfen, um die Gültigkeit des Regressionsmodells zu beurteilen.

Linear Regression Model Techniques with Python, NumPy, pandas and Seaborn
Linear Regression Model Techniques with Python, NumPy, pandas and Seaborn
  • 2021.07.05
  • www.youtube.com
#Python #Regression #NumPyhttps://alphabench.com/data/python-linear-regression.html✅ Please SUBSCRIBE:https://www.youtube.com/subscription_center?add...