MMS Praktisch. Algo Trader cz. I [Programmierkurs]
In der heutigen Folge werden wir an einer Software arbeiten, mit der Sie die Möglichkeiten des algorithmischen Handels nutzen und gleichzeitig die maximale Kontrolle über den Verlauf der Ereignisse behalten können. Wir werden uns auf Ideen konzentrieren, die es Ihnen ermöglichen, in der Realität zu handeln, indem Sie die intuitive Bedienung und Flexibilität der Funktion maximieren. In der Software verwenden wir eine Schnittstelle, deren Form von vielen als Standard in der Tageshandelsbranche angesehen und häufig als "Schnittstelle" bezeichnet wird Preisleiter.
Projektplan
Wir teilen die Arbeit in mehrere Stufen, denn neben einem breiten Serviceaufträge, Algo Trader ermöglicht es Ihnen, Algorithmen auszuführen, die automatisch durch die Position einer Vielzahl von Kombinationen verwaltet werden, die Sie abhängig von der Situation schaffen können sie auf dem Markt zu begegnen.
Im heutigen Teil werden wir den ersten Schritt in die Welt der objektorientierten Programmierung machen und einen elementaren Teil unseres Projekts in Bezug auf die Schnittstelle und die Bedienung grundlegender Operationen starten.
In den nächsten Folgen werden wir mit der Arbeit an den ersten Algorithmen beginnen. Zu Beginn erstellen wir einen GTP-Algorithmus, der sicherstellt, dass die Position mit dem erwarteten Gewinn geschlossen wird, unabhängig davon, wie viele Bestellungen eingehen. Als nächstes erstellen wir den Algorithmus OOO (One Opens the Other, so genau war es noch nicht) und schließlich einen Algorithmus, der das Scalping bei der Präsentation wichtiger Makrodaten ermöglicht. Zusammen mit den Algorithmen werden wir hier und da ein paar nette Gadgets hinzufügen.
Technischer Hintergrund
Sie finden das Paket mit den Dateien, die Sie heute benötigen, unter folgendem Link:
Wenn Sie die Software verwenden, akzeptieren Sie die Lizenz, die dem Dateisatz beigefügt ist.
Damit die Software ordnungsgemäß funktioniert, benötigen Sie eine Microsoft NET Framework-Version von min. 4.6.1 Runtime, die Sie hier herunterladen können:
Objektorientierte Programmierung
Wir erstellen unsere Software mit Objektprogrammierung, ein Programmierverfahren, das die logische Anordnung von Algorithmusfragmenten im sogenannten erlaubt Objekte, deren Aufgabe es ist, separate Funktionen auszuführen und mit anderen Objekten zu kommunizieren, um die Aufgabe des Programms als Ganzes zu implementieren. Um weiter zu gehen, müssen wir verstehen, was Objekte in der Praxis sind und wie sie erstellt werden. Schauen Sie sich dazu den folgenden Artikel in Wikibooks an, in dem Sie anhand des Beispiels der C ++ - Sprache, auf der MQL4 basiert, die Grundlagen verstehen.
Erste klasse
Wie Sie sehen, dreht sich alles um das Schlüsselwort Klasse. Hiermit können Sie ein Objekt definieren, das Sie dann mit einem Schlüsselwort erstellen können neu. Öffnen Sie die Datei, die die Definition einer der Klassen enthält, die wir heute verwenden werden, die Datei ChartOperations.mqhdie Sie im Katalog finden MQL4 \ Include \ AlgoTrader_v10.
Jede Klasse verfügt über einen Konstruktor, der in der Praxis eine Funktion ist, die beim Erstellen des Objekts automatisch aufgerufen wird. Der Konstruktor trägt den gleichen Namen wie das Objekt und kann Parameter annehmen. In unserem obigen Code-Snippet erstellen wir einen Konstruktor wie folgt:
Nach dem Erstellen des Konstruktors können wir die Komponenten der Klasse definieren, dh Funktionen und Variablen. Sie sind genau wie bei gewöhnlichen Funktionen und Variablen definiert, mit dem Unterschied, dass sie sich im Hauptteil der Klasse befinden. Achten Sie auf Ihre Keywords Öffentlichkeit: oraz Privatgelände:. Alle Funktionen und Variablen nach dem Wort Öffentlichkeit: wird für Funktionen verfügbar sein, die in anderen Teilen der Software zu finden sind, beispielsweise in der API-Funktion OnTick () oder andere Gegenstände. Privat Es informiert den Compiler jedoch darüber, dass die in diesem Teil definierten Elemente streng vertraulich sind und dass außer einem bestimmten Objekt natürlich niemand auf sie zugreifen kann.
Anwendungen von Objekten
Was macht Objekte so nützlich? Unter anderem ist es so, dass einmal definierte Objekte in einer beliebigen Anzahl von Kopien erstellt werden können und sich abhängig von den an sie übergebenen Parametern unterschiedlich verhalten, aber auf eine Weise, die wir analysieren und steuern können. Darüber hinaus ermöglichen die Objekte die lesbare Organisation des Codes, indem die Komponenten des Algorithmus in extrahierte Elemente unterteilt werden, und ein ordnungsgemäß entworfenes Objekt kann in einer völlig anderen Software verwendet werden, mit der Sie komplexe Anwendungen effektiv erstellen können.
Wir starten das erste Objekt
Gehen wir zur Hauptdatei unserer Software, der Datei AlgoTrader_v10.mq4was Sie im Katalog finden MQL4 \ Experts \.
Werfen wir einen Blick auf die unten stehende API-Definition OnInit ():
Zeiger
In dem Teil der Datei, der für die Definition globaler Variablen mithilfe eines Codefragments verantwortlich ist ...
... wir schaffen das sogenannte Zeiger dh ein Zeiger, der eine Adresse zu einer Stelle im Speicher des Computers enthält, an der unser Objekt später erstellt wird. Mit dem Zeiger können wir auf das Objekt verweisen und dessen Funktionen aufrufen. Zeiger wir definieren ähnlich wie Variablen, das erste Element der Notation ist der Objekttyp, dann platzieren wir den Stern * Danach setzen wir einen eindeutigen Namen für das Objekt, den wir später als Referenz verwenden werden. Für uns Zeiger wir weisen eine Variable zu NULL, was besagt, dass es zum jetzigen Zeitpunkt noch kein Objekt anzeigt.
Konstruktor
Später im Code, im Hauptteil der Funktion OnInit () Wir erstellen das richtige Objekt mit einem Schlüsselwort neu.
Po neu Wir rufen den Konstruktor des Objekts auf, der in unserem Fall zwei Variablen benötigt, die das Objekt über die Dimensionen unseres Diagramms informieren, da wir es benötigen, um unsere Schnittstelle richtig zu platzieren. Der aufgerufene Konstruktor leitet die Adresse des neu erstellten Objekts im Speicher des Computers an unseren weiter Zeiger genannt ChartOperations.
Zerstörer
Objekte sind eine spezielle Art von Daten. Wenn wir sie erstellen, müssen wir sicherstellen, dass sie endgültig aus dem Speicher des Computers entfernt werden. All dies, damit Sie vor Ihrem Laptop keinen riesigen Server haben müssen, der zuvor erstellte Daten sammelt, die für niemanden mehr benötigt werden.
Um Objekte zu löschen, verwenden wir das Schlüsselwort löschenDanach setzen wir unseren Namen poinera angibt, welches Objekt wir meinen. Wir entfernen unser Objekt nur in der API-Funktion OnDeinit (...)weil wir es während des gesamten Anwendungslebenszyklus benötigen, bis die Software ausgeschaltet wird.
Mit Objekten arbeiten
Lassen Sie uns nun sehen, wie wir unser erstelltes Objekt für die Anforderungen unserer Anwendung verwenden können. Zu diesem Zweck im Körper der Klasse cChartOperations Wir haben mehrere Funktionen definiert. Schauen wir uns einen davon an:
Funktion OnClick (...) wir brauchen es, um unserer schnittstelle mitzuteilen, welche preisniveaus für uns aktuell interessant sind. Durch einen Doppelklick auf die Grafik setzt der Algorithmus unsere Preisliste an die angegebene Stelle. Damit unsere Funktion funktioniert, müssen wir den Moment erkennen, in dem wir auf das Diagramm klicken. Hier hilft die API-Funktion OnChartEvent (...)
Das obige Code-Snippet erkennt den Moment, in dem der Benutzer auf das Diagramm klickt, und ruft dann die Funktion auf, die sich in unserem zuvor erstellten Objekt befindet. Das Aufrufen einer Funktion besteht darin, einen Punkt nach unserem Namen zu setzen Zeiger an das Objekt übergeben und dann den Namen der gewünschten Funktion sowie die erforderlichen Parameter übergeben, die in unserem Fall die x- und y-Koordinaten der Stelle in der Tabelle angeben, an der der Klick ausgeführt wurde.
Erste Effekte
Die von uns erstellten Prozeduren haben die erste Funktionalität der Software gestartet, die wir testen können, indem wir unser Programm kompilieren und auf ein anderes Diagramm klicken. Im Folgenden finden Sie eine Grafik mit einigen Funktionen, mit denen Sie die in unserer grafischen Oberfläche angezeigten Preisniveaus ändern können.
Zweite Klasse
Da Sie in die zweite Klasse befördert wurden und unser Klicken nicht verschwendet wird, werden wir eine zweite Einrichtung entwerfen, mit der Sie Bestellungen von der Ebene unserer Leiter aus aufgeben können. Zu diesem Zweck haben wir die entsprechende Klasse vorbereitet, die Sie in der Datei finden MQL4 \ Include \ AlgoTrader_v10 \ OrderOperations.mqh
Im obigen Code sehen Sie die vollständige Definition des Objekts cOrderOperationsDies wird verwendet, um Bestellungen abzuwickeln, die wir auf unserer Preisleiter platzieren werden. Achten Sie auf die Funktion ProcessOrderRequests ()in dem unser Programm mit der Bibliothek kommuniziert dll mit der Funktion ReadOrderRequest ().
Strukturen
Funktion ReadOrderRequest () als Ergebnis seiner Aktion gibt eine Typstruktur zurück sOrderRequestHierbei handelt es sich um einen Datensatz, den wir bei einer Bestellung über die Schnittstelle definiert haben.
Strukturen sind jüngere Schwestern von Klassen, mit denen Sie einen Datenblock mit vielen Variablen erstellen können. Dies ermöglicht die logische Anordnung von Informationen, die sich auf ein bestimmtes Problem beziehen. In unserem Fall sammelt die Struktur Daten über die von unserer grafischen Oberfläche gesendete Bestellung, wie beispielsweise den Eröffnungspreis oder das Volumen. Wir definieren eine Struktur, indem wir ihrem Namen ein Schlüsselwort voranstellen structund dann setzen wir eine Liste der Daten, die wir brauchen.
Die obige Definition finden Sie in der Datei MQL4 \ Include \ AlgoTrader_v10 \ Definitions.mqh.
Wir verwenden Strukturen ähnlich wie Variablen. Im ersten Schritt müssen wir sie durch Angabe des Strukturtyps erstellen und dann einen eindeutigen Namen vergeben, auf den wir später verweisen können. Im folgenden Beispiel erstellen wir eine Typstruktur sOrderRequest und wir geben ihm einen eindeutigen Namen Anforderungund dann ordnen wir Daten von unserer Schnittstelle mit Funktionen ReadOrderRequest ().
Der Zugriff auf in der Struktur gespeicherte Daten erfolgt analog zur Verwendung von Variablen, da die Struktur in der Praxis nur eine Gruppe von Variablen ist, die unter einem gemeinsamen Bezeichner verborgen sind. Um Daten in der Struktur zu lesen oder zu schreiben, genügt es, nach dem Namen, den wir vergeben haben, einen Punkt einzufügen und dann den Namen der Variablen anzugeben, die uns interessiert. Im folgenden Codefragment lesen wir die in der Struktur gespeicherten Daten, um den Auftrag zu senden, und speichern dann die Informationen über das Ergebnis der Operation.
Ausführung von Aufträgen
Damit unsere Software Bestellungen aufgibt, müssen wir das Objekt implementieren, das auf der Grundlage der Klasse erstellt wurde cOrderOperations. Da wir das Objekt ab dem Start unseres Programms benötigen, erstellen wir es in der API-Funktion OnInit ().
Im Konstruktor cOrderOperations wir platzieren eine Variable Position_idDies ist Teil der Einstellungen unserer Anwendung, die im Standardfenster der MetaTrader-Plattform verfügbar sind. Die Kennung ermöglicht es unserer Software, ihre eigenen Bestellungen zu erkennen, so dass keine Verwechslungen mit Bestellungen aus anderen Quellen auftreten.
Wir haben auch den obigen Code gestartet Timer mit dem 200 ms-Intervall, da unser Objekt regelmäßig überprüfen sollte, ob die Schnittstelle Informationen über den eingehenden Auftrag sendet.
Die Funktion des Objekts OnTimer200ms () ruft eine Funktion auf ProcessOrderRequests ()Wer wird die Bestellung aufgeben, wenn er die entsprechenden Daten von der Schnittstelle erhält.
Effekte
Unsere Software kann bereits mit der grafischen Oberfläche kommunizieren und wir können das tun, was wir am liebsten tun, dh den Algorithmus kompilieren und eine neue Bestellung aufgeben. Um Ihnen den Einstieg in die ersten Schritte zu erleichtern, finden Sie einige Tipps, die veranschaulichen, welche Funktionen unter den verschiedenen Tasten verborgen sind.
Lautstärkeregler
Arten von Bestellungen
Summe
Das ist alles für heute, aber es ist erst der Anfang des Abenteuers mit Algo-Händler. In der nächsten Folge werden wir uns mit der Implementierung erweiterter algorithmischer Funktionen befassen. Algo Trader wird zusammen mit Ihnen erstellt und wir sind dankbar für alle Ideen und Kommentare, die es für Sie besser machen könnten. Wir würden uns freuen, von Ihnen zu hören biuro@expertadvisors.pl .