Die Sprache MQL5 von Grund auf selbst erlernen - Seite 75

 

Guten Tag und gute Laune an alle!

Ich lerne weiter die Programmiersprache MQL5. Ich habe eine kleine Änderung am Code von Vasiliy Sokolov vorgenommen, um nur eine Position pro Tag zu eröffnen, wie ursprünglich im Algorithmus des Expert Advisors vorgesehen. Die Änderung ist gelb hervorgehoben.

Mit freundlichen Grüßen, Vladimir.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Зададим условия для открытия позиций BUY и SELL
   double price=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
   int digits=(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);
   price=NormalizeDouble(price,digits);

   if(IsMainPositionOpen() == false && IsTimeForOpen())
     {
      if(TickUP()==(price+point))
         OpenBUY();
      else
        {
         if(TickDOWN()==(price-point))
            OpenSELL();
        }
     }
   if(IsTimeForClose())
      CloseALL();
 
Vasiliy Sokolov:

Der OnInit-Block ist ebenfalls überdacht und noch nicht ganz korrekt geschrieben. Zunächst einmal sollten Sie versuchen, Identifikatoren und keine Zahlen zu schreiben. Gibt INIT_SUCCEEDED anstelle von -1 zurück. Zweitens ist der Wechsel hier übertrieben. Dieser Code sollte entweder if oder switch enthalten. Zuerst muss man das eine schreiben und dann das andere - einfach Öl.

Drittens: Wir müssen alle Kontotypen überwachen. Wir haben Demo und dann haben wir Real. Und dann ist da noch der Wettbewerb. Aber selbst wenn es kein drittes Konto gäbe, müsste es einen Stub geben, der alle anderen Varianten erfasst:

Wahrscheinlich wäre es sinnvoller, zu erklären, wie Ausnahmen funktionieren, denn sonst versteht man nicht, warum es überhaupt eine Kontrolle über etwas geben soll, von dem man nichts weiß.

Überspitzt formuliert müsste sie wie folgt lauten:

1. Starten eines Programms zur Ausführung

2. den Algorithmus in zwei Richtungen zu durchlaufen und ihn zu verlassen:

a) Richtig - der Algorithmus wurde korrekt berechnet

b) Falsch - der Algorithmus hat nicht funktioniert

Gleichzeitig bedeutet die Ausarbeitung von a), dass hier alle Optionen erfüllt sind, die der Programmierer implementieren möchte, und b), dass alle anderen Optionen erfüllt sind, und es spielt keine Rolle, ob sie benötigt werden oder nicht. D.h. der Programmierer implementiert nur die Funktionalität, die er/sie möchte und alles andere sollte ausgeschlossen werden.

 
Konstantin:

Wahrscheinlich ist es sinnvoller, die Arbeit mit Ausnahmen zu erklären, denn sonst versteht man nicht, warum es notwendig ist, etwas zu kontrollieren, von dem man gar nichts weiß.

Überspitzt formuliert müsste sie wie folgt lauten:

1. Starten eines Programms zur Ausführung

2. den Algorithmus in zwei Richtungen zu durchlaufen und ihn zu verlassen:

a) Richtig - der Algorithmus wurde korrekt berechnet

b) Falsch - der Algorithmus hat nicht funktioniert

Gleichzeitig bedeutet die Ausarbeitung von a), dass hier alle Optionen erfüllt sind, die der Programmierer implementieren möchte, und b), dass alle anderen Optionen erfüllt sind, und es spielt keine Rolle, ob sie benötigt werden oder nicht. D.h. der Programmierer implementiert nur die Funktionalität, die er oder sie einfügt, und alles andere sollte als Ausnahme verworfen werden.

Hallo Konstantin, vielen Dank für die Klarstellung.

Liebe Teilnehmer an diesem Thema! Ich möchte mich noch einmal bei Ihnen allen für die konstruktiven Vorschläge und Ratschläge bedanken, die mir beim Erlernen der Programmiersprache MQL5 geholfen haben.

Im Moment mache ich eine Pause, weil meine Hauptarbeit es mir nicht erlaubt, dem Selbststudium viel Zeit und Aufmerksamkeit zu widmen, aber im Moment ist das Hauptergebnis erreicht - ich verstehe die Grundlagen der Programmierung, lese fremden Code und schreibe meine eigenen Funktionen.

Ich werde die Version von Trailing_Stop (v.1).mq5 Expert Advisor mit detaillierten Kommentaren zu jeder Code-Zeile in einer Form veröffentlichen, die für einen Schüler der 1.

Mit freundlichen Grüßen, Vladimir.

 

Guten Tag und gute Laune an alle!

Ich lerne weiter die Programmiersprache MQL5. Endlich habe ich genug Zeit, um eine Version des Expert Advisors mit detaillierten Kommentaren zu jeder Codezeile zu schreiben, in einer Form, die für Studenten im ersten Jahr einer Programmierschule zugänglich ist. Da der Code des Expert Advisors recht umfangreich ist, veröffentliche ich ihn als Datei namens Trailing_Stop_gv.22.mq5.

Bevor wir den Code veröffentlichen, haben wir den Expert Advisor im Strategietester überprüft. Es wurden keine Probleme festgestellt. Das Netting-System der Positionsbuchhaltung wird im Expert Advisor verwendet. Dieses Buchhaltungssystem bedeutet, dass es zu einem bestimmten Zeitpunkt auf dem Konto nur eine offene Position für ein und dasselbe Symbol (Wertpapier) geben kann.

Zum jetzigen Zeitpunkt hat der Expert Advisor die Fähigkeit implementiert,:

  1. Überprüfen Sie das Handelskonto, auf dem Sie die Software installieren möchten. Wenn der Expert Advisor auf einem Demokonto installiert wird, erscheint in der Nachrichtenbox die Erlaubnis, weiter zu arbeiten. Wenn versucht wird, den Expert Advisor auf einem realen Konto zu installieren, wird im Meldungsfenster eine Warnung angezeigt, dass er nicht weiter funktionieren kann, und er wird dann automatisch aus dem Arbeitsfenster des Handelsterminals gelöscht.
  2. Einmal pro Handelstag, um Punkt 9 Uhr Moskauer Zeit, eröffnen Sie automatisch eine Position in der Richtung, in die der erste Tick gerichtet ist. Wenn beispielsweise der erste Tick um 9 Uhr Moskauer Zeit aufwärts gerichtet ist, wird eine KAUF-Position eröffnet; wenn der erste Tick abwärts gerichtet ist, wird eine VERKAUF-Position eröffnet.
  3. Legen Sie die Losgröße fest.
  4. Legen Sie die Größe des Stop Loss fest.
  5. Geben Sie das Niveau in Bezug auf den Eröffnungskurs an, bei dem der Stop Loss auf Breakeven verschoben wird.
  6. Legen Sie die Trailing-Stufe des Stop-Loss fest.

Diese Version des Expert Advisors implementiert die meisten Hinweise, die zuvor von Vasily Sokolov vorgeschlagen wurden.

WARNUNG!!!

Dieser Expert Advisor wurde nach dem Selbstlernplan für Demokonten entwickelt und ist nur für Schulungszwecke gedacht! Es ist nicht dafür gedacht, auf einem echten Konto zu handeln und Gewinne zu erzielen!

Mit freundlichen Grüßen, Vladimir.

Dateien:
 
MrBrooklin:

Guten Tag und gute Laune an alle!

Ich lerne weiter die Programmiersprache MQL5. Endlich habe ich genug Zeit, um eine Version des Expert Advisors mit ausführlichen Kommentaren zu jeder Codezeile zu schreiben, in einer Form, die für Studenten im ersten Jahr einer Programmierschule zugänglich ist. Da der Code des Expert Advisors recht umständlich ist, veröffentliche ich ihn als Datei namens Trailing_Stop (v.2).mq5.

Bevor wir den Code veröffentlichen, haben wir den Expert Advisor im Strategietester überprüft. Es wurden keine Probleme festgestellt. Das Netting-System der Positionsbuchhaltung wird im Expert Advisor verwendet. Dieses Buchhaltungssystem bedeutet, dass es zu einem bestimmten Zeitpunkt auf dem Konto nur eine offene Position für dasselbe Symbol (Finanzinstrument) geben kann.

Zum jetzigen Zeitpunkt hat der Expert Advisor die Fähigkeit implementiert,:

  1. Überprüfen Sie das Handelskonto, auf dem Sie die Software installieren möchten. Wenn der Expert Advisor auf einem Demokonto installiert wird, erscheint in der Nachrichtenbox die Erlaubnis, weiter zu arbeiten. Wenn versucht wird, den Expert Advisor auf einem realen Konto zu installieren, wird im Meldungsfenster eine Warnung angezeigt, dass er nicht weiter funktionieren kann, und er wird dann automatisch aus dem Arbeitsfenster des Handelsterminals gelöscht.
  2. Einmal pro Handelstag, um Punkt 9 Uhr Moskauer Zeit, eröffnen Sie automatisch eine Position in der Richtung, in die der erste Tick gerichtet ist. Wenn beispielsweise der erste Tick um 9 Uhr Moskauer Zeit aufwärts gerichtet ist, wird eine KAUF-Position eröffnet; wenn der erste Tick abwärts gerichtet ist, wird eine VERKAUF-Position eröffnet.
  3. Legen Sie die Losgröße fest.
  4. Legen Sie die Stop-Loss-Größe fest.
  5. Geben Sie das Niveau in Bezug auf den Eröffnungskurs an, bei dem der Stop Loss auf Breakeven verschoben wird.
  6. Legen Sie die Trailing-Stufe des Stop-Loss fest.

Diese Version des Expert Advisors implementiert die meisten Hinweise, die zuvor von Vasily Sokolov vorgeschlagen wurden.

WARNUNG!!!

Dieser Expert Advisor wurde nach dem Selbstlernplan für Demokonten entwickelt und ist nur für Schulungszwecke gedacht! Es ist nicht dafür gedacht, auf einem echten Konto zu handeln und Gewinne zu erzielen!

Mit freundlichen Grüßen, Vladimir.

Hallo! Es lässt sich nicht kompilieren.

Nachlaufender_Stop_gv.22.mq5

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Ich habe es herausgefunden - Name ohne Klammern, um Trailing_Stop (v.2) Expert Advisor zu erstellen

 
SanAlex:

Hallo! - Es lässt sich nicht kompilieren.

Hallo! Ich habe die Datei gerade von der Website heruntergeladen und in meinem MetaEditor überprüft, alles lässt sich gut kompilieren.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Hallo! Ich habe die Datei gerade von der Website heruntergeladen und in meinem MetaEditor überprüft, alles lässt sich gut kompilieren.

Mit freundlichen Grüßen, Vladimir.

Danke! für die Arbeit. Ich habe den Namen beim Erstellen des Expert Advisors nicht richtig eingegeben. alles funktioniert.

 
SanAlex:

Vielen Dank für die Arbeit. Ich habe den Namen bei der Erstellung des Experten nicht richtig eingegeben, aber alles funktioniert.

Mit Vergnügen!

Mit freundlichen Grüßen, Vladimir.

 

Liebe Teilnehmer an diesem Thema!

Ich möchte mich noch einmal bei Ihnen allen für Ihre konstruktiven Vorschläge, Tipps und Ratschläge bedanken, die mir beim Erlernen der Grundlagen der Programmiersprache MQL5 geholfen haben. Besonderen Dank an Vasily Sokolov! Gott segne Sie alle!

Mit großem Respekt für alle, Vladimir.

 

Guten Tag und gute Laune an alle!

Ich lerne weiter die Programmiersprache MQL5. Ich schreibe gerade Code für einen neuen EA. Ich bin mit einem Problem konfrontiert, von dem ich nicht genau weiß, wie es zu lösen ist. Die Aufgabe scheint einfach zu sein - ich möchte, dass mein Expert Advisor auf dem Chart des Währungspaares arbeitet, das in den Eingabeparametern des EA festgelegt ist. Wenn wir versuchen (z.B. aus Versehen), ihn auf dem Chart eines anderen Währungspaares zu installieren, sollte der Expert Advisor eine Warnung über die Unfähigkeit, die Arbeit fortzusetzen, ausgeben.

Hier ist der Programmcode in groben Zügen dargestellt:

input string Symbol_Main="GBPUSDrfd";  //Валютная пара, на которую ставим советник

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   /* Определим график валютной пары, на который будем устанавливать советник*/
   string currency_chart=SymbolInfoString(Symbol(),SYMBOL_DESCRIPTION);
   if(currency_chart==Symbol_Main) //если график валютной пары совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и продолжаем работу советника */
      MessageBox("Работа советника на данной валютной паре разрешена!");
      return(INIT_SUCCEEDED); //возвращаем для функции OnInit значение означающее "удачная инициализация"
     }
   else //в противном случае, если график валютной пары не совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и закрываем советник */
      MessageBox("Работа советника на данной валютной паре запрещена! Выходим!");
      return(INIT_FAILED); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
  }

Der Compiler zeigt keine Fehler an. Der Code, der nicht funktioniert, ist gelb hervorgehoben. Vielleicht liegt es daran, dass ich die Bedeutung des Bezeichners SYMBOL_DESCRIPTION - die Zeichenbeschreibung des Zeichens- nicht ganz verstehe.Ich habe versucht, andere Bezeichner zu verwenden, aber das Ergebnis ist das gleiche. Vielleicht wird die Funktion SymbolInfoString() hier gar nicht benötigt? Ich habe den Namen des Währungspaares GBPUSDrfd nur deshalb geschrieben, weil ich vorhabe, den Expert Advisor auf Alpha-Forex zu benutzen, während alle Symbole dieses Brokers die Endung rfd haben.

Lieber Expert Advisor, bitte beraten Sie mich, in welche Richtung ich denken soll!

Mit freundlichen Grüßen, Vladimir.