Diskussion zum Artikel "Schrittweiser Leitfaden für Anfänger zum Schreiben eines Expert Advisors in MQL5" - Seite 27

 
Rustam Ayupov #:

Lieber Vladimir ! Ich habe zu Ihrem titanischen Werk für Dummies, meine Prioritäten ändern sich, Demo-Handel wird seinen eigenen Weg, und die Hauptsache ist jetzt Ihre Schule für Anfänger, ich kaue wertvolle Quetschungen von Ihrer Erfahrung, es ist von unschätzbarem Wert, es gibt keine Worte. Wenn ich dazu komme, wie man einen Trailing-Stop in diesen EA einfügt, werde ich das wohl vorrangig tun, denn durch die Vorwärtsoptimierung schafft der EA lange Takeprofits, deren Sicherheitsnetz schreiend geworden ist. Und im Laufe der Ausbildung in Ihrer Schule werde ich wahrscheinlich lernen, Fehler zu sehen, ohne die es keine funktionierenden Programme gibt, und sie zu korrigieren. DANKE!

Mit freundlichen Grüßen, Rustam.

Sie sind willkommen, Rustam!

Mit Respekt, Vladimir.

 
Valeriy Yastremskiy #:

Antworten oder Neuer Kommentar, unten Anhängen einer Datei.

DANKE für die geniale Einfachheit) Und eine Frage, wie würden Sie, mit Ihrer Trailing-Erfahrung, eine dieser in diesem EA einfügen?

 
MrBrooklin #:

Bitte, Rustam!

Mit freundlichen Grüßen, Vladimir.

Ich fand eine einzigartige, einfach bis genial, "Trailing-Methode" des Expert Advisor, der Autor selbst, die, wie es für diese Entwicklung üblich ist, nicht ausgeführt wird, wie der Autor kommentiert. Er, wie ich, ist wahrscheinlich auch ein Dummy, aber ein großer) Er versprach, dass, wenn der Preis kehrt, die zuvor geöffnete Position geschlossen wird, gut, ja, es wäre toll, wenn es war... aber nur zwei offene Positionen hängen, in beide Richtungen, und sind nicht geschlossen. Früher, vor Ihrem ersten Ratschlag, gab es einen Haufen offener Positionen in beide Richtungen, die nicht geschlossen wurden. Versuchen Sie, diese Kirsche auf dem Kuchen zu zerdrücken?

 
Rustam Ayupov #:

DANKE für die geniale Einfachheit) Und eine Frage, wie würden Sie, mit Ihrem Trailing Erfahrung, ein in diesem EA einfügen?

Wenn das Ergebnis mit Trailing ist besser als ohne sie, dann lassen Sie es.

 
Valeriy Yastremskiy #:

Wenn das Ergebnis mit dem Schleppnetz besser ist als ohne, dann lassen Sie es.

Es ist nicht schwer, etwas einzufügen, aber was soll man einfügen? Zu testen und zu bewerten.

 
Rustam Ayupov #:

Es ist nicht schwer, es einzubauen, aber was soll es sein? Um es auszuprobieren.

Schleppnetzcode in Ihren EA ohne Schleppnetz. Es ist besser, den Schleppnetzcode in eine Funktion einzubauen. Und rufen Sie das Schleppnetz durch eine Bedingung auf, wenn es einen Auftrag gibt.

 
Rustam Ayupov #:

Ich fand eine einzigartige, einfach zu genial, "Trailing-Methode" des Expert Advisor, der Autor selbst, die, wie es für diese Entwicklung üblich ist, nicht ausgeführt wird, wie der Autor kommentiert. Er, wie ich, ist wahrscheinlich auch ein Dummy, aber ein großer) Er versprach, dass, wenn der Preis kehrt, die zuvor geöffnete Position geschlossen wird, gut, ja, es wäre toll, wenn es war... aber nur zwei offene Positionen hängen, in beide Richtungen, und sind nicht geschlossen. Früher, vor Ihrem ersten Ratschlag, gab es einen Haufen offener Positionen in beide Richtungen, die nicht geschlossen wurden. Versuchen Sie, diese Kirsche auf dem Kuchen zu zerdrücken?

Hallo, Rustam! Damit wir weiterhin produktiv zusammenarbeiten können, müssen Sie zunächst lernen, wie Sie den EA-Code mit Problemen an Ihre Nachricht anhängen können. Wenn Sie beim Testen des EA Probleme haben, müssen Sie diesen Code unter einem neuen Namen speichern, ihn kompilieren und dann an die Nachricht anhängen. Sie müssen den EA unter einem neuen Namen speichern und ihn kompilieren !!! Andernfalls werden wir bei der Kommunikation mit Ihnen in verschiedenen Varianten durcheinander kommen.

Wenn Sie aus irgendeinem Grund den Code des EAs nicht anhängen können, können Sie einen anderen Weg wählen:

  1. Markieren Sie im MetaEditor den EA-Code, bei dem es Probleme gibt, indem Sie Strg+A drücken.
  2. Kopieren Sie den EA-Code, indem Sie die Tasten Strg+C drücken.
  3. Erstellen Sie einen Beitrag, den Sie hier im Forum veröffentlichen möchten, und öffnen Sie durch Drücken der Taste AL+S ein Feld, in das Sie den kopierten Code durch Drücken der Taste Strg+V einfügen müssen.
  4. Fügen Sie Ihren Beitrag zum Forum hinzu

Wenn Sie nicht lernen, den Code des EA, der Probleme bereitet, in Ihren Beiträgen einzufügen, wird der weitere Dialog mit Ihnen nutzlos.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

Hallo, Rustam! Damit wir weiterhin produktiv zusammenarbeiten können, müssen Sie zunächst lernen, wie Sie den EA-Code mit Problemen an eine Nachricht anhängen können. Wenn Sie beim Testen des EA Probleme haben, müssen Sie diesen Code unter einem neuen Namen speichern, ihn kompilieren und dann an die Nachricht anhängen. Sie müssen den EA unter einem neuen Namen speichern und ihn kompilieren !!! Andernfalls werden Sie und ich bei der Kommunikation mit Ihnen in verschiedenen Varianten durcheinander kommen.

Wenn Sie aus irgendeinem Grund den Code des EA nicht anhängen können, können Sie einen anderen Weg wählen:

  1. Markieren Sie im MetaEditor den EA-Code mit Problemen, indem Sie Strg+A drücken.
  2. Kopieren Sie den EA-Code, indem Sie die Tasten Strg+C drücken.
  3. Erstellen Sie einen Beitrag, den Sie hier im Forum veröffentlichen möchten, und öffnen Sie durch Drücken der Taste AL+S ein Feld, in das Sie den kopierten Code durch Drücken der Taste Strg+V einfügen müssen.
  4. Fügen Sie die Nachricht zum Forum hinzu

Wenn Sie nicht lernen, wie Sie den EA-Code mit Problemen in Ihren Beiträgen anhängen oder posten können, wird der weitere Dialog mit Ihnen nutzlos.

Mit freundlichen Grüßen, Vladimir.

Sorry für die Verzögerung, ich brannte über das Wochenende, aber fand die Ursache des letzten Problems, wie sich herausstellte, der Makler FXopen, einfach nicht wachsen bis zu MT5. Nun und lehrte mich die Einfachheit der Dateiauswahl, zu senden. Die ersten beiden sind Ihre Optimierung der Arbeit des Autors, wo Sie die Unachtsamkeit des Autors in den Code, mit massiven Eröffnung von Positionen, statt einer, die nur eine, die zweiten beiden sind seine Erklärung der Schließung einer Position, wenn der Preis reverses. Die zweite ist es wert, die Arbeit an, nachdem alle, der Autor, wenn nicht fertig, aber wollte profitabel).

 
Rustam Ayupov #:

Sorry für die Verzögerung, über das Wochenende ausgebrannt, 24 Stunden, aber fand die Ursache des letzten Problems, wie sich herausstellte, der Broker FXopen, einfach nicht bis zu MT5 wachsen. Nun und lehrte mich die Einfachheit der Dateiauswahl, zu senden. Die ersten beiden sind Ihre Optimierung der Arbeit des Autors, wo Sie die Unaufmerksamkeit des Autors in den Code, mit massiven Eröffnung von Positionen, statt einer, eine einzige, die zweiten beiden sind seine Erklärung der Schließung einer Position, wenn der Preis umgekehrt. Die zweite ist es wert, die Arbeit an, nachdem alle, der Autor, wenn nicht fertig, aber wollte profitabel).

Nun, mit diesem, dem letzten, bin ich immer noch sortieren es aus, versuchen, etwas zu verstehen und beginnen, in ihm zu navigieren, während auf die Versicherung von langen takeprofits. Ich bin schon bereit für die Überraschungen des Autors in der Zukunft, der Weg wird von demjenigen, der geht, zurückgelegt werden).

Dateien:
 
Rustam Ayupov #:

Nun, bei letzterem versuche ich immer noch, etwas zu verstehen und mich darin zu orientieren, um vorerst lange Take-Profits abzusichern. Ich bin schon bereit für die Überraschungen des Autors in der Zukunft, die Straße wird von demjenigen, der geht gereist werden).

Hallo, Rustam! Ich füge die Arbeitsversion dieses Expert Advisors am Ende der Nachricht bei. Die Änderungen wurden an diesem Abschnitt des Codes vorgenommen:

//--- Alles zusammenfügen 
   if(Buy_Condition_1 && Buy_Condition_2)
     {
      if(Buy_Condition_3 && Buy_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action = TRADE_ACTION_DEAL;                                  // sofortige Auftragsausführung
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // Letzter Briefkurs
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Gewinnmitnahme
         mrequest.symbol = _Symbol;                                            // Währungspaar
         mrequest.volume = Lot;                                                 // Anzahl der zu handelnden Lose
         mrequest.magic = EA_Magic;                                             // Magische Zahl bestellen
         mrequest.type = ORDER_TYPE_BUY;                                        // Bestellung kaufen
         mrequest.type_filling = ORDER_FILLING_FOK;                             // Art der Auftragsausführung
         mrequest.deviation=100;                                                // Abweichung vom aktuellen Preis
         //--- Bestellung abschicken
         bool check=OrderSend(mrequest,mresult);
         // Ermitteln des Ergebniscodes
         if(mresult.retcode==10009 || mresult.retcode==10008) //Anfrage ist abgeschlossen oder Auftrag erteilt
           {
            Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Buy order request could not be completed -error:",GetLastError());
            ResetLastError();           
            return;
           }
        }
     }
/*
 2. Prüfen Sie, ob ein Short-/Verkaufs-Setup vorliegt: MA-8 fällt abwärts, 
 vorheriger Schlusskurs darunter, ADX > 22, -DI > +DI
*/.
//--- Deklarieren Sie Variablen vom Typ bool, um unsere Verkaufsbedingungen zu speichern.
   bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[2]);  // MA-8 abnehmend nach unten
   bool Sell_Condition_2 = (p_close <maVal[1]);                         // Vorheriger Kurs schloss unter MA-8
   bool Sell_Condition_3 = (adxVal[0]>Adx_Min);                         // Aktueller ADX-Wert größer als Minimum (22)
   bool Sell_Condition_4 = (plsDI[0]<minDI[0]);                         // -DI größer als +DI

//--- Alles zusammenfügen
   if(Sell_Condition_1 && Sell_Condition_2)
     {
      if(Sell_Condition_3 && Sell_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action=TRADE_ACTION_DEAL;                                // sofortige Auftragsausführung
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // Letzter Angebotspreis
         mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); // Gewinnmitnahme
         mrequest.symbol = _Symbol;                                          // Währungspaar
         mrequest.volume = Lot;                                              // Anzahl der zu handelnden Lose
         mrequest.magic = EA_Magic;                                          // Magische Zahl bestellen
         mrequest.type= ORDER_TYPE_SELL;                                     // Verkaufsauftrag
         mrequest.type_filling = ORDER_FILLING_FOK;                          // Art der Auftragsausführung
         mrequest.deviation=100;                                             // Abweichung vom aktuellen Preis
         //--- Bestellung abschicken
         bool check=OrderSend(mrequest,mresult);
         // Ermitteln des Ergebniscodes
         if(mresult.retcode==10009 || mresult.retcode==10008) //Anfrage ist abgeschlossen oder Auftrag erteilt
           {
            Alert("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Sell order request could not be completed -error:",GetLastError());
            ResetLastError();
            return;
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+

Das, was gelb hervorgehoben ist, wurde hinzugefügt:

&& PositionsTotal()==0

und auch entfernt die Bedingung im Zusammenhang mit Buy_opened und Sell_opened:

         // eine offene Kaufposition?
         if(Buy_opened)
           {
            Alert("We already have a Buy Position!!!");
            return;    // Keine neue Kaufposition eröffnen
           }
.
.
.
         // eine offene Verkaufsposition?
         if(Sell_opened)
           {
            Alert("We already have a Sell position!!!");
            return;    // Keine neue Verkaufsposition eröffnen
           }

Mit freundlichen Grüßen, Vladimir.

Dateien: