English Русский 中文 Español 日本語 Português
preview
Lernen Sie, wie man ein Handelssystem mit Gator Oscillator entwickelt

Lernen Sie, wie man ein Handelssystem mit Gator Oscillator entwickelt

MetaTrader 5Handel | 16 Februar 2023, 16:59
263 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Einführung

    Willkommen zu einem neuen Artikel in unserer Serie über das Lernen, wie man ein Handelssystem auf der Grundlage der beliebtesten technischen Indikatoren zu entwerfen, die nicht nur lernen, wie man das Handelssystem von MQL5 Programmiersprache zu schaffen, aber wir lernen auch über jeden genannten technischen Indikator. In diesem Artikel werden wir diesen beliebten Indikator, dem Gator Oscillator, erklären, um im Detail zu lernen, was er ist, wie man ihn verwendet, und wie man ein Handelssystem, das in der MetaTrader5 verwendet werden kann, damit baut, um uns in unserem Handel zu helfen oder die Augen für einen neuen Handelsansatz öffnen und um bessere Ergebnisse zu erzielen. 

      Wir werden folgende Themen dieses Indikators besprechen:

      1. Gator Oscillator Definition
      2. Gator Oscillator Strategie
      3. Gator Oscillator Blaupause
      4. Gator Oscillator Handelssystem
      5. Schlussfolgerung

      Wir werden das MetaTrader 5-Handelsterminal verwenden, um die erwähnte Strategie zu testen und unser Handelssystem mit Hilfe der Programmiersprache MetaQuotes Language (MQL5) aufzubauen, die in den MetaTrader 5 integriert ist. Wenn Sie nicht wissen, wie man den MetaTrader 5 und die IDE von MQL5 herunterlädt und nutzt, können Sie dieses Thema Writing MQL5 code in MetaEditor aus meinem vorherigen Artikel lesen, um mehr über dieses Thema zu erfahren.

      Ich muss hier erwähnen, dass Sie jede erwähnte Strategie testen müssen, bevor Sie sie verwenden, um sicherzustellen, dass sie für Sie nützlich und profitabel ist, da es nichts gibt, was für alle Menschen geeignet ist, und das Hauptziel hier ist nur lehrreich, um das Hauptkonzept und die Wurzel hinter dem Indikator zu lernen, und es gibt auch einen Ratschlag, den ich hier erwähnen muss, und es ist, dass Sie versuchen müssen, Codes dieses Artikels und andere selbst zu schreiben, wenn Sie Ihre Programmierkenntnisse verbessern wollen.

      Haftungsausschluss: Alle Informationen werden in der vorliegenden Form nur zu Informationszwecken bereitgestellt und sind nicht für Handelszwecke oder als Ratschläge gedacht. Die Informationen garantieren keinen Erfolg. Wenn Sie sich dafür entscheiden, diese Materialien auf einem Ihrer Handelskonten zu verwenden, tun Sie dies auf eigenes Risiko und Sie sind allein verantwortlich.


      Gator Oscillator Definition

      In diesem Teil werden wir den Gator-Oszillator-Indikator genauer identifizieren, um das Hauptkonzept dahinter zu verstehen und zu erkennen und ihn auf eine angemessene und effektive Weise zu nutzen. Der Gator-Oszillator-Indikator wurde von Bill Williams entwickelt, um uns dabei zu helfen, zu erkennen, ob sich der Markt in einem Trend oder in einer Seitwärtsbewegung befindet. Wenn es einen Trend gibt, wie lange dieser Trend in Bezug auf das Momentum anhalten kann, und um den Zeitpunkt für den Einstieg oder Ausstieg in einen Handel anzugeben. Der Gator Oscillator basiert auf dem Alligator-Indikator und Sie können meinen vorherigen Artikel „Erfahren Sie, wie Sie ein Handelssystem mit Alligator entwerfen“, um mehr Details über diesen Alligator-Indikator zu erfahren.

      Die Berechnung des Gator-Indikators ist die gleiche wie die des Alligator-Indikators, der die Konvergenz und Divergenz der Gleichgewichtslinien anzeigt. Im Folgenden wird die Berechnung des Gator-Indikators beschrieben:

      • Schritt eins: Wir müssen den Medianpreis berechnen:

      Median Price = (High + Low) /2

      • Schritt zwei: Wir müssen die Alligator-Kiefer (Jaw), die Alligator-Zähne (Teeth) und die Alligator-Lippen (Lips) berechnen:
      Alligator Jaw = SMMA (Median Price, 13,8)
      Alligator Teeth = SMMA (Median Price, 8, 5)
      Alligator Lips = SMMA (Median Price, 5, 3)
      • Wobei:

      Median Price (Medianpreis): die Art des Preises.

      High: der höchste Preis.

      Low: der niedrigste Preis.

      SMMA: Der geglättete gleitende Durchschnitt ist eine Art gleitender Durchschnitt, der die Daten, gemäß von Periodenlänge und die Verschiebung glättet, wenn sie angegeben sind. Wenn wir sagen, dass SMMA (Median Price, 13, 5), bedeutet, dass der SMMA, die die geglätteten gleitenden Durchschnitt aus dem Median Preis als eine Art von Daten abgeleitet ist, die Glättung Zeitraum ist 13, und die Verschiebung in die Zukunft wird 5 sein. 

      Alligator-Kiefer: die blaue Linie des Alligator-Indikators.

      Alligator.Zähne: die rote Linie des Alligator-Indikators.

      Alligator-Lippen: die grüne Linie des Alligator-Indikators.

      Die vorangegangene Berechnung ergibt den Gator-Oszillator-Indikator, aber wir müssen ihn nicht manuell berechnen, da er in den MetaTrader 5 integriert ist. Wir brauchen ihn nur aus anderen verfügbaren technischen Indikatoren auszuwählen und ihn in das Chart einzufügen, wie im Folgenden beschrieben.

      Wenn Sie den MetaTrader 5 öffnen, wählen Sie die Registerkarte Einfügen --> Indikatoren --> Bill Williams --> Gator Oscillator

      Gator starten

      Nach der Auswahl von Gator Oscillator finden wir das Fenster mit den Gator-Parametern wie im Folgenden dargestellt:

      Gator Parameter

      In der vorherigen Abbildung haben wir die Parameter des Gator Oscillator Indikators, um die gewünschten Einstellungen des Indikators zu bestimmen, und es ist die gleiche wie die folgende:

      1. Bestimmen der Periodenlänge des Kiefers.
      2. Bestimmen der horizontalen Verschiebung des Kiefers.
      3. Bestimmen der Periodenlänge der Zähne.
      4. Bestimmen der horizontalen Verschiebung der Zähne.
      5. Bestimmen des Periodenlänge der Lippen.
      6. Bestimmen der horizontalen Verschiebung der Lippen.
      7. Bestimmen der bevorzugten Methode für den Durchschnitt.
      8. Bestimmen der Preise für die Berechnung des Gators.
      9. Bestimmen der Farbe von Gator Aufwärts-Werten.
      10. Bestimmen der Farbe der Gator-Abwärts-Werte.
      11. Bestimmen der Dicke der Stäbe des Gators.  

      Nachdem wir alle Parameter des Gator Oscillator Indikators bestimmt haben, finden wir den Indikator im unteren Teil des Charts wie im Folgenden dargestellt:

      Gator gestartet

      Wie wir in der vorherigen Grafik sehen können, haben wir den Indikator mit Aufwärts- und Abwärtswerten des Gator Oscillators, der deutlich zu sehen ist, dass wir Aufwärtswerte über Null und Abwärtswerte unter Null haben. Wir haben auch grüne und rote Balken, die auf dem Verhältnis zwischen jedem Balken und seinem Vorgänger basieren. Wenn der aktuelle Balken größer als der vorherige ist, werden wir sehen, dass der aktuelle Balken grün ist und umgekehrt, wenn der aktuelle niedriger als der vorherige ist, werden wir feststellen, dass der aktuelle rot ist. 


      Gator Oscillator Strategie

      In diesem Thema werde ich mit Ihnen einige einfache Strategien teilen, die vom Gator Oscillator Indikator nur zu Lernzwecken verwendet werden können. Sie müssen jede erwähnte Strategie testen, bevor Sie sie für ein echtes Konto verwenden, um sicherzustellen, dass sie für Sie nützlich ist.

        Strategie eins: der Gator-Status

          Auf der Grundlage dieser Strategie müssen wir den Gator-Zustand anhand der Balken des Indikators ermitteln. Demnach gibt es vier Gator-Zustände. Wenn beide Balken rot sind, befindet sich der Gator in einer Schlafphase. Wenn beide Balken grün sind, ist es eine Fressphase. Wenn beide Balken nach Rot grün sind, ist das die Aufwachphase. Wenn beide Balken nach Grün rot sind, handelt es sich um eine Sättigungsphase.

          Also, einfach,

          Beide Balken rot ==> Schlafphase

          Beide Balken grün ==> Fressphase

          Zwei Balken grün nach rot ==> Aufwachphase

          Zwei Balken rot nach grün ==> Sättigungsphase

            Strategie zwei: Gator-Signale

              Bei dieser Strategie suchen wir Signale erhalten, die der Gator-Indikator zeigt. Wenn der Alligator in der Aufwachphase ist, müssen wir ein Signal bekommen, um einen guten Einstieg zu finden. Wenn sich der Gator-Indikator in der Fressphase befindet, müssen wir ein Signal zum Halten der aktuellen Position erhalten. Wenn sich der Gator-Indikator in der Sättigungsphase befindet, müssen wir einen guten Ausstieg finden. Wenn der Gator-Status etwas anderes ist, dürfen wir nichts bekommen.

              Einfach:

              Der Gator-Indikator = Aufwachphase ==> Finde einen guten Einstieg.

              Der Gator Indicator = Fressphase ==> Aktuelle Position halten.

              Der Gator-Indikator = Sättigungsphase ==> Finde einen guten Ausstieg.

              Wenn der Status des Gator-Indikators anderes ist ==> Nichts tun.

                Strategie drei: Gator mit MA

                  Im Rahmen dieser Strategie werden wir das Gator-Signal mit dem Signal des gleitenden Durchschnitts kombinieren. Wenn wir zwei grüne Balken haben und der Schlusskurs über dem gleitenden Durchschnittswert liegt, ist das ein gutes Signal für eine Kaufposition. Das andere Szenario, wenn der Gator-Indikator zwei rote Balken hat und der Schlusskurs unter dem gleitenden Durchschnittswert liegt, ist das ein gutes Signal für eine Verkaufsposition. Oder, wenn wir etwas anderes haben, brauchen wir nichts zu tun.

                  Einfach:

                  Zwei grüne Balken und der Schlusskurs > gleitender Durchschnitt ==> Finde gute Kaufposition (Find a good buy position).

                  Zwei rote Balken und Schlusskurs < gleitender Durchschnitt ==> Finde gute Verkaufsposition ( Find a good sell position).

                  Alles andere ==> Nichts tun


                  Gator Oscillator Blaupause

                  In diesem Teil werden wir Schritt-für-Schritt-Blaupausen für jede erwähnte Strategie erstellen, um uns zu helfen, unser Handelssystem effektiv und einfach zu erstellen. Ich bin der Meinung, dass dieser Schritt für die Entwicklung von Handelssystemen sehr wichtig und unerlässlich ist, da er viel Zeit spart, auch wenn die Erstellung einige Zeit in Anspruch nimmt, da er verhindert, dass man wichtige Schritte vergisst und Aufgaben wiederholt, um Dinge gut zu erledigen. Wir werden daran arbeiten, zu verstehen, was der Computer für uns tun soll, indem wir unsere Ideen in klaren Schritten organisieren.

                    Strategie eins: Gator Status- Identifikation

                      Auf der Grundlage des Konzepts dieser Strategie benötigen wir einen Computer oder einen Expert Advisor, mit dem einige Werte des Gator-Indikators automatisch bei jedem Tick überprüft werden können, nämlich der aktuelle Aufwärtsbalken, die beiden vorherigen Aufwärtsbalken des aktuellen Kurses sowie der aktuelle Abwärtsbalken und die beiden vorherigen Abwärtsbalken des aktuellen Balkens. Nach dieser Prüfung muss der Experte die Position jedes Wertes bestimmen und den folgenden Vergleich durchführen: Beim ersten Vergleich geht es darum, die Werte des aktuellen und des vorherigen Gators nach oben zu vergleichen und festzustellen, welcher größer ist als der andere. Beim zweiten Vergleich geht es darum, die Werte des aktuellen und des vorherigen Gators nach unten zu vergleichen und festzustellen, welcher größer ist als der andere. Das Ergebnis dieses Vergleichs sind unsere gewünschten Signale zur Identifizierung des Gator-Status.

                      Wenn der aktuelle Aufwärtswert kleiner ist als der vorherige und der aktuelle Abwärtswert größer als der vorherige, muss der Experte oder das Handelssystem das Signal der Schlafphase als Kommentar auf dem Chart ausgeben. In einem anderen Fall, wenn der aktuelle Aufwärtswert größer ist als der vorherige und gleichzeitig der aktuelle Abwärtswert kleiner ist als der vorherige, muss das Handelssystem das Signal der Fressphase als Kommentar ausgeben. Im dritten Fall, wenn der erste vorangegangene Aufwärtswert kleiner als der zweite vorangegangene ist und der erste vorangegangene Abwärtswert größer als der zweite vorangegangene Abwärtswert ist und gleichzeitig der aktuelle Aufwärtswert größer als der erste vorangegangene ist und der aktuelle Abwärtswert kleiner als der erste vorangegangene ist, muss das Handelssystem einen Kommentar auf dem Chart mit dem Signal der Aufweckphase ausgeben. Im vierten und letzten Status, wenn der erste vorherige Aufwärtswert größer ist als der zweite und der erste vorherige Abwärtswert kleiner ist als der zweite vorherige und gleichzeitig der aktuelle Aufwärtswert kleiner ist als der erste vorherige und der aktuelle Abwärtswert größer ist als der erste vorherige, muss das Handelssystem einen Kommentar auf dem Chart mit einem Signal für die Sättigungsphase ausgeben.

                      Nachfolgend finden Sie ein einfaches Schaubild für einen Entwurf dieses Handelssystems:

                      Gator-Status Identifikation Blaupause


                        Strategie zwei: Gator-Signale

                          Gemäß der Hauptidee dieser Handelsstrategie müssen wir ein Handelssystem schaffen, das ein Signal für einen guten Zeitpunkt des Einstiegs, des Ausstiegs oder des Haltens der aktuellen Position liefern kann. Dafür muss das Handelssystem kontinuierlich die Werte der aktuellen Aufwärts- und zwei vorherige Abwärts-Balken zusätzlich zu den aktuellen und beiden vorherigen auch das Signal auf der Grundlage der Gator Status überprüfen.

                          Das erste Signal, das das Handelssystem zurückgeben soll, ist „Finde einen guten Einstieg“ als Kommentar auf dem Chart, nachdem wir die Gator-Werte überprüft und festgestellt haben, dass es eine Aufwachphase gibt, weil der erste vorherige Aufwärtsbalken kleiner ist als der zweite vorherige und der erste vorherige Abwärtsbalken größer ist als der zweite und gleichzeitig der aktuelle Aufwärtsbalken größer ist als der erste vorherige und der aktuelle Abwärtsbalken kleiner ist als der erste vorherige.

                          Das zweite Signal, das wir durch das Handelssystem erhalten müssen, ist „Aktuelle Position halten“ als Kommentar auf dem Chart, nachdem wir die Gator-Werte überprüft und festgestellt haben, dass es eine Fressphase gab, weil der aktuelle Balken größer ist als der erste vorherige und der aktuelle Balken kleiner ist als der erste vorherige.

                          Das dritte Signal, das wir durch dieses Handelssystem erhalten müssen, ist „Finde einen guten Ausstieg“ als Kommentar auf dem Chart, nachdem wir die Gator-Werte überprüft und festgestellt haben, dass es eine gesättigte Phase gab, weil der erste vorherige Aufwärtsbalken größer ist als der zweite vorherige und der erste vorherige Abwärtsbalken größer ist als der zweite vorherige.

                          Die letzte Sache, die wir im Handelssystem brauchen, ist das „Nichts-Tun“, wenn es keine der drei vorherigen Signalen gibt. Nachfolgend finden Sie die Blaupause dieses Handelssystems:

                          Blaupause für Gatorsignale



                            Strategie drei: Gator mit MA

                              Gemäß der Handelsstrategie müssen wir einen guten Zeitpunkt finden, um Kauf- oder Verkaufspositionen auf der Grundlage des Gator-Indikators, des Schlusskurses und des gleitenden Durchschnitts zu finden, so wie wir es im Abschnitt über die Strategie gelernt haben; im Folgenden erfahren Sie, wie Sie den Computer das tun lassen.

                              Das erste Signal, das das Handelssystem zurückgeben muss, ist „Finde eine gute Kaufposition“, wenn wir die Gator-Werte überprüfen und feststellen, dass der aktuelle Aufwärtsbalken größer ist als der erste vorhergehende und der erste vorhergehende Aufwärtsbalken größer ist als der zweite vorhergehende und gleichzeitig der aktuelle Abwärtsbalken kleiner ist als der erste vorhergehende und der erste vorhergehende Abwärtsbalken kleiner ist als der zweite vorhergehende, was bedeutet, dass wir jetzt zwei grüne Balken haben. Dann ist der Schlusskurs größer als der gleitende Durchschnittswert.

                              Das zweite Signal ist „Finde eine gute Verkaufsposition“, wenn Sie den Gator überprüfen und feststellen, dass der aktuelle Aufwärtsbalken kleiner ist als der erste vorhergehende und der erste vorhergehende Aufwärtsbalken kleiner ist als der zweite vorhergehende und gleichzeitig der aktuelle Abwärtsbalken größer ist als der erste vorhergehende und der erste vorhergehende Abwärtsbalken größer ist als der zweite vorhergehende, was bedeutet, dass wir zwei rote Balken haben. Dann ist der Schlusskurs auch noch kleiner als der gleitende Durchschnitt.

                              Drittens muss das Handelssystem „Nichts-Tun“ zurückgeben, wenn es sonst nichts gibt. Nachfolgend finden Sie die Blaupause dieses Handelssystems:

                              Gator mit MA-Strategieplan


                              Gator Oscillator Handelssystem

                              Nun kommen wir zum interessantesten Thema in diesem Artikel, der Erstellung unseres Handelssystems für jede der genannten Strategien. Dieses Handelssystem kann uns dabei helfen, effektiv zu handeln. Wir werden damit beginnen, ein einfaches Handelssystem zu erstellen, das als Grundlage für unsere Strategien dienen soll.

                              Das „Simple Gator Oscillator System“ wird erstellt, um einen Kommentar auf dem Chart mit dem aktuellen Aufwärts- und Abwärtswert des Gator-Indikators anzuzeigen. Die folgenden Schritte dienen der Erstellung dieses Handelssystems:

                              Erstellen wir Arrays vom Typ double für upGator und downGator.

                                 double upGatorArray[];
                                 double downGatorArray[];

                              Wir legen die zeitliche Reihung der Daten in diesen Arrays mit Hilfe der Funktion „ArraySetAsSeries“ fest. Die Parameter:

                                 ArraySetAsSeries(upGatorArray,true);
                                 ArraySetAsSeries(downGatorArray,true);

                              Erstellung einer Integer-Variablen für gatorDef und Definition des Gator-Oszillators mit Hilfe der Funktion „iGator“. um den Indikator-Handle zu erhalten:

                              • Symbol: Um den Symbolnamen zu bestimmen, verwenden wir _SYMBOL, das für das aktuelle Symbol verwendet wird. 
                              • Zeitrahmen: Um den Zeitrahmen zu bestimmen, verwenden wir _PERIOD, für den aktuellen Zeitrahmen.
                              • jaw_period: Um den gewünschten Periodenlänge für die Berechnung des Kiefers, wir verwenden (13). 
                              • jaw_shift: zur Bestimmung der horizontalen Verschiebung des Kiefers, falls erforderlich. Wir werden (8) verwenden.
                              • teeth_period: zur Bestimmung des Periodenlänge der Zähne. Wir werden (8) verwenden.
                              • teeth_shift: zur Bestimmung der horizontalen Verschiebung der Zähne, falls erforderlich. Wir werden (5) verwenden.
                              • lips_period: zur Bestimmung der Periodenlänge für die Berechnung der Lippen. Wir werden (5) verwenden.
                              • lips_shift: zur Bestimmung der horizontalen Verschiebung der Lippen, falls erforderlich.  Wir werden (3) verwenden.
                              • ma_method: zur Bestimmung des Typs des gleitenden Durchschnitts. Wir werden (MODE_SMMA) verwenden.
                              • applied_price: zur Bestimmung des Preistyps für die Berechnung. Wir werden (PRICE_MEDIAN) verwenden.
                              int gatorDef=iGator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);

                              Definieren von Daten und Speichern von Ergebnissen durch Verwendung der Funktion „CopyBuffer“ für upGatorArray und downGatorArray. Die Parameter:

                              • indicator_handle: Um den Indikator-Handle zu bestimmen, wird (gatorDef) verwendet.
                              • buffer_num: um die Nummer des Indikatorpuffers zu bestimmen, wird (0 für upGator), (2 für downGator) verwendet.
                              • start_pos: Als Startposition verwenden wir 0.
                              • count: Die zu kopierenden Anzahl von Werten, wir benötigen 3.
                              • buffer[]: Das Ziel-Array mit den Werten (upGatorArray, downGatorArray).
                                 CopyBuffer(gatorDef,0,0,3,upGatorArray);
                                 CopyBuffer(gatorDef,2,0,3,downGatorArray);

                              Abrufen der Werte von upGator und downGator nach dem Erstellen von Variablen vom Typ double für sie. Anschließend verwenden wir die Funktion (NormalizeDouble) zur Rundung.

                              • value: Wir verwenden upGatorArray[0] für den aktuellen Wert.
                              • digits: Wir verwenden (6) für die Dezimalstellen.
                                 double gatorUpValue=NormalizeDouble(upGatorArray[0],6);
                                 double gatorDownValue=NormalizeDouble(downGatorArray[0],6);

                              Wir verwenden Funktion „Comment“, um die Werte des aktuellen upGator und downGator anzuzeigen.

                                 Comment("gatorUpValue = ",gatorUpValue,"\n",
                                         "gatorDownValue = ",gatorDownValue);

                              Nachfolgend der vollständige Code dieses Handelssystems:

                              //+------------------------------------------------------------------+
                              //|                               Simple Gator Oscillator System.mq5 |
                              //|                                  Copyright 2022, MetaQuotes Ltd. |
                              //|                                             https://www.mql5.com |
                              //+------------------------------------------------------------------+
                              #property copyright "Copyright 2022, MetaQuotes Ltd."
                              #property link      "https://www.mql5.com"
                              #property version   "1.00"
                              //+------------------------------------------------------------------+
                              void OnTick()
                                {
                                 double upGatorArray[];
                                 double downGatorArray[];
                                 ArraySetAsSeries(upGatorArray,true);
                                 ArraySetAsSeries(downGatorArray,true);
                                 int gatorDef=iGator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                 CopyBuffer(gatorDef,0,0,3,upGatorArray);
                                 CopyBuffer(gatorDef,2,0,3,downGatorArray);
                                 double gatorUpValue=NormalizeDouble(upGatorArray[0],6);
                                 double gatorDownValue=NormalizeDouble(downGatorArray[0],6);
                                 Comment("gatorUpValue = ",gatorUpValue,"\n",
                                         "gatorDownValue = ",gatorDownValue);
                                }
                              //+------------------------------------------------------------------+

                              Nachdem wir die vorherigen Codezeilen geschrieben haben, kompilieren wir sie und vergewissern uns, dass es keine Fehler gibt. Dann finden wir diesen Experten im Navigator-Fenster unter dem Ordner Expert Advisors im MetaTrader 5-Handelsterminal, wie im Folgenden beschrieben:

                               Gator  im Navigator

                              Wenn Sie den Experten auf den gewünschten Chart ziehen, wird das Fenster dieses EA wie folgt aussehen:

                              Einfaches Gator Oszillator System Fenster

                              Nachdem wir das Häkchen bei (Algo Trading zulassen) gesetzt und auf (OK) gedrückt haben, können wir feststellen, dass der EA mit dem Chart verbunden ist, wie im Folgenden beschrieben:

                              Einfaches Gator-Oszillator-System gestartetalt

                              Jetzt sind wir bereit, Signale dieses Handelssystems zu empfangen, wie im folgenden Beispiel aus dem Test:

                              Einfacher Gator-Oszillator Systemsignal


                                Strategie eins: Gator Status Identifikation:

                                  Auf der Grundlage dieser Strategie wird im Folgenden der vollständige Codeblock für die Erstellung dieser Strategie beschrieben:

                                  //+------------------------------------------------------------------+
                                  //|                                      Gator Status Identifier.mq5 |
                                  //|                                  Copyright 2022, MetaQuotes Ltd. |
                                  //|                                             https://www.mql5.com |
                                  //+------------------------------------------------------------------+
                                  #property copyright "Copyright 2022, MetaQuotes Ltd."
                                  #property link      "https://www.mql5.com"
                                  #property version   "1.00"
                                  //+------------------------------------------------------------------+
                                  void OnTick()
                                    {
                                     double upGatorArray[];
                                     double downGatorArray[];
                                     ArraySetAsSeries(upGatorArray,true);
                                     ArraySetAsSeries(downGatorArray,true);
                                     int gatorDef=iGator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                     CopyBuffer(gatorDef,0,0,5,upGatorArray);
                                     CopyBuffer(gatorDef,2,0,5,downGatorArray);
                                     double gatorUpValue=NormalizeDouble(upGatorArray[0],6);
                                     double gatorUpPreValue1=NormalizeDouble(upGatorArray[1],6);
                                     double gatorUpPreValue2=NormalizeDouble(upGatorArray[2],6);
                                     double gatorDownValue=NormalizeDouble(downGatorArray[0],6);
                                     double gatorDownPreValue1=NormalizeDouble(downGatorArray[1],6);
                                     double gatorDownPreValue2=NormalizeDouble(downGatorArray[2],6);
                                     if(gatorUpValue<gatorUpPreValue1&&gatorDownValue>gatorDownPreValue1)
                                       {
                                        Comment("Sleeping Phase");
                                       }
                                     else
                                        if(gatorUpValue>gatorUpPreValue1&&gatorDownValue<gatorDownPreValue1)
                                          {
                                           Comment("Eating Phase");
                                          }
                                     if(gatorUpPreValue1<gatorUpPreValue2&&gatorDownPreValue1>gatorDownPreValue2&&
                                        gatorUpValue>gatorUpPreValue1&&gatorDownValue<gatorDownPreValue1)
                                       {
                                        Comment("Awakening Phase");
                                       }
                                     else
                                        if(
                                           gatorUpPreValue1>gatorUpPreValue2&&gatorDownPreValue1<gatorDownPreValue2&&
                                           gatorUpValue<gatorUpPreValue1&&gatorDownValue>gatorDownPreValue1)
                                          {
                                           Comment("Sated Phase");
                                          }
                                    }
                                  //+------------------------------------------------------------------+
                                  

                                  Unterschiede in diesem Code:

                                  Definieren und Abrufen der drei letzten Werte von upGator

                                     double gatorUpValue=NormalizeDouble(upGatorArray[0],6);
                                     double gatorUpPreValue1=NormalizeDouble(upGatorArray[1],6);
                                     double gatorUpPreValue2=NormalizeDouble(upGatorArray[2],6);

                                  Definieren und Abrufen der drei letzten Werte von downGator

                                     double gatorDownValue=NormalizeDouble(downGatorArray[0],6);
                                     double gatorDownPreValue1=NormalizeDouble(downGatorArray[1],6);
                                     double gatorDownPreValue2=NormalizeDouble(downGatorArray[2],6);

                                  Bedingungen der Strategie,

                                  Im Falle der Schlafphase,

                                     if(gatorUpValue<gatorUpPreValue1&&gatorDownValue>gatorDownPreValue1)
                                       {
                                        Comment("Sleeping Phase");
                                       }

                                  Im Falle der Fressphase,

                                     else
                                        if(gatorUpValue>gatorUpPreValue1&&gatorDownValue<gatorDownPreValue1)
                                          {
                                           Comment("Eating Phase");
                                          }

                                  Im Falle der Aufwachphase,

                                     if(gatorUpPreValue1<gatorUpPreValue2&&gatorDownPreValue1>gatorDownPreValue2&&
                                        gatorUpValue>gatorUpPreValue1&&gatorDownValue<gatorDownPreValue1)
                                       {
                                        Comment("Awakening Phase");
                                       }

                                  Im Falle der Sättigungsphase,

                                     else
                                        if(
                                           gatorUpPreValue1>gatorUpPreValue2&&gatorDownPreValue1<gatorDownPreValue2&&
                                           gatorUpValue<gatorUpPreValue1&&gatorDownValue>gatorDownPreValue1)
                                          {
                                           Comment("Sated Phase");
                                          }

                                  Nach dem fehlerfreien Kompilieren dieses Codes und dem Ausführen des EAs werden wir feststellen, dass er wie folgt an den Chart angehängt ist:

                                   Gator Status Identifier gestartet

                                  Wie wir in der oberen rechten Ecke des vorherigen Charts sehen können, läuft der Gator Status Identifier EA auf dem Chart.

                                  Wir können Signale finden, die auf dieser Strategie basieren, wie die folgenden aus dem Testen:

                                  Im Falle einer Schlafphase:

                                   Gator Status Identifier Schlafsignal

                                  Wie wir auf dem vorherigen Chart in der oberen linken Ecke sehen können, haben wir ein Signal der Schlafphase basierend auf dieser Strategie.

                                  Im Falle der Fressphase:

                                   Gator Status Identifier Fresssignal

                                  Auf der Grundlage des vorherigen Charts können wir in der oberen linken Ecke feststellen, dass wir ein Signal für die Fressphase in Abhängigkeit von dieser Strategie erhalten.

                                  Im Falle der Aufwachphase:

                                  Gator Status Identifikator Aufwachsignal

                                  Wie wir aus dem vorherigen Chart ersehen können, haben wir ein Signal der Aufwachphase, das auf der Gator Status Identifier Strategie basiert.

                                  Im Falle der Sättigungsphase:

                                  Gator Status Identifier Sättigungssignal

                                  Wie in der vorherigen Abbildung zu sehen ist, gibt es in der linken oberen Ecke eine Sättigungsphase.


                                    Strategie zwei: Gator-Signale Strategie:

                                      Das Folgende ist der vollständige Code zum Erstellen eines Handelssystems für diese Strategie:

                                      //+------------------------------------------------------------------+
                                      //|                                                Gator signals.mq5 |
                                      //|                                  Copyright 2022, MetaQuotes Ltd. |
                                      //|                                             https://www.mql5.com |
                                      //+------------------------------------------------------------------+
                                      #property copyright "Copyright 2022, MetaQuotes Ltd."
                                      #property link      "https://www.mql5.com"
                                      #property version   "1.00"
                                      //+------------------------------------------------------------------+
                                      void OnTick()
                                        {
                                         double upGatorArray[];
                                         double downGatorArray[];
                                         ArraySetAsSeries(upGatorArray,true);
                                         ArraySetAsSeries(downGatorArray,true);
                                         int gatorDef=iGator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                         CopyBuffer(gatorDef,0,0,3,upGatorArray);
                                         CopyBuffer(gatorDef,2,0,3,downGatorArray);
                                         double gatorUpValue=NormalizeDouble(upGatorArray[0],6);
                                         double gatorUpPreValue1=NormalizeDouble(upGatorArray[1],6);
                                         double gatorUpPreValue2=NormalizeDouble(upGatorArray[2],6);
                                         double gatorDownValue=NormalizeDouble(downGatorArray[0],6);
                                         double gatorDownPreValue1=NormalizeDouble(downGatorArray[1],6);
                                         double gatorDownPreValue2=NormalizeDouble(downGatorArray[2],6);
                                         bool awakeningPhase = gatorUpPreValue1<gatorUpPreValue2&&gatorDownPreValue1>gatorDownPreValue2&&
                                                               gatorUpValue>gatorUpPreValue1&&gatorDownValue<gatorDownPreValue1;
                                         bool eatingPhase = gatorUpValue>gatorUpPreValue1&&gatorDownValue<gatorDownPreValue1;
                                         bool satedPhase = gatorUpPreValue1>gatorUpPreValue2&&gatorDownPreValue1<gatorDownPreValue2&&
                                                           gatorUpValue<gatorUpPreValue1&&gatorDownValue>gatorDownPreValue1;
                                         if(awakeningPhase)
                                           {
                                            Comment("Find a good entry");
                                           }
                                         else
                                            if(eatingPhase)
                                              {
                                               Comment("Hold current position");
                                              }
                                            else
                                               if(satedPhase)
                                                 {
                                                  Comment("Find a good exit");
                                                 }
                                               else
                                                  Comment("");
                                        }
                                      //+------------------------------------------------------------------+

                                      Unterschiede bei dieser Strategie:

                                      Erstellen einer boolschen Variable für die folgenden drei Phasen (awakeningPhase, eatingPhase und satedPhase);

                                         bool awakeningPhase = gatorUpPreValue1<gatorUpPreValue2&&gatorDownPreValue1>gatorDownPreValue2&&
                                                               gatorUpValue>gatorUpPreValue1&&gatorDownValue<gatorDownPreValue1;
                                         bool eatingPhase = gatorUpValue>gatorUpPreValue1&&gatorDownValue<gatorDownPreValue1;
                                         bool satedPhase = gatorUpPreValue1>gatorUpPreValue2&&gatorDownPreValue1<gatorDownPreValue2&&
                                                           gatorUpValue<gatorUpPreValue1&&gatorDownValue>gatorDownPreValue1;

                                      Bedingungen der Strategie,

                                      Im Falle der Aufwachphase

                                         if(awakeningPhase)
                                           {
                                            Comment("Find a good entry");
                                           }

                                      Im Falle der Fressphase

                                         else
                                            if(eatingPhase)
                                              {
                                               Comment("Hold current position");
                                              }

                                      Im Falle der Sättigungsphase

                                            else
                                               if(satedPhase)
                                                 {
                                                  Comment("Find a good exit");
                                                 }

                                      Andernfalls

                                               else
                                                  Comment("");

                                      Nachdem wir diesen Code kompiliert und ausgeführt haben, sehen wir, dass der EA wie folgt mit dem Chart verbunden ist:

                                      Gator-Signale gestartet

                                      Wie wir in der oberen rechten Ecke sehen können, läuft der EA von Gator Signals auf dem Chart.

                                      Jetzt sind wir bereit, Signale dieser Strategie zu empfangen, und die folgenden Beispiele sind aus dem Test:

                                      Im Falle der Aufwachphase;

                                      Gator signalisiert Eröffnung

                                      Wie wir im vorherigen Chart sehen können, haben wir das Signal „Finde einen guten Einstieg“ in der oberen linken Ecke.

                                      Im Falle der Fressphase

                                       Gator signalisiert Haltesignal

                                      Wie in der vorherigen Abbildung zu sehen ist, gibt es in der oberen linken Ecke das Signal „Aktuelle Position halten“.

                                      Im Falle der Sättigungsphase

                                       Gator signalisiert Aussteigen

                                      Wie wir im vorherigen Chart aus dem Test als Beispiel sehen können, haben wir das Signal „Finde einen guten Ausstieg“ in der oberen linken Ecke.


                                      Strategie drei: Gator mit MA-Strategie:

                                      Im Folgenden finden Sie den vollständigen Code für die Erstellung eines Handelssystems auf der Grundlage dieser Strategie.

                                      //+------------------------------------------------------------------+
                                      //|                                       Gator with MA strategy.mq5 |
                                      //|                                  Copyright 2022, MetaQuotes Ltd. |
                                      //|                                             https://www.mql5.com |
                                      //+------------------------------------------------------------------+
                                      #property copyright "Copyright 2022, MetaQuotes Ltd."
                                      #property link      "https://www.mql5.com"
                                      #property version   "1.00"
                                      //+------------------------------------------------------------------+
                                      void OnTick()
                                        {
                                         double upGatorArray[];
                                         double downGatorArray[];
                                         MqlRates pArray[];
                                         double maArray[];
                                         ArraySetAsSeries(upGatorArray,true);
                                         ArraySetAsSeries(downGatorArray,true);
                                         ArraySetAsSeries(maArray,true);
                                         int gatorDef=iGator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                         int maDef=iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);
                                         int data=CopyRates(_Symbol,_Period,0,13,pArray);
                                         CopyBuffer(gatorDef,0,0,3,upGatorArray);
                                         CopyBuffer(gatorDef,2,0,3,downGatorArray);
                                         CopyBuffer(maDef,0,0,3,maArray);
                                         double gatorUpValue=NormalizeDouble(upGatorArray[0],6);
                                         double gatorUpPreValue1=NormalizeDouble(upGatorArray[1],6);
                                         double gatorUpPreValue2=NormalizeDouble(upGatorArray[2],6);
                                         double gatorDownValue=NormalizeDouble(downGatorArray[0],6);
                                         double gatorDownPreValue1=NormalizeDouble(downGatorArray[1],6);
                                         double gatorDownPreValue2=NormalizeDouble(downGatorArray[2],6);
                                         double maValue=NormalizeDouble(maArray[0],5);
                                         double closingPrice=pArray[0].close;
                                         bool douleGreen = gatorUpValue>gatorUpPreValue1&&gatorUpPreValue1>gatorUpPreValue2&&
                                                           gatorDownValue<gatorDownPreValue1&&gatorDownPreValue1<gatorDownPreValue2;
                                         bool douleRed = gatorUpValue<gatorUpPreValue1&&gatorUpPreValue1<gatorUpPreValue2&&
                                                         gatorDownValue>gatorDownPreValue1&&gatorDownPreValue1>gatorDownPreValue2;  
                                         if(douleGreen&&closingPrice>maValue)
                                           {
                                            Comment("Find a good buy position");
                                           }
                                         else
                                            if(douleRed&&closingPrice<maValue)
                                              {
                                               Comment("Find a good sell position");
                                              }
                                            else
                                               Comment("");
                                        }
                                      //+------------------------------------------------------------------+

                                      Unterschiede bei dieser Strategie:

                                      Erstellen von zwei weiteren Arrays von Typ double für pArray und maArray; wir verwenden die Funktion „MqlRates“ , um Informationen über Preise zu speichern;

                                         MqlRates pArray[];
                                         double maArray[];

                                      Setzen der zeitliche Reihung der Daten in maArray mit Hilfe der Funktion „ArraySetAsSeries“;

                                      ArraySetAsSeries(maArray,true);

                                      Erstellen einer Integer-Variablen für maDef und Definieren des gleitenden Durchschnitts mit Hilfe der Funktion „iMA“, um den Indikator-Handle und seine Parameter zu erhalten:

                                      • Symbol: zur Bestimmung des Symbolnamens. Wir verwenden mit „_Symbol“ auf das des aktuellen Charts.
                                      • Periode: Um den Zeitrahmen zu bestimmen, wir verwenden _Period für den aktuellen Zeitrahmen, und Sie können auch (PERIOD_CURRENT) für den gleichen Zeitrahmen einstellen.
                                      • ma_period: Zur Bestimmung der durchschnittlichen Periodenlänge wird 13 verwendet. 
                                      • ma_shift: zur Bestimmung der horizontalen Verschiebung, falls erforderlich. Wir stellen 0 ein, da wir den MA nicht verschieben müssen. 
                                      • ma_method: um den Typ des gleitenden Durchschnitts zu bestimmen, wählen wir EMA , den Exponential Moving Average. 
                                      • applied_price: Um die Art des in der Berechnung verwendeten Preises zu bestimmen, wird der Schlusskurs verwendet.
                                      int maDef=iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);

                                      Abrufen historischer Daten von MqlRates mit der Funktion „CopyRates“:

                                      • symbol_name: Um den Symbolnamen zu bestimmen, verwenden wir (_Symbol), das für das aktuelle Symbol angewendet wird. 
                                      • Zeitrahmen: Zur Bestimmung des Zeitrahmens des Charts wird „_Period“ verwendet, der für den aktuellen Zeitrahmen gilt. 
                                      • start_pos: um den Startpunkt oder die Position zu bestimmen, verwenden wir 0, um von der aktuellen Position auszugehen.
                                      • count: Um die zu kopierende Anzahl zu bestimmen, verwenden wir 13. 
                                      • rates_array[]: Wir verwenden pArray als Zielarray für die Daten. 
                                      int data=CopyRates(_Symbol,_Period,0,13,pArray);

                                      Definieren von Daten und Speichern von Ergebnissen mit Hilfe der Funktion „CopyBuffer“ für maArray.

                                      CopyBuffer(maDef,0,0,3,maArray);

                                      Ermittelt den Wert des aktuellen exponentiellen gleitenden Durchschnitts und normalisiert ihn.

                                      double maValue=NormalizeDouble(maArray[0],5);

                                      Ermittlung des aktuellen Wertes des Schlusskurses.

                                      double closingPrice=pArray[0].close;

                                      Erstellen von boolschen Variablen für zwei grüne Balken und zwei rote Balken des Gator Oscillator Indikators.

                                         bool douleGreen = gatorUpValue>gatorUpPreValue1&&gatorUpPreValue1>gatorUpPreValue2&&
                                                           gatorDownValue<gatorDownPreValue1&&gatorDownPreValue1<gatorDownPreValue2;
                                         bool douleRed = gatorUpValue<gatorUpPreValue1&&gatorUpPreValue1<gatorUpPreValue2&&
                                                         gatorDownValue>gatorDownPreValue1&&gatorDownPreValue1>gatorDownPreValue2; 

                                      Bedingungen der Strategie,

                                      Im Falle des Kaufs;

                                         if(douleGreen&&closingPrice>maValue)
                                           {
                                            Comment("Find a good buy position");
                                           }

                                      Im Falle des Verkaufs;

                                         else
                                            if(douleRed&&closingPrice<maValue)
                                              {
                                               Comment("Find a good sell position");
                                              }

                                      Andere;

                                            else
                                               Comment("");

                                      Nach dem Kompilieren und Ausführen dieses Codes, um an das gewünschte Chart angehängt zu werden, werden wir feststellen, dass der EA an das Chart wie folgt angehängt ist:

                                       Gator mit gestarteter MA-Strategie

                                      Wie wir in der oberen rechten Ecke des Charts sehen können, haben wir den EA des Gator mit MA an den Chart angehängt.

                                      Jetzt sind wir bereit, Signale dieser Strategie zu empfangen, und die folgenden Beispiele sind aus dem Test;

                                      Im Falle des Kaufs;

                                       Gator mit MA-Strategie Kaufsignal

                                      Wie wir in der vorherigen Abbildung sehen können, haben wir in der oberen linken Ecke ein Signal (Finde eine gute Kaufposition).

                                      Im Falle des Verkaufs;

                                      Gator mit MA-Strategie Verkaufssignal

                                      Wie wir sehen können, haben wir das Signal „Finde eine gute Verkaufsposition“.

                                      Jetzt haben wir gelernt, wie wir Handelssysteme erstellen können, die auf verschiedenen Strategien basieren, und dieser Ansatz muss Ihnen die Augen für verschiedene Ideen öffnen, die Sie anwenden können - das ist das Hauptziel dieses Artikels und dieser Serie.


                                      Schlussfolgerung

                                      Jetzt haben wir alle Themen dieses Artikels besprochen, um zu lernen, wie man ein Handelssystem mit Gator Oscillator erstellt, was ist der Gator Oscillator-Indikator, wie er zu berechnen ist, wie er in dreifacher Weise als Handelsstrategien zu verwenden ist:

                                      • Gator Status Identifikation: Diese Strategie bestimmt den Status des Gator Oszillators (wach, schlafend, fressend, satt) auf der Grundlage verschiedener Bedingungen.
                                      • Gator-Signale: um Signale für den Zeitpunkt geeigneter Entscheidungen zu erhalten (einen guten Einstieg finden, die aktuelle Position halten oder einen guten Ausstieg finden), basierend auf verschiedenen Bedingungen des Gator-Oszillators.
                                      • Gator mit MA-Strategie: um Signale für das Timing von Kauf- oder Verkaufspositionen zu erhalten, die auf dem Gator Oscillator mit dem Indikator des gleitenden Durchschnitts basieren.

                                      Nachdem wir gelernt haben, wie man eine Schritt-für-Schritt-Blaupause erstellt, die uns hilft, ein Handelssystem für jede erwähnte Strategie effektiv und einfach zu erstellen. Anschließend haben wir ein Handelssystem für diese Strategien erstellt, das auf der MetaTrader5-Handelsplattform ausgeführt werden kann, indem wir ihren Quellcode in der MQL5-IDE erstellt haben.

                                      Ich hoffe, dass dieser Artikel für Sie nützlich war, um bessere Ergebnisse beim Handel zu erzielen, und ich hoffe auch, dass dieser Bericht Ihnen geholfen hat, einen neuen Ansatz zu finden, der in Ihrem Handelsgeschäft verwendet werden kann, oder mehr Einblicke in das Thema dieses Artikels oder in ein verwandtes Thema zu erhalten, und wenn das der Fall ist und Sie weitere ähnliche Artikel lesen möchten, können Sie meine anderen Artikel in dieser Serie lesen, in denen es darum geht, wie man ein Handelssystem auf der Grundlage der beliebtesten technischen Indikatoren entwickelt.

                                      Übersetzt aus dem Englischen von MetaQuotes Ltd.
                                      Originalartikel: https://www.mql5.com/en/articles/11928

                                      Erstellen eines Ticker-Panels: Basisversion Erstellen eines Ticker-Panels: Basisversion
                                      Hier zeige ich Ihnen, wie Sie Bildschirme mit Preistickern erstellen, die normalerweise zur Anzeige von Börsenkursen verwendet werden. Ich werde es nur mit MQL5 machen, ohne eine komplexe externe Programmierung zu verwenden.
                                      Algorithmen zur Optimierung mit Populationen Firefly-Algorithmus (FA) Algorithmen zur Optimierung mit Populationen Firefly-Algorithmus (FA)
                                      In diesem Artikel werde ich die Optimierungsmethode des Firefly-Algorithmus (FA) betrachten. Dank der Änderung hat sich der Algorithmus von einem Außenseiter zu einem echten Tabellenführer entwickelt.
                                      Erstellen eines Ticker-Panels: Verbesserte Version Erstellen eines Ticker-Panels: Verbesserte Version
                                      Was halten Sie von der Idee, die Grundversion unseres Ticker-Panels wiederzubeleben? Als Erstes werden wir das Panel so ändern, dass wir ein Bild hinzufügen können, z. B. ein Anlagenlogo oder ein anderes Bild, damit der Nutzer das angezeigte Logo schnell und einfach identifizieren kann.
                                      Matrix Utils, Erweiterung der Funktionalität der Standardbibliothek für Matrizen und Vektoren Matrix Utils, Erweiterung der Funktionalität der Standardbibliothek für Matrizen und Vektoren
                                      Matrizen dienen als Grundlage für Algorithmen des maschinellen Lernens und für Computer im Allgemeinen, da sie große mathematische Operationen effektiv verarbeiten können. Die Standardbibliothek bietet alles, was man braucht, aber wir wollen sehen, wie wir sie erweitern können, indem wir in der Datei utils mehrere Funktionen einführen, die in der Bibliothek noch nicht vorhanden sind