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
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 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.
- www.mql5.com
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.
Und noch etwas: Dieser Fehler tritt immer auf:
'--' - l-value required 1234.mq5 31 57
- www.mql5.com
Guten Tag!
- 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.
- 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!
Guten Tag!
- 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.
- 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.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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.
Autor: MetaQuotes Software Corp.