Mein EA macht einen doppelten Eintrag - Seite 8

 
angevoyageur:

1) Ich glaube nicht, dass es mit dem Problem dieses Themas zu tun hat. Das Problem, das wir bekommen, ist im Falle einer Anfrage erfolgreich gefüllt wurde und eine Position geöffnet ist. Aber diese Position ist auf dem Handelsserver geöffnet, das Problem, das wir angetroffen ist, wenn es eine Verzögerung wichtiger als üblich und das MT5-Terminal ist dieser neuen Position benachrichtigt, NACH einem neuen Tick bereits verarbeitet wird.

2) ... meiner Meinung nach ist es ein schlechtes Design für eine Plattform, die ausdrücklich synchrone und asynchrone Handelsanfragen erlaubt ...

3) ... der ResultRetCode ist synchron, es ist die Aktualisierung der MT5-Datenbank über die Position (Deal und Order), die asynchron ist ...

1) Ich stimme nicht zu und entschuldige meine Unwissenheit, aber wie können Sie so sicher sein, dass die Position nach PositionOpen() im Handelsserver geöffnet wird, ohne den ResultRetcode() zu überprüfen?

2) 100% zustimmen.

3) Sicherlich ist ResultRetCode() synchron, ich meine, um den Ergebniscode zu überprüfen, müssen Sie (Master) den Server (Slave) mit mehreren "asynchronen" Nachrichten abfragen.

 
figurelli:

1) Nicht einverstanden, und entschuldigen Sie die Unwissenheit, aber wie sind Sie so sicher, dass die Position nach PositionOpen() im Handelsserver geöffnet wird, ohne den ResultRetcode() zu überprüfen?

2) 100% zustimmen.

3) Mit Sicherheit ist ResultRetCode() synchron, ich meine, um den Resultcode zu überprüfen, müssen Sie (Master) den Server (Slave) mit mehreren "asynchronen" Nachrichten abfragen.

1) In diesem Thema geht es um einen doppelten Eintrag, es geht also um eine Auftragsanfrage, die erfolgreich war. Ich habe nie geschrieben, dass es nicht notwendig ist, den ResultRetCode() doppelt zu prüfen, ich habe genau das Gegenteil geschrieben. Aber das hat per Definition NICHTS mit der doppelten Eingabe zu tun. Ist das nicht offensichtlich?

3) Es ist wahrscheinlich ein Detail(Unverständnis?) , aber was Sie geschrieben haben, ergibt keinen Sinn. Im ersten Teil Ihres Satzes sagten Sie, dass ResultRetCode() synchron ist, im zweiten Teil sagten Sie, dass der "Ergebniscode", der der gleiche ist wie ResultRetCode(), asynchron erhalten wird. Es findet überhaupt keine Kommunikation zwischen dem Server und dem Terminal statt, um diesen Wert (Retcode) zu erhalten.

CTrade.PositionOpen() ist standardmäßig synchron, d.h. die zugrunde liegende Klasse verwendet OrderSend(). Diese sendet die Orderanfrage und wartet auf die Antwort des Servers. Der Server gibt das Ergebnis an das Terminal zurück, und der EA-Code wird fortgesetzt (mit dem zurückgegebenen Wert true oder false). Die Master/Slave-Kommunikation ist beendet. Danach können Sie den ResultRetcode überprüfen, der bereits lokal verfügbar ist.

Documentation on MQL5: Trade Functions / OrderSend
Documentation on MQL5: Trade Functions / OrderSend
  • www.mql5.com
Trade Functions / OrderSend - Documentation on MQL5
 
@figurelli: Herzlichen Glückwunsch, dass Sie Moderator geworden sind ... .
 
Gibt es ein Zeitlimit für offene Positionen?
 
doshur:
Gibt es ein Timeout für offene Positionen?
Hallo doshur, was genau meinst du mit Timeout?
 
Malacarne:
Hallo doshur, was genau meinen Sie mit Timeout?
Wie keine Antwort vom Server
 
angevoyageur:

1) In diesem Thema geht es um einen doppelten Eintrag, wir sprechen also über eine erfolgreiche Auftragsanfrage. Ich habe nie geschrieben, dass es nicht notwendig ist, den ResultRetCode() doppelt zu prüfen, ich habe genau das Gegenteil geschrieben. Aber das hat per Definition NICHTS mit der doppelten Eingabe zu tun. Ist das nicht offensichtlich?

3) Es ist wahrscheinlich ein Detail(Unverständnis?) , aber was Sie geschrieben haben, ergibt keinen Sinn. Im ersten Teil Ihres Satzes sagten Sie, dass ResultRetCode() synchron ist, im zweiten Teil sagten Sie, dass der "Ergebniscode", der der gleiche ist wie ResultRetCode(), asynchron erhalten wird. Es findet überhaupt keine Kommunikation zwischen dem Server und dem Terminal statt, um diesen Wert (Retcode) zu erhalten.

CTrade.PositionOpen() ist standardmäßig synchron, d.h. die zugrunde liegende Klasse verwendet OrderSend(). Diese sendet die Orderanfrage und wartet auf die Antwort des Servers. Der Server gibt das Ergebnis an das Terminal zurück, und der EA-Code wird fortgesetzt (mit dem zurückgegebenen Wert true oder false). Die Master/Slave-Kommunikation ist beendet. Danach können Sie den ResultRetcode überprüfen, der bereits lokal verfügbar ist.

Alain,

Zu 1) bin ich immer noch anderer Meinung, denn für mich
prüftder ursprüngliche Code von doshur nicht ResultRetCode() und er sucht nach einer Lösung für den "doppelten Eintrag", und für mich ist dies sein Code (wie Malacarne vorgeschlagen hat). Also ist es für mich nicht so offensichtlich.

Zu 3) Sie schrieben "Der ResultRetCode ist jedoch synchron, die Aktualisierung der MT5-Datenbank über die Position (Deal und Order) ist asynchron", daher bezog sich meine Antwort auf diesen Satz.

Wie auch immer,unsere Debatte sieht aus wie die Geschichte von der halben Tasse Wasser: einige werden es als halb voll und andere als halb leer sehen, aber es ist eine Frage, ob man das Glas als halb voll oder als halb leer betrachtet ;-)))

Also, um ehrlich zu sein, glaube ich nicht, dass diese Debatte produktiv ist und/oder fortgesetzt werden muss (zumindest hier in diesem Thema), da wir auf Umgehungslösungen zurückkommen können, also entschuldigen Sie bitte, dass Sie eine solche Kontroverse verursacht haben, und fahren Sie bitte mit Ihrem Gedankengang fort, von dem ich denke, dass er besser geeignet ist,doshur und anderen Leuten mit demselben Problemzu helfen.

 
Ubzen:
@figurelli: Herzlichen Glückwunsch, dass du Moderator geworden bist ... .
Ubzen, vielen Dank, aber ich glaube immer noch, dass dies nur ein mql5.com ernsthafter Fehler ist ;-))
 

Nun, alle geposteten Workarounds sind sehr gut. Ich schätze sie und lerne einige Ideen auf dem Weg.

Ihr seid sehr hilfreich.

Mein EA scheint jetzt widerstandsfähiger zu sein.

 
figurelli:
...

Also, um ehrlich zu sein, glaube ich nicht, dass diese Debatte produktiv ist und/oder fortgesetzt werden muss (zumindest hier in diesem Thema), da wir auf Umgehungslösungen zurückkommen können, also entschuldigen Sie bitte, dass Sie eine solche Kontroverse verursacht haben und fahren Sie bitte mit Ihrem Gedankengang fort, von dem ich denke, dass er besser geeignet ist, umDoshur und anderen Leuten mit demselben Problemzu helfen.

Ich stimme dem vollkommen zu. Machen Sie sich keine Sorgen und machen Sie weiter.
Grund der Beschwerde: