Diskussion zum Artikel "Erstellen eines EA, der automatisch funktioniert (Teil 15): Automatisierung (VII)"
Hallo Daniel, zunächst einmal möchte ich dir zu deiner Leistung bei der Zusammenarbeit mit der Gemeinschaft der Entwickler und Enthusiasten gratulieren.
Ich habe eine Frage zur Ausführung des EA in dieser Artikelreihe.
Ich habe ihn in Netting- und Hedging-Konten getestet, indem ich die OCO-Order auf Pending gesetzt habe, wie in Ihrer Dokumentation beschrieben. Aber die Aufträge werden nicht ausgeführt.
Und es gibt auch keine Fehler im Log.
Woran kann das liegen?
Hinweis: Ich habe nichts am Code geändert, nur die Kauf- und Verkaufslogik... Ich habe es mit meiner Logik (meiner Strategie) getestet und es gab keine Einträge, ich dachte: Ich habe etwas falsch gemacht, kkkk.... dann habe ich Ihren Code ohne Änderungen genommen, ihn kompiliert und das Gleiche passiert.
Es läuft manuell (wenn man die Batchmenge einstellt), aber nicht automatisch.
Hallo Daniel, zunächst einmal möchte ich dir zu deiner Leistung bei der Zusammenarbeit mit der Gemeinschaft der Entwickler und Enthusiasten gratulieren.
Ich habe eine Frage zur Ausführung des EA in dieser Artikelreihe.
Ich habe ihn in Netting- und Hedging-Konten getestet, indem ich die OCO-Order auf Pending gesetzt habe, wie in deiner Dokumentation beschrieben. Aber die Aufträge werden nicht ausgeführt.
Auch gibt es keinen Fehler im Protokoll.
Woran könnte das liegen?
Hinweis: Ich habe nichts am Code geändert, nur die Kauf- und Verkaufslogik... Ich habe es mit meiner Logik (meiner Strategie) getestet und es gab keine Einträge, ich dachte: Ich habe etwas falsch gemacht, kkkk.... dann habe ich Ihren Code ohne Änderungen genommen, ihn kompiliert und das Gleiche passiert.
Es läuft manuell (wenn man die Batchmenge einstellt), aber nicht automatisch.
Automatische Eingaben erfolgen nur, wenn die von Ihnen festgelegten Eingabeparameter die Auslösung des Auftrags zulassen. Mit anderen Worten: Wenn Ihre Logik besagt, dass der Indikator, was auch immer es ist, einen bestimmten Wert haben muss, wird der automatische Ein- oder Ausstieg nur dann erfolgen, wenn dieser Wert erreicht wird. Andernfalls wird er nie ausgelöst. Sie haben vielleicht gesehen, dass es in der Sequenz 3 Beispiele für Setups gibt. Versuchen Sie, jedes dieser Beispiele zu studieren, um zu verstehen, wie die Triggerlogik funktioniert. Wenn Sie diese Auslöselogik nicht verstehen, können Sie den automatischen Mechanismus nicht zum Laufen bringen. Es ist wie bei einer Mausefalle: Wenn du sie so aufstellst, dass sie einen Elefanten fängt, wird sie nicht ausgelöst, wenn die Maus sie berührt 😂 ... Wie auch immer, studiere die Mechanismen in den Beispielen und viel Glück ... 😁👍
Daniel, ich danke dir für dein Engagement beim Unterrichten.
Kannst du bitte die Funktionsweise des EA dieses Teils 15 - Version v3 - überprüfen, der den C_Automaton_v3.mqh verwendet?
Die Definition der eSelectMedia-Liste ist klar. Ich glaube jedoch, dass es ein Problem bei der Verwendung gibt, wenn es um die Manipulation der Elemente von m_Op-Arrays in der FOR-Schleife geht, insbesondere mit "sizeof(eSelectMedia)".
Laut der Dokumentation(https://www.mql5.com/en/docs/basis/types/integer/enumeration) gibt sizeof immer 4 zurück, auch bei Aufzählungen mit mehr Elementen.

- www.mql5.com
Daniel, ich danke dir für dein Engagement in der Lehre.
Kannst du bitte das Funktionieren des EA dieses Teils 15 - Version v3 - überprüfen, der den C_Automaton_v3.mqh verwendet?
Die Definition der eSelectMedia-Liste ist klar. Ich denke jedoch, dass es bei der Verwendung einige Probleme gibt, die die Manipulation der Elemente des m_Op-Arrays in der FOR-Schleife betreffen, insbesondere mit "sizeof(eSelectMedia)".
Laut der Dokumentation(https://www.mql5.com/en/docs/basis/types/integer/enumeration) gibt sizeof immer 4 zurück, auch für Aufzählungen mit mehr Elementen.
Sie verwechseln da etwas. Die 4, die die Dokumentation angibt, ist die Größe in Bytes, die für die Rückgabe von sizeof verwendet wird, und nicht die Anzahl der maximalen Elemente, die zurückgegeben werden.
Sie verwechseln da etwas. Die 4, die die Dokumentation angibt, ist die Größe in Bytes, die bei der Rückgabe von sizeof verwendet wird, und nicht die Anzahl der maximalen Elemente, die zurückgegeben werden.
Daniel, danke für die schnelle Antwort.
Zum Thema FOR mit sizeof(enum) füge ich unten noch ein Testskript, das erzielte Ergebnis und eine weitere Frage hinzu.
Vielen Dank für Ihre Hinweise.
test.mq5 Skript
//+------------------------------------------------------------------+ void OnStart() { enum eSelectMedia {MEDIA_FAST, MEDIA_SLOW}; enum eSelectMeses {JANEIRO, FEVEREIRO, MARCO, ABRIL, MAIO, JUNHO, JULHO, AGOSTO, SETEMBRO, OUTUBRO, NOVEMBRO, DEZEMBRO}; struct st01 { double Buff[]; int Handle; }m_Op[sizeof(eSelectMedia) + 1]; Print("Tamanho do eSelectMedia = ", sizeof(eSelectMedia)); Print("Tamanho do eSelectMeses = ", sizeof(eSelectMeses)); Print("Tamanho do m_Op = ", ArraySize(m_Op)); Print("========= Mostrar enum eSelectMedia ========="); for (int i = sizeof(eSelectMedia); i >= 0; i--) { Print("eSelectMedia - idx = ", i); } Print("========= Mostrar enum eSelectMeses ========="); for (int i = sizeof(eSelectMeses); i >= 0; i--) { Print("eSelectMeses - idx = ", i); } Print("========= Mostrar enum m_Op ========="); for (int i = ArraySize(m_Op); i >= 0; i--) { Print("m_Op - idx = ", i); } } // Ende OnStart() //+------------------------------------------------------------------+
Ergebnis:
2023.06.07 09:09:10.415 teste (EURUSD,M1) Tamanho do eSelectMedia = 4 2023.06.07 09:09:10.415 teste (EURUSD,M1) Tamanho do eSelectMeses = 4 2023.06.07 09:09:10.415 teste (EURUSD,M1) Tamanho do m_Op = 5 2023.06.07 09:09:10.415 teste (EURUSD,M1) ========= Mostrar enum eSelectMedia ========= 2023.06.07 09:09:10.415 teste (EURUSD,M1) eSelectMedia - idx = 4 2023.06.07 09:09:10.415 teste (EURUSD,M1) eSelectMedia - idx = 3 2023.06.07 09:09:10.415 teste (EURUSD,M1) eSelectMedia - idx = 2 2023.06.07 09:09:10.415 teste (EURUSD,M1) eSelectMedia - idx = 1 2023.06.07 09:09:10.415 teste (EURUSD,M1) eSelectMedia - idx = 0 2023.06.07 09:09:10.415 teste (EURUSD,M1) ========= Mostrar enum eSelectMeses ========= 2023.06.07 09:09:10.415 teste (EURUSD,M1) eSelectMeses - idx = 4 2023.06.07 09:09:10.415 teste (EURUSD,M1) eSelectMeses - idx = 3 2023.06.07 09:09:10.415 teste (EURUSD,M1) eSelectMeses - idx = 2 2023.06.07 09:09:10.415 teste (EURUSD,M1) eSelectMeses - idx = 1 2023.06.07 09:09:10.415 teste (EURUSD,M1) eSelectMeses - idx = 0 2023.06.07 09:09:10.415 teste (EURUSD,M1) ========= Mostrar enum m_Op ========= 2023.06.07 09:09:10.415 teste (EURUSD,M1) m_Op - idx = 5 2023.06.07 09:09:10.415 teste (EURUSD,M1) m_Op - idx = 4 2023.06.07 09:09:10.415 teste (EURUSD,M1) m_Op - idx = 3 2023.06.07 09:09:10.415 teste (EURUSD,M1) m_Op - idx = 2 2023.06.07 09:09:10.415 teste (EURUSD,M1) m_Op - idx = 1 2023.06.07 09:09:10.415 teste (EURUSD,M1) m_Op - idx = 0
Das eSelectMedia enum hat 2 Elemente.
Das eSelectMonths enum hat 12 Elemente.
Der Rückgabewert von sizeof() ist 4, für jeden von ihnen, laut der Dokumentation.
Die m_Op hat ArraySize() = 5, da sie laut der Datei C_Automaton_v3.mqh auf der Basis von sizeof(eSelectMedia) + 1 definiert wurde.
Als ich sizeof(enum) in der FOR-Schleife verwendete, wurde die Anzahl der Elemente im entsprechenden Enum nicht berücksichtigt. Die Interaktion berücksichtigte 4, was die Rückgabe von sizeof(enum) ist, sowohl für die Aufzählung mit 2 Elementen als auch für die Aufzählung mit 12 Elementen.
Wie sollte ich damit eine Schleife erstellen, die die genaue Anzahl der Elemente in einer Aufzählung berücksichtigt?
Falsch formatierter Code vom Moderator bearbeitet.
Bitte verwenden Sie die bei der Eingabe Ihres Codes die Taste CODE (Alt -S).

- www.mql5.com
Neuer Artikel Einen EA erstellen, der automatisch arbeitet (Teil 15): Automatisierung (VII) wurde veröffentlicht:
Autor: Daniel Jose
Hallo, ich verwende den von Ihnen zur Verfügung gestellten EA auf dem EURUSD 1M Chart und während des Prozesses erlebe ich, dass die ClosePosition Funktion die Position nicht erfolgreich schließt.
Ich vermute, dass es daran liegt, dass der Kontotyp Hedging ist und die Position geschlossen werden muss, indem die Aktion auf TRADE_ACTION_CLOSE_BY anstelle von TRADE_ACTION_DEAL gesetzt wird.

- 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 Erstellen eines EA, der automatisch funktioniert (Teil 15): Automatisierung (VII) :
Zum Abschluss dieser Artikelserie über Automatisierung werden wir das Thema des vorangegangenen Artikels weiter erörtern. Wir werden sehen, wie alles zusammenpassen wird, damit der EA wie ein Uhrwerk läuft.
Ich habe versucht, die Dinge so darzustellen, dass man tatsächlich ein sicheres, zuverlässiges und robustes System aufbauen kann. Gleichzeitig sollte es modular, kompakt und sehr leicht sein. Und Sie sollten in der Lage sein, es in Verbindung mit vielen anderen Dingen zu verwenden. Es nützt nichts, ein System zu haben, mit dem man nicht mehrere Dinge gleichzeitig bedienen kann. Denn Sie werden nicht immer in der Lage sein, einen guten Gewinn zu erzielen, wenn Sie nur einen Vermögenswert handeln.
Vielleicht werden die meisten Leser an diesem letzten Artikel der Reihe interessiert sein, in dem ich die Idee anhand von 3 praktischen Beispielen erläutere. Bitte beachten Sie jedoch, dass die Kenntnis der gesamten Artikelreihe erforderlich ist, um die Vorteile dieses Artikels nutzen zu können. Aber ich glaube, dass es mir auf sehr einfache Weise gelungen ist, die Idee zu vermitteln, dass es nicht notwendig ist, ein Genie in der Programmierung zu sein oder mehrere Kurse und Abschlüsse zu haben. Sie müssen nur wirklich verstehen, wie die MetaTrader 5 Plattform und die MQL5 Sprache funktionieren.
Ich habe auch gezeigt, wie Sie besondere Umstände für ein effizientes Arbeitssystem schaffen können, selbst wenn MQL5 oder MetaTrader 5 den Indikator, den Sie verwenden möchten, nicht bereitstellen. Dies wurde in Beispiel 3 getan, wo ich gezeigt habe, wie man den HILO-Indikator intern erstellt. Unabhängig davon sollte das System aber immer korrekt implementiert und getestet werden. Denn es hat keinen Sinn, ein wunderbares System zu entwickeln, das Ihnen am Ende keinen Gewinn bringt.
Autor: Daniel Jose