Diskussion zum Artikel "Auftragsstrategien. Ein universelles automatisches Handelssystem"

 

Neuer Artikel Auftragsstrategien. Ein universelles automatisches Handelssystem :

In diesem Beitrag dreht sich alles um Strategien, in denen bedingte Aufträge (Pending Orders) intensiv genutzt werden, um eine Metasprache, die geschaffen werden kann, um diese Strategien in Formelsprache zu beschreiben, und um die Verwendung eines universellen automatischen Handelssystems, dessen Arbeitsweise auf diesen Beschreibungen beruht.

Order Strategies. Multi-Purpose Expert Advisor

Zudem kann für eine Strategie auch eine Analyse anderer Art erforderlich sein. Diese bezeichnen wir als die Analyse der aktuellen Handelslage. Sie umfasst eine Zustandsanalyse der betreffenden Handelsposition sowie die Analyse des Vorhandenseins/Nichtvorhandenseins von Pending Orders (sofern diese bedingten Aufträge in der Strategie verwendet werden). Auf der Grundlage dieser Analyse wird entschieden, ob bei der Position oder mit Aufträgen etwas geschehen muss, zum Beispiel ob sie geschlossen, die Verlustgrenze (Stop Loss) verschoben, bedingte Aufträge (Pending Orders) eingerichtet oder gelöscht werden müssen usw. Anders gesagt umfasst diese Analyse die Untersuchung unserer Tätigkeit am Markt sowie der Operationen gemäß der von uns (oder dem Expert-System) geschaffenen Lage und den Richtlinien der angewandten Strategie.

Die allgemein bekannte nachgezogene Verlustbremse (Trailing Stop) kann in gewisser Hinsicht der zweiten Art der Bestandteile einer Handelsstrategie zugeordnet werden. Bei der Analyse wird vorgegangen wie folgt: wenn eine eröffnete Position vorhanden ist, bei der der Gewinn über dem in den Einstellungen festgelegten Wert liegt, und keine Verlustgrenze (Stop Loss) gesetzt oder in einer größeren Entfernung von dem aktuellen Kurs festgelegt wurde, erfolgt die Verlagerung (bzw. Festlegung) der Verlustgrenze.

Ein Trailing Stop ist eine zu einfache Funktion, um von besonderem Interesse zu sein. Außerdem kann man sie einer vollkommen anderen Kategorie der Bestandteile einer Handelsstrategie zuordnen, nämlich den Funktionen zur Verwaltung von Positionen. Somit kann eine Handelsstrategie drei Kategorien von Elementen beinhalten:

  1. Die Analyse der Marktlage und die Ausführung von Operationen auf ihrer Grundlage.

  2. Die Analyse der Handelslage und die Ausführung von Operationen auf ihrer Grundlage.

  3. Die Verwaltung der Positionen.

In diesem Beitrag dreht sich alles um Strategien, in denen Pending Orders intensiv genutzt werden (wir werden sie kurz als Auftragsstrategien bezeichnen), um eine Metasprache, die geschaffen werden kann, um diese Strategien in Formelsprache zu beschreiben, und um die Verwendung eines universellen automatischen Handelssystems (eines Expert-Systems), dessen Arbeitsweise auf diesen Beschreibungen beruht.

Autor: Dmitry Fedoseev

 

Dmitry, was ist das? Warum ist der Artikel in Form eines Nachschlagewerks und Tabellen von Makros?
und wo sind die Code-Beispiele, wo ist die Essenz der Idee des Programmierers?
Die Kapitel, die das Prinzip und die Identifizierung erklären - haben leider kein Licht auf das, was vor sich geht, geworfen.
einen solchen Eindruck, dass sie es für sich selbst geschrieben haben, um die Liste der möglichen Makros nicht zu vergessen.

Können Sie für alle den Zweck dessen erklären, was in dem Code geschieht? (Ich bin nicht an der Anwendung interessiert, sondern nur an der Organisation der MQL-Algorithmen).

 
Ich unterstütze, ich brauche ein Beispiel dafür, wie man einen einfachen TS programmiert, zumindest den Handel auf den Kreuzungen von langsamen und schnellen MAs.
 
Der Artikel ist offenbar nichts für Durchschnittsmenschen. ;-) Das Ziel ist lobenswert - dem Benutzer die Notwendigkeit zu ersparen, zu verstehen, was im MQL-Code vor sich geht, und von der Programmierroutine wegzukommen. Es scheint genügend Beispiele für TCs (in der Metasprache) zu geben, aber die Metasprache selbst braucht vielleicht Zeit, um sie zu beherrschen. Vielleicht wird es mit der Zeit möglich sein, sie zu vereinfachen oder mit einem visuellen Strategiedesigner zu erweitern, dann wird es weniger unzufriedene Leute geben oder sie werden anfangen, sich zu beschweren, dass die Schaltflächen an der falschen Stelle platziert sind. ;-)
 

Ähem...
Es sieht aus wie ein Artikel "von einem Programmierer für Programmierer". Es ist nur nicht klar, wer (außer dem Autor) ihn benutzen wird. "Lerne mql5" vs. "Lerne eIntepretar".

Aber die geleistete Arbeit ist einfach kolossal, es ist bewundernswert.

 
sergeev:

Dmitry, was ist das? Warum ist der Artikel in Form eines Nachschlagewerks und Tabellen von Makros?
und wo sind die Code-Beispiele, wo ist die Essenz der Idee des Programmierers?
Die Kapitel, die das Prinzip und die Identifizierung erklären - haben leider kein Licht auf das, was vor sich geht, geworfen.
einen solchen Eindruck, dass sie es für sich selbst geschrieben haben, um die Liste der möglichen Makros nicht zu vergessen.

Können Sie allen erklären, was in dem Code vor sich geht? (Ich interessiere mich nicht für die Anwendung, sondern nur für die Organisation der MQL-Algorithmen).

Es gibt 3 oder 4 Referenztabellen. Der Rest sind Makros mit Kommentaren. Der Artikel ist sehr informationsreich, man sollte ihn lesen, ohne ein einziges Wort zu überspringen, nicht zum nächsten gehen, wenn auch nur ein Gedanke unklar ist (natürlich nur, wenn es nötig ist und wenn man will). Ein einmaliges Lesen wird wahrscheinlich nicht helfen. Wenn Sie versuchen, den zentralen Gedanken herauszufiltern, ist er nicht so groß und kompliziert: Jede Auftragsstrategie sollte in alle möglichen Phasen von Zuständen zerlegt werden, aber das ist ein persönlicher kreativer Prozess, der nicht formalisiert ist. Wenn Sie es wünschen, können Sie es formalisieren, aber das würde viel Schreibarbeit bedeuten.

Die Idee des Programmierers... ist so alt wie der Computer selbst: ein Programm in menschlicher Sprache, mit dem eine eiserne Maschine arbeitet.

Code-Beispiele. Die Funktionen StringFind() und StringSubstr(). Im Allgemeinen kann es nützlich sein, String-Funktionen in PHP zu studieren - es kann Ihre Kreativität wirklich erweitern...

Wenn Sie versuchen würden, die gesamte Menge an Informationen, die in diesem Artikel präsentiert werden, auf eine andere Art und Weise auszudrücken, könnte er 5-10 mal so umfangreich sein...

Was im Code passiert... Wir lesen die Datei Zeile für Zeile, trennen Kommentare durch das "#"-Zeichen, unterteilen in Phasen- und Aktionsfelder durch das "|"-Zeichen, trennen Befehle durch das ";"-Zeichen. Dann suchen wir nach Teilstrings <, >, <=, <= usw. in Vergleichsausdrücken. Wenn wir eine finden, notieren wir ihren Index, und der Ausdruck wird durch sie in einen linken und einen rechten Teil geteilt. Der arithmetische Ausdruck bleibt erhalten. Beginnt er mit + oder -, so wird ein Zeichen eingerückt und nach + oder - gesucht, vor dem kein *-Zeichen steht. Wir zerlegen + oder - in Teilstrings und trennen diese beiden Teilstrings durch das *-Zeichen. Danach haben wir vier Argumente (und ein weiteres auf der linken Seite des Ausdrucks). Diese Argumente können Befehle sein. Wir prüfen, ob es sich um eine Zahl oder eine Zahl mit p am Ende oder um eine Benutzervariable oder eine Benutzervariable mit p am Ende handelt, wenn ja, ersetzen wir sie durch eine Zahl. Wenn nicht, handelt es sich um einen Befehl. Wenn es sich um einen Befehl handelt, trennen wir den Befehl selbst und seine Argumente durch das Zeichen (.

Das Interessanteste ist die Berechnung von Ausdrücken. Es gibt Strukturen, fünf Strukturen mit Werten in jeder Struktur, die Wertestruktur gibt an, ob der Wert direkt numerisch oder ein Befehl ist. Für jede Struktur mit einem Wert wird eine Funktion aufgerufen, um den Wert zu berechnen. Wenn der Wert numerisch ist, tut die Funktion nichts, wenn es sich um einen Befehl handelt, wird die entsprechende Funktion aufgerufen (ausgewählt über einen Schalter). Nachdem die Werte ausgefüllt sind, wird der arithmetische Ausdruck berechnet, wobei in der Struktur die Vorzeichen für die Werte und die arithmetische Aktion angegeben sind.... Es wird nur alles durch Zahlen (Indizes) angegeben, und die notwendige Aktion wird durch switch ausgewählt.

Der eigentliche Prozess der Arbeitsinterpretation besteht aus zwei Ebenen von switch: ein Befehl und verschachtelt für die Kennung der Daten, die über den Befehl empfangen werden. Wenn Sie daran interessiert sind, schauen Sie sich den Code der Funktion OnTick() an, der nicht sehr umfangreich ist. Die größte Menge an Code kommt von OnInit() Funktion, aber es ist nicht so interessant dort, es kann getan werden, wie es bequemer für jemanden ist - nur StringFind() und StrSubstr() Funktionen.


Документация по MQL5: Строковые функции / StringFind
Документация по MQL5: Строковые функции / StringFind
  • www.mql5.com
Строковые функции / StringFind - Документация по MQL5
 
IgorM:
Ich unterstütze, ich brauche ein Beispiel, wie man einen einfachen TS programmiert, zumindest den Handel auf Kreuzungen von langsamen und schnellen MAs


Khe... Zunächst sollten Sie den Artikel vollständig lesen.

 
marketeer:
...um ein visueller Designer von Strategien zu sein.....

Das ist eine gute Idee, das würde ein Problem beseitigen... aber ein kleineres, man müsste immer noch über die Strategie nachdenken, sie analysieren, sie in Phasen unterteilen.

 
komposter:

Ähem...
Es sieht aus wie ein Artikel "von einem Programmierer für Programmierer". Es ist nur nicht klar, wer (außer dem Autor) ihn benutzen wird. "Lerne mql5" vs. "Lerne eIntepretar".

Und die geleistete Arbeit ist einfach kolossal, sie ist bewundernswert.

Nun, es gibt ein wenig, ala "Crazy scientist"..... Als Trostpreis gibt es eine Beschreibung verschiedener Ordnungsstrategien, zwar nicht sehr detailliert, aber mit Bildern.... Irgendjemand, vielleicht, wird zumindest dies nützlich sein...

 

Если постараться изложить весь объем информации представленный в статье как-то иначе, она бы могла поучиться раз в 5-10 объемней...

Sie könnten die Referenztabellen in ein Dock legen und sie einfach an den Artikel anhängen.


Ich habe mir den Artikel noch einmal durchgelesen und mir sogar eine These zurechtgelegt, um zu verstehen, worum es in dem Artikel geht. Wahrscheinlich bin ich dem Verständnis nahe.

Dimitri, korrigiere mich, wenn ich falsch liege.


Die Aufgabe des Experten wird es also sein, die Staaten zu überprüfen. Und zwar alle. Punkt für Punkt.
Und wenn einer der Zustände im Moment relevant ist, dann tun wir, was das Makro für diesen Zustand vorschreibt.
Die Aufgabe besteht nicht darin, Widersprüche zu erzeugen - mehrere Makros denselben Zustand behandeln zu lassen oder Konflikte zwischen zwei Makros zu vermeiden (z. B. eines schließt sich und das zweite öffnet sich sofort, und es kommt zu einem "Kampf")

Das heißt, die Aufgabe des Experten besteht darin, ständig in einer Schleife zu laufen und ALLE angegebenen Makros zu überprüfen (was wir in die Datei geschrieben haben oder etwas anderes) und zu tun, was sie vorschreiben, wenn sie ihre Bedingung erfüllen.


Nehmen wir zum Beispiel an, wir haben eine einfache Strategie (sogar eine Indikatorstrategie).
Wir müssen eine Order eröffnen, wenn der MA kreuzt. Dann geben wir sie aus. Und sie bei einem bestimmten Präfix zwangsweise schließen.

Was ein Programmierer in diesem Fall tut.

Er schreibt DREI Funktionen (wie Makros in Ihrem Fall)
- die Funktion, den Indikator zu überprüfen und eine Order zu öffnen, wenn der Indikator das OK gegeben hat und es keine Pose gibt.
- die Funktion des Schleppens, wenn es eine Pose gibt
- die Funktion des Schließens, wenn es eine Order gibt und es einen Gewinn gibt

Die Reihenfolge des Aufrufs dieser Funktionen kann beliebig sein. Es genügt, sie auf die Prüfung in OnTick zu setzen, zum Beispiel

OnTick()
{
OpenOrder()
TralPos()
CloseProfit()
}

Das heißt, die Funktionen sind von sich aus unabhängig.
Das bedeutet, dass TralPos von sich aus unabhängig ist und das Vorhandensein der beiden anderen Funktionen seine Arbeit in keiner Weise beeinträchtigt. Alle notwendigen Prüfungen werden in ihr durchgeführt (Suche nach einer Pose, Änderung eines Stopps usw.)
Ebenso ist CloseProfit unabhängig.


Sie haben also mehrere Dutzend solcher Funktionen geschrieben, die unabhängig sind und atomare Operationen des Algorithmus ausführen.
Und Sie haben eine Möglichkeit geschaffen, sie über eine Testdatei mit Parametern einzustellen, so dass Sie die Parameter der Funktionen (und damit des Expert Advisors) ändern können, ohne ihn neu zu kompilieren.



like this?

 
sergeev:

Es wäre möglich, die Referenztabellen in ein Dokument zu packen und sie einfach an den Artikel anzuhängen.

Es ist eine Frage des Geschmacks, aber wenn sie im Artikel stehen, gehen sie nicht verloren.


Ich habe den Artikel noch einmal gelesen und mir sogar eine These zurechtgelegt, um zu verstehen, worum es in dem Artikel geht, und ich bin wahrscheinlich nahe dran.

Dimitri, korrigiere mich, wenn ich falsch liege.


Die Aufgabe des Experten wird also sein, die Staaten zu überprüfen. Und zwar alle. Punkt für Punkt.

Ja. Bei jedem Tick werden alle Phasen auf Relevanz geprüft.


Und wenn einer der Zustände in diesem Moment relevant ist, dann tun wir das, was das Makro für diesen Zustand vorschreibt.

Ja. Aber es gibt einige Nuancen. Wenn eine Marktaktion durchgeführt wird, muss es eine sein und sie muss an erster Stelle stehen. Wenn eine Pending Order gesetzt wird, prüft der Expert Advisor ihre Existenz, bevor er sie setzt.

Die Aufgabe besteht darin, keine Widersprüche zu erzeugen - mehrere Makros sollten denselben Zustand verarbeiten, oder zwei Makros sollten nicht miteinander in Konflikt geraten (z. B. wenn eines schließt und das zweite sofort öffnet, kommt es zu einem "Kampf").

Es sollte keinen Konflikt geben. Es kann jedoch mehrere Makros für dieselbe Phase geben, wenn dies zweckmäßiger ist. Wenn zum Beispiel eine Phase das Vorhandensein einer Marktposition ist, kann auf der einen Seite eine Limit-Order und auf der anderen Seite eine Stop-Order stehen, oder Sie können sowohl eine Stop- als auch eine Limit-Order in eine Zeile schreiben.

Das heißt, die Aufgabe des Expert Advisors ist es, ständig die Schleife zu durchlaufen und
ALLE angegebenen Makros (die wir in die Datei oder etwas anderes geschrieben haben) zu überprüfen und zu tun, was sie vorschreiben, wenn ihre Bedingung erfüllt ist.

Ja.


Nehmen wir zum Beispiel an, wir haben eine einfache Strategie (sogar eine Indikatorstrategie).
Wir müssen eine Order eröffnen, wenn der MA kreuzt. Dann geben wir sie aus. Und sie dann zwangsweise zu einem bestimmten Zeitpunkt schließen.

Ja.

Was ein Programmierer in diesem Fall tut.

Er schreibt DREI Funktionen (wie Makros in Ihrem Fall)
- die Funktion, den Indikator zu überprüfen und eine Order zu öffnen, wenn der Indikator ein Signal gegeben hat und es keine Positionen gibt.

Dies ist eine Phase: Es gibt ein Indikatorsignal, aber keine Position. In diesem Fall besteht die Aktion darin, eine Position zu eröffnen.

- Funktion des Schleppnetzes, wenn eine Position vorhanden ist.

Dies kann als separate Phase erfasst werden. Phasenidentifikation - Vorhandensein einer Marktposition. Die entsprechende Aktion ist der Aufruf der Schleppnetzfunktion.


- Schließungsfunktion, wenn ein Auftrag vorliegt und der Auftrag einen Gewinn aufweist.

Dies ist die dritte Phase. Es gibt eine Position und ihr Gewinn ist größer als der angegebene Wert. Die Aktion besteht darin, die Position zu schließen.


Die Reihenfolge, in der diese Funktionen aufgerufen werden, kann beliebig sein. Es genügt, sie zum Beispiel auf die Prüfung in OnTick zu setzen.

Und in der Datei mit dem Metaprogramm können Sie die Zeilen in einer anderen Reihenfolge platzieren.



OnTick()
{
OpenOrder()
TralPos()
CloseProfit()
}

Das heißt, die Funktionen selbst sind unabhängig.

Es stellt sich heraus, dass auch die Zeilen in der Datei mit dem Metaprogramm unabhängig sind.


Das bedeutet, dass TralPos von sich aus unabhängig ist und das Vorhandensein der beiden anderen Funktionen seine Arbeit nicht beeinträchtigt. Alle notwendigen Überprüfungen werden in ihr durchgeführt (Stellensuche, Haltestellenänderung usw.).

Eine Zeile des Metaprogramms ist ebenfalls autark.


In ähnlicher Weise ist CloseProfit autark.


Sie haben also mehrere Dutzend solcher Funktionen geschrieben, die unabhängig sind und atomare Operationen des Algorithmus ausführen.
Und Sie haben eine Möglichkeit geschaffen, sie über eine Testdatei mit Parametern zu setzen, so dass Sie die Parameter der Funktionen (und damit den Expert Advisor) ändern können, ohne ihn neu zu kompilieren.

Diese Funktionen können miteinander kombiniert werden. Phase kann nicht nur durch das Vorhandensein einer Marktposition bestimmt werden... sondern viele Varianten, Befehle in der Tabelle der Zugriffsbefehle.

so?

Eine Sache, die zu Missverständnissen führen kann. Ich habe in dem Artikel irgendwie den Unterschied zwischen Aktion und Zustand verwischt. Wenn bei der Identifizierung einer Phase eine Marktaktion durchgeführt werden soll, sollte sie als Aktion bezeichnet werden. Und wenn es notwendig ist, schwebende Aufträge zu setzen, wird es eher als Zustandsbeschreibung bezeichnet. Eine Phase wird hauptsächlich durch einen Kommentar in einer Marktposition identifiziert, und diese Phase entspricht entweder einer Aktion (Eröffnung/Schließung einer Marktposition) oder einem Zustand (Vorhandensein einiger schwebender Aufträge). Handelt es sich um eine Marktaktion, so wird davon ausgegangen, dass nach ihrer Ausführung ein Übergang zu einer anderen Phase erfolgt. Es ist wichtig, Aufträge korrekt zu markieren. In einer Phase kann es jedoch sowohl eine Marktaktion als auch die Einstellung von Aufträgen geben. Wenn die Marktaktion nicht erfolgreich ist, wird alles, was ihr folgt, nicht ausgeführt. Wenn sie erfolgreich ist, wird sie ausgeführt, wenn Sie versuchen, so viel wie möglich auf einen Tick zu tun. Es ist zu beachten, dass Aufträge nicht gesetzt werden können, aber die Marktaktion abgeschlossen ist, d.h. es gibt einen Übergang zu einer anderen Phase.