Neuling / Wer kann mir helfen?

 

Hallo MQL5 Programmierer,

ich bin Neuling in MQL5 und habe etliche Tutorials auf YT und zig Artikel zur MQL5 Programmierung gelesen. Erste kleine EAs mit Hilfe von Tutorials habe ich erstellt und verstehe auch soweit was vor sich geht und warum (z.B. einfache Überschneidung zweier EMAs und Auslösen einer Kauf,- oder Verkaufsorder). Nun habe ich mir vorgenommen einen etwas „schwierigeren EA“ zu programmieren und merke, dass ich an meine Grenzen stoße. Der EA soll nun folgendes machen:

-    Prüfe, ob schnelle EMA über oder unter langsamer EMA.
-    Prüfe, ob Stochastik im überkauften (>80) oder überverkauften Bereich (<20) liegt.

Eine Kauforder soll nur dann ausgelöst werden, wenn folgende Kriterien erfüllt sind:

-    Schnelle EMA über langsamer dann kaufsignal1 = true;
-    Stochastik im überverkauften Bereich (<20), dann x = true;
-    Stochastik kreuzt von unten nach oben die 20er Marke (am liebsten per Schlusskurs aber das habe ich noch nicht raus) kaufsignal2 = true;

Eine Verkaufsorder soll nur dann ausgelöst werden, wenn folgende Kriterien erfüllt sind:

-    Schnelle EMA unter langsamer verkaufsignal1 = true;
-    Stochastik im überkauften Bereich (>80) y = true;
-    Stochastik kreuzt von oben nach unten die 80er Marke (am liebsten per Schlusskurs aber das habe ich noch nicht raus) verkaufsignal2 = true;

Da ich Neuling bin war das mein erster Ansatz. Ich könnte mir aber vorstellen, dass es „eleganter“ gelöst werden könnte ;) Um zu prüfen, ob die Werte richtig gesetzt werden und dann eine Order aufgegeben wird lasse ich mir die gesetzten Werte über Print ausgeben. Wie ich im Journal feststelle, setzt und erkennt der EA die Parameter richtig.

Im Prinzip soll immer nur dann eine Order gesetzt werden, wenn alle Parameter für ein Kaufsignal/Verkaufsignal = true sind. Derzeit werden Kauf und Verkaufsorder gesetzt ohne das alle Parameter zutreffen. Ich habe mal meine TestDatei hier hochgeladen. Um euch die Suche zu sparen nutze ich im Backtest den EUR/US ab 31.12.18 beginnend. Das erste Mal, dass alle Parameter für eine Order erfüllt sind, sind laut Journal der 05.01.2019 um 05:35:40 Uhr. Es düfte erst hier die erste Order erteilt werden. Ich verstehe nicht, wieso vorher wild Order aufgegeben werden, obwohl die Parameter dafür nicht stimmen.

Es wäre jetzt einfach nur die Lösung präsentiert zu bekommen. Mich würde es freuen, wenn mir jemand erklärt, wieso das bei mir nicht funktioniert und eine Lösung unterbreitet/zusendet wie es funktioniert. Nur so habe ich die Möglichkeit zu lernen ;)

Vielen Dank

Niko
Dateien:
Test.mq5  16 kb
 
NightHawk1981:

Hallo MQL5 Programmierer,

ich bin Neuling in MQL5 und habe etliche Tutorials auf YT und zig Artikel zur MQL5 Programmierung gelesen. Erste kleine EAs mit Hilfe von Tutorials habe ich erstellt und verstehe auch soweit was vor sich geht und warum (z.B. einfache Überschneidung zweier EMAs und Auslösen einer Kauf,- oder Verkaufsorder). Nun habe ich mir vorgenommen einen etwas „schwierigeren EA“ zu programmieren und merke, dass ich an meine Grenzen stoße. Der EA soll nun folgendes machen:

-    Prüfe, ob schnelle EMA über oder unter langsamer EMA.
-    Prüfe, ob Stochastik im überkauften (>80) oder überverkauften Bereich (<20) liegt.

Eine Kauforder soll nur dann ausgelöst werden, wenn folgende Kriterien erfüllt sind:

-    Schnelle EMA über langsamer dann kaufsignal1 = true;
-    Stochastik im überverkauften Bereich (<20), dann x = true;
-    Stochastik kreuzt von unten nach oben die 20er Marke (am liebsten per Schlusskurs aber das habe ich noch nicht raus) kaufsignal2 = true;

Eine Verkaufsorder soll nur dann ausgelöst werden, wenn folgende Kriterien erfüllt sind:

-    Schnelle EMA unter langsamer verkaufsignal1 = true;
-    Stochastik im überkauften Bereich (>80) y = true;
-    Stochastik kreuzt von oben nach unten die 80er Marke (am liebsten per Schlusskurs aber das habe ich noch nicht raus) verkaufsignal2 = true;

Da ich Neuling bin war das mein erster Ansatz. Ich könnte mir aber vorstellen, dass es „eleganter“ gelöst werden könnte ;) Um zu prüfen, ob die Werte richtig gesetzt werden und dann eine Order aufgegeben wird lasse ich mir die gesetzten Werte über Print ausgeben. Wie ich im Journal feststelle, setzt und erkennt der EA die Parameter richtig.

Im Prinzip soll immer nur dann eine Order gesetzt werden, wenn alle Parameter für ein Kaufsignal/Verkaufsignal = true sind. Derzeit werden Kauf und Verkaufsorder gesetzt ohne das alle Parameter zutreffen. Ich habe mal meine TestDatei hier hochgeladen. Um euch die Suche zu sparen nutze ich im Backtest den EUR/US ab 31.12.18 beginnend. Das erste Mal, dass alle Parameter für eine Order erfüllt sind, sind laut Journal der 05.01.2019 um 05:35:40 Uhr. Es düfte erst hier die erste Order erteilt werden. Ich verstehe nicht, wieso vorher wild Order aufgegeben werden, obwohl die Parameter dafür nicht stimmen.

Es wäre jetzt einfach nur die Lösung präsentiert zu bekommen. Mich würde es freuen, wenn mir jemand erklärt, wieso das bei mir nicht funktioniert und eine Lösung unterbreitet/zusendet wie es funktioniert. Nur so habe ich die Möglichkeit zu lernen ;)

Vielen Dank

Niko

Ich. Ermute mal, das sich deine Werte alle auf close preise beziehen und die ändern sich.

bei repaint indikatoren zumindest über die periode

Bei nicht repaint indikatoren in der aktuellen periode, da kann es sein, das alles erfüllt ist aber bei. Kerzenschliss nicht mehr


und du musst immer schauen, ob du schin eine position offen hast oder nicht. Je nach hedge oder nettinG konto geht das unterschiedlich

 

Ich würde einen bestehenden funktionierende EA nehmen, statt von Null erstmal alle Fehlerfallen auszuprobieren:

CodeBase, Artikel und im Order die Beispiele des Terminals: ...\MQL5\Experts\Examples

 
amando:

Ich. Ermute mal, das sich deine Werte alle auf close preise beziehen und die ändern sich.

bei repaint indikatoren zumindest über die periode

Bei nicht repaint indikatoren in der aktuellen periode, da kann es sein, das alles erfüllt ist aber bei. Kerzenschliss nicht mehr


und du musst immer schauen, ob du schin eine position offen hast oder nicht. Je nach hedge oder nettinG konto geht das unterschiedlich

Hallo Amando und danke für deine Antwort,

leider kann ich dir nicht sagen, ob er die close Preise verwendet. Ich habe aber soeben lokalisieren können wo der Fehler passiert aber ich weiß nicht wie ich ihn beheben kann. Ich habe in Zeile 156 einen Haltepunkt fürs Debugging gesetzt. Das ist der Punkt direkt nach der Printausgabe. In dieser hat er folgende Werte Ausgespuckt:

Kaufsignal1 = false, Kaufsignal_X = true, Kaufsignal_2 = false

Verkaufsignal1 = false, Verkaufsignal_Y = false, Verkaufsignal_2 = false

Nun kommt der Punkt wo der Fehler passiert. In Zeile 160 erfolgt die Abfrage, ob alle Parameter für Kaufen = true sind. Diese durchläuft er einfach und trifft in Zeile 176 auf die Abfrage, ob alle Verkaufssignale = true sind. Obwohl dem nicht so ist (weil mindestens ein Verkaufsignal false ist) trifft er in Zeile 196 die Entscheidung zu verkaufen. Vermutlich weil hier die voidOnTick Funktion endet.

Daraufhin habe ich die Abfrage, ob alle Verkaufsignale true sind entfernt (Zeilen 175-186) (Zeilen195-198)  um zu gucken, ob er bei den Kaufsignalen den gleichen Fehler macht. Das tut er. Auch hier trifft er die Entscheidung zu kaufen, obwohl nicht alle Signale true sind.

Es muss also mit den Abfragen, ob alle Signale true sind zu tun haben (Zeile 160-170) und (Zeilen 176-186).

Grund der Beschwerde: