Diskussion zum Artikel "Der MQL5 Assistent: Wie man ein Modul an Handelssignalen erzeugt"

 

Neuer Artikel Der MQL5 Assistent: Wie man ein Modul an Handelssignalen erzeugt :

Dieser Beitrag beschreibt, wie man seine eigene Klasse an Handelssignalen mit der Implementierung von Signalen am Schnittpunkt des Kurses und gleitenden Durchschnitts schreiben und sie in den Handelsstrategien-Generator des MQL5 Assistenten einschließen kann. Er erklärt auch die Struktur und das Format der Beschreibung der generierten Klassen für den MQL5 Assistenten.

Abb. 1 Die Struktur der CExpert Basisklasse

Autor: MetaQuotes Software Corp.

 
Meine Herren Kameraden! Ich habe den Artikel gelesen! Ich habe alles getan, wie in ihm geschrieben, gut ich denke, jetzt werde ich in den Himmel zu bekommen. Aber nein - Master MKL 5 hat meine Datei mit Signalen nicht gesehen. Ich habe alles noch einmal überprüft, alles noch einmal gemacht, noch einmal überprüft, aber das Signal ist im Assistenten zur Erstellung von Expert Advisors nicht sichtbar. Ich füge meine Datei bei, die ich gemäß den Empfehlungen im Artikel erstellt habe. Helfen Sie mir zu verstehen, was ich falsch gemacht habe, oder im Gegenteil, der Autor des Artikels hat etwas Wichtiges nicht hinzugefügt, weswegen es in keiner Weise zusammenkommt. Kurz gesagt, helfen Sie mir auf jede erdenkliche Weise.
Dateien:
 
Tincup:
Meine Herren Kameraden! Ich habe den Artikel gelesen! Ich habe alles getan, wie in ihm geschrieben, gut ich denke, jetzt werde ich in den Himmel zu bekommen. Aber nein - Master MKL 5 hat meine Datei mit Signalen nicht gesehen. Ich habe alles noch einmal überprüft, alles noch einmal gemacht, noch einmal überprüft, aber das Signal ist im Assistenten zur Erstellung von Expert Advisors nicht sichtbar. Ich füge meine Datei bei, die ich gemäß den Empfehlungen im Artikel erstellt habe. Helfen Sie mir zu verstehen, was ich falsch gemacht habe, oder im Gegenteil, der Autor des Artikels hat etwas Wichtiges nicht hinzugefügt, weswegen es in keiner Weise zusammenkommt. Kurzum, helfen Sie mir auf jede erdenkliche Weise.


DerKlassendeskriptor ist ein wichtiger Teil des Ausgangstextes.

Es gibt zwei offensichtliche Fehler in Ihrem Deskriptor. Einer davon verhindert die Erkennung des Signals, weil ein nicht vorhandenes ENUM angegeben ist. Der zweite führt zu Problemen bei der Kompilierung (falscher Parametername).

Eine weitere Feinheit. Vor dem Schlüsselwort sollte in jeder Deskriptorzeile nur ein Leerzeichen stehen. (Ich denke, diese Einschränkung wird in Zukunft aufgehoben, aber im Moment ist es so).

// wizard description start
//+---------------------------------------------------------------------------+
//| Description of the class                                                |
//| Title=Сигнал пересечению ценой скользящей средней                     |
//| Type=Signal                                                             |
//| Name=Sample                                                             |
//| Class=CSampleSignal                                                     |
//| Page=                                                                   |
//| Parameter=PeriodMA,int,12                                                |
//| Parameter=ShiftMA,int,0                                                  | было SniftMA
//| Parameter=MethodMA,ENUM_MA_METHOD,MODE_EMA                               |
//| Parameter=AppliedMA,ENUM_APPLIED_PRICE,PRICE_CLOSE                      | было ENUM_MA_APLLIED_PRICE
//| Parameter=Limit,double,0.0                                               |
//| Parameter=StopLoss,double,50.0                                           |
//| Parameter=TakeProfit,double,50.0                                         |
//| Parameter=Expiration,int,10                                              |
//+---------------------------------------------------------------------------+
// wizard description end


Weiter zum Text.

Es ist schlecht, keinen Konstruktor zu haben. Man sollte Member-Daten mit Standardwerten initialisieren. Schließlich darf im allgemeinen Fall die Methode zum Setzen eines Parameters nicht aufgerufen werden.

Und zu guter Letzt sind die Methoden falsch beschrieben

   void     LimitMA (int value)                    {m_limit=value;}
   void     StopLoss (int value)                   {m_stop_loss=value;}
   void     TakeProfit (int value)                 {m_take_profit=value;}

muss

   void     LimitMA (double value)                    {m_limit=value;}
   void     StopLoss (double value)                   {m_stop_loss=value;}
   void     TakeProfit (double value)                 {m_take_profit=value;}

 

Vielen Dank für Ihre Antwort, natürlich. Ich habe alles korrigiert und es hat funktioniert.

Aber beim Kompilieren des Expert Advisors selbst hat er mir einen Fehler angezeigt, den ich selbst nicht gefunden hätte, wenn der Compiler ihn gefunden hätte. Übrigens, als Sie mir geantwortet haben, müssen Sie ihn selbst unbemerkt behoben haben, aber er ist im Originaltext des Artikels vorhanden.

In dem Artikel.

  void               Limit(double value)                 { m_limit=value;                  }

als Antwort auf meine Bitte um Hilfe

  void               LimitМА(double value)                 { m_limit=value;}

In Ermangelung von MA in der Signaldatei wird beim Kompilieren des Expert Advisors selbst nach dessen erfolgreicher Erstellung folgender Fehler erzeugt

Limit' - member function is not defined 123456.mq5 77 11
1 error(s), 0 warning(s) 2 1

In meinem Fall sehen wir zumindest in Zeile 77

signal.Limit(Inp_Signal_Sample_Limit);

MA nach dem Wort Limit einfügen

Der Fehler im Text des Expert Advisors verschwindet.

Wenn ich falsch liege, entschuldige ich mich. Ich bin kein Profi.

 
Und dementsprechend sollte die Beschreibung nicht Limit, sondern LimitMA sein.
 

Und noch etwas: Dieser Fehler tritt immer auf:

'--' - l-Wert erforderlich 1234.mq5 31 57

'--' - l-value required 1234.mq5 31 59
'--' - l-value required 1234.mq5 31 61
'--' - l-value required 1234.mq5 31 63
'--' - l-wert erforderlich 1234.mq5 31 65
'--' - l-wert erforderlich 1234.mq5 31 67
'--' - l-wert erforderlich 1234.mq5 31 69
'--' - l-wert erforderlich 1234.mq5 31 71
'--' - l-wert erforderlich 1234.mq5 31 73
'--' - l-wert erforderlich 1234.mq5 31 75
'--' - l-wert erforderlich 1234.mq5 31 77
'--' - l-wert erforderlich 1234.mq5 31 79
'--' - l-wert erforderlich 1234.mq5 31 81
'--' - l-wert erforderlich 1234.mq5 31 83
'--' - l-value required 1234.mq5 31 85
'--' - l-value required 1234.mq5 31 87
'--' - l-value required 1234.mq5 31 89
'--' - l-value required 1234.mq5 31 91
'--' - l-value required 1234.mq5 31 93
'--' - l-value required 1234.mq5 31 95
'--' - l-wert erforderlich 1234.mq5 31 97
'--' - l-wert erforderlich 1234.mq5 31 99
'--' - l-wert erforderlich 1234.mq5 31 101
'--' - l-wert erforderlich 1234.mq5 31 103
'--' - l-wert erforderlich 1234.mq5 31 105
'--' - l-wert erforderlich 1234.mq5 31 107
'--' - l-wert erforderlich 1234.mq5 31 109
'--' - l-wert erforderlich 1234.mq5 31 111
'--' - l-wert erforderlich 1234.mq5 31 113
'--' - l-wert erforderlich 1234.mq5 31 115
'-' - Operand erwartet 1234.mq5 31 117
'Inp_Signal_Sample_Expiration' - nicht deklarierter Bezeichner 1234.mq5 77 22
32 Fehler, 0 Warnung(en) 33 1

Gehen Sie zu Zeile 31 des EA, um Folgendes zu sehen

input double Inp_Signal_Sample_StopLoss =50.0;
input double Inp_Signal_Sample_TakeProfit=50.0;
input int Inp_Signal_Sample_Expiration=10-------------------------------------------------------------;
//--- Eingaben für Geld
input double Inp_Money_FixLot_Percent =10.0;

input double Inp_Money_FixLot_Lots =0.1;

Entfernen Sie den Schwanz in Form einer gepunkteten Linie, die von 10 ausgeht, und alle Fehler verschwinden.

Der Expert Advisor ist bereit zu arbeiten und zu optimieren.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
Tincup:
Ja, und dementsprechend sollte die Bezeichnung auch nicht Limit, sondern LimitMA lauten

Ja, LimitMA, ich habe es nachgeschlagen.

Generell, für die Zukunft... Bei der Erstellung eines Klassendeskriptors sollten Sie das Kopieren aktiver nutzen, da der Compiler die Kommentare (aus denen der Deskriptor besteht) nicht überprüft und die Übereinstimmung von Methodennamen und Parameternamen des Deskriptors wichtig ist. Dies fällt erst beim Kompilieren des Expert Advisors auf und verursacht negative Emotionen. Obwohl, wie Sie sehen können, ist es nichts Schlimmes.

 
Tincup:

Und noch etwas: Dieser Fehler tritt immer auf:

'--' - l-value required 1234.mq5 31 57

Dieser Fehler tritt wegen der Länge der Klassenbeschreibungszeichenfolge auf. Nach den Ferien werden wir das in Ordnung bringen.
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
 
Gutes Material... gut geschrieben und sicherlich ein Augenöffner.
 

Guten Tag!

  1. In der angehängten Datei gibt es einen Druckfehler, wenn ich mich nicht irre! In der Beschreibung der Funktion CheckOpenLong in den Zeilen zur Berechnung der Variablen sl und tp sollten die Vorzeichen vertauscht sein.
  2. Ich habe die CheckOpenLong-Funktion wie folgt geändert:
    bool CSampleSignal::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
      {
    
       Print("Close(0)=",DoubleToString(Close(0),5)," Close(1)=",DoubleToString(Close(1),5));
       Print("Open(0)=",DoubleToString(Open(0),5)," Open(1)=",DoubleToString(Open(1),5));
       Print("MA(0)=",DoubleToString(MA(0),5)," MA(1)=",DoubleToString(MA(1),5));
    
       return(false);
       
      }
    D.h. sie soll einfach die Werte von Close, Open und MA für den letzten und den vorherigen Bar ausgeben. Wenn der Wert von EveryTick also falsch ist, funktioniert alles wie gewünscht, aber wenn er wahr ist, gibt er statt der Werte Nullen aus! Können Sie mir sagen, was falsch ist? Was mache ich falsch?

Ich danke Ihnen!

 
lVlaxim:

Guten Tag!

  1. In der angehängten Datei gibt es einen Druckfehler, wenn ich mich nicht irre! In der Beschreibung der Funktion CheckOpenLong in den Zeilen zur Berechnung der Variablen sl und tp sollten die Vorzeichen vertauscht sein.
  2. Ich habe die Funktion CheckOpenLong wie folgt geändert: d.h. sie sollte nur die Werte von Close, Open und MA für den letzten und den vorherigen Bar ausgeben. Wenn der Wert von EveryTick also falsch ist, dann funktioniert alles wie es sollte, aber wenn er wahr ist, dann werden statt der Werte Nullen ausgegeben! Können Sie mir sagen, was falsch ist? Was mache ich falsch?

Ich danke Ihnen!

Zu Punkt 1: Danke, dass Sie den Fehler gefunden haben. Er wird behoben werden.

Zu Punkt 2, es gab eine kleine Unstimmigkeit mit MQL5, behoben. Es sollte in der nächsten Build erscheinen.