Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 320

 

Liebe Programmiererinnen und Programmierer, wer es weiß, bitte melden!

Ich habe einen Expert Advisor für MT4, der bei Erreichen eines Gesamtgewinns eine Reihe von Aufträgen (500-2500) schließt. Wie ich feststellte, schließt er die Aufträge nacheinander ab und sortiert sie nach ihrer Magie - von der geringeren zur größeren.

Hier ist also die Frage: Ist es möglich, Ihrem Expert Advisor die Funktion hinzuzufügen, ein Skript beim Schließen von Aufträgen zu starten, das die Aufträge schließt, sie aber nach dem Magier vom Ende her sortiert - von größer zu kleiner?

Wird diese Idee die Geschwindigkeit des Auftragsabschlusses beschleunigen?

Irgendwo wurde mir gesagt, dass bis zu 4 Anfragen gleichzeitig an den Server gesendet werden können.
 
Tapochun:
Dann müssen Sie sich den Code ansehen... vielleicht ist es das... Gibt es eine solche Zeile in den Drucken?
Nein. Alles wurde zuvor ohne Probleme getestet... Was könnte es sonst sein?


 
Novikov:

Liebe Programmiererinnen und Programmierer, wer es weiß, bitte melden!

Ich habe einen Expert Advisor für MT4, der bei Erreichen eines Gesamtgewinns eine Reihe von Aufträgen (500-2500) schließt. Wie ich feststellte, schließt er die Aufträge nacheinander ab und sortiert sie nach ihrer Magie - von der geringeren zur größeren.

Die Frage ist also , ob es möglich ist, Expert Advisor eine Funktion hinzuzufügen, um ein Skript beim Schließen von Aufträgen zu starten, das die Aufträge schließt, sie aber nach Magier vom Ende her sortiert - von größer zu kleiner?

Und wird diese Idee die Geschwindigkeit des Auftragsabschlusses beschleunigen?

Irgendwo wurde mir gesagt, dass bis zu 4 Anfragen gleichzeitig an den Server gesendet werden können.

Sie können das Skript nicht über den Expert Advisor ausführen. Sie können wirklich mehrere Anfragen von verschiedenen EAs gleichzeitig an den Server senden. Wenn Sie mehrere EAs synchronisieren, ist es in der Tat möglich, einen gewissen Leistungsgewinn zu erzielen.

Aber an Ihrer Stelle würde ich mir nicht den Kopf an der offenen Tür einschlagen. Ich würde lieber zu MetaTrader5 wechseln. Mit der Funktion OrderSendAsync können Sie Positionen in Stapeln mit einer unglaublichen Geschwindigkeit von 100-200 Aufträgen in ein paar Sekunden schließen:

Forum für Handel, automatisierte Handelssysteme und Strategietests

Entwickler! Fehler 10024 (Zu viele Anfragen)

C-4, 2014.11.07 15:55

Wie auch immer, ich fasse meine kleine Recherche zusammen.

Es gelang mir, 50 Anfragen in 50 Millisekunden, 100 Anfragen in 180msec, 200 in 2100msec, 500 Anfragen in 9000msec und 1000 Anfragen in 23000msec zu verarbeiten. (die Zeit ist ein Durchschnittswert). D.h. je mehr wir schieben müssen, desto mehr Zeit brauchen wir. Möglicherweise handelt es sich um eine unzureichende Kodierung.

Die tatsächliche Ausführungszeit für ein Bündel von Anfragen ist natürlich länger. Diese Zeit scheint dem Worst-Case-Szenario zu entsprechen - Zeit für das Senden der Anfrage + Zeit für die Ausführung der Anfrage. In jedem Fall tendiert sie im Grenzfall zur durchschnittlichen Zeit der Auftragsausführung durch die Börse + Zeit für die Kommunikation mit dem Handelsserver. Wenn die Anzahl der Anfragen weniger als 60 beträgt, brauchen wir nicht mit dem Handelsserver zu kommunizieren, alle Anfragen zu senden und auf ihre Erfüllung zu warten. Das Senden selbst dauert 40-60 Millisekunden. Wenn es mehr Anfragen gibt, ist es schwieriger. Sie müssen die Antwort des Servers abwarten, das Senden von Aufträgen erneut einschalten, auf die Ablehnung warten usw. Es findet also ein Austausch von Nachrichten über das Netz statt. Wenn viele Anfragen eingehen, wird der Pool nach und nach freigegeben, wenn die Anfragen erfüllt sind. Nachfolgende Sendungen kommen in kleinen Portionen, eine oder zwei Anfragen auf einmal, und das ist das Netz. Folglich wächst die Zeit. Wie auch immer, der Code scheint korrekt zu funktionieren, man muss nur den Mechanismus des Sendens/Empfangens von Anfragen verstehen.

Ich habe den Code beigefügt, mit dem das Senden getestet wird.

p.s. Zusammenfassend lässt sich sagen, dass 60 Anfragen selbst für den HFT-Handel mehr als genug sind. Sie brauchen eine bewusste Analyse der Handelsaktionen - Sie senden eine Order, erhalten das Ergebnis, analysieren das Handelsumfeld und senden gegebenenfalls eine neue Order. Der gesamte Zyklus wird die Größenordnung von 40-60 Millisekunden + durchschnittliche Ausführungszeit eines Auftrags deutlich überschreiten.


 
R0MAN:
Nein. Früher wurde alles getestet, ohne dass Fragen gestellt wurden... Irgendwelche Tipps, was es sonst noch sein könnte?


Testen Sie mit neuen Daten. Haben Sie versucht, es in einem anderen Terminal auszuführen?
 
Tapochun:
Testen Sie mit neuen Daten. Haben Sie versucht, es in einem anderen Terminal auszuführen?
Nein. Ich habe heute ein neues von bx installiert. Ich habe versucht, es zu testen. Ich versuche es mit einem anderen... Ich werde die Ergebnisse hier veröffentlichen.
 
C-4:

Es ist nicht möglich, ein Skript von einem EA auszuführen. Es ist in der Tat möglich, mehrere Anfragen von verschiedenen EAs gleichzeitig an den Server zu senden. Wenn Sie mehrere EAs synchronisieren, ist es in der Tat möglich, einen gewissen Leistungsgewinn zu erzielen.

Aber wenn ich Sie wäre, würde ich nicht mit dem Kopf gegen die offene Tür stoßen. Ich würde lieber zu MetaTrader5 wechseln. Die Funktion OrderSendAsync ermöglicht es Ihnen, Positionen in Stapeln mit einer unglaublichen Geschwindigkeit von 100-200 Aufträgen in ein paar Sekunden zu schließen:



Was hat MT5 und außerdem 100-200 Aufträge damit zu tun? Und welche 100-200 Aufträge im MT5? Das sind 100-200 Handelsinstrumente im MT5! Schließlich kann nur 1 Auftrag auf 1 Symbol eröffnet werden - wenn ich mich nicht irre!

Und ich habe eine große Anzahl von Aufträgen über 28 Instrumente angehäuft, und das zum Teil mit Losen!

Wenn Sie etwas zum Thema der Frage vorzuschlagen haben, wäre ich Ihnen dankbar, und Ratschläge zu geben, die nichts mit der Frage zu tun haben, ist unnötig und nicht konstruktiv!

 
C-4:

Es ist nicht möglich, ein Skript von einem EA auszuführen. Es ist in der Tat möglich, mehrere Anfragen von verschiedenen EAs gleichzeitig an den Server zu senden. Wenn Sie mehrere EAs synchronisieren, ist es in der Tat möglich, einen gewissen Leistungsgewinn zu erzielen.

Aber wenn ich Sie wäre, würde ich nicht mit dem Kopf gegen die offene Tür stoßen. Ich würde lieber zu MetaTrader5 wechseln. Die Funktion OrderSendAsync ermöglicht es Ihnen, Positionen in Stapeln mit einer unglaublichen Geschwindigkeit von 100-200 Aufträgen in ein paar Sekunden zu schließen:


О! Vasiliy, wenn Sie hier sind, sehen Sie sich bitte meine Frage an, danke.

 
R0MAN:
Oh! Vasily, wenn Sie hier sind, sehen Sie sich bitte meine Frage an, danke.

Hallo! Ich habe es überprüft. Leider ist mir ein solcher Fehler noch nie untergekommen. Das Einzige, was Ihnen einfällt, ist, den Verlaufsordner des Testers zu überprüfen, zum Beispiel hier: y:\MetaTrader 5\tester\bases\AdmiralMarkets-MT5\history\. Wenn keine Dateien für das gewünschte Symbol vorhanden sind, versuchen Sie, die Daten manuell aus dem Hauptordner y:\MetaTrader 5\bases\AdmiralMarkets-MT5\ zu kopieren, und starten Sie das Testgerät neu. Bisher keine anderen Ideen.

s.e. Obwohl es seltsam ist. Der Prüfer sollte den Verlauf automatisch kopieren. Aber man weiß nicht, was.

 
C-4:
Hallo! Ich habe es überprüft. Leider ist mir ein solcher Fehler noch nie untergekommen. Das Einzige, was mir einfällt, ist, den Verlaufsordner im Tester zu überprüfen, zum Beispiel hier: y:\MetaTrader 5\tester\bases\AdmiralMarkets-MT5\history\. Wenn keine Dateien für das gewünschte Symbol vorhanden sind, versuchen Sie, die Daten manuell aus dem Hauptordner y:\MetaTrader 5\bases\AdmiralMarkets-MT5\ zu kopieren, und starten Sie das Testgerät neu. Bis jetzt habe ich keine anderen Ideen.
Ich danke Ihnen. Ich komme zurück zum Campus... Ich telefoniere gerade mit meinem Handy.
 
Novikov:

Was hat MT5 damit zu tun, und vor allem 100-200 Aufträge? Und was sind diese 100-200 Aufträge im MT5? Das sind 100-200 Handelsinstrumente im MT5! Schließlich darf nur 1 Auftrag für 1 Symbol eröffnet werden - wenn ich mich nicht irre!

Und ich habe eine Anhäufung einer großen Anzahl von Aufträgen auf 28 Instrumente und gleichzeitig teilweise mit Losen!

Wenn Sie etwas zu diesem Thema vorzuschlagen haben, wäre ich Ihnen dankbar, und Ratschläge zu erteilen, die nichts mit der Frage zu tun haben, ist nutzlos und unkonstruktiv!

Noch einmal (sorgfältig lesen):

Im MetaTrader4 können Sie Aufträge nur sequentiell schließen: Senden Sie einen Auftrag, um einen Auftrag zu schließen, warten Sie auf seine Ausführung, gehen Sie zum nächsten Auftrag über usw. Aus diesem Grund ist die Zeit für das Schließen eines Stapels von Aufträgen in MetaTrader4 beträchtlich und kann nicht mit trivialen Mitteln reduziert werden. Sie können jedoch mehrere Expert Advisors auf Ihre eigenen Charts hochladen und sie in die Lage versetzen, Informationen untereinander auszutauschen und Aufträge mit einem gemeinsamen Befehl zu schließen. Jeder Experte schließt Aufträge nur zu seinem Symbol ab. Da es in MetaTrader4 mehrere Handelsstränge gibt, würden sie sich nicht gegenseitig blockieren und Aufträge aneinander senden. Die Organisation eines solchen Expertenpools ist jedoch kompliziert, und nach Ihrem Wissensstand zu urteilen, würde ich Ihnen von so etwas abraten.

Wenn Sie immer noch der Meinung sind, dass ich zu viele Worte geschrieben habe, hier eine kurze Zusammenfassung:

1 Die Antwort auf Ihre Frage lautet: Nein, Sie können kein Skript von einem Expert Advisor aus ausführen.

2. Sie können die Ausführungsgeschwindigkeit von Handelsaufträgen im MetaTrader4 nicht erhöhen, ohne komplexe Methoden anzuwenden.

Die einzige Möglichkeit, Ihre Frage zu lösen, ist die Verwendung der Funktion OrderSendAsync, die es im MetaTrader4 nicht gibt.

Grund der Beschwerde: