Tuesday, 18 July 2017

Trading Signale Generator


MetaTrader 5 - Beispiele Trading Signal Generator basierend auf einem benutzerdefinierten Indikator Einführung In diesem Artikel werde ich Ihnen sagen, wie Sie einen Trading-Signal-Generator auf einem benutzerdefinierten Indikator zu erstellen. Sie werden sehen, wie Sie Ihr eigenes Handelsmodell für ein benutzerdefiniertes Kennzeichen schreiben können. Ich werde auch erklären, der Zweck des Modells 0 und warum ISPATTERNUSAGE (0) - Typ Strukturen in der Trading-Signal-Modul verwendet werden. Der Artikel wird zwei Arten von Code: den Code, den wir zu ändern und den Code, den wir bereits geändert haben. Der modifizierte Code wird wie folgt hervorgehoben: Der modifizierte Code ist der Code, der kopiert und in den Handelssignalgenerator eingefügt werden soll. Ich hoffe, Sie verstehen den Code besser durch den Einsatz von Hervorhebung. 1. Kundenspezifische Anzeige Ich bin sicher, dass es einen Indikator geben muss, der nicht in der Standardlieferung enthalten ist, die Sie für eine lange Zeit verwenden möchten. Und das ist der Indikator, auf dem Sie ein Handelssignal-Modul aufbauen möchten. Ich werde die MACD-Anzeige aus der Standardauslieferung als solches Indikator verwenden. Die Position des Indikators ist wie folgt. MQL5IndicatorsExamplesMACD. mq5. Jeder Indikator kann ein oder mehrere Marktmodelle beschreiben. Ein Marktmodell ist eine bestimmte Kombination aus Indikatorwert und Preiswert. Die für die MACD-Anzeige zur Verfügung stehenden Modelle sind Umkehrung, Überkreuzung der Haupt - und der Signalleitung, Überkreuzung des Nullpegels, Divergenz und doppelte Divergenz. 1.1 Neues Anzeigemodell. Wir gehen davon aus, dass wir mit den gegebenen Marktmodellen für den Indikator nicht zufrieden sind und unser eigenes Indikatormodell einführen wollen. Die neue Indikatormodellbeschreibung: Wenn der MACD-Indikator unter der Nulllinie liegt und seine Werte steigen, können wir weiteres Wachstum erwarten und eine Long-Position eröffnen: Abbildung 1: Modell eines prospektiven Indikatorwachstums, wenn der MACD-Indikator über der Nulllinie liegt Deren Werte abnehmen, können wir mit einer weiteren Abnahme rechnen und eine Short-Position eröffnen: Abbildung 2: Modell des prospektiven Indikatorabfalls So haben wir uns für den Custom Indicator entschieden und kommen mit dem neuen Handelsmodell für den Indikator und dessen Beschreibung auf. Lassen Sie uns mit dem Schreiben des Codes. 2. Schreiben des Trading-Signalgenerators auf Basis unseres Custom Indicators Unser Generator ist der Nachkomme der CExpertSignal-Basisklasse. Die CExpertSignal-Basisklasse ist eine Klasse zum Erstellen von Handelssignalgeneratoren. Die CExpertSignal-Klasse enthält eine Reihe von öffentlichen (d. h. extern zugänglichen) Methoden, die es einem Expert Advisor ermöglichen, die Anzeige des Handelssignalgenerators in Bezug auf die Richtung des Markteintritts zu sehen. Da wir an unserem eigenen Handelssignalgenerator arbeiten, sollte er aus der Klasse CExpertSignal geerbt werden, wobei die relevanten virtuellen Methoden neu definiert werden (mit dem entsprechenden Code gefüllt). 3. Erstellen der Klasse des Handelssignalgenerators Der Handelssignalgenerator sollte sich standardmäßig befinden. MQL5IncludeExpertSignal-Ordner. Nicht zu überladen. Signalordner der Standardbibliothek mit zu vielen Informationen, können Sie einen neuen Ordner unter der. Expert-Ordner und nennen es MySignals. Abbildung 3. Erstellen des neuen MySignals-Ordners Als nächstes erstellen wir eine Include-Datei mit dem MQL5-Assistenten. Wählen Sie in MetaEditor im Menü Datei die Option Neu aus, und klicken Sie dann auf Include File (.mqh). Abbildung 4. MQL5-Assistent. Erstellen einer Include-Datei Der Name der Klasse des Signalgenerators ist MySignal. Es befindet sich unter IncludeExpertMySignalsMySignal. Geben Sie Folgendes an: Abbildung 5. MQL5-Assistent. Speicherort der Include-Datei Nach dem Klicken auf Finish erzeugt der MQL5-Assistent eine leere Vorlage. Von diesem Moment an werden wir alles manuell tun und Daten kopieren. Ich möchte Sie darauf aufmerksam machen, dass intern alle Signale der Standardbibliothek nahezu identisch sind. Sie unterscheiden sich nur in Algorithmen, die verwendet werden, um Handelsmodelle zu bestimmen. Daher können Sie jede Datei aus dem IncludeExpertSignal-Ordner, kopieren Sie den Inhalt und fügen Sie ihn in Ihre Vorlage. Sie können dann mit der Bearbeitung der resultierenden Datei des Trading-Signalgenerators beginnen. 4. Beschreibung der Klasse des Trading-Signal-Generators Als Vorlage habe ich die IncludeExpertSignalSignalEnvelopes. mqh-Datei, von der ich alles kopiert, aber die Header: und fügte sie alle in unsere fast leere MySignal. mqh-Vorlage. Dies ist, was ich bekam: Hier geben wir einen Befehl an den Präprozessor, die CExpertSignal-Basisklasse für die Schaffung von Trading-Signal-Generatoren in unserer Vorlage enthalten. Wir bearbeiten die Vorlage weiter. Um sicherzustellen, dass unsere Vorlage später im MQL5-Assistenten sichtbar ist, müssen wir die Beschreibung unserer Klasse ändern: Also, sehen wir mal. Die Zeile zeigt den Namen unserer Signalklasse an, unter der sie im MQL5 Wizard angezeigt wird. Wir werden diesen Namen so ändern: gibt den Namen für die Beschreibung der Variablen unserer Handelssignalklasse an. Diese Beschreibung wird vom MQL5 Wizard verwendet. Diese Zeile kann wie folgt geändert werden: Diesen Parameter geben wir denselben Namen: Die folgende Zeile setzt den Klassennamen: Läßt diesen Parameter umbenennen: Den nächsten Parameter wie folgt belassen: Die folgende Parametergruppe ist verantwortlich für die Beschreibung der Parameter des Indikators, der dem Handelssignalgenerator zugrunde liegt. Wie ich bereits erwähnt habe, werde ich verwenden. MQL5IndicatorsExamplesMACD. mq5 als benutzerdefinierte Anzeige. Es hat folgende Parameter: 4.1 Parameter Beschreibung Block Bitte beachten Sie, dass die oben genannten Parameter nur für MACD. mq5 gelten. Ihre benutzerdefinierte Anzeige hat möglicherweise völlig andere Parameter. Dabei geht es vor allem darum, die Indikatorparameter mit ihren Beschreibungen in der Handelssignalklasse abzustimmen. Der Parameterbeschreibungsblock in der Handelssignalklasse für das betreffende benutzerdefinierte Kennzeichen MACD. mq5. Ist wie folgt: Schauen Sie sich an, wie die Parameter im Indikator nun mit den Beschreibungen im Klassenbeschreibungsblock übereinstimmen. Nach allen Modifikationen wird der Beschreibungsblock unserer Klasse folgendermaßen aussehen: Bei der Programmierung wird es als bewährte Methode angesehen, Kommentare zu den Code-Code zu geben, wodurch es leichter wird, den Code zu verstehen, wenn er zurückkehrt, nachdem er einige Zeit verstrichen ist . So werden wir den folgenden Block modifizieren: um die Beschreibung unserer Klasse anzupassen: Um Verwechslungen zu vermeiden, müssen wir alle CSignalEnvelopes-Werte durch CSignalMyCustInd ersetzen. Abbildung 6. Ersetzen von CSignalEnvelopes durch CSignalMyCustInd Hier nun einige theoretische Aspekte. 5. Die CiCustom-Klasse Wir benötigen die CiCustom-Klasse, um weiter an dem Code der Klasse der Handelsindikatoren des benutzerdefinierten Indikators zu arbeiten. Die CiCustom-Klasse wurde speziell für die Arbeit mit benutzerdefinierten Indikatoren entwickelt. Die CiCustom-Klasse bietet die Erstellung, Einrichtung und den Zugriff auf benutzerdefinierte Indikatordaten. 6. Die Klassifizierungsklasse. CIndikatoren ist die Klasse für das Sammeln von Instanzen von Zeitreihen und technischen Indikatorklassen. Die CIndicators-Klasse bietet die Erstellung, Speicherung und Verwaltung (Data Synchronisation, Handhabung und Speicherverwaltung) von Instanzen der technischen Indikatorklassen. Wir interessieren uns besonders für die Klasse CIndicators aufgrund der Create-Methode. Diese Methode erzeugt ein Kennzeichen für einen angegebenen Typ mit angegebenen Parametern. 7. Fortsetzen des Schreibens unserer Handelssignalklasse Der nächste Codeblock, den wir ändern (Zeile 28-42), ist wie folgt: 8. Erstellung der Custom Indicator im Trading Signal Generator Schauen Sie sich den vorgenannten Codeblock an. Die Zeile deklariert ein Objekt - die CiEnvelopes-Klasse. CiEnvelopes ist die Klasse für die Arbeit mit dem technischen Indikator aus der Standardbibliothek. Die CiEnvelopes-Klasse wurde basierend auf dem technischen Indikator aus der Standardbibliothek erstellt. Allerdings schreiben wir den Code des Generators basierend auf unserem benutzerdefinierten Indikator. Daher gibt es keine fertige Klasse für unser oder Ihr benutzerdefiniertes Kennzeichen in der Standardbibliothek. Was wir tun können, ist die CiCustom-Klasse. Lassen Sie uns den Indikator als CiCustom-Klasse deklarieren: 8.1 Vier Variablen Erinnern Sie sich an den Parameterbeschreibungsblock in der Klasse Es gab drei Parameter in dieser Beschreibung. Im geschützten Bereich unserer Generatorklasse werden wir nun vier Variablen für die Übergabe der Werte an unsere vier Parameter deklarieren: Der folgende Codeblock: Dieser Code deklariert Variablen, die den Handelsmodellen unseres Handelssignalgenerators Gewicht geben. Wir können den Block der Gewichte mit dem folgenden Code ersetzen: 9. Modell 0 Wie Sie sich erinnern, wurde am Anfang des Artikels beschlossen, nur ein neues Modell zu beschreiben, das von unserem Handelssignalgenerator erzeugt wird. Im obigen Code habe ich jedoch zwei Marktmodelle (Modell 0 und Modell 1) angegeben. Hier ist das Modell 0 ein wichtiges Hilfsmodell. Sie ist beim Handel mit ausstehenden Aufträgen erforderlich. Bei der Anwendung stellt das Modell 0 sicher, dass sich ausstehende Bestellungen zusammen mit dem Preis bewegen. Werfen wir einen Blick auf unsere Trading-Signal-Generator und die folgenden Bedingungen: die MACD Custom-Indikator unter der Nulllinie ist, und seine Werte steigen, handeln wir mit ausstehenden Bestellungen von 50 Punkten aus der Bar Eröffnungskurs (vierstelligen Preiswert ). Diese Bedingungen beschreiben unser Handelsmodell perfekt. Hier ist, wie die Dinge werden in Bewegung: Unsere Handelsmodell Bedingungen werden auf das Erscheinen der Bar Nr. 1. Was wir haben: MACD ist unter der Nulllinie, aber es gewinnt an Dynamik. Dies entspricht dem Kaufsignal. Daher platzieren wir einen ausstehenden Kauf Stop-Auftrag: Nach dem Erscheinen der nächsten Takt-Nr. 2 zeigt die Bedingungsprüfung, dass MACD unter Null liegt und fällt. Nach unserem Handelsmodell gibt es derzeit keine Bedingungen für den Kauf oder Verkauf. Beachten Sie jedoch, dass nach der CExpertSignal-Klassenlogik, da es keine Bedingungen für den Kauf oder Verkauf gibt, alle ausstehenden Aufträge gelöscht werden sollten. In diesem Fall, wenn der Preis steigt plötzlich und dramatisch, werden wir die Gelegenheit verpassen, den Markt lange zu unserem Vorteil, da es keine ausstehende Bestellung geben wird. Hier scheint das Hilfsmodell 0 sehr nützlich zu sein. Das Hilfsmodell 0 gilt, sofern: das MACD-Anzeigefeld unterhalb der Nulllinie liegt. So können wir einen ausstehenden Kauf Stop-Auftrag platzieren. Da wir 50 Punkte vom Bar-Eröffnungskurs bestellen, verschieben wir in der Tat einfach den anstehenden Buy-Stop-Auftrag entsprechend der Preisbewegung: So erhalten wir durch die Verwendung des Hilfsmodells 0 die Möglichkeit, eine noch ausstehende Bestellung zu verschieben Die Preisbewegung. 10. Weitere Modifikationen des Template-Codes Der nächste Code-Block, der geändert werden soll, lautet wie folgt: In diesem Block deklarieren wir Methoden zum Einstellen von einstellbaren Parametern, Methoden zur Anpassung von Gewichten von Handelsmodellen, Methode zur Überprüfung von Einstellungen, Methoden zur Indikatorinitialisierung und Methoden Ob die Marktmodelle generiert werden. Unter Berücksichtigung der Tatsache, dass wir vier Variablen in einstellbaren Parametern deklariert haben, wird der Block der Methoden zum Einstellen der Parameter wie folgt sein: Das nächste Codefragment bleibt unverändert: Der nächste zu ändernde Codeblock ist wie folgt: Dieser Block wird stark sein geändert. Bitte beachten Sie, dass ich die GetData-Methode der CIndicator-Klasse verwende. Die Namen der aufgerufenen Methoden werden direkt im Code bereitgestellt: Der nächste Codeblock ist der Konstruktor. Im Konstruktor ändern wir die Namen der Variablen. Darüber hinaus werden wir nur zwei Serien verwenden: USESERIESHIGHUSESERIESLOW Wir können die ValidationSettings-Methode unserer Klasse ändern. Im Prüffaktor prüfen wir die Hauptbedingung für das jeweilige Customindikator: mperiodfastgtmperiodslow Der nächste Block befasst sich mit der Erstellung von Indikatoren: Wird auf unseren Customindikator angewendet: Der folgende Block ist der Indikatorinitialisierungsblock: Zuerst fügen wir ein Objekt zum Sammlung. Anschließend setzen wir die Parameter unseres Indikators und erstellen mit der Methode Create der CIndicators-Klasse das Custom-Kennzeichen: Der nächste Block überprüft die Einkaufsbedingungen: Nach unserem Modell 0-Implementierung. Zwei Modelle werden geprüft: Der folgende Block überprüft die Verkaufsbedingungen: Nach unserem Modell 0 Implementierung. Zwei Modelle werden überprüft: Fazit Ich hoffe, dieser Artikel hat Ihnen geholfen zu verstehen, wie Sie einen Handelssignalgenerator basierend auf Ihrem benutzerdefinierten Indikator erstellen können. MetaTrader 5 - Trading Systems MQL5 Wizard: Erstellen eines Moduls für Handelssignale Einführung MetaTrader 5 bietet eine Leistungsstarkes Werkzeug für die schnelle Überprüfung von Trading-Ideen. Dies ist der Generator der Handelsstrategien des MQL5 Wizard. Die Verwendung des MQL5-Assistenten zur automatischen Erstellung von Expert Advisor-Codes ist im Artikel MQL5 Wizard: Erstellen von Expertenberatern ohne Programmierung beschrieben. Die Offenheit des Codegenerierungssystems ermöglicht es Ihnen, Ihre eigenen Klassen von Handelssignalen, Geldmanagementsystemen und nachlaufenden Modulen den Standard-Modulen hinzuzufügen. Dieser Artikel beschreibt die Prinzipien des Schreibens von Modulen von Handelssignalen, um sie beim Erstellen von Expertenberatern mit dem MQL5-Assistenten zu verwenden. Der Expert Advisor wurde mit dem MQL5 Wizard erstellt. Basiert auf vier Säulen - vier Basisklassen: Die CExpert-Klasse (oder ihre Unterklasse) ist der Hauptmotor eines Handelsroboters. Eine Instanz von CExpert enthält eine Kopie jeder Klasse: CExpertSignal. CExpertMoney und CExpertTrailing (oder deren Unterklassen): CExpertSignal ist die Basis für den Handelssignalgenerator. Eine Instanz der Klasse CExpertSignal, die in CExpert enthalten ist. Bietet eine Expert Advisor mit Informationen über die Möglichkeit der Eingabe der Markt, Ebenen der Einreise und Platzierung von Schutzaufträgen, basierend auf eingebauten Algorithmen. Die endgültige Entscheidung über die Durchführung von Handelsgeschäften wird von der EA getroffen. CExpertMoney ist die Basis für das Geld - und Risikomanagementsystem. Eine Instanz der von CExpertMoney abgeleiteten Klasse berechnet die Volumina für die Eröffnung von Positionen und die Platzierung ausstehender Aufträge. Die endgültige Entscheidung über das Volumen erfolgt durch die EA. CExpertTrailing - ist die Basis des Moduls der offenen Positionen zu unterstützen. Eine Instanz der CExpertTrailing-abgeleiteten Klasse informiert eine EA über die Notwendigkeit, Schutzaufträge einer Position zu modifizieren. Die endgültige Entscheidung über die Änderung der Bestellung erfolgt durch die EA. Darüber hinaus sind die Mitglieder der CExpert-Klasse Instanzen der folgenden Klassen: CExpertTrade (für den Handel) CIndikatoren (zur Steuerung von Indikatoren und Zeitreihen, die an der Arbeit der EA beteiligt sind). CSymbolInfo (für das Erhalten von Informationen über das Instrument) CAccountInfo (für das Erhalten von Informationen über den Zustand des Handelskontos) CPositionInfo (für das Erhalten von Informationen über Positionen) COrderInfo (für das Erhalten von Informationen über ausstehende Aufträge) Unter Experte verstehen wir eine Instanz von CExpert oder Seine Unterklasse. Weitere Details von CExpert und die Arbeit mit ihm wird in einem separaten Artikel beschrieben werden. 1. Basisklasse CExpertSignal Das CExpertSignal ist die Basis für den Handelssignalgenerator. Für die Kommunikation mit der Außenwelt verfügt CExpertSignal über eine Reihe von öffentlichen virtuellen Methoden: Beschreibung der Methoden 1.1. Initialisierungsmethoden: Die Init () - Methode wird automatisch nach dem Hinzufügen einer Klasseninstanz zum Experten aufgerufen. Eine Methodenüberschreibung ist nicht erforderlich. Die ValidationSettings () - Methode wird direkt vom Experten aufgerufen, nachdem alle Parameter gesetzt sind. Sie müssen die Methode außer Kraft setzen, wenn es Setup-Parameter gibt. Die überschriebene Methode muss true zurückgeben, wenn alle Optionen gültig sind (verwendbar). Wenn mindestens einer der Parameter falsch ist, muss er falsch zurückgeben (weitere Arbeit ist unmöglich). Die Basisklasse CExpertSignal hat keine einstellbaren Parameter, daher gibt die Basisklassenmethode immer true zurück, ohne irgendwelche Prüfungen durchzuführen. Die InitIndicators () - Methode implementiert die Erstellung und Initialisierung aller notwendigen Indikatoren und Zeitvorgaben. Es wird vom Experten aufgerufen, nachdem alle Parameter gesetzt sind und deren Richtigkeit erfolgreich überprüft wird. Das Verfahren sollte überschrieben werden, wenn der Handelssignalgenerator mindestens ein Kennzeichen oder Zeitreihen verwendet. Indikatoren andor timeseries sollten durch die entsprechenden Klassen der Standardbibliothek verwendet werden. Die Indikatoren eines Sachverständigen (Zeiger, auf die als Parameter übergeben wird), sollten Zeiger aller Indikatoren und oder Zeitpunkte hinzufügen. Die überschriebene Methode muss true zurückgeben, wenn alle Manipulationen mit den Indikatoren andor timeseries erfolgreich waren (sie sind für den Gebrauch geeignet). Wenn mindestens eine Operation mit den Indikatoren andor timeseries fehlgeschlagen ist, muss die Methode false zurückgeben (weitere Arbeit ist unmöglich). Die Basisklasse CExpertSignal verwendet keine Indikatoren oder Zeitvorgaben, daher gibt die Basisklassenmethode immer true zurück, ohne irgendeine Aktion auszuführen. 1.2. Methoden zur Überprüfung des Signals der Positionsöffnung: Die CheckOpenLong () - Methode erzeugt ein Signal des Öffnens einer Langposition, wobei das Einstiegsniveau und die Ebenen der Platzierung von Schutzaufträgen definiert sind. Es wird von einem Experten aufgerufen, um festzustellen, ob es notwendig ist, eine lange Position zu öffnen. Das Verfahren muss überschrieben werden, wenn erwartet wird, dass ein Signal einer Langpositionsöffnung erzeugt wird. Das Verfahren sollte den Algorithmus zum Überprüfen des Zustandes einer Langpositionsöffnung implementieren. Wenn die Bedingung erfüllt ist, müssen den Variablen price, sl, tp und expiration (Referenzen, die als Parameter übergeben werden) entsprechende Werte zugewiesen werden und die Methode true zurückgeben. Wenn die Bedingung nicht erfüllt ist, muss die Methode false zurückgegeben werden. Die Basisklasse CExpertSignal hat keinen eingebauten Algorithmus zur Erzeugung eines Signals einer Langpositionsöffnung, daher gibt die Basisklassenmethode immer false zurück. Die CheckOpenShort () - Methode erzeugt ein Signal des Öffnens einer Short-Position, die das Einstiegsniveau und die Ebenen der Platzierung von Schutzaufträgen definiert. Es wird von einem Experten aufgerufen, um festzustellen, ob es notwendig ist, eine Short-Position zu öffnen. Das Verfahren muss überschrieben werden, wenn erwartet wird, dass ein Signal mit einer Kurzpositionsöffnung erzeugt wird. Die Methode muss den Algorithmus zur Überprüfung der Bedingung implementieren, um eine Short-Position zu öffnen. Wenn die Bedingung erfüllt ist, müssen den Variablen price, sl, tp und expiration (Referenzen, die als Parameter übergeben werden) entsprechende Werte zugewiesen werden und die Methode true zurückgeben. Wenn die Bedingung nicht erfüllt ist, muss die Methode false zurückgegeben werden. Die Basisklasse CExpertSignal hat keinen eingebauten Algorithmus zur Erzeugung eines Signals einer Positionsänderung, sodass die Methode der Basisklasse immer false zurückgibt. 1.3. Methoden der Überprüfung des Signals der Positionsschließung: Die CheckCloseLong () - Methode erzeugt ein Signal des Schließens einer langen Position, die die Ausgangsebene definiert. Es wird von einem Experten aufgerufen, um festzustellen, ob es notwendig ist, eine lange Position zu schließen. Das Verfahren muss überschrieben werden, wenn erwartet wird, dass ein Signal eines Langpositionsabschlusses erzeugt wird. Die Methode muss den Algorithmus zur Überprüfung der Bedingung implementieren, um die lange Position zu schließen. Wenn die Bedingung erfüllt ist, muss dem Variablenpreis (der Referenz, der als Parameter übergeben wird) der entsprechende Wert zugewiesen werden und die Methode true zurückgeben. Wenn die Bedingung nicht erfüllt ist, muss die Methode false zurückgegeben werden. Die Basisklasse CExpertSignal hat keinen eingebauten Algorithmus für die Erzeugung eines Signals eines Longpositionsschließens, so dass die Basisklassenmethode immer false zurückgibt. Die CheckCloseShort () - Methode erzeugt ein Signal zum Schließen einer Short-Position, das die Exit-Ebene definiert. Es wird von einem Experten aufgerufen, um festzustellen, ob es notwendig ist, eine Short-Position zu schließen. Das Verfahren muss außer Kraft gesetzt werden, wenn erwartet wird, dass ein Signal mit Kurzschließung erzeugt wird. Die Methode muss den Algorithmus zur Überprüfung der Bedingung implementieren, um eine kurze Position zu schließen. Wenn die Bedingung erfüllt ist, muss dem Variablenpreis (der Referenz, der als Parameter übergeben wird) der entsprechende Wert zugewiesen werden und die Methode true zurückgeben. Wenn die Bedingung nicht erfüllt ist, muss die Methode false zurückgegeben werden. Die Basisklasse CExpertSignal hat keinen eingebauten Algorithmus für die Erzeugung eines Signals einer Short-Positionsschließung, daher gibt die Basisklassenmethode immer false zurück. 1.4. Methoden zur Überprüfung des Signals der Positionsumkehr: Das CheckReverseLong-Verfahren erzeugt ein Signal der Umkehrung einer Longposition, das die Stornierungsstufe und die Stufen der Platzierung der Schutzaufträge definiert. Es wird von einem Experten aufgerufen, um festzustellen, ob es notwendig ist, eine Longposition umzukehren. Das Verfahren muss überschrieben werden, wenn erwartet wird, dass ein Signal einer Langpositionsumkehr erzeugt wird. Die Methode muss den Algorithmus zur Überprüfung des Zustands der Longpositionsumkehr implementieren. Wenn die Bedingung erfüllt ist, müssen den Variablen price, sl, tp und expiration (Referenzen, die als Parameter übergeben werden) entsprechende Werte zugewiesen werden und die Methode true zurückgeben. Wenn die Bedingung nicht erfüllt ist, muss die Methode false zurückgegeben werden. In der CExpertSignal-Basisklasse ist der folgende Algorithmus zur Erzeugung eines Long-Position-Umkehrsignals implementiert: Prüfung eines Signals, um eine Long-Position zu schließen. Prüfung auf ein Signal, um eine kurze Position zu öffnen. Wenn beide Signale aktiv sind (die Bedingungen erfüllt sind) und die geschlossenen und offenen Preise übereinstimmen, werden die Variablen price, sl, tp und expiration (Referenzen, die als Parameter übergeben werden) die entsprechenden Werte zugewiesen und die Methode true zurückgegeben. Wenn die Bedingung nicht erfüllt ist, gibt die Methode false zurück. Die CheckReverseShort-Methode generiert ein Signal der Umkehrung einer Short-Position, wobei die Umkehrstufe und die Ebenen der Platzierung der Schutzanordnungen definiert sind. Es wird von einem Experten aufgerufen, um festzustellen, ob es notwendig ist, eine Short-Position umzukehren. Das Verfahren muss überschrieben werden, wenn erwartet wird, dass ein Signal einer Langpositionsumkehr gemäß dem Algorithmus erzeugt wird, der sich von dem unterscheidet, der in der Basisklasse implementiert ist. Die Methode muss den Algorithmus zur Überprüfung des Zustands der Kurzpositionsumkehr implementieren. Wenn die Bedingung erfüllt ist, müssen den Variablen price, sl, tp und expiration (Referenzen, die als Parameter übergeben werden) entsprechende Werte zugewiesen werden und die Methode true zurückgeben. Wenn die Bedingung nicht erfüllt ist, muss die Methode false zurückgegeben werden. In der CExpertSignal-Basisklasse ist der folgende Algorithmus zur Erzeugung eines Short-Positionsumkehrsignals implementiert: Prüfung eines Signals, um eine Short-Position zu schließen. Prüfung auf ein Signal, um eine lange Position zu öffnen. Wenn beide Signale aktiv sind (die Bedingungen erfüllt sind) und die geschlossenen und offenen Preise übereinstimmen, werden die Variablen price, sl, tp und expiration (Referenzen, die als Parameter übergeben werden) die entsprechenden Werte zugewiesen und die Methode true zurückgegeben. Wenn die Bedingung nicht erfüllt ist, gibt die Methode false zurück. 1.5. Methoden zur Überprüfung des Signals einer anstehenden Auftragsänderung: Die CheckTrailingOrderLong () - Methode generiert das Signal der Änderung einer ausstehenden Bestellposition und definiert einen neuen Auftragspreis. Es wird von einem Experten aufgerufen, um festzustellen, ob es notwendig ist, einen ausstehenden Kaufauftrag zu ändern. Die Methode muss überschrieben werden, wenn erwartet wird, dass ein Änderungssignal einer anstehenden Bestellanforderung generiert wird. Die Methode muss den Algorithmus für die Überprüfung der Bedingung der Änderung einer anhängigen Bestellung zu implementieren. Wenn die Bedingung erfüllt ist, muss dem Variablenpreis (der Referenz, der als Parameter übergeben wird) der entsprechende Wert zugewiesen werden und die Methode true zurückgeben. Wenn die Bedingung nicht erfüllt ist, muss die Methode false zurückgegeben werden. Die Basisklasse CExpertSignal verfügt über keinen eingebauten Algorithmus zur Erzeugung eines Modifizierungssignals für eine anstehende Bestellung. Daher gibt die Basisklassenmethode immer false zurück. Die CheckTrailingOrderShort () - Methode generiert das Signal der Änderung eines ausstehenden Verkaufsauftrags und definiert einen neuen Auftragspreis. Es wird von einem Experten aufgerufen, um festzustellen, ob es notwendig ist, eine ausstehende Verkaufsauftrag zu ändern. Die Methode muss überschrieben werden, wenn erwartet wird, dass ein Signal zur Änderung einer ausstehenden Verkaufsreihenfolge generiert wird. Die Methode muss den Algorithmus implementieren, um den Zustand der Änderung einer ausstehenden Verkaufsorder zu überprüfen. Wenn die Bedingung erfüllt ist, muss dem Variablenpreis (der Referenz, der als Parameter übergeben wird) der entsprechende Wert zugewiesen werden und die Methode true zurückgeben. Wenn die Bedingung nicht erfüllt ist, muss die Methode false zurückgegeben werden. Die Basisklasse CExpertSignal verfügt über keinen eingebauten Algorithmus zur Erzeugung eines Modifizierungssignals für eine ausstehende Verkaufsreihenfolge. Daher gibt die Basisklassenmethode immer false zurück. 2. Entwickeln Sie Ihren eigenen Generator von Trading-Signalen Nachdem wir die Struktur der CExpertSignal-Basisklasse überprüft haben, können Sie damit beginnen, Ihre eigenen Trading-Signale zu generieren. Wie oben erwähnt, ist die CExpertSignal-Klasse eine Reihe von öffentlichen virtuellen Seilen - Methoden, mit denen der Experte kann die Meinung des Handelssignals Generator über den Markteintritt in die eine oder andere Richtung kennen. Daher ist es unser oberstes Ziel, eine eigene Klasse von Trading-Signalen zu erzeugen, die aus der Klasse CExpertSignal abgeleitet wird und die entsprechenden virtuellen Methoden überschreibt und die erforderlichen Algorithmen implementiert. Unser zweites Problem (das ist nicht weniger wichtig) - um unsere Klasse für den MQL5 Wizard sichtbar zu machen. Aber zuerst Dinge zuerst. 2.1. Erstellen der Klasse des Trading-Signalgenerators Zuerst erstellen wir (z. B. mit demselben MQL5-Wizard) eine Include-Datei mit der mqh-Erweiterung. Wählen Sie im Menü Datei die Option Erstellen (oder drücken Sie die Tastenkombination Strg) und geben Sie die Erstellung einer enthaltenen Datei an: Abbildung 2. Erstellen einer Include-Datei mithilfe des MQL5-Assistenten Es sollte beachtet werden, dass die Datei dann vom MQL5-Assistenten als erkannt wird Ein Signalgenerator, sollte es im Ordner IncludeExpertSignal erstellt werden. Um nicht in Standard-Bibliothek zu trash. Erstellen Sie unseren eigenen Ordner IncludeExpertSignalMySignals, in dem wir die Datei SampleSignal. mqh erstellen und diese Parameter im MQL5-Assistenten angeben: Abbildung 3. Einstellen der Position der Include-Datei Als Ergebnis des MQL5-Assistenten haben wir folgendes Muster: Das Folgende ist nur manuell Arbeit. Entfernen Sie die unnötigen Teile und fügen Sie, was erforderlich ist (enthalten Datei ExpertSignal. mqh der Standardbibliothek und eine Klasse Beschreibung, die jetzt leer ist). Nun ist es notwendig, die Algorithmen zu wählen. Als Grundlage für unsere Trading-Signale Generator, nehmen wir die weit verbreitete Modell Preis kreuzt den gleitenden Durchschnitt. Aber wir machen noch eine Annahme: Nach Überschreiten des gleitenden Durchschnitts bewegt sich der Preis zurück und geht erst dann in die richtige Richtung. Denken Sie dies in unserer Datei. Im Allgemeinen, wenn Sie etwas schreiben, nicht auf die Kommentare knausern. Nach einiger Zeit, das Lesen eines sorgfältig kommentierten Code wird so bequem sein. Nun können wir definieren, welche Daten benötigt werden, um Entscheidungen über die Erzeugung von Handelssignalen zu treffen. In unserem Fall ist dies der offene Preis und der Schlusskurs der vorherigen Bar und der Wert des gleitenden Durchschnitts auf dem gleichen vorherigen Bar. Für den Zugriff auf diese Daten verwenden wir die Standardbibliothekenklassen CiOpen. CiClose und CiMA. Gut diskutieren Indikatoren und Zeiten später. In der Zwischenzeit können wir eine Liste der Einstellungen für unseren Generator definieren. Zuerst müssen wir den gleitenden Durchschnitt einrichten. Diese Parameter umfassen die Periode, die Verschiebung entlang der Zeitachse, die Mittelungsmethode und den Gegenstand der Mittelung. Zweitens müssen wir das Einstiegsniveau und das Niveau der Platzierung von Schutzanordnungen und die Laufzeit eines ausstehenden Auftrags festlegen, da wir mit ausstehenden Aufträgen arbeiten werden. Alle Einstellungen des Generators werden in geschützten Datenelementen der Klasse gespeichert. Der Zugriff auf die Einstellungen erfolgt durch entsprechende öffentliche Methoden. Wir können diese Änderungen in unserer Datei enthalten: Da wir geschützte Datenelemente verwenden, müssen wir einen Klassenkonstruktor hinzufügen. In dem wir diese Daten standardmäßig initialisieren. Um die Parameter zu überprüfen, können Sie die virtuelle Methode ValidationSettings entsprechend der Beschreibung der Basisklasse überschreiben. Beschreibung der Klasse: Implementierung der ValidationSettings () - Methode: Nun, wenn wir den Großteil der Vorbereitungsarbeiten abgeschlossen haben, sprechen Sie mehr über Indikatoren und Zeitschriften. Indikatoren und Zeitreihen sind die wichtigste Informationsquelle für die Entscheidungsfindung (Sie können sicherlich die Münze werfen, oder Phasen des Mondes, aber sie sind ziemlich schwer zu formalisieren). Wie wir bereits oben definiert haben, benötigen wir die folgenden Informationen: den offenen Preis der vorherigen Bar, den engen Preis der vorherigen Bar und den Wert des gleitenden Durchschnitts auf dem gleichen vorherigen Bar. Um Zugriff auf diese Daten zu erhalten, verwenden wir die folgenden Klassen der Standardbibliothek: CiOpen -, um auf den offenen Preis der vorherigen Leiste CiClose zuzugreifen, um auf den engen Preis der vorherigen Leiste CiMA zuzugreifen, um auf den Wert der Bibliothek zuzugreifen Gleitenden Durchschnitt auf dem vorherigen Balken. Sie können fragen: Warum verwenden Sie die Indikator oder timeseries, in einer Klasse gewickelt, um eine einzelne Zahl zu erhalten Es gibt eine verborgene Bedeutung, die wir jetzt zeigen werden. So verwenden Sie die Daten eines Indikators oder Zeitreihen Zuerst müssen wir ein Kennzeichen erstellen. Zweitens müssen wir die notwendige Datenmenge in einen Zwischenpuffer kopieren. Drittens müssen wir überprüfen, ob das Kopieren abgeschlossen ist. Erst nach diesen Schritten können Sie die Daten verwenden. Verwenden der Klassen der Standardbibliothek. Vermeiden Sie die Notwendigkeit, einen Indikator zu erstellen, sich um die Verfügbarkeit von Zwischenpuffern und um das Laden oder Freigeben eines Griffs zu kümmern. Das Objekt einer entsprechenden Klasse wird das für Sie tun. Alle erforderlichen Indikatoren werden von unserem Signalgenerator während der Initialisierungsphase erzeugt und alle Indikatoren mit dem notwendigen Zwischenpuffer versehen. Außerdem können Sie, nachdem Sie ein Indikator - oder Zeitserver-Objekt in der Auflistung (Objekt einer speziellen Klasse) hinzugefügt haben, die Relevanz der Daten beenden (die Daten werden vom Experten automatisch aktualisiert). Platzieren Sie die Objekte dieser Klassen in die geschützten Datenelemente. Für jedes Objekt erstellen wir eine Methode der Initialisierung und Datenzugriffsmethode. Ermöglicht die Überschreibung der virtuellen Methode InitIndicators (gemäß der Beschreibung der Basisklasse). Beschreibung der Klasse: Implementierung der Methoden InitIndicators, InitMA, InitOpen, InitClose: Alle Vorbereitungen sind abgeschlossen. Wie Sie sehen können, ist unsere Klasse deutlich gewachsen. Aber jetzt sind wir bereit, Trading-Signale zu generieren. Abbildung 4. Handelssignale für den Kurs, der den gleitenden Durchschnitt überschreitet Wir betrachten unsere Algorithmen nochmals genauer. 1. Das Kaufsignal erscheint, wenn folgende Voraussetzungen erfüllt sind: Der Bar-Preis ist niedriger als der Wert des gleitenden Durchschnitts, der Bar-Schlusskurs ist größer als der Wert des gleitenden Durchschnitts, der gleitende Durchschnitt Steigt. In diesem Fall bieten wir an, eine ausstehende Bestellung mit den von den Einstellungen definierten Parametern zu platzieren. Dazu überschreiben wir die virtuelle Methode CheckOpenLong und füllen sie mit der entsprechenden Funktion. 2. Das Verkaufssignal erscheint, wenn folgende Voraussetzungen erfüllt sind: Der Bar-offene Preis ist größer als der Wert des gleitenden Durchschnitts, der Bar-Schlusskurs liegt unter dem Wert des gleitenden Durchschnitts, dem gleitenden Durchschnitt nimmt ab. In diesem Fall bieten wir an, eine ausstehende Verkaufsorder mit den von den Einstellungen definierten Parametern zu platzieren. For this purpose, we override the virtual method CheckOpenShort and fill it with the corresponding functional. 3. We will not generate signals to close positions. Let the positions be closed by Stop LossTake Profit . 4. We will propose the modification of a pending order along the moving average at the distance specified by the settings. For this purpose, we override the virtual methods CheckTrailingOrderLong and CheckTrailingOrderShort. filling them with corresponding functional. Description of the class: Implementation of methods CheckOpenLong, CheckOpenShort, CheckTrailingOrderLong, CheckTrailingOrderShort: So weve solved the first problem. The above code is a source code of the class of trading signals generator that meets our main task. 2.2. Preparing a description of the created class of the trading signals for MQL5 Wizard We now turn to solving the second problem. Our signal should be recognized by the generator of trading strategies MQL5 Wizard. Weve done the first necessary condition: weve placed the file where it will be found by the MQL5 Wizard. But this is not enough. The MQL5 Wizard must not only find the file, but also recognize it. To do this we must add to the original text the class descriptor for the MQL5 Wizard . A class descriptor is a block of comments composed according to certain rules. Lets consider these rules. 1. The block of comments should start with the following lines: 2. The next line is a text descriptor (what we will see in the MQL5 Wizard when choosing the signal) in the format TitleltTextgt . If the text is too big for one line, you can add one more line (but not more) after it. In our case, we have the following: 3. Then comes a line with the class type specified in the format TypeltTypegt . The ltTypegt field must have the Signal value (in addition to signals, the MQL5 Wizard knows other types of classes). 4. The following line in the format NameltNamegt is the short name of the signal (it is used by the MQL5 Wizard for generating the names of the global variables of the expert). We get the following: 5. The name of a class is an important element of the description. In the line with the format ClassltClassNamegt , the ltClassNamegt parameter must match with the name of our class: 6. We do not fill in this line, but it must be present (this is a link to the language reference section): 7. Further, there are descriptions of the signal setup parameters. This is a set of rows (the number of rows is equal to the number of parameters). The format of each line is ParameterltNameOfMethodgt, ltTypeOfParametergt, ltDefaultValuegt . Here is our set of parameters: 8. The block of comment should end with the following lines: Lets add the descriptor to the source code. Well, thats all. The signal is ready to use. For the generator trading strategies MQL5 Wizard to be able to use our signal, we should restart MetaEditor (MQL5 Wizard scans the folder IncludeExpert only at boot). After restarting MetaEditor. the created module of trading signals can be used in the MQL5 Wizard: Figure 5. The created generator of trading signals in the MQL5 Wizard The input parameters specified in the section of description of the parameters of the trading signals generator are now available: Figure 6. Input parameters of the created generator of trading signals in the MQL5 Wizard The best values of the input parameters of the implemented trading strategy can be found using the Strategy Tester of the MetaTrader 5 terminal. The generator of trading strategies of the MQL5 Wizard greatly simplifies the testing of trading ideas. The code of the generated expert is based on the classes of trading strategies of the Standard Library, which are used for creating certain implementations of trading signal classes, money and risk management classes and position support classes. The article discusses how to write your own class of trading signals with the implementation of signals on the crossing of the price and the moving average, and how to include it to the generator of trading strategies of the MQL5 Wizard. as well as describes the structure and format of the description of the generated class for the MQL5 Wizard. Automate Your Forex Trading Enter your trading strategy and generate Expert Advisor for Forex currency trading. Create Scripts to help you trade. Professional Edition generates both. ex4.ex5 and source code. mq4.mq5 files. Since most Forex trading strategies contain common elements: opening positions, closing positions, trailing stops, signals, etc. generator creates Expert Advisor, Script or Custom Indicator with those common components for trading Forex markets. Press Generate menu and your EA, Script or Custom Indicator is ready. Test your ideas before you hire someone to program Expert Advisor, Script or Custom Indicator for you. Forex Generator Full support for MetaTrader 4. Limited experimental MetaTrader 5 support. No programming required for most setups. Create both Expert Advisors (EA), Custom Indicators and trading Scripts. Setup order opening signals via build-in or custom indicators. Import your own or custom third party indicators. Set order execution: take profit, stop loss, trailing stop, etc. Limit opening of new orders to specific days of the week. Set hours when Expert Advisor should open new orders. Limit Expert Advisor to work only when spreads are less than set value. Setup second order with different take profit, stop loss, etc. Mainly used for break-even trading scenarios. Option to close orders if opposite signal has been received. Martingale and Semi-Martingale risk management. Include your own custom code into the diagram. Forex Generator Block Editor This is free companion add-on product for Forex Generator. Create your own building blocks and use them in Forex Generator. Build your own library of advanced blocks. Free Upgrades If you get current version 6.x all upgrades for any upcoming version 6.x will be free. Forex Generator Screenshots

No comments:

Post a Comment