Fehler, Irrtümer, Fragen - Seite 2219

 
fxsaber:


Ergebnis zuForexTimeFXTM-Demo01


Das Skript öffnet und schließt Positionen, bis es einen "Phantomauftrag" entdeckt - weder unter den aktuellen noch in der Historie. Sollte ich es als Fehler oder als Plattformfunktion betrachten?


Das Drehbuch ist so geschrieben, dass sich aufgrund dieser Nuance mehrere Stellen öffnen können. Dies verhindert jedoch nicht, dass ein "Phantomauftrag" erteilt wird.

Ich will nicht nerdig sein, aber diese Ausdrücke gefallen mir:

(ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE))

Sie können vielleicht alle numerischen Werte einer gegebenen Aufzählung auswendig kennen und wissen, in welcher Reihenfolge sie stehen, aber andere Leute wissen das vielleicht nicht. Sie sollten die Aufzählung nicht auf diese Weise behandeln. Kürze ist sicherlich die Schwester des Talents, aber nur, wenn sie der Qualität nicht schadet.

Und was die hier diskutierte Angelegenheit betrifft, so sollte die order.deal und nicht die result.order auf die zu eröffnende Position geprüft werden. Sie muss also unter den Positionen und nicht unter den Aufträgen zu finden sein. Ist es nicht so?

 
Alexey Navoykov:

Die Kürze ist natürlich die Schwester des Talents, aber nicht zum Nachteil der Qualität.

Es scheint sich um eine gängige MMS-Operation zu handeln.

Und was die hier diskutierte Angelegenheit betrifft, so sollte der order.deal, nicht der result.order, auf die zu eröffnende Position geprüft werden, d.h. er sollte unter den Positionen und nicht unter den Aufträgen gesucht werden, nicht wahr?

Die erste Bestellung, die unmittelbar nach OrderSend gesendet wird, wird möglicherweise nirgendwo gefunden. Die Position ist viel später als der Auftrag.


ZZY Im Code habe ich absichtlich den Kommentar mit der verständlichsten Sprache des Handelsalgorithmus gelassen - MQL4.

 
fxsaber:

Die ursprüngliche Bestellung, die unmittelbar nach OrderSend gesendet wird, darf nirgendwo sein. Die Position ist viel später als der Auftrag.

Darum geht es nicht, denn der Dokumentation zufolge muss OrderSend keine Tickets erhalten:

Beim Senden einer Market Order (MqlTradeRequest.action=TRADE_ACTION_DEAL) bedeutet das erfolgreiche Ergebnis der Funktion OrderSend() nicht, dass die Order ausgeführt wurde (entsprechende Geschäfte wurden ausgeführt). true bedeutet in diesem Fall nur, dass die Order erfolgreich im Handelssystem zur weiteren Ausführung platziert wurde. Der Handelsserver kann die Werteder Ergebnisfelderin die zurückgegebeneErgebnisstruktur eintragen, wenn ihm diese Daten zum Zeitpunkt der Erzeugung des OrderSend()-Aufrufs bekannt sind. Im Allgemeinen können das Ereignis oder die Ereignisse von Geschäften, die einer Bestellung entsprechen, eintreten, nachdem die Antwort auf den Aufruf OrderSend() gesendet wurde. Daher müssen Sie beim Empfang des OrderSend()-Ergebnisses für jede Art von Handelsanforderung zunächst den Rückgabecode des Handelsserversretcode und den Antwortcode des externen Handelssystemsretcode_external(falls erforderlich) prüfen, die in der zurückgegebenenErgebnisstruktur verfügbar sind.

Wir können also auf OnTradeTransaction auf keinen Fall verzichten.

Es stellt sich also heraus, dass es in MQL5 keine garantierten synchronen Handelsoperationen gibt.

 
Alexey Navoykov:

Das ist eigentlich egal, denn laut der Dokumentation ist OrderSend nicht verpflichtet, Tickets zu erhalten:

OnTradeTransaction muss also in jedem Fall geprüft werden.

Sie müssen es nicht in jedem Fall überprüfen. Das ist nur optional.

Ein Ergebnis ungleich Null nach dem synchronen OrderSend sagt uns immer, dass eine Antwort vom Handelsserver eingegangen ist, in der ein Auftrag registriert ist. Dieses Ticket kommt genau vom Server. Und wenn OrderSend erfolgreich ist, wird dieses Ticket immer empfangen.

Das Problem scheint jedoch nicht bei OrderSend aufzutreten, sondern in dem Moment, in dem der Auftrag in einen Handel aufgenommen wird. Für solche Fälle gibt es zwarORDER_STATE_REQUEST_ADD. Wie auch immer, ich warte auf eine Antwort von MQ. Meiner Meinung nach ist dies ein Fehler, wenn auf dem Handelsserver ein Auftrag vorliegt, aber nach dem synchronen OrderSend auf dem Terminal kein Wort darüber zu lesen ist.

 
fxsaber:

Wie auch immer, ich warte auf eine Antwort von MQ. Meiner Meinung nach handelt es sich um einen Fehler, wenn eine Order auf dem Handelsserver vorhanden ist, aber nach dem synchronen OrderSend auf dem Terminal nichts davon zu sehen ist.

Ich sage mehr, wir sollten die Entwickler bitten, die vollständige Synchronisierung von OrderSend zu gewährleisten, sowohl auf dem Terminal als auch auf dem Server. Wenn die Synchronität der Ausführung nicht gewährleistet ist, wozu brauchen wir dann diese Funktion? Für diesen Zweck gibt es bereits OrderSendAsync.

 
Dmitriy:

Hallo. Heute habe ich auf Version 1860 aktualisiert und bin bei der Optimierung des Expert Advisors auf dieses Problem gestoßen:

Die Verzögerung zwischen den Durchgängen beträgt 1 Minute! Können Sie mir bitte sagen, was das Problem sein könnte?

p.s. Vor dem Update funktionierte alles wie am Schnürchen.

Verwenden Sie zufällig die Funktion Balken?
Wenn ja, lesen Sie dies.

 

Nur eine Frage:

Vielleicht ist es sinnvoll, gemeinsame Dateien zu erstellen? Das Einzige, was mich stört, ist die ständige Umbenennung von mq4 und mq5. Im Zusammenhang mit den Projekten habe ich mir überlegt, vielleicht sollte ich eine gemeinsame Erweiterung wie mq ?

Und Sie können den Code einfach von Terminal zu Terminal kopieren, ohne Änderungen an den Erweiterungen vornehmen zu müssen...

 
Vladimir Pastushak:

Nur eine Frage:

Vielleicht ist es sinnvoll, gemeinsame Dateien zu erstellen? Das Einzige, was mich stört, ist die ständige Umbenennung von mq4 und mq5. Im Zusammenhang mit den Projekten habe ich mir überlegt, vielleicht sollte ich eine gemeinsame Erweiterung wie mq ?

Und Sie können den Code einfach von Terminal zu Terminal kopieren, ohne Änderungen an den Erweiterungen vornehmen zu müssen...

Und wer verbietet es, diese Codes in mqh-Dateien zu schreiben und sie mit (#include) zu verbinden. Das tue ich schon seit geraumer Zeit.

 
Konstantin Nikitin:

Und wer verbietet es, diese Codes in mqh-Dateien zu schreiben und sie mit (#include) zu verbinden . Das tue ich schon seit geraumer Zeit.

Sie einstecken, ich die Erweiterungen ändern ... Nachbarn.

 
Alexey Navoykov:

Ich möchte noch mehr sagen: Wir sollten die Entwickler auffordern, dafür zu sorgen, dass OrderSend vollständig synchron ist, sowohl auf dem Terminal als auch auf dem Server. Wenn die synchrone Ausführung nicht gewährleistet ist, wozu brauchen wir dann diese Funktion? Für diesen Zweck gibt es bereits OrderSendAsync.

Damit ich das richtig verstehe. Synchronisierung der ORDER-Buchungen mit dem Handelssystem der Plattform und dem Terminal selbst.

Grund der Beschwerde: