Quantitativer Handel - Seite 33

 

Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion mit TensorFlow 2.0 und TFX


Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion mit TensorFlow 2.0 und TFX

Ich freue mich, mich als Denis vorzustellen und heiße Sie herzlich willkommen bei ClosetoAlgotrading, Ihrem Anlaufpunkt für alles rund um den algorithmischen Handel.

Es ist schon eine ganze Weile her, seit mir die Idee zum ersten Mal in den Sinn kam: die Entwicklung einer Handelsstrategie, die ausschließlich die Kraft des Deep Learning nutzt. Das Konzept dreht sich um die Entwicklung eines neuronalen Netzwerks, das in der Lage ist, die für die Ausführung profitabler Geschäfte erforderlichen Parameter autonom zu identifizieren. Um mich auf diese spannende Reise zu begeben, habe ich beschlossen, ein Live-Experiment durchzuführen, von dem ich hoffe, dass es auch Ihr Interesse weckt. In den kommenden Episoden werde ich Sie durch jeden Schritt bei der Implementierung eines datenwissenschaftlichen Ansatzes zur Entwicklung einer robusten Handelsstrategie führen, von der Anfangsphase bis zur endgültigen Produktion.

Mein Ziel ist es, alle Zwischenschritte umfassend abzudecken, einschließlich der Datenvorbereitung, strengen Tests und darüber hinaus. Mit Blick auf die Zukunft werde ich TensorFlow 2.0 nutzen und die Möglichkeiten erkunden, die die TFX-Pipeline bietet. Ich möchte komplexe Berechnungen oder Regeln vermeiden und mich stattdessen auf die Leistungsfähigkeit von Deep Learning verlassen, um festzustellen, ob wir ein wirklich profitables Unternehmen gründen können. Wenn diese Idee bei Ihnen Anklang findet, empfehle ich Ihnen, den Kanal zu abonnieren und mich auf dieser fesselnden Expedition zu begleiten. Gemeinsam werden wir die Wendungen des algorithmischen Handels meistern und uns bemühen, sein verborgenes Potenzial auszuschöpfen.

Für diejenigen, die sich eingehender mit dem datenwissenschaftlichen Ansatz befassen möchten, bietet eine einfache Google-Suche verschiedene Ressourcen zur Erläuterung des Themas. Unter den Ergebnissen finden Sie möglicherweise informative Artikel und visuelle Darstellungen, die die Schritte beschreiben, die zur Befolgung dieser Methodik erforderlich sind.

Der erste entscheidende Block auf unserer Reise ist die Phase des Geschäftsverständnisses. An diesem Punkt müssen wir unsere Ziele sorgfältig definieren und Key Performance Indicators (KPIs) festlegen, die als messbare Werte dienen, um die Wirksamkeit unserer Strategie bei der Erreichung dieser Ziele zu bewerten. Um diese Phase zu beginnen, ist es wichtig, sich Zeit zu nehmen, um die Feinheiten Ihres spezifischen Geschäftsfelds gründlich zu verstehen. Indem Sie ein tiefgreifendes Verständnis Ihres Ziels erlangen, können Sie klarer und zielgerichteter vorgehen. Es ist unbedingt zu erkennen, ob Sie bestimmte Ergebnisse vorhersagen oder bestimmte Phänomene klassifizieren möchten.

Um die Art unserer Aufgabe zu bestimmen, müssen wir Antworten auf grundlegende Fragen suchen. Wenn sich unsere Untersuchung um „Wie viel“ oder „Wie viele“ dreht, haben wir es mit einer Regressionsaufgabe zu tun. Wenn wir hingegen nach „welcher Kategorie“ fragen, wagen wir uns in den Bereich der Klassifizierung usw. vor. Sobald wir die Art der Aufgabe verstanden haben, die wir bewältigen wollen, ist es wichtig, die Maßstäbe zu definieren, die den Erfolg anzeigen. In unserem Fall könnten diese Kennzahlen Return on Investment (ROI) und Genauigkeit umfassen. Schließlich besteht unser oberstes Ziel darin, am Markt Gewinne zu erwirtschaften, was ein genaues Verständnis zukünftiger Preisbewegungen erfordert.

Um die zukünftige Preisbewegung effektiv vorhersagen zu können, muss nicht nur die Richtung bestimmt werden, sondern auch das genaue Preisniveau und der Zeitpunkt, zu dem es erreicht wird. Allerdings reicht es nicht aus, nur die Richtung zu kennen. Wir benötigen das genaue Preisniveau und den Zeitpunkt, zu dem es erreicht wird. Um endlose Wartezeiten auf unser Preisziel zu vermeiden, können wir ein minimales erwartetes Preisziel und eine maximale Wartezeit definieren. Mit anderen Worten: Wir versuchen, die Richtung zukünftiger Preisbewegungen zu ermitteln, was einer Klassifizierungsaufgabe ähnelt, bei der der Preis steigen, fallen oder auf dem gleichen Niveau bleiben kann.

Um zunächst die Leistung unseres Modells bei der Vorhersage der Richtung zu messen, können wir die Klassifizierungsgenauigkeit nutzen. Diese Metrik quantifiziert die Anzahl der richtigen Vorhersagen dividiert durch die Gesamtzahl der Vorhersagen, multipliziert mit 100, um sie als Prozentsatz auszudrücken. Wie sieht es nun mit unserem angestrebten Preisniveau aus? Für unsere Handelsstrategie können wir die Gewinnhöhe als Prozentsatz unseres investierten Kapitals definieren. Darüber hinaus müssen wir unsere Risikotoleranz bestimmen, indem wir ein Stop-Loss-Niveau als maximal akzeptables Risiko für einen einzelnen Trade festlegen. Unsere Gewinn- und Stop-Levels dienen als ROI-Werte für jeden Trade. Nehmen wir zum Beispiel an, wir kaufen Aktien für 100 $ und verkaufen sie, wenn sie 105 $ erreichen. Diese Preisbewegung von 5 % würde eine Rendite von 5 % auf unsere Investition bringen. Nachdem wir unsere Ausstiegsniveaus definiert haben, die sowohl Take-Profit als auch Stop-Loss umfassen, müssen wir uns mit der Frage der Zeit befassen. Wir möchten nicht ewig darauf warten, dass der Preis unser gewünschtes Niveau erreicht.

Daher legen wir eine maximale Haltedauer fest, verwenden jedoch das gehandelte Volumen anstelle eines festen Zeitrahmens. Die Gründe für diese Wahl werden in der kommenden Folge klarer, in der ich näher auf die Datenaufbereitung eingehen werde.

Um unseren bisherigen Ansatz zusammenzufassen: Wir entwickeln eine Intraday-Strategie, die Take-Profit, Stop-Loss und eine maximale Haltedauer für die Schließung von Positionen verwendet. Um Trades zu initiieren, trainieren wir ein Klassifizierungsmodell, das in der Lage ist, die Richtung des zukünftigen Preises vorherzusagen: nach oben, unten oder unverändert. Zunächst verwenden wir die Genauigkeit als Maß für die Wirksamkeit unseres Modells. Nachdem diese Grundlage geschaffen ist, schließen wir unsere Diskussion für heute ab. Wir haben unsere Ziele, Vorgaben und Leistungskennzahlen definiert. In der darauffolgenden Folge werden wir tiefer in unsere Daten eintauchen und Datensätze und Labels für die weitere Analyse und Entwicklung vorbereiten.

Verpassen Sie nicht den nächsten Teil unserer Reise. Bis dahin bleibt gesorgt und ich erwarte sehnsüchtig unsere nächste Begegnung.

Deep Learning Trading Strategy from the beginning to the production using TensorFlow 2.0 and TFX
Deep Learning Trading Strategy from the beginning to the production using TensorFlow 2.0 and TFX
  • 2019.11.20
  • www.youtube.com
This is the first episode of the video series where we will try to create a trading strategy using the data science approach, deep learning models, TensorFlo...
 

Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion. Teil II.


Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion. Teil II.

Ich freue mich, Sie zum zweiten Teil unserer fesselnden Reise zur Schaffung eines Handelssystems begrüßen zu dürfen. Im vorherigen Video haben wir unsere Ziele besprochen und heute konzentrieren wir uns auf die Vorbereitung und Kennzeichnung unseres Datensatzes. Also lasst uns gleich eintauchen!

Zunächst habe ich eine Reihe von Funktionen definiert, die uns bei der Vorbereitung unserer Datensätze unterstützen. Zuallererst müssen wir unsere Daten laden. Für die heutige Demonstration verwende ich einen kleinen Datensatz, um die Laufzeit des Codes überschaubar zu halten. Wie Sie sehen können, umfasst der Datensatz Tick-Daten, einschließlich Informationen wie Zeit, Preis, Volumen, Geld- und Briefkurs. Für den Zweck dieser Demonstration werde ich Daten aus einem Zeitraum von einem Jahr verwenden. Beginnen wir mit der Untersuchung einiger Statistiken, um ein Verständnis für die Eigenschaften des Datensatzes zu gewinnen. Einer der wichtigsten Aspekte, die wir beobachten, ist der Mindest- und Höchstpreis, der bei etwa 100 US-Dollar liegt. Dies ist von Vorteil, da es eine einfache Berechnung der Gewinnprozentsätze ermöglicht.

Darüber hinaus habe ich einen entscheidenden Parameter in den Datensatz eingeführt: die Spread-Größe. Der Spread wird als Differenz zwischen dem Brief- und dem Geldkurs berechnet. Warum ist die Spread-Größe wichtig? Betrachten wir zur Veranschaulichung ein Beispiel, bei dem der Geldkurs 100 $ und der Briefkurs 101 $ beträgt. In diesem Fall beträgt der Spread 1 $. Wenn wir die Aktie kaufen und sofort verkaufen würden, würden wir immer den Spread verlieren, der in diesem Beispiel 1 $ beträgt. Um einen Einblick in die Spread-Größe zu erhalten, habe ich für jede Sekunde den mittleren Spread über alle Tage berechnet. Wie in der Grafik dargestellt, liegt der Spread typischerweise zwischen 1 und 2 Cent, wobei es gelegentlich zu etwas größeren Spreads kommt. Basierend auf dieser Analyse können wir entscheiden, Trades nur dann auszuführen, wenn der Spread weniger als 3 Cent beträgt.

Interessanterweise zeigt die Grafik, dass die größten Spreads tendenziell in den ersten Minuten nach Marktöffnung auftreten. Daher ist es ratsam, bei der Umsetzung einer Intraday-Strategie die ersten 10–15 Minuten zu überspringen. Nachdem wir nun den Zeitraum definiert und den Spread untersucht haben, können wir mit der Generierung von Etiketten für unser Modell fortfahren, die die Richtung der Preisbewegung vorhersagen. Wie generieren wir diese Etiketten? Da uns, wie im vorherigen Video erwähnt, Auslöser für die Eröffnung einer Position fehlen, müssen wir für jeden Balken Beschriftungen basierend auf der erwarteten Rendite generieren.

Um dies zu erreichen, verwenden wir die Fenstermethode, bei der Etiketten generiert werden, wenn Preise die Fensterbarrieren überschreiten. So funktioniert es: Wir definieren ein Fenster mit einer Länge von n Balken und legen obere und untere Fensterbarrieren basierend auf unserer erwarteten Rendite in Prozent fest. Da wir dieses Fenster mit einer Schrittgröße von einem Balken über alle Balken schieben, erhält der erste Balken im Fenster die Beschriftung, wenn der Preis das Fenster verlässt. Bevor wir mit der Etikettengenerierung fortfahren, legen wir die Parameter für das Fenster fest. Obwohl die Idee dahinter einfach ist, kann die Auswahl der optimalen Fenstergröße und Barriereniveaus eine Herausforderung sein. Ich persönlich habe viel Zeit damit verbracht, mich mit diesem Problem auseinanderzusetzen und habe noch keine endgültige Lösung gefunden.

Um diese Herausforderung anzugehen, werde ich die historische Volatilität über den Tag und den gesamten Datensatz berechnen. Die dargestellte Grafik veranschaulicht beispielsweise die Preisänderung bei jedem Tick innerhalb eines Tages sowie die entsprechende Volatilität. Darüber hinaus können wir die Volatilität im gesamten Datensatz beurteilen. Wie gezeigt, beträgt die mittlere Volatilität lediglich 0,003 %, was etwa 30 Cent des aktuellen Preises entspricht. Allerdings habe ich nicht vor, ein Fenster zu verwenden, das sich über den ganzen Tag erstreckt. Um die Fensterlänge zu bestimmen, habe ich versucht, 100 Fenster mit zufälligen Größen zu generieren und die mittlere Volatilität innerhalb jedes Fensters ausgewertet. Die resultierende Grafik zeigt die mittlere Volatilität für Fenster unterschiedlicher Länge. Wenn wir beispielsweise eine Fenstergröße von 50 Balken wählen, können wir mit einer Volatilität von etwa 0,001 % rechnen.

Dieser Volatilitätswert ist hilfreich bei der Definition unserer erwarteten Mindestrendite und der Berechnung der Höhe unseres Stop-Loss-Preises. Mit diesen Informationen können wir aus unseren Tick-Daten Volumenbalken generieren. Durch die Verwendung von Balken anstelle von Häkchen können wir die Fensterlänge einfacher berechnen, da ein Balken normalerweise ein ähnliches Volumen enthält, was stabile Bedingungen gewährleistet. Um einen Volumenbalken zu generieren, durchlaufen wir die Ticks und akkumulieren das Volumen, bis es ein vordefiniertes Zielvolumen (z. B. 1000) überschreitet oder diesem entspricht. Die während dieser Akkumulationsphase angetroffenen Ticks stellen einen Volumenbalken dar. Lassen Sie uns als Beispiel Volumenbalken für einen einzelnen Tag generieren. Wie dargestellt, erhalten wir 179 Balken für den ausgewählten Tag.

Folglich besteht der Preisgraph nun aus diesen Volumenbalken. Darüber hinaus können wir anhand des Schlusskurses die prozentuale Veränderung jedes Balkens und die tägliche Volatilität berechnen. Allerdings habe ich nicht vor, ein Zeitfenster zu nutzen, das sich über den ganzen Tag erstreckt. Um die Fensterlänge zu bestimmen, habe ich die mittlere Volatilität und zufällig generierte Fenster für den gesamten Datensatz verwendet. Das resultierende Diagramm zeigt die Fenstervolatilität über den gesamten Datensatz.

Nachdem wir diese vorbereitenden Schritte abgeschlossen haben, können wir nun mit der Erstellung der Etiketten beginnen. Für diese Demonstration habe ich eine Fenstergröße von 50 Balken und eine erwartete Rendite von 0,003 % gewählt, was etwa 30 Cent bezogen auf den Durchschnittspreis entspricht. Nach Abschluss des Etikettierungsprozesses finden wir möglicherweise mehrere ähnliche Etiketten, sogenannte Kreuzungsetiketten. Um zu vermeiden, dass für verschiedene Ereignisse identische Beschriftungen vorliegen, behalten wir nur Beschriftungen mit dem geringsten Abstand zwischen dem ersten Balken des Fensters und dem Balken bei, bei dem der Preis die Fensterbarriere überschreitet. Bei der Inspektion stellen wir fest, dass wir rund 700 Etiketten haben, die gleichmäßig auf die drei Kategorien (oben, unten und flach) verteilt sind.

Speichern wir nun unseren Datensatz. Wir werden zwei Dateien erstellen: eine mit dem Volumenbalkendatensatz und eine weitere Datei mit Tick-Informationen für jeden Balken. Letzteres könnte sich in unserem Modell als nützlich erweisen, daher lohnt es sich, es beizubehalten. Damit unterbreche ich unsere Diskussion für heute. Ich glaube, wir haben damit ein weites Feld abgedeckt, und denjenigen, die tiefer in die Datenkennzeichnung eintauchen möchten, empfehle ich die Erkundung der Kapitel 3 und 4 von Marcos Lopez de Prados Buch, die wertvolle Erkenntnisse liefern.

Unser nächster Schritt wird das Feature-Engineering umfassen und alles über die TFX-Pipeline laufen lassen. Ich hoffe, bald eine neue Episode erstellen zu können, um weitere interessante Informationen zu teilen.

Bis dahin bleibt es gut und ich freue mich auf unser nächstes Video.

Deep Learning Trading Strategy from the beginning to the production. Part II.
Deep Learning Trading Strategy from the beginning to the production. Part II.
  • 2019.12.11
  • www.youtube.com
This is the second episode of the video series where we will try to create a trading strategy using the data science approach, deep learning models, TensorFl...
 

Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion. Teil III. TFX-Pipeline.


Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion. Teil III. TFX-Pipeline.

Ich freue mich sehr, Sie wieder zu einer weiteren Folge von „Close to AlgoTrading“ mit mir, Denis, begrüßen zu dürfen. Wir haben unser Experiment nach den Neujahrsferien wieder aufgenommen, und obwohl die Fortschritte langsam waren, kommen wir immer noch voran. Im heutigen Video werfen wir einen genaueren Blick auf unsere gekennzeichneten Daten und erkunden die TFX-Pipeline. Also, lasst uns gleich eintauchen!

Im vorherigen Video haben wir erfolgreich Beschriftungen für unsere Daten erstellt, aber ich habe vergessen, Ihnen zu zeigen, wie sie in einem Diagramm angezeigt werden. Zur schnellen Auffrischung haben wir alle Daten in einem neuen Datenrahmen gespeichert. Lassen Sie uns diesen Datenrahmen lesen.

In unserem Datenrahmen enthält die Spalte „dir“ die Beschriftungen, während die Spalte „cross_idx“ die Tick-Nummer darstellt, wenn der Preis unser definiertes Fenster kreuzt. Um die auf diesen Spalten basierenden Öffnungs- und Schließpositionsereignisse visuell darzustellen, habe ich eine einfache Funktion erstellt. In der Grafik wird ein Ereignis einer offenen Position durch ein ausgefülltes Dreieck dargestellt, während ein Ereignis einer geschlossenen Position durch ein nicht ausgefülltes Dreieck dargestellt wird.

Wie Sie sehen können, treten die meisten offenen Ereignisse an lokalen Höchst- oder Tiefstpunkten im Preisdiagramm auf. In Zukunft werden wir weiterhin mit einem kleinen Datensatz arbeiten, ähnlich dem, den wir zuvor verwendet haben. Darüber hinaus werde ich den Datensatz in Trainings-, Bewertungs- und Testdatensätze aufteilen.

Nachdem wir unsere Labels nun besser verstanden haben, gehen wir zum nächsten Schritt über und beginnen mit der Arbeit mit der TFX-Pipeline. Für diejenigen, die mit TFX nicht vertraut sind: Es steht für Tensorflow Extended und ist ein leistungsstarkes Framework, das speziell für skalierbare und leistungsstarke maschinelle Lernaufgaben entwickelt wurde. Die TFX-Pipeline besteht aus einer Abfolge von Komponenten, die verschiedene Phasen des maschinellen Lernworkflows ausführen, wie z. B. Datenaufnahme, Modellierung, Schulung, Bereitstellung von Inferenz und Bereitstellungsmanagement.

Um sich mit TFX vertraut zu machen, empfehle ich die Erkundung der offiziellen Tensorflow TFX-Webseite, die detaillierte Informationen zu seinen Komponenten und deren Verbindung bietet. Die entsprechenden Links finden Sie in der Videobeschreibung.

Da ich auch neu bei TFX bin, werden wir in jeder Episode gemeinsam lernen. Heute konzentrieren wir uns auf die ersten vier Komponenten der Pipeline. Stellen wir sie kurz vor:

  1. BeispielGen: Diese erste Eingabekomponente der Pipeline nimmt den Eingabedatensatz auf und teilt ihn optional in verschiedene Teilmengen auf. In unserem Fall werden benutzerdefinierte Zeitreihenaufteilungen nicht direkt unterstützt, daher teile ich die Daten manuell in Trainings-, Bewertungs- und Testdatensätze auf.

  2. StatisticsGen: Diese Komponente berechnet Statistiken für den Datensatz und bietet Einblicke in die Datenverteilung, Standardabweichung, fehlende Werte und mehr. Es generiert Statistikartefakte zur weiteren Analyse.

  3. SchemaGen: Nach der Untersuchung der Statistiken erstellt die SchemaGen-Komponente ein Datenschema basierend auf den beobachteten Datenmerkmalen. Das Schema beschreibt die Struktur und Eigenschaften unserer Daten.

  4. BeispielValidator: Diese Komponente prüft den Datensatz auf Anomalien und fehlende Werte und verwendet dabei die Statistiken und das Schema als Referenzen. Es hilft dabei, unerwartete oder inkonsistente Datenmuster zu erkennen.

Um sicherzustellen, dass wir auf dem richtigen Weg sind, werde ich das vom Tensorflow-Team bereitgestellte Chicago-Taxi-Beispiel als Vorlage verwenden. Dieses Beispiel demonstriert den End-to-End-Workflow, einschließlich Datenanalyse, Validierung, Transformation, Modelltraining und Bereitstellung.

Nun richten wir unseren Fokus wieder auf unsere eigenen Daten. Nachdem wir die erforderlichen Module importiert und die erforderlichen Variablen für Eingabe- und Ausgabedatenordner festgelegt haben, können wir versuchen, unsere Daten in die TFX-Pipeline zu laden. Der Eingabeordner enthält Unterordner für die Evaluierungs-, Trainings- und Testdatensätze.

Mithilfe der exampleGen-Komponente sollten wir in der Lage sein, unsere Daten problemlos in die Pipeline zu laden. Es scheint jedoch, dass exampleGen benutzerdefinierte Zeitreihenaufteilungen nicht direkt unterstützt. Standardmäßig werden die Daten nur in Trainings- und Bewertungssätze aufgeteilt. Glücklicherweise können wir die Daten manuell aufteilen und unsere eigene Eingabeaufteilungskonfiguration konfigurieren, um eine Eins-zu-Eins-Zuordnung zwischen den Eingabe- und Ausgabeaufteilungen sicherzustellen.

Infolgedessen erzeugt die exampleGen-Komponente zwei Artefakte: eines für den Trainingsdatensatz und ein weiteres für den Bewertungsdatensatz. Lassen Sie uns die ersten drei Elemente unseres Trainingssatzes untersuchen, um sicherzustellen, dass er mit unserem Originaldatensatz übereinstimmt. Im weiteren Verlauf übergeben wir die Ausgabe der exampleGen-Komponente an die StatisticsGen-Komponente. Diese Komponente generiert Statistikartefakte sowohl für die Trainings- als auch für die Bewertungsdatensätze. Mit nur einem einzigen Befehl können wir die Datensatzstatistiken visuell darstellen, einschließlich Datenverteilung, Standardabweichung, fehlende Werte und mehr.

Hier können wir die Statistiken für den Trainingsdatensatz beobachten und wertvolle Einblicke in die Dateneigenschaften gewinnen. Wir können den gleichen Satz Statistiken auch für den Bewertungssatz untersuchen. Basierend auf den Statistiken stellen wir fest, dass nur 2 % unserer Labels ungleich Null sind, was darauf hindeutet, dass es sich bei unseren Einstiegsereignissen für profitable Trades möglicherweise um Ausreißer handelt. Aufgrund des Ungleichgewichts zwischen den Klassen könnte dies in Zukunft eine Herausforderung darstellen.

Als nächstes generieren wir das Datenschema automatisch mithilfe der SchemaGen-Komponente. Dieses Schema wird aus den beobachteten Statistiken abgeleitet, wir könnten aber bei Bedarf auch unsere eigene Datenbeschreibung definieren. Die Ausgabe ist ein Schema, das eine umfassende Beschreibung der Struktur und Eigenschaften unserer Daten bietet. Schließlich erreichen wir die Komponente „ExampleValidator“, die die Daten basierend auf den generierten Statistiken und dem Schema validiert. Es prüft den Datensatz auf Anomalien oder Inkonsistenzen. Beispielsweise hatte die Funktion „_company“ im Taxi-Beispiel von Chicago einen unerwarteten Zeichenfolgenwert. Wir können den BeispielValidator verwenden, um solche Probleme in unserem eigenen Datensatz zu erkennen.

In unserem Fall stoßen wir glücklicherweise auf keine Anomalien oder Inkonsistenzen in unserem Datensatz. Dies ist ein positives Zeichen, das darauf hinweist, dass unsere Daten relativ sauber sind und unseren Erwartungen entsprechen. Damit ist unsere kurze Einführung in TFX abgeschlossen. In der nächsten Folge werden wir uns eingehender mit den verbleibenden TFX-Komponenten befassen und untersuchen, wie wir unsere Daten transformieren und unser Modell trainieren können.

Vielen Dank fürs Zuschauen und ich freue mich darauf, Sie im nächsten Video zu sehen!

Deep Learning Trading Strategy from the beginning to the production. Part III. TFX Pipeline.
Deep Learning Trading Strategy from the beginning to the production. Part III. TFX Pipeline.
  • 2020.01.19
  • www.youtube.com
This is the third part of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to review our generated l...
 

Teil IV. Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion. TFX-Pipeline 2.


Teil IV. Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion. TFX-Pipeline 2.

Willkommen zu einer weiteren Folge von „Close to Algotrading“. Ich bin Denis und heute werden wir die TFX-Pipeline im Rahmen der Entwicklung unserer Handelsstrategie weiter erkunden.

Im vorherigen Video haben wir die ersten vier Komponenten der TFX-Pipeline behandelt: BeispielGen, StatisticsGen, SchemaGen und BeispielValidator. Diese Komponenten legten den Grundstein für unsere Pipeline und stellten die Datenvalidierung und -konsistenz sicher.

Kommen wir nun zu den verbleibenden Komponenten: Transformer, Trainer, Evaluator, ModelValidator und Pusher. Diese Komponenten ermöglichen es uns, unsere Daten zu transformieren, unser Modell zu trainieren, seine Leistung zu bewerten, das Modell anhand einer Baseline zu validieren und schließlich das validierte Modell in eine Produktionsumgebung zu übertragen.

Aber bevor wir fortfahren, möchte ich auf einige wichtige Punkte eingehen. Obwohl die TFX-Pipeline ein leistungsstarkes Framework bietet, ist es erwähnenswert, dass sie möglicherweise noch einige Fehler aufweist und bestimmte Komponenten möglicherweise noch im Aufbau sind. Lassen Sie uns jedoch jeden Schritt sorgfältig angehen und etwaige Einschränkungen auf dem Weg besprechen. Im vorherigen Video haben wir unsere Daten erfolgreich validiert, und jetzt ist es an der Zeit, mit dem Transformationsschritt fortzufahren. Zu diesem Zweck verwenden wir die von TFX bereitgestellte Transformer-Komponente.

Die Transform-Komponente ist für die Durchführung von Datentransformationen und Feature-Engineering verantwortlich, die sowohl für das Training als auch für die Bereitstellung konsistent sind. Dies bedeutet, dass wir dieselbe Datentransformationsfunktion sowohl für das Training des Modells als auch für dessen Verwendung in der Produktion verwenden können. Diese Funktionalität ist einer der Hauptgründe, warum ich mich überhaupt mit TFX beschäftigt habe.

Um den Transformationsprozess zu starten, müssen wir einige Python-Dateien erstellen. Die erste Datei enthält unsere Konstanten, beispielsweise eine Liste numerischer Merkmale und Beschriftungen. Die zweite Datei enthält eine Vorverarbeitungsfunktion (preprocessing_fn), eine Rückruffunktion, die von tf.Transform zur Vorverarbeitung der Eingabedaten verwendet wird. In dieser Funktion definieren wir die Datentransformations- und Feature-Konstruktionsschritte. Konzentrieren wir uns zunächst darauf, alle numerischen Eingabemerkmale in Z-Scores umzuwandeln und die Beschriftungswerte von -1, 0 und 1 auf 0, 1 bzw. 2 zu ändern. Diese Label-Transformation ist notwendig, da der TensorFlow-Schätzer positive Werte erwartet.

Es ist wichtig zu beachten, dass in der aktuellen Version von TFX nur TensorFlow-Schätzer unterstützt werden. Wenn Sie lieber ein Keras-Modell verwenden möchten, müssen Sie es mithilfe der model_to_estimator-API in einen Schätzer konvertieren. Obwohl TFX Version 0.21 behauptet, Keras-Modelle für die Trainer-Komponente zu unterstützen, sind bei mir einige Probleme mit der interaktiven Kontextfunktionalität aufgetreten. Hoffentlich wird das TFX-Team diese Probleme bald beheben und ein stabiles und voll funktionsfähiges Tool bereitstellen.

Fahren wir nun mit der Datentransformation fort. Wie Sie sehen, erwartet die Transform-Komponente die folgenden Parameter als Eingabe: die generierten Beispiele, das Datenschema und den Pfad zur Datei, die die Funktion preprocessing_fn enthält. Nachdem die Transformation abgeschlossen ist, können wir mit der Erstellung und dem Training unseres Modells fortfahren. Die Trainer-Komponente ist für das Training des Modells basierend auf den von uns definierten Spezifikationen verantwortlich.

In der Python-Datei, die unser Modell und unsere Eingabefunktionen enthält, definieren wir eine trainer_fn-Funktion, die von der Trainer-Komponente aufgerufen wird. Diese Funktion sollte ein Wörterbuch mit den folgenden Elementen zurückgeben:

  • Schätzer: Der TensorFlow-Schätzer, der zum Trainieren des Modells verwendet wird.
  • train_spec: Die Konfiguration für den Trainingsteil des TensorFlow train_and_evaluate()-Aufrufs.
  • eval_spec: Die Konfiguration für den Bewertungsteil des TensorFlow train_and_evaluate()-Aufrufs.
  • eval_input_receiver_fn: Die Konfiguration, die von der ModelValidator-Komponente bei der Validierung des Modells verwendet wird.

In dieser Datei definieren wir die Funktion _input_fn, die die Eingabemerkmale und Beschriftungen für Training und Auswertung generiert. Wir haben auch zusätzliche Funktionen, wie _example_serving_receiver_fn, das die bedienenden Eingaben erstellt, und _eval_input_receiver_fn, das die notwendigen Eingaben für die TensorFlow Model Analysis (TFMA) vorbereitet.

Um unseren Schätzer zu erstellen, definieren wir eine build_estimator-Funktion. In dieser Funktion richten wir den Eingabe-Feature-Satz ein und erstellen unseren Schätzer. Es ist erwähnenswert, dass ich DNNLinearCombinedEstimator verwendet habe, weil DNNClassifier und DNNEstimator Fehler im Zusammenhang mit der Übergabe von Features aus TensorFlow 1 verursachten. Ich glaube, dass dies nicht der Fall ist, da wir TensorFlow 2-Methoden verwenden. Leider habe ich keine Lösung für dieses Problem gefunden. Der lineare Schätzer scheint jedoch gut zu funktionieren.

Nachdem unser Modell nun definiert ist, können wir mit dem Training mit der Trainer-Komponente fortfahren. Wie Sie sehen können, erwartet die Trainer-Komponente eine module_file, die die Funktion trainer_fn zusammen mit anderen Parametern wie Transformer_examples, Datenschema, Transformationsdiagramm sowie Trainings- und Bewertungsargumenten enthält. Vorerst haben wir nur die Anzahl der Schritte für Training und Bewertung angegeben. Nachdem das Modelltraining abgeschlossen ist, können wir mit der Modellanalyse mithilfe der TensorFlow Model Analysis (TFMA) fortfahren. Bevor wir fortfahren, stellen Sie sicher, dass Sie TFMA installiert haben, indem Sie dem bereitgestellten Link folgen. Mit TFMA können wir eine Analyse unseres Modells durchführen, entweder für den gesamten Datensatz oder für bestimmte Feature-Slices. In diesem Fall führen wir eine Analyse für drei Abschnitte durch: den vollständigen Datensatz, die Beschriftung und zwei spezifische Merkmale.

Bei der Analyse des gesamten Datensatzes stellen wir eine bemerkenswerte Genauigkeit von 98 Prozent fest. Wenn wir jedoch die Leistung des Modells anhand der Beschriftungen untersuchen, stellen wir fest, dass es durchgängig die Beschriftung 0 vorhersagt. Dieses Ergebnis war aufgrund der unausgewogenen Beschriftungen und des Fehlens nützlicher Funktionen in unserem Modell zu erwarten. Dennoch bietet TFMA eine bequeme Möglichkeit, die Leistung des Modells zu bewerten.

In Zukunft verfügen wir über die ModelValidator-Komponente, die uns bei der Validierung unserer exportierten Modelle hilft. Es vergleicht neue Modelle mit einer Baseline (z. B. dem aktuell bereitgestellten Modell) und ermittelt, ob sie vordefinierte Kriterien erfüllen. Diese Validierung umfasst die Bewertung der Modelle anhand eines Evaluierungsdatensatzes und die Berechnung von Metriken wie AUC und Verlust. Wenn die Metriken des neuen Modells die vom Entwickler festgelegten Kriterien im Vergleich zur Basislinie erfüllen, wird das Modell als „gut genug“ betrachtet und als solches gekennzeichnet.

Schließlich haben wir die Pusher-Komponente, die prüft, ob das Modell die Validierung bestanden hat. Wenn das Modell die Validierungskriterien erfüllt, wird es an ein angegebenes Dateiziel übertragen. Dieser Schritt stellt sicher, dass nur validierte Modelle in der Produktionsumgebung bereitgestellt werden.

Zum Abschluss unserer Pipeline können wir alle Komponenten in eine Apache Beam-Pipeline exportieren. Anschließend können wir alle benötigten Dateien in ein Zip-Archiv packen. Indem wir die Dateien aus dem Archiv in unser Arbeitsverzeichnis auf dem Server entpacken, können wir die Pipeline ausführen. Sobald die Ausführung abgeschlossen ist, verfügen wir über ein trainiertes Modell, das mit TensorFlow Serving verwendet werden kann. Wenn Sie erfahren möchten, wie Sie TensorFlow Serving aus einem Docker-Container starten und verwenden, finden Sie auf meinem Kanal ein Video-Tutorial.

Obwohl wir in dieser Serie viel abgedeckt haben, ist es wichtig zu beachten, dass die aktuelle Version von TFX immer noch gewisse Einschränkungen aufweist. Abhängig von Ihren spezifischen Anforderungen kann es erforderlich sein, eine Pipeline zu implementieren, die ausschließlich auf der Transformationsfunktion mit einem Keras-Modell basiert. Ich hoffe jedoch, dass diese Erkundung von TFX informativ und nützlich war.

Im nächsten Video kehren wir zu unserem Hauptziel zurück, der Entwicklung einer Handelsstrategie. Bleiben Sie dran! Vergessen Sie nicht, dieses Video zu kommentieren, zu abonnieren und zu liken. Vielen Dank fürs Zuschauen und bis zum nächsten Mal!

Part IV. Deep Learning Trading Strategy from the beginning to the production. TFX Pipeline 2.
Part IV. Deep Learning Trading Strategy from the beginning to the production. TFX Pipeline 2.
  • 2020.02.13
  • www.youtube.com
This is the part IV of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to diving deeper into the TF...
 

Teil V. GIGO. Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion.


Teil V. GIGO. Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion.

Willkommen zurück zu einer weiteren Folge von „Close to Algotrading“. Mein Name ist Denis und ich bin hier, um meine Erfahrungen und Misserfolge bei der Entwicklung eines Deep-Learning-Handelssystems zu teilen.

Ich habe viel Zeit darauf verwendet, das gesamte System mit TensorFlow zu implementieren, muss aber zugeben, dass ich von der Qualität der Bibliothek ziemlich enttäuscht bin. Obwohl ich das Konzept schätze, war die von TensorFlow bereitgestellte Dokumentation eine Quelle der Frustration. Es scheint, dass selbst die brillanten Köpfe mit einem Doktortitel Schwierigkeiten haben, eine gut strukturierte Dokumentation zu schreiben. Obwohl es sich im Vergleich zur Vergangenheit verbessert hat, bleibt es an einigen Stellen weiterhin verwirrend.

Allerdings ist die Dokumentation im Vergleich zu dem größeren Problem, auf das ich gestoßen bin, nur ein kleines Problem. Viele Funktionen funktionieren einfach nicht wie erwartet, als ich versuchte, sie zu verwenden, und selbst die offiziellen Beispiele funktionieren manchmal nicht richtig. Dies hat mich zu der Frage veranlasst, ob ich möglicherweise einige Kernpunkte dieses Rahmenwerks übersehen habe. Aber kommen wir zurück zum Hauptthema dieses Videos: meinen Fehlern. Wie Sie sich vielleicht erinnern, habe ich beschlossen, Etiketten für Preisbewegungen auf der Grundlage eines bestimmten Prozentsatzes zu erstellen. Es stellte sich heraus, dass es sich bei den meisten dieser Bezeichnungen um lokale Minima oder Maxima in den Daten handelte.

Nachdem ich einige einfache Datenverarbeitungs- und Vorbereitungsarbeiten durchgeführt hatte, erstellte ich ein einfaches LSTM-Netzwerk und stellte es auf die Probe. Meine Erwartungen waren nicht besonders hoch, aber die Ergebnisse waren wirklich enttäuschend. Wie Sie im beigefügten Bild sehen können, konnte das Netzwerk nichts Sinnvolles lernen.

Nun ist es wichtig, sich daran zu erinnern, dass ein neuronales Netzwerk keine Wunder vollbringen soll. Vielleicht ist es an der Zeit, unseren Ansatz neu zu bewerten. Die Ereignisse, die wir vorhersagen möchten, machen nur 2 % des gesamten Datensatzes aus. Diese Ereignisse können als Ausreißer betrachtet werden, und unser einfaches Netzwerk hat Schwierigkeiten, sie vom Rest der Daten zu unterscheiden. Darüber hinaus besteht eine hohe Wahrscheinlichkeit, dass diese Ereignisse nicht miteinander zusammenhängen und unterschiedliche Ursachen haben, was es schwierig macht, ein Modell zu erstellen, das sie genau vorhersagt.

Angesichts dieser Herausforderungen wurde klar, dass wir uns darauf konzentrieren müssen, die Daten besser zu verstehen und Merkmale mit Vorhersagekraft zu identifizieren. Vor diesem Hintergrund habe ich beschlossen, eine einfache Strategie des gleitenden Durchschnitts zu überdenken. Bei unserem ersten Ansatz fehlte uns ein klares Verständnis dafür, warum wir eine Position eingehen sollten. Jetzt haben wir jedoch eine Strategie für die Eröffnung von Positionen. Obwohl sie nicht perfekt ist, handelt es sich um eine weit verbreitete Strategie, die wir nutzen können. Ich habe unserem Datensatz zwei gleitende Durchschnitte und einen RSI-Indikator (Relative Strength Index) hinzugefügt und alle Ereignisse gesammelt, bei denen sich die gleitenden Durchschnitte kreuzten. Dadurch konnten wir die Richtung der Preisbewegung abschätzen.

Als Nächstes habe ich mit derselben Beschriftungsmethode wie zuvor Meta-Beschriftungen erstellt, dieses Mal habe ich jedoch nur die Balken beschriftet, an denen sich die gleitenden Durchschnitte kreuzten. Hier gibt es einen wichtigen Unterschied: Da wir die Positionsrichtung (Long oder Short) bereits kennen, wird die Bedeutung unserer Bezeichnungen unterschiedlich sein. Die Bezeichnung 1 weist auf einen Gewinn hin, -1 steht für einen Verlust und 255 wird für andere Fälle vergeben. Mit dem aktualisierten Datensatz und den Beschriftungen habe ich ein einfaches LSTM-Modell trainiert und eine perfekte ROC-Kurve (Receiver Operating Characteristic) erhalten. Die ROC-Kurve zeigt die Leistung eines Klassifizierungsmodells bei verschiedenen Klassifizierungsschwellenwerten. Der AUC-Wert (Area Under the Curve) der ROC-Kurve hilft uns zu beurteilen, wie gut das Modell zwischen Klassen unterscheidet.

Als ich jedoch die Vorhersagen des Modells untersuchte, fiel mir auf, dass es konsistent die Klasse 0 vorhersagte. Dieses Ergebnis kam zustande, weil ich wieder einmal den gesamten Datensatz und nicht nur die relevanten Ereignisse verwendet habe. Unser Datensatz blieb unausgewogen und den Funktionen fehlte die Vorhersagefähigkeit. ROC-Kurven sind nicht ideal für unausgeglichene Datensätze, da sie die schlechte Leistung des Modells bei der Vorhersage anderer Klassen verschleiern können.

Um das Ungleichgewicht in den Daten zu beheben, habe ich Anpassungen vorgenommen und mich nur auf die Daten konzentriert, die für die offenen Ereignisse relevant sind. Leider zeigte mein Modell auch nach diesen Modifikationen keine Vorhersagekraft. Es lieferte die gleichen Ergebnisse wie ein Zufallsmodell. Ich habe auch ein einfaches Feedforward-Modell ausprobiert, das etwas bessere, aber immer noch unbefriedigende Ergebnisse lieferte. Zusammenfassend lässt sich sagen, dass Deep Learning, wie Sie sehen, keine Magie hat, wenn Sie Ihr Modell mit Daten schlechter Qualität füttern. Dabei gilt der Grundsatz „Garbage in, Garbage out“. Darüber hinaus neigt ein Klassifizierungsmodell dazu, bei stark unausgeglichenen Datensätzen und fehlenden Merkmalen mit starker Vorhersagekraft die Klasse vorherzusagen, die den Großteil des Datensatzes ausmacht.

Wie ich bereits erwähnt habe, ist es für uns von entscheidender Bedeutung, unsere Daten zu verstehen und Prozesse zu identifizieren, die uns dabei helfen können, einen Weg zu finden, den Markt zu schlagen.

Damit ist die heutige Folge abgeschlossen. Ich hoffe, Sie fanden es aufschlussreich und informativ. Passen Sie auf sich auf, bleiben Sie zu Hause und bleiben Sie gesund.

Part V. GIGO. Deep Learning Trading Strategy from the beginning to the production.
Part V. GIGO. Deep Learning Trading Strategy from the beginning to the production.
  • 2020.03.21
  • www.youtube.com
This is the part V of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to have a look at my fails. W...
 

Teil VI. Verstärkungslernen. Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion


Teil VI. Verstärkungslernen. Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion

Ich bin Denis und willkommen zu einer weiteren Folge von „Close to Alga Trading“. In unseren vorherigen Episoden haben wir daran gearbeitet, mithilfe von Deep Learning eine profitable Handelsstrategie zu entwickeln. Lassen Sie uns unsere bisherigen Fortschritte noch einmal zusammenfassen.

Wir begannen damit, die Marktbedingungen auf der Suche nach Ineffizienzen zu beobachten. Nach der Identifizierung haben wir einfache Regeln erstellt und die Daten für unsere Deep-Learning-Modelle vorbereitet. Bei der Umsetzung unseres direkten Ansatzes stellten wir jedoch fest, dass er nicht die gewünschten Ergebnisse brachte. Dies führte uns zu der Erkenntnis, dass wir unseren Ansatz überdenken und alternative Strategien in Betracht ziehen müssen.

In der heutigen Folge werden wir eine neue Richtung erkunden: Reinforcement Learning. Reinforcement Learning hat in verschiedenen Bereichen erhebliche Erfolge erzielt und übertrifft die menschliche Leistung in Spielen wie Schach, Dota und Go. Es wird auch in der Steuerungsrobotik und selbstfahrenden Autos eingesetzt. Warum also nicht es auf den Handel anwenden? Obwohl ich den Erfolg nicht garantieren kann, ist es ein faszinierender Weg, den es zu erkunden gilt.

Lassen Sie uns zunächst eine kurze Einführung in das Reinforcement Learning geben und uns mit den wichtigsten Definitionen vertraut machen.

Reinforcement Learning kann als Lernen durch Versuch und Irrtum beschrieben werden, um Probleme der optimalen Kontrolle zu lösen. Einfacher ausgedrückt geht es darum, die beste Aktion in einem bestimmten Umgebungszustand zu finden, um eine endgültige numerische Belohnung zu maximieren. Um dieses Konzept besser zu verstehen, visualisieren wir es mit einer einfachen Analogie.

Stellen Sie sich einen Händler vor, der vor einem Monitor sitzt und Aktien kauft und verkauft. Hierbei stellt der Händler den Agenten dar, während Chartpreis und Broker das Umfeld bilden. Der Agent beobachtet den aktuellen Zustand der Umgebung und ergreift Maßnahmen, beispielsweise den Kauf einer Aktie. Im Gegenzug erhält der Makler eine Vergütung, bei der es sich um die Maklerprovision handeln kann. Wenn sich die Umgebung ändert, kann der Agent mehr Aktien kaufen, verkaufen oder nichts tun. Am Ende des Handelstages erhält der Agent eine Abschlussbelohnung, die positiv oder negativ sein kann. Das Ziel des Agenten besteht darin, diese Endbelohnung zu maximieren.

Beim verstärkenden Lernen besteht unser Ziel darin, Agenten zu entwerfen, die durch Interaktion mit einer Umgebung lernen können. Machen wir uns nun mit den wichtigsten Definitionen vertraut, denen wir auf unserer Reise begegnen werden.

  1. Agent: Der Algorithmus, der Entscheidungen trifft, Aktionen ausführt, die Umgebung beobachtet, Feedback erhält und darauf abzielt, die Belohnung zu maximieren.

  2. Umgebung: Die Welt, in der sich der Agent befindet. Es umfasst alle Daten, die unserem Agenten zur Entscheidungsfindung zur Verfügung stehen.

  3. Status: Die Konfiguration der Umgebung, die der Agent erkennt.

  4. Belohnung: Das Feedback, das der Agent erhält, nachdem er eine Aktion ausgeführt hat. Es handelt sich um einen Wert, den der Agent maximieren möchte. Wichtig ist, dass beim Reinforcement Learning die Belohnung nicht unbedingt Geld oder eine physische Trophäe bedeutet. Es handelt sich einfach um einen numerischen Wert, der auch negativ sein kann, und unser Ziel ist es, diesen Wert zu maximieren.

  5. Aktion: Alles, was der Agent in der gegebenen Umgebung tun kann. Betrachten wir der Einfachheit halber drei Aktionen: Kaufen, verkaufen oder nichts tun.

  6. Folge: Eine vollständige Ausführung der gesamten Aufgabe.

Dies sind die wichtigsten Definitionen, die wir auf unserer Reise verwenden werden. Es gibt weitere wichtige Begriffe, die wir in zukünftigen Videos behandeln werden.

Mit dieser Einführung in das Reinforcement Learning lernen wir im nächsten Video mehr über die Umgebung und erstellen mit TensorFlow unsere eigene Umgebung.

Vielen Dank, dass Sie heute zu mir gekommen sind, und ich freue mich darauf, mit Ihnen das Reinforcement Learning weiter zu erkunden. Bis bald!

Part VI. Reinforcement Learning. Deep Learning Trading Strategy from the beginning to the production
Part VI. Reinforcement Learning. Deep Learning Trading Strategy from the beginning to the production
  • 2020.07.29
  • www.youtube.com
This is the part VI of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to have a look at the main d...
 

Teil VI. Verstärkungslernen. Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion


Teil VI. Verstärkungslernen. Deep-Learning-Handelsstrategie vom Anfang bis zur Produktion

Ich bin Denis und willkommen zu einer weiteren Folge von „Close to Alga Trading“. In unseren vorherigen Episoden haben wir daran gearbeitet, mithilfe von Deep Learning eine profitable Handelsstrategie zu entwickeln. Lassen Sie uns unsere bisherigen Fortschritte noch einmal zusammenfassen.

Wir begannen damit, die Marktbedingungen auf der Suche nach Ineffizienzen zu beobachten. Nach der Identifizierung haben wir einfache Regeln erstellt und die Daten für unsere Deep-Learning-Modelle vorbereitet. Bei der Umsetzung unseres direkten Ansatzes stellten wir jedoch fest, dass er nicht die gewünschten Ergebnisse brachte. Dies führte uns zu der Erkenntnis, dass wir unseren Ansatz überdenken und alternative Strategien in Betracht ziehen müssen.

In der heutigen Folge werden wir eine neue Richtung erkunden: Reinforcement Learning. Reinforcement Learning hat in verschiedenen Bereichen erhebliche Erfolge erzielt und übertrifft die menschliche Leistung in Spielen wie Schach, Dota und Go. Es wird auch in der Steuerungsrobotik und selbstfahrenden Autos eingesetzt. Warum also nicht es auf den Handel anwenden? Obwohl ich den Erfolg nicht garantieren kann, ist es ein faszinierender Weg, den es zu erkunden gilt.

Lassen Sie uns zunächst eine kurze Einführung in das Reinforcement Learning geben und uns mit den wichtigsten Definitionen vertraut machen.

Reinforcement Learning kann als Lernen durch Versuch und Irrtum beschrieben werden, um Probleme der optimalen Kontrolle zu lösen. Einfacher ausgedrückt geht es darum, die beste Aktion in einem bestimmten Umgebungszustand zu finden, um eine endgültige numerische Belohnung zu maximieren. Um dieses Konzept besser zu verstehen, visualisieren wir es mit einer einfachen Analogie.

Stellen Sie sich einen Händler vor, der vor einem Monitor sitzt und Aktien kauft und verkauft. Hierbei stellt der Händler den Agenten dar, während Chartpreis und Broker das Umfeld bilden. Der Agent beobachtet den aktuellen Zustand der Umgebung und ergreift Maßnahmen, beispielsweise den Kauf einer Aktie. Im Gegenzug erhält der Makler eine Vergütung, bei der es sich um die Maklerprovision handeln kann. Wenn sich die Umgebung ändert, kann der Agent mehr Aktien kaufen, verkaufen oder nichts tun. Am Ende des Handelstages erhält der Agent eine Abschlussbelohnung, die positiv oder negativ sein kann. Das Ziel des Agenten besteht darin, diese Endbelohnung zu maximieren.

Beim verstärkenden Lernen besteht unser Ziel darin, Agenten zu entwerfen, die durch Interaktion mit einer Umgebung lernen können. Machen wir uns nun mit den wichtigsten Definitionen vertraut, denen wir auf unserer Reise begegnen werden.

  1. Agent: Der Algorithmus, der Entscheidungen trifft, Aktionen ausführt, die Umgebung beobachtet, Feedback erhält und darauf abzielt, die Belohnung zu maximieren.

  2. Umgebung: Die Welt, in der sich der Agent befindet. Es umfasst alle Daten, die unserem Agenten zur Entscheidungsfindung zur Verfügung stehen.

  3. Status: Die Konfiguration der Umgebung, die der Agent erkennt.

  4. Belohnung: Das Feedback, das der Agent erhält, nachdem er eine Aktion ausgeführt hat. Es handelt sich um einen Wert, den der Agent maximieren möchte. Wichtig ist, dass beim Reinforcement Learning die Belohnung nicht unbedingt Geld oder eine physische Trophäe bedeutet. Es handelt sich einfach um einen numerischen Wert, der auch negativ sein kann, und unser Ziel ist es, diesen Wert zu maximieren.

  5. Aktion: Alles, was der Agent in der gegebenen Umgebung tun kann. Betrachten wir der Einfachheit halber drei Aktionen: Kaufen, verkaufen oder nichts tun.

  6. Folge: Eine vollständige Ausführung der gesamten Aufgabe.

Dies sind die wichtigsten Definitionen, die wir auf unserer Reise verwenden werden. Es gibt weitere wichtige Begriffe, die wir in zukünftigen Videos behandeln werden.

Mit dieser Einführung in das Reinforcement Learning lernen wir im nächsten Video mehr über die Umgebung und erstellen mit TensorFlow unsere eigene Umgebung.

Vielen Dank, dass Sie heute zu mir gekommen sind, und ich freue mich darauf, mit Ihnen das Reinforcement Learning weiter zu erkunden. Bis bald!

 

Teil VIII. Reinforcement Learning Trading-Strategie. DQN: QNetwork, QRNNNetwork


Teil VIII. Reinforcement Learning Trading-Strategie. DQN: QNetwork, QRNNNetwork

Hallo, mein Name ist Denis und Sie schauen sich „Close to AlgoTrading“ an. In diesem Video stellen wir ein kurzes Update unserer bisherigen Umgebung für den Reinforcement Learning Agent bereit. Außerdem geben wir eine kurze Beschreibung von Q-Learning und dem DQN-Agenten. Anschließend implementieren wir die wichtigsten Lernschritte für einen rDQN-Agenten aus der tf-agents-Bibliothek und besprechen die Testergebnisse.

Schauen wir uns zunächst noch einmal die Handelsumgebung an, die wir im vorherigen Video erstellt haben. In dieser Umgebung verwendeten wir synthetisch generierte Daten. In dieser aktualisierten Version erhält unsere Umgebung jedoch einen Datenrahmen mit historischen Daten als Eingabeparameter. Die Beobachtungsspezifikation für die Umgebung ist ein Wörterbuch mit zwei Schlüsseln: „Preis“ und „Pos“. Der Schlüssel „Preis“ enthält 20 Elemente mit Eröffnungs-, Schluss-, Höchst-, Tiefst- und Volumendaten. Der „Pos“-Schlüssel enthält Informationen über unsere offene Position.

Zu Beginn jeder Episode wählen wir aus unseren Daten zufällig einen Ausschnitt von 20 Preisen aus. Diese Änderung ermöglicht es unserem Reinforcement-Learning-Agenten, aus echten historischen Daten zu lernen.

Lassen Sie uns nun Q-Learning und das Konzept eines Q-Tables besprechen. Beim Q-Learning wird jedem Paar (Zustand, Aktion) ein Q-Wert zugewiesen. Diese als Q-Tabelle bezeichnete Tabelle wird vom Agenten verwendet, um Aktionen mit dem maximalen Q-Wert im aktuellen Status auszuwählen. Der Agent erkundet die Umgebung, erhält Belohnungen und aktualisiert die Q-Werte basierend auf den beobachteten Belohnungen.

Um die Q-Werte zu aktualisieren, verwenden wir eine Formel, die den alten Q-Wert und den zukünftigen Q-Wert berücksichtigt. Wir berechnen den zukünftigen Q-Wert, indem wir den maximalen Q-Wert für den nächsten Zustand in unserer Q-Tabelle nachschlagen. Mit dem erhaltenen zukünftigen Q-Wert aktualisieren wir den Q-Wert, der dem Startpaar (Zustand, Aktion) zugeordnet ist.

In unserem Fall verfügt der Finanzmarkt jedoch über einen sehr großen Zustandsraum, sodass die Verwendung einer Q-Tabelle unpraktisch ist. Um diese Herausforderung zu meistern, können wir ein tiefes neuronales Netzwerk verwenden, um die Q-Werte für einen bestimmten Zustand vorherzusagen. Dieser als DQN-Agent (Deep Q-Network Agent) bekannte Ansatz verwendet ein Q-Netzwerk, in dem die Q-Werte durch Minimierung des Verlusts durch Backpropagation aktualisiert werden. Die im DQN-Agenten verwendete Verlustfunktion wird durch eine spezifische Gleichung angegeben.

Nachdem wir nun ein gutes Verständnis von Q-Learning und dem DQN-Agenten haben, fahren wir mit der Implementierung der wichtigsten Lernschritte für den rDQN-Agenten mithilfe der tf-agents-Bibliothek fort.

Der gesamte Trainingsalgorithmus folgt diesen Schritten:

  1. Schaffen Sie eine Umgebung.
  2. Erstellen Sie einen Agenten.
  3. Sammeln Sie mithilfe einer Richtlinie Daten aus der Umgebung.
  4. Trainieren Sie den Agenten anhand der gesammelten Daten.
  5. Validieren Sie die Leistung des Agenten.
  6. Wiederholen Sie ab Schritt 3.

Die Schaffung der Umgebung ist eine unkomplizierte Aufgabe. Wir integrieren unsere Handelsumgebung in die TFPyEnvironment, die eine nahtlose Integration mit tf-agents ermöglicht.

Als nächstes erstellen wir ein Q-Netzwerk für den DQN-Agenten. Die tf-agents-Bibliothek stellt eine Q-Network-Klasse bereit, die wir zum Definieren unseres Q-Netzwerks verwenden können. Wir definieren ein einfaches Q-Netzwerk mit einer versteckten, vollständig verbundenen Schicht, die aus 40 Neuronen besteht. Da es sich bei unserer Beobachtung um ein Wörterbuch handelt, definieren wir auch eine einfache Vorverarbeitungsschicht dafür.

Nachdem das Q-Netzwerk erstellt wurde, erstellen wir einen DQN-Agenten. Wir instanziieren die Klasse tf_agents.agents.dqn.dqn_agent und übergeben unser Q-Netzwerk als Parameter. Wir definieren auch den Optimierer und die Verlustfunktion für das Training des Modells.

Um den Agenten zu trainieren, benötigen wir Daten aus der Umgebung. Wir sammeln diese Daten mithilfe einer Richtlinie und können für diesen Schritt die Aktionen nach dem Zufallsprinzip auswählen. Der DQN-Agent verfügt über zwei Richtlinien: agent.policy, die für die Auswertung und Bereitstellung verwendet wird, und agent.collect_policy, die für die Datenerfassung verwendet wird.

Zur Datenerfassung gehört das Erfassen des aktuellen Status, das Auswählen einer Aktion, das Empfangen des nächsten Status und der nächsten Belohnung sowie das Speichern dieser Informationen in einem Puffer. Wir sammeln mehrere Schritte oder Episoden und bilden Flugbahnen. Die tf-agents-Bibliothek stellt einen Treiber namens DynamicEpisodeDriver bereit, der Schritte bis zum Ende einer Episode sammelt. Der Treiber aktualisiert Beobachter, einschließlich eines Antwortpuffers.

Zum Speichern der Daten können wir den häufig verwendeten TFUniformReplayBuffer aus der tf-agents-Bibliothek verwenden. Wir definieren die Spezifikationen der Datenelemente, die der Puffer speichert, die Stapelgröße und die maximale Länge jedes Stapelsegments.

Sobald der Datenerfassungsschritt abgeschlossen ist, können wir unseren Agenten schulen. Der Agent benötigt Zugriff auf den Wiedergabepuffer. Wir erstellen eine tf.data.Dataset-Pipeline, um Daten an den Agenten weiterzuleiten. Jede Zeile des Wiedergabepuffers speichert eine einzelne Flugbahn, aber der DQN-Agent benötigt sowohl die aktuelle als auch die nächste Beobachtung, um den Verlust zu berechnen. Daher setzen wir den Parameter „num_steps“ auf 2, wodurch die Datensatzpipeline zwei Zeilen für jedes Element im Stapel abtasten kann.

Zu diesem Zeitpunkt haben wir alles vorbereitet, um zwei DQN-Agenten anhand derselben Daten zu schulen und ihre Leistung zu bewerten. Ein Agent verwendet ein einfaches Q-Netzwerk, während der andere ein QRNN-Netzwerk verwendet. Beide Agenten werden anhand von 200 Tagen historischen Preisdaten geschult.

Nach 700 Trainingsschritten beobachten wir, dass der einfache Q-Network-Agent nicht viel gelernt hat und meist eine negative Durchschnittsrendite zeigt. Allerdings weist der QRNNNetwork-Agent überwiegend positive Durchschnittsrenditen auf. Dieses Ergebnis entspricht den Erwartungen, da der RNN-Agent einige Dynamiken in den Daten erfassen und schneller lernen kann.

Während dieses einfache Experiment einige Hoffnungen für den Einsatz von Reinforcement Learning beim Aufbau eines profitablen Agenten weckt, müssen noch andere Metriken berücksichtigt werden, um die Leistung des Agenten zu bewerten. Wir werden diese in einem zukünftigen Video untersuchen.

Vielen Dank fürs Zuschauen, wir sehen uns in der nächsten Folge.

Part VIII. Reinforcement Learning Trading Strategy. DQN: QNetwork, QRNNNetwork
Part VIII. Reinforcement Learning Trading Strategy. DQN: QNetwork, QRNNNetwork
  • 2020.10.31
  • www.youtube.com
This is the part VIII of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to explore the training st...
 

Teil IX Reinforcement Learning Trading-Strategie. DQN: Testen der Handelsstrategie basierend auf der Agentenrichtlinie


Teil IX Reinforcement Learning Trading-Strategie. DQN: Testen der Handelsstrategie basierend auf der Agentenrichtlinie

Ich freue mich, Ihnen mitteilen zu können, dass wir einen wichtigen Meilenstein auf unserem Weg erreicht haben: die Prüfung unserer Strategie. Zu diesem Zweck werden wir zur Durchführung unserer Tests ein einfaches Backtesting-Python-Framework verwenden. Um zu beginnen, können Sie das Framework installieren, indem Sie den Befehl „pip install“ gefolgt vom Namen des Frameworks ausführen.

Der Autor des Frameworks hat ein einfaches Beispiel bereitgestellt, das zeigt, wie man es effektiv nutzt. Bevor wir uns jedoch darauf einlassen, müssen wir unsere eigene Strategie umsetzen. Beginnen wir mit der Initialisierung und Definition aller Variablen, die wir für unsere Strategie benötigen.

Ein interessanter Aspekt ist, dass wir unsere gespeicherte Richtlinie mithilfe der TensorFlow-API laden können. Da wir ein QRNNNetwork verwenden, müssen wir den Anfangsstatus der Richtlinie abrufen. Aus diesem Grund haben wir die Initialisierungsfunktion implementiert. Jetzt ist es an der Zeit, die „next“-Funktion zu implementieren, die bei jedem neuen Schritt aufgerufen wird. Zu Beginn müssen wir Daten für die ersten 10 Tage sammeln und können danach unser Beobachtungswörterbuch füttern. Mit jedem Schritt aktualisieren wir die Beobachtung und geben sie an die Richtlinie weiter.

Sobald wir das Beobachtungswörterbuch erstellt haben, müssen wir ein Zeitschrittobjekt erstellen, da unser Richtlinienmodell es als Eingabe benötigt. Um diesen Prozess zu erleichtern, habe ich eine einfache Funktion erstellt, die unsere Beobachtungsdaten in das Zeitschrittobjekt umwandelt. Die entscheidenden Elemente hierbei sind die Beobachtungsdaten und der Schritttyp. Nachdem wir unser Zeitschrittobjekt erhalten haben, können wir eine Aktion aus der Richtlinie abrufen. Wie Sie sehen können, setzt die Funktion „runPolicy“ den Richtlinienstatus zurück, wenn der Schritttyp gleich 0 ist, und gibt die Aktion und den neuen Richtlinienstatus zurück.

Als nächstes müssen wir unsere Positionszustände aktualisieren und die Aktion ausführen. Schließlich erhöhen wir am Ende der „next“-Funktion den Zähler und setzen alles auf die Ausgangszustände zurück, um den Beginn einer neuen Episode zu simulieren. Großartig! Wir haben unsere Strategie erfolgreich umgesetzt. Nun benötigen wir einige Daten zu Testzwecken. Wir können die panda_datareader-Bibliothek verwenden, um tägliche Daten von Yahoo Finance abzurufen. Beginnen wir damit, unsere Strategie anhand historischer Daten für ein Jahr auf Intel-Aktien zu testen.

Wir erstellen ein Backtest-Objekt und beginnen mit dem Testen. Die Testergebnisse zeigen eine Rendite von 106 %, was beeindruckend ist. Es ist jedoch wichtig zu beachten, dass das Backtesting-Framework die Berechnungen bei 100 % beginnt, was bedeutet, dass unsere tatsächliche Rendite nur 6 % beträgt. Dennoch ist dies kein schlechtes Ergebnis, wenn man bedenkt, dass unsere Politik nicht umfassend geschult wurde. Um eine umfassendere Einschätzung zu ermöglichen, testen wir unsere Strategie auch an der AMD-Aktie. Wie Sie sehen, zeigt das Ergebnis für AMD einen Rückgang von ca. 40 %. Somit können wir die Performance unserer Strategie bei AMD- und Intel-Aktien nebeneinander vergleichen.

Jetzt wissen Sie, wie Sie die Agent-Richtlinie mit einem Backtesting-Framework verwenden. Wenn Sie Python für Ihre reale Handelsumgebung verwenden, können Sie die Richtlinie auf die gleiche Weise anwenden. Wenn Sie jedoch andere Sprachen verwenden, können Sie die Richtlinie mithilfe des Flask-Frameworks bereitstellen und über eine REST-API darauf zugreifen.

Ich hoffe, Sie fanden diese Videos interessant und informativ. Wenn ja, erwägen Sie bitte ein Abonnement. Wir sehen uns dann in der nächsten Folge.

Part IX Reinforcement Learning Trading Strategy. DQN: Testing Trading Strategy based on Agent Policy
Part IX Reinforcement Learning Trading Strategy. DQN: Testing Trading Strategy based on Agent Policy
  • 2020.12.13
  • www.youtube.com
This is the final episode of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to see how to use the ...
 

Was ist ein quantitatives Handelssystem? Struktur und Beschreibung.


Was ist ein quantitatives Handelssystem? Struktur und Beschreibung.

Hallo an alle! Ich hoffe, es geht euch allen gut. Es ist schon eine ganze Weile her, seit ich das letzte Mal ein Video veröffentlicht habe, aber ich möchte Ihnen versichern, dass ich Sie nicht vergessen habe. Heute freue ich mich, ein neues und interessantes Thema zu beginnen: die Softwarearchitektur eines automatisierten Handelssystems.

Bevor wir uns mit den Details der Softwarearchitektur befassen, wollen wir zunächst verstehen, was ein Handelssystem ist und woraus es besteht. In diesem Video werden wir die Struktur und Elemente eines automatisierten Handelssystems untersuchen. Nun, wie das Sprichwort sagt: „Es gibt nichts Neues unter der Sonne.“ Als ich meine Reise in diesem Bereich begann, war ich auf der Suche nach einer gut strukturierten Beschreibung eines Handelssystems. Ich wollte etwas, das es leicht macht zu verstehen, welche Blöcke implementiert werden müssen und wie man eine robuste Softwarelösung erstellt.

Ich bin auf ein Buch von Rishi K. Narang mit dem Titel „Inside the Black Box“ gestoßen, in dem er ein quantitatives System beschreibt, das aus fünf gemeinsamen Blöcken besteht: dem Alpha-Modell, dem Risikomodell, dem Transaktionskostenmodell, dem Portfoliokonstruktionsmodell und dem Ausführungsmodell. Darüber hinaus gibt es noch einen weiteren wesentlichen Block: Daten.

Schauen wir uns diese Struktur genauer an, beginnend mit dem Datenblock. Obwohl der Datenblock technisch gesehen kein Teil des Handelssystems ist, spielt er als Sauerstoff, auf den alle Komponenten des Systems angewiesen sind, eine entscheidende Rolle. Der Datenblock umfasst verschiedene Arten von Daten, die das Handelssystem benötigt. Diese Daten können aus verschiedenen Quellen wie Börsen, Aufsichtsbehörden, Nachrichtenagenturen und anderen relevanten Quellen wie mikroökonomischen Daten, Maklergebühren oder Portfolioinformationen stammen.

Nachdem wir nun den Datenblock verstanden haben, wollen wir die Elemente des Handelssystems und die Beziehungen zwischen ihnen untersuchen. Im Diagramm sehen Sie Pfeile, die den Informationsfluss darstellen. Das Alpha-Modell, das Risikomodell und das Transaktionskostenmodell treffen keine endgültigen Entscheidungen; Stattdessen liefern sie Informationen an das Portfoliokonstruktionsmodell, das wiederum das Ausführungsmodell auslöst. Es ist wichtig zu beachten, dass es Strategien gibt, bei denen nur eine Teilmenge dieser Elemente vorhanden ist und die Beziehungen zwischen Elementen variieren können. Diese Struktur ermöglicht uns jedoch einen ganzheitlichen Überblick über die Hauptelemente eines Handelssystems.

Das erste Element dieser Struktur ist das Alpha-Modell. Das Alpha-Modell stellt die Handelsidee oder -strategie dar, die darauf ausgelegt ist, zukünftige Ergebnisse vorherzusagen. Typischerweise ist die Ausgabe dieses Modells eine Rendite- oder Richtungsprognose. Es gibt zwei bekannte Arten von Handelsmodellen: technische Modelle, die auf Preisdaten und technischer Analyse basieren, und fundamentale Modelle, die Finanzdaten und Fundamentalanalysen nutzen. Wir können auch Hybridmodelle haben, die Aspekte von beidem kombinieren. Unabhängig von der Komplexität besteht der Hauptzweck des Alpha-Modells darin, Ratschläge in Form von Prognosen zu geben.

Als nächstes haben wir das Risikomodell. Das Risikomodell soll dazu beitragen, die Exposition gegenüber Faktoren, die zu Verlusten führen könnten, zu reduzieren oder zu minimieren. Risikomodelle können in zwei Typen eingeteilt werden. Der erste Typ konzentriert sich auf die Positionsgrößenbestimmung, um Risiken zu reduzieren, und setzt dabei Strategien wie „Hard Sizing“ oder komplexe Funktionen ein. Das Ergebnis dieser Art von Risikomodell ist die Positionsgröße. Die zweite Art von Risikomodell zielt darauf ab, bestimmte Arten von Risiken zu mindern, beispielsweise das Marktrichtungsrisiko. In solchen Fällen schlägt das Modell möglicherweise eine Absicherungsposition als Ausgabe vor.

Das dritte Element ist das Transaktionskostenmodell. Dieses Modell liefert Informationen über die Kosten, die mit der Ausführung eines Handels verbunden sind. Es gibt drei Hauptkosten: Provisionen und Gebühren, Slippage und Marktauswirkungen. Transaktionskostenmodelle können von einfachen Modellen, die einen pauschalen Kostenwert zurückgeben, bis hin zu komplexeren Modellen wie quadratischen Kostenfunktionen reichen, die darauf abzielen, die tatsächlichen Kosten so genau wie möglich vorherzusagen. Die folgende Grafik zeigt, wie verschiedene Kostenfunktionen funktionieren können.

Sobald wir alle Elemente haben, die Informationen liefern, fahren wir mit dem Portfoliokonstruktionsmodell fort. Dieses Modell verwendet Eingaben aus dem Alpha-Modell, dem Risikomodell und dem Transaktionskostenmodell und entscheidet, wie die Mittel auf verschiedene Vermögenswerte verteilt werden. Ziel ist es, ein Portfolio auf der Grundlage einer objektiven Funktion aufzubauen. Es gibt zwei Haupttypen von Portfoliokonstruktionsmodellen: regelbasierte Modelle (z. B. gleiche Gewichtungen, gleiches Risiko, Entscheidungsbaummethoden) und Portfoliooptimierer. Letzteres beinhaltet die Optimierung einer Zielfunktion, um eine optimalere Vermögensallokation im Portfolio zu erreichen.

Schließlich haben wir das Ausführungsmodell, das Informationen aus dem Portfoliokonstruktionsmodell erhält und sich auf die Ausführung von Aufträgen zum bestmöglichen Preis konzentriert. Es gibt verschiedene Arten von Ausführungsmodellen, die von einfachen Markt- oder Limit-Orders bis hin zu komplexeren Modellen reichen, die die Marktmikrostruktur analysieren und maschinelle Lernalgorithmen nutzen.

Damit ist die kurze Beschreibung der Hauptelemente eines quantitativen Handelssystems abgeschlossen. Ich hoffe, dieser Überblick hat Ihnen ein besseres Verständnis der Struktur des Handelssystems und seiner allgemeinen Funktionsweise vermittelt.

In den nächsten Videos werde ich versuchen, basierend auf dieser Beschreibung eine Softwaresystemarchitektur zu erstellen. Wenn Sie dieses Thema interessant finden, denken Sie bitte darüber nach, den Kanal für zukünftige Updates zu abonnieren. Vielen Dank fürs Zuschauen, wir sehen uns im nächsten Video.
What is a Quantitative Trading System? Structure and description.
What is a Quantitative Trading System? Structure and description.
  • 2019.10.14
  • www.youtube.com
This video briefly describes the common structure of a Quantitative Trading System. Also, it provides the information about the relationships between the ele...