Mein EA macht einen doppelten Eintrag - Seite 5

 
Klammeraffe:

Die Zeile bezüglich "each tick" könnte der Grund sein, warum es nicht mehr passiert.

Die Funktion wird nur ausgeführt, wenn ein neuer Balken erscheint. Wahrscheinlich kann also nur der erste Tick eines Balkens einen Handel ausführen. Nach dem ersten Takt bekommt der Code ein 'Return', bis ein neuer Takt erscheint. Vielleicht hat das das Problem für mich gelöst.

Ich glaube, dieses Stück Code stammt aus dem Artikel:

Dies ist eine andere Lösung, aber wenn ein Fehler vom Broker oder irgendwo anders zurückkommt, ist Ihr Signal nicht mehr gültig, es sei denn, Sie halten eine Schleife, um immer wieder zu überprüfen.
 
doshur:
  • Der Code, der ursprünglich von doshur gepostet wurde, kann erklären, warum er in seinem Log "Position opened in..." sehen kann, obwohl kein Handel eröffnet wurde. Das liegt daran, dass, auch wenn PositionOpen() true zurückgibt, dies nicht bedeutet, dass ein Handel platziert wurde (siehe Dokumentation). Aber es kann nicht erklären, warum ein "doppelter" Handel platziert wurde.
Korrektur. Es gibt eine doppelte"Position eröffnet in..." und 2 Trades wurden eröffnet.
Das ist klar. Ich meine "warum er sehen konnte...". Der Punkt hier ist, dass es nichts in Ihrem Code, der erklären kann, warum Sie diese 2 Trades bekam.
 
angevoyageur:
Ja, natürlich. Ich meine "warum er sehen konnte...". Der Punkt hier ist, dass es nichts in Ihrem Code gibt, was erklären könnte, warum Sie diese 2 Berufe bekommen haben.
Ok. Verstehe.
 
angevoyageur:

Ich denke, es ist sehr wichtig, den Grund für dieses Problem zu finden, natürlich ist es auch wichtig, einen Workaround (Sleep ?) zu haben, bis wir vollständig verstehen können, was passiert ist. Also versuche ich, die Situation wieder aufzunehmen:

* Bei der Verwendung der Methode PositionOpen aus der CTrade-Klasse haben mindestens 3 Benutzer zu einem bestimmten Zeitpunkt 2 Geschäfte in dieselbe Richtung getätigt anstatt eines, was zu einer Position mit doppeltem Volumen im Vergleich zu dem, was erwartet wird, führt.

Ich verwende beide Methoden, für das Eröffnen einer neuen Position = "old fashion way", das Ändern des Stoploss = "CTrade class".


* Dieses Problem scheint bei demselben Broker aufzutreten, und zwar mit einem Symbol, bei dem Depth of Market aktiviert ist (können die betroffenen Personen dies bitte bestätigen).

Ja, der Server von Broker X, Depth of Market ist aktiviert.


* Dieses Problem tritt bei synchronen Aufträgen auf, asynchrone Aufträge wurden nicht verwendet (bitte bestätigen Sie dies).

Ja, asynchrone Order wurde nicht verwendet.


* Das Problem tritt zufällig auf.

Ja, aber nur während der geschäftigen Marktzeiten(makroökonomische Ereignisse).



 

Meiner Meinung nach kann dieses Problem leicht gelöst werden.


Der EA sollte immer auf eine Antwort warten, wenn die Funktion "PositionSelect(Symbol())" verwendet wird und das Terminal die Daten der Funktion aktualisiert hat, bevor er mit der Ausführung des Codes fortfahren kann.

Der EA sollte immer auf eine Antwort warten, wenn die Funktion "OrderSend(mrequest,mresult)" verwendet wird und das Terminal die Daten der Funktion aktualisiert hat, bevor er mit der Ausführung des Codes fortfahren kann.


Ich erwähne auch das Terminal selbst, weil die Daten der Funktion in das Terminal kopiert werden und dies ebenfalls einige Zeit in Anspruch nimmt.

Auf diese Weise wird die aktuelle Positionsgröße immer korrekt berechnet, so dass der doppelte Auftrag nicht mehr vork ommt.


Was meint ihr dazu?

 
snelle_moda:

Meiner Meinung nach kann dieses Problem leicht gelöst werden.


Der EA sollte immer auf eine Antwort warten, wenn die Funktion "PositionSelect(Symbol())" verwendet wird und das Terminal die Daten der Funktion aktualisiert hat, bevor er mit der Ausführung des Codes fortfahren kann.

Der EA sollte immer auf eine Antwort warten, wenn die Funktion "OrderSend(mrequest,mresult)" verwendet wird und das Terminal die Daten der Funktion aktualisiert hat, bevor er mit der Ausführung des Codes fortfahren kann.


Ich erwähne auch das Terminal selbst, da die Daten der Funktion in das Terminal kopiert werden und dies ebenfalls einige Zeit in Anspruch nimmt.

Auf diese Weise wird die aktuelle Positionsgröße immer korrekt berechnet, so dass es nicht mehr zu einer doppelten Bestellung kommt.


Was meinen Sie dazu?

Ich bin mir nicht sicher, was Sie mit "immer auf eine Antwort warten..." meinen. ?

Jedenfalls habe ich eine Anfrage an ServiceDesk gestellt und um Rat gefragt. Wir werden sehen.

 
angevoyageur:

Ich bin mir nicht sicher, was Sie mit "immer auf eine Antwort warten..." meinen. ?

Jedenfalls habe ich eine Anfrage an den ServiceDesk gestellt und um Rat gefragt. Wir werden sehen.

"Bin mir nicht sicher, was Sie mit "immer auf eine Antwort warten..." meinen. ?"


Der EA sollte warten/anhalten, bis die Funktion PositionSelect(Symbol()) das Kopieren von Daten über eine Position in die Programmumgebung abgeschlossen hat.

Sehen Sie es als eine erzwungene sleep()-Funktion.

 
snelle_moda:

"Ich bin mir nicht sicher, was Sie mit "immer auf eine Antwort warten" meinen... ?"


Der EA sollte warten/anhalten, bis die Funktion PositionSelect(Symbol()) das Kopieren von Daten über eine Position in die Programmumgebung abgeschlossen hat.

Sehen Sie es als eine erzwungene sleep()-Funktion.

Ok verstanden. Aber ich kann mich von einer solchen Lösung nicht überzeugen , entweder gibt es etwas, das wir nicht verstehen, oder es gibt irgendwo einen Fehler.
 
Ich hoffe nur, dass es eine Lösung geben wird.

Wie auch immer, frohe Weihnachten für alle.
 
Gibt es Neuigkeiten vom Service Desk?