Wie kann man EA für mehrere Paare ausführen? - Seite 2

 
mittalpa

Ich denke, beide Ansätze sind gut.

Das Einzige, was ich hinzufügen möchte, ist, dass Option #2 aufgrund des geringeren Overheads einen Leistungsvorteil hat. Alles findet im Speicher statt, was natürlich schneller ist als eine Dateioperation.

Ein Vorteil von Option #3 ist, wenn Sie die Dateidaten für etwas verwenden wollen, was MT4 nicht kann.

Bedenken Sie auch, dass Sie, wenn Sie einen EA bauen wollen, der sich von Stromausfällen usw. erholen kann, ohne dass der Benutzer eingreifen muss, um die Marktbedingungen usw. zu aktualisieren, ohnehin eine Dateizugriffsfunktionalität entwickeln werden.

 
cloudbreaker wrote >>

Bedenken Sie auch, dass Sie, wenn Sie einen EA erstellen müssen, der sich von Stromausfällen usw. erholen kann, ohne dass der Benutzer eingreifen muss, um die Marktbedingungen usw. zu aktualisieren, ohnehin eine Dateizugriffsfunktionalität erstellen müssen.

Meiner Erfahrung nach werden Sie bei dem Versuch, einen EA zu erstellen, der mit mehreren Paaren handelt, auf eine Menge Probleme stoßen.

1. Jedes Paar braucht seine eigene Logik, Optimierung und für einige Paare vielleicht sogar eine andere Handelsstrategie. Ich habe EAs geschrieben, die für ein bestimmtes Paar so weit optimiert waren, dass sie gut handelten. Als ich dann versuchte, sie für ein anderes Paar zu verwenden, das die größte Korrelation zum ersten Paar aufweist, war ich erstaunt, dass viele Dinge geändert werden mussten, damit der EA für das zweite Paar funktionierte und optimiert wurde. Ich habe festgestellt, dass jedes Paar einen eigenen kompletten Satz an benutzerdefinierten Einstellungen, Indikatorwerten und oft sogar Änderungen in der grundlegenden Logik und Strategie benötigt. Für mich ist es viel sinnvoller, einen sehr flexiblen EA zu erstellen, der mehrere verschiedene Strategien und Logikzweige enthält. Dann ist es nur eine einfache Angelegenheit, eine neue optimale .set-Datei für jedes Paar zu erstellen.

2. Der EA, den Sie erstellen möchten, kann im Strategy Tester nicht zurückgetestet und optimiert werden. Meiner Erfahrung nach sind Backtests und Optimierungen unerlässlich. Es gibt Optimierungen, die die Leistung meines EA erheblich verbessert haben und die ich ohne den Strategy Tester nie entdeckt hätte. Er hat mir z. B. Indikatoreinstellungen geliefert, die so weit von dem entfernt waren, was von vielen als die nützlichsten und optimalen Werte für einen bestimmten Indikator angesehen wird, dass ich nie auf die Idee gekommen wäre, Werte auszuprobieren, die auch nur annähernd den optimalen Werten entsprachen. Denken Sie daran, wie viele Parameter Sie in Ihrem EA haben. Jeder einzelne muss optimiert werden, und jede Optimierung eines Parameters kann eine Änderung eines anderen Parameters erfordern. Deshalb können Sie nicht einfach jeden Parameter für sich optimieren. Das Ziel bei der Optimierung ist es, alle Parameter im Verhältnis zueinander so gut wie möglich zu optimieren. Das kann viel Zeit und Arbeit kosten, wenn man den Tester benutzt, aber es ist so gut wie unmöglich, diese Optimierungen manuell durchzuführen, indem man die Parameter einzeln ändert.

Unabhängig davon, wie Sie Ihren EA programmieren, ist es in den meisten Fällen nicht zwingend erforderlich, den EA-Status oder andere Informationen in einer Datei zu speichern, und es ist auch nicht die einzige Option. Der beste, effizienteste und einfachste Weg, dies zu tun, ist, den Status in globalen Variablen zu speichern. Schließlich ist dies der eigentliche Grund, warum MT um die Funktion der globalen Variablen erweitert wurde. Einige von Ihnen sprachen auch davon, einen zusätzlichen EA zu erstellen, der nur dem Zweck dient, die im Dateisystem gespeicherten Daten auszutauschen und den Datenaustausch und die Interaktion zwischen den beiden EAs zu ermöglichen. Auch dies ist unnötig. Der Datenaustausch und sogar die Möglichkeit der bedingten Logik zwischen mehreren EAs ist ein weiteres Merkmal der globalen Variablen. So können mehrere EAs auf verschiedenen Charts auf die Daten eines beliebigen EAs zugreifen und diese Daten nutzen, um Entscheidungen zu treffen, die eine Änderung in einem anderen EA bewirken können. Diese Daten sind auch im Falle eines Computerabsturzes oder Stromausfalls sicher und geschützt. Aber was passiert bei einem Absturz oder Stromausfall, wenn Sie gerade Daten speichern, lesen oder zwischen EAs austauschen und eine oder zwei Dateien geöffnet haben? Es ist sehr wahrscheinlich, dass Daten fehlen, dass Daten beschädigt sind oder - im schlimmsten Fall - dass es keine oder nur Null-Byte-Dateien gibt. Mit Globalen Variablen kann keines dieser Probleme auftreten. Ihr EA-Status wird genau so sein, wie er in der Millisekunde vor dem Systemabsturz war. Der Nachteil von GVs, über den jeder spricht, ist, dass sie keine Strings speichern können, aber es gibt einige gute Möglichkeiten, dies zu umgehen.

Zunächst einmal können GVs Strings speichern, wenn Sie den GV-Namen als String-Wert verwenden, z. B. GlobalVariableSet(Symbol() + "LastUptime=" + TimeLocal(), -1); Ein Problem dabei ist, dass die Länge von GV-Namen begrenzt ist, so dass Sie auf diese Weise keine langen Strings speichern können. Eine andere großartige Lösung, die ich ständig verwende, ist das Speichern von Zeichenketten in den Textfeldern von grafischen Objekten. Sie können mit ihnen genauso arbeiten wie mit Aufträgen und GVs. Es gibt mql-Funktionen, mit denen man die Gesamtzahl von GVs und grafischen Objekten ermitteln kann, so dass man eine Schleife durch alle diese Objekte ziehen kann, um das gesuchte zu finden, und zwar genau so, wie man eine Schleife durch die Aufträge zieht.

WARNUNG - ich komme jetzt ein bisschen vom Thema ab und erzähle von anderen coolen Möglichkeiten, wie grafische Objekte Ihre Handelsfunktionen verbessern können... ich schweife ein bisschen vom Thema ab, aber es könnte eine nützliche Information sein...

Es gibt noch viel mehr nützliche Dinge, die Sie mit grafischen Objekten tun können. Einer meiner EAs hat zum Beispiel eine optionale Hedging-Funktion. Wenn die Absicherung aktiviert ist, gibt es natürlich keinen echten Stop-Loss für neue Aufträge, denn bei der Absicherung desselben Symbols geht es darum, einen entgegengesetzten Auftrag zu eröffnen, wenn der erste Auftrag über den normalen Stop-Loss hinausgeht und der erste Auftrag offen bleiben muss. Ihr Code müsste also wissen, wie hoch der Stop-Loss ist, und den Handel überwachen, um die Absicherung zu öffnen, wenn die erste Order den Stop-Loss-Kurs erreicht. Falls es ein Missverständnis gibt: Der Grund, warum wir keinen tatsächlichen Stop-Loss für die Order verwenden können, ist, dass die Order dann geschlossen würde, was natürlich überhaupt keine Absicherung zur Folge hätte. Aber mit grafischen Objekten kann man dies besser machen und es für den Benutzer genau so aussehen lassen wie ein echter Stop-Loss. Sie gehen folgendermaßen vor: Wenn Sie den Auftrag erteilen, erstellen Sie gleichzeitig ein horizontales Linienobjekt mit dem Preisparamter = dem Stop-Loss-Kurs. Der Name des Linienobjekts lautet "Order #" + orderTicket; die Beschreibung lautet "StopLoss @ " + SLPrice. Setzen Sie den Linienstil auf STYLE_DASHDOT und die Farbe auf rot, und schon haben Sie eine Stop-Loss-Linie, die genau so aussieht wie die echte. Auch der Code, mit dem das funktioniert, ist einfach. Alle Informationen, die Sie benötigen, sind bereits im Linienobjekt gespeichert - die Ticketnummer des Auftrags und der SL-Preis, der der Wert des Linienobjekts ist. Dann erstellen Sie eine Funktion, die überprüft, ob der aktuelle Preis die Linie erreicht oder überschreitet. Wenn dies der Fall ist, erhalten Sie die Ticketnummer, die im Namensfeld der Zeile gespeichert wurde. Dann suchen Sie den offenen Auftrag, der das gleiche Ticket hat. Wählen Sie den Auftrag aus, um zu sehen, ob es sich um einen Kauf- oder Verkaufsauftrag handelt und um die Losgröße zu erfahren. Jetzt haben Sie alle Informationen, die Sie benötigen, um Ihren Hedge-Auftrag zu eröffnen. Sie eröffnen einen neuen Auftrag, der dem ersten Auftrag gegenüberliegt und die gleiche Losgröße hat. Der letzte Schritt besteht darin, die Stop-Loss-Linie zu löschen. Wenn Sie das beobachten, ist es ziemlich cool, denn jetzt können Sie sehen, wann Sie kurz davor sind, "abgesichert" zu sein.

Ein weiterer Vorteil ist, dass Sie die SL/Hedge-Linie einfach ein wenig nach oben ziehen können, wenn Sie glauben, dass Ihr Auftrag es schaffen könnte, wenn der Preis zu Ihren Gunsten zurückgeht, Sie aber noch ein wenig mehr Spielraum brauchen. Würden Sie sich nicht wünschen, dass Sie das auch mit den Standard-SL- und TP-Linien machen könnten? Das wäre eine großartige neue Funktion, wenn sie die Stop-Loss- und Take-Profit-Linien beweglich machen würden, damit wir schnelle Anpassungen vornehmen können, wenn der Markt wirklich in Bewegung ist. Natürlich können Sie das schon heute in Ihren EAs mit den oben beschriebenen Schritten tun, und ein guter Vorteil ist, dass der Broker Ihre SL- oder TP-Linien nie sehen würde. Der Nachteil ist, wenn Ihr Computer ausfällt, haben Sie keinen serverseitigen SL oder TP. Aber das gleiche gilt für Robots wie FapTurbo. Deren "Stealth"-Methode besteht darin, den Aufträgen gefälschte SL- und TP-Werte zuzuweisen und die Aufträge entweder über den Code zu schließen oder den Auftrag in letzter Minute mit den korrekten SL- und TP-Werten zu ändern, wenn der Preis sich nähert.

 
Jacques366:

Hallo zusammen,

Ich ziehe es vor, im Auge zu behalten, wir sind immer noch in Echtzeit-Verarbeitung arbeiten, so dass ich einfach vergessen, mit while-Schleife oder wait-Funktion, um die Hand auf die Kommunikation zu halten!

Wenn Sie Ihren EA an ein Paar wie EURUSD anhängen, erhalten Sie genug Signale, um alle anderen Paare zu verwalten, Ticks sind sehr häufig. Es ist keine Frage von Minuten, sondern von Sekunden (eine Schleife für 2 Minuten laufen zu lassen, klingt für mich wirklich verrückt). Wenn es nicht eine Frage von Sekunden ist, denken Sie einfach, warum oder sehen Sie mit einem anderen Broker.

wenn Sie wirklich brauchen mehr als das, was Sie bekommen in Anhängen Ihrer EA zu eurusd, denken Sie an die Ausführung von separaten Instanz von Ihrem EA zu jeder Währung angehängt. Sorry, aber ich neige zu denken "oder überdenken Sie Ihr System".

Sorry, wenn das Gefühl, dass dieser Beitrag ist ein bisschen abrupt. Wollte mit Ihnen meine Sichtweise zu teilen.

Viel Glück!

Ich bin ein unerfahrener Programmierer, also betrachten Sie dies bitte als ein "Was-wäre-wenn"-Szenario zu Diskussionszwecken:


Mir ist klar, dass es schlecht programmiert ist, eine endlose While-Schleife zu erstellen, in der sich nichts Produktives befindet, oder wenn es Sie daran hindert, den Rest Ihres EAs auszuführen, aber was wäre, wenn Sie eine endlose While-Schleife erstellen, die den Hauptteil Ihres EAs enthält? Ich verstehe die MQL4-Programmierung nicht gut genug, um Ihre Bemerkung "halten Sie die Hand auf die Kommunikation" vollständig zu verstehen. Wenn Sie Handelsaufträge über ein eigenständiges Skript starten, werden Sie dann Kommunikationsprobleme haben, wenn der EA in einer Endlosschleife weiterläuft?


Ich spiele nach wie vor mit dem Gedanken, eine endlose While-Schleife zu verwenden und Handelsaufträge über eigenständige Skripte zu erteilen, weil die Abhängigkeit von eingehenden EURUSD-Ticks zur Ausführung des EA zu einigen langen Verzögerungen führen kann. Zum Beispiel zwischen 0700 und 0800 GMT heute, die längste Wartezeit wäre 31 Sekunden gewesen, aber später am Tag gegen Ende der New Yorker Sitzung kann die Wartezeit bis zu 2 Minuten für einen eingehenden Tick dauern --- Ich habe die asiatische Sitzung noch nicht überprüft, aber ich vermute, dass es auch hier einige lange Intervalle zwischen Ticks gibt.


Wenn Sie den Hauptteil Ihres EA in eine Endlosschleife setzen, können Sie die Häufigkeit der Aktualisierung aller von Ihnen gehandelten Währungen leicht kontrollieren, ohne eine Verzögerung in Kauf nehmen zu müssen. Vielleicht müssen Sie sogar eine 100-250-Millisekunden-Schlafanweisung in die Schleife einfügen, um sie ein wenig zu verlangsamen, wenn 50 Durchläufe durch den EA in 1 Sekunde zu viel sind.


Ich bin für jedes Feedback dankbar.

 
vangrosh wrote >>

WARNUNG - ich werde jetzt ein bisschen über andere coole Möglichkeiten sprechen, wie grafische Objekte Ihre Handelsfunktionen verbessern können... ich komme ein bisschen vom Thema ab, aber vielleicht sind es nützliche Informationen...

genial!

 
vangrosh:

Meiner Erfahrung nach werden Sie bei dem Versuch, einen EA zu erstellen, der mit mehreren Paaren handelt, auf eine Menge Schwierigkeiten stoßen.

Das ist wirklich cooles Zeug und ich werde sicherlich das meiste davon in meinen EA einbauen.

Ein paar Dinge habe ich bereits beschlossen -
1. Nur ein Paar pro EA.
2. Nur ein Auftrag pro Paar. (Dies kann sich später ändern, aber ich werde mich daran halten, bis ich kompetent genug bin).

Vielen Dank, dass Sie Ihre goldenen Erfahrungen mit uns teilen.

Pankaj
 

Diese Grafik zeigt den Zeitabstand zwischen den Ticks für EURUSD am 29. April 2009. Ich weiß nicht, für welche Zeitzone diese Daten stehen. Die Tick-Daten wurden von Gain Capital heruntergeladen.

Wie Sie sehen können, gibt es einige Zeiträume während des Tages, in denen der Abstand zwischen den Ticks häufig eine Minute und gelegentlich zwei Minuten überschreitet.



 
vangrosh:

Dann ist es ganz einfach, für jedes Paar eine neue optimale .set-Datei zu erstellen.

vangrosh: Wie erstellt und verwendet man eine .set-Datei? Ich konnte keine Referenz für diesen Dateityp finden.

 
cloudbreaker wrote >>

Bedenken Sie auch, dass Sie, wenn Sie einen EA erstellen müssen, der sich von Stromausfällen usw. ohne Benutzereingriff erholen kann, um die Marktbedingungen usw. zu aktualisieren, ohnehin eine Dateizugriffsfunktionalität entwickeln werden.

Bitte schauen Sie hier nach: https://book.mql4.com/special/index

Allgemeine Merkmale komplexer Programme


Der richtige Weg, wenn Sie EAs mit mehreren Währungen erstellen möchten.

 
StraightTrader:

Bitte schauen Sie hier nach: https://book.mql4.com/special/index

Allgemeine Merkmale komplexer Programme


Der richtige Weg, wenn Sie EAs mit mehreren Währungen erstellen möchten.

Danke für den Hinweis.

 
FXtrader2008 wrote >>

Diese Grafik zeigt den Zeitabstand zwischen den Ticks für EURUSD am 29. April 2009. Ich weiß nicht, für welche Zeitzone diese Daten stehen. Die Tick-Daten wurden von Gain Capital heruntergeladen.

Wie Sie sehen können, gibt es einige Zeiträume während des Tages, in denen der Abstand zwischen den Ticks häufig eine Minute und gelegentlich zwei Minuten überschreitet.

Vielen Dank für die Grafik. Es wäre schön, es mit dem einiger anderer Währungen abzugleichen, nur um sicherzugehen, dass Sie nicht die gleichen Verzögerungen haben. (Ich wäre Ihnen dankbar, wenn Sie einfach Charts für, sagen wir, 4 Paare präsentieren könnten)

Als ich anfing, meinen EA zu erstellen, ist mir aufgefallen, dass, wenn ich beim Eurusd 1 oder 2 Minuten lang keine Ticks habe, dies auch bei anderen Währungen der Fall ist. Vielleicht war es damals nur ein Zufall oder eine schlechte Annahme, die ich gemacht habe, aber ich habe diese Idee beibehalten und mein EA läuft jetzt seit Monaten ohne Probleme. Die faktische Erfahrung kompensiert den Mangel an Logik und ich habe meinen EA so weiterlaufen lassen. Wenn ich Probleme gehabt hätte, hätte ich Ihre Lösung eingesetzt, ich meine Ihre Idee, Ihren EA mit einer Verzögerung zwischen 2 Läufen wach zu halten. Logischerweise ist das, wie es getan werden sollte, so weit ich weiß: aber ich weiß nicht, wie Ticks von den Brokern generiert werden, so ist es schwierig, weiter zu gehen.

Es ist auch "normal" oder "besser", je nach dem System, in dem Ihr Programm läuft, zu programmieren.

Wenn wir also mehrere Währungen behandeln, sollten wir normalerweise in der Lage sein, unseren EA mit einem Kanal zu verbinden, der alle Ticks liefert. Das ist ein Mangel in der Systemlogik, mit dem wir auf die eine oder andere Weise umgehen müssen.

Mit freundlichen Grüßen