Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Kann ich fragen, ob PositionSelect() die Client-Seite oder die Server-Seite überprüft?
Ich habe das starke Gefühl, dass das Problem durch die Verzögerung verursacht wird, bei der der Server (Broker-Seite) die Anfrage verarbeitet und die Client-Seite nicht aktualisiert, weshalb PositionSelect() erneut ausgeführt wird.
Ich bin der festen Überzeugung, dass es keinen Unterschied zwischen cTrade und MqlTradeRequest gibt und dass die Sleep-Funktion dazu beitragen sollte, alles zu verzögern, damit unsere Client-Seite "aktualisiert" wird, bevor PositionSelect() erneut ausgeführt wird und einen doppelten Eintrag verursacht. Überprüfen von meinem Journal Tab, >2013.12.20 08:35:00 Trades '800****': exchange buy 0.01 EURUSD at market placed for execution in 313 ms <
Wenn ich mehr als 400 schlafe, sollte das sicher sein.
What do you think?
"Ich habe ein starkes Gefühl, dass das Problem durch die Verzögerung verursacht wird, wo Server (Broker-Seite) ist die Verarbeitung der Anfrage und nicht aktualisiert die Client-Seite, weshalb PositionSelect() läuft wieder"
Ich denke auch, dass dies die Ursache für die doppelte Eingabe ist. In meinem Code ist es theoretisch unmöglich, eine neue Order zu senden, wenn die aktuelle Positionsgröße gleich oder größer als die maximal zulässige Positionsgröße ist. Wenn also PositionSelect() nicht rechtzeitig den Status der aktuellen Position erhält, sendet mein EA wieder eine neue Order.
"Putting Sleep mehr als 400 sollte sicher sein???"
Je größer das Zeitintervall, desto besser, aber es gibt ein Problem. Wenn Sie Ihre Position in zwei Schritten umdrehen (LONG zu SHORT oder SHORT zu LONG), kann diese zusätzliche Zeitverzögerung die Ursache für einen schlechten Ausführungskurs sein, insbesondere bei makroökonomischen Ereignissen.
"Ich habe das starke Gefühl, dass das Problem durch die Verzögerung verursacht wird, bei der der Server (Brokerseite) die Anfrage verarbeitet und die Clientseite nicht aktualisiert, weshalb PositionSelect() erneut ausgeführt wird.
Ich denke auch, dass dies die Ursache für die doppelte Eingabe ist. In meinem Code ist es theoretisch unmöglich, eine neue Order zu senden, wenn die aktuelle Positionsgröße gleich oder größer als die maximal zulässige Positionsgröße ist. Wenn also PositionSelect() nicht rechtzeitig den Status der aktuellen Position erhält, sendet mein EA wieder eine neue Order.
"Putting Sleep mehr als 400 sollte sicher sein???"
Je größer das Zeitintervall, desto besser, aber es gibt ein Problem. Wenn Sie Ihre Position in zwei Schritten umdrehen (LONG zu SHORT oder SHORT zu LONG), kann diese zusätzliche Zeitverzögerung die Ursache für einen schlechten Ausführungskurs sein, insbesondere bei makroökonomischen Ereignissen.
Ich weiß nicht, ob Broker spielt auseinander hier, aber es scheint, unser Broker ist das gleiche. Alpari.
Ich habe seit dem 10.03.2013 1 weiteren Doppeleintrag erhalten. Ich verwende beide Methoden für den Versand meiner Bestellung. Siehe meinen vorherigen Beitrag.
Dies ist, was ich gerade implementiert. hoffentlich kann das Problem zu lösen
Dies ist, was ich gerade implementiert. hoffentlich kann das Problem zu lösen
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:
Ich stimme mit snella_moda überein, dass die beste Erklärung ist:
I think the problem is the (to slow) execution of the PositionSelect(Symbol()) function. Maybe, the new ticks come in so fast, the EA sends in a new order before it receives a response of the PositionSelect(Symbol()). So the current position size is not calculated properly. In my code, its theoretically impossible to send in a new/double order if the current position size is equal or greater than the max allowed position size, see code.
Aber es ist schwierig, das zu überprüfen.
Ich denke, das Beste ist, Metaquotes um Rat zu fragen. Ich werde das versuchen.
Die Zeile bezüglich "each tick" könnte der Grund sein, warum der Fehler nicht mehr auftritt.
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:
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. Daher kann wahrscheinlich nur der erste Tick eines Balkens einen Handel ausführen. Nach dem ersten Takt bekommt der Code einen 'Return', bis ein neuer Takt erscheint. Vielleicht hat das das Problem für mich gelöst.
Ich glaube, dieser Teil des Codes stammt aus den Artikeln:
Korrektur. Es gibt eine doppelte"Position eröffnet in..." und 2 Trades wurden eröffnet.