Funktion OrderSendAsync() - Seite 2

 
hrenfx:

Dies sollte klargestellt werden:

TRADE_RETCODE_PLACED für OrderSend ist die Serverantwort.

TRADE_RETCODE_PLACED für OrderSendAsync ist eine Terminalantwort.

Obwohl die Codes identisch sind, haben sie eine ganz andere Bedeutung. Die Entwickler werden diese Unklarheit höchstwahrscheinlich beheben.

Deshalb sollten Sie es verstehen:

muss in dem entsprechenden Kontext verstanden werden.

Erläutern Sie dann bitte, unter welchen Bedingungen der Server den Code TRADE_RETCODE_PLACED zurückgeben muss, wenn eine Handelsanfrage mit der Funktion OrderSend gesendet wird? Denn gemäß dem Kommentar zur Funktion OrderSendAsync und der Antwort von Roche zeigt genau dieser Code TRADE_RETCODE_PLACED nur das erfolgreiche Senden einer Anfrage vom Terminal an den Server an. Es stellt sich also heraus, dass der Server, sobald die Anfrage den Server erreicht und mit der Verarbeitung/Verifizierung beginnt, gezwungen ist, andere, "echte" Servercodes "auf der Grundlage der Verarbeitungsergebnisse" zu erzeugen. Ich verstehe also nicht wirklich, warum der Server (nämlich der Server) den Code TRADE_RETCODE_PLACED zurückgeben muss, wenn sich dieser Code auf das Lebenszeitstadium der Anfrage bezieht, bevor die Anfrage auf dem Server erschien? Oder hat der Code TRADE_RETCODE_PLACED eine andere Bedeutung in Bezug auf die OrderSend-Funktionalität?
 

OrderSend kann eine Antwort sowohl vom Server als auch vom Terminal erhalten (falls die Terminalfilter versagen).

OrderSendAsync erhält immer nur eine Antwort vom Terminal. Um eine Antwort vom Server zu erhalten, müssen Sie entsprechende Ereignisse in onTrade abfangen.

 
hrenfx:

OrderSend kann eine Antwort sowohl vom Server als auch vom Terminal erhalten (falls die Terminalfilter versagen).

Verstehe ich die folgende Idee richtig?

Das Terminal hat die Anforderung von OrderSend geprüft und erfolgreich an den Server gesendet, wobei der Retcode einen Zwischenwert von TRADE_RETCODE_PLACED erhalten hat. An diesem Punkt wird die Verbindung unterbrochen, und alles, was OrderSend zurückgeben kann, ist der Code TRADE_RETCODE_PLACED, der im Feld retcode? Wird dies das Beispiel sein, bei dem OrderSend TRADE_RETCODE_PLACED zurückgibt?

 
Yedelkin:

Habe ich die folgende Idee richtig verstanden:

Das Terminal hat die Anfrage von OrderSend geprüft und erfolgreich an den Server gesendet, wobei der Retcode den Zwischenwert TRADE_RETCODE_PLACED erhielt. An diesem Punkt wird die Verbindung unterbrochen, und alles, was OrderSend zurückgeben kann, ist der Code TRADE_RETCODE_PLACED, der im Feld retcode? Wird dies das Beispiel sein, wenn OrderSend TRADE_RETCODE_PLACED zurückgibt?

Vielleicht ja, aber ich bezweifle es. Höchstwahrscheinlich wäre es TRADE_RETCODE_TIMEOUT über TimeOut-time für eine solche Unterbrechung der Kommunikation.

Ehrlich gesagt, verstehe ich nicht, wozu dieses Nerfing im Falle von OrderSend dienen soll. Vielleicht werden die Entwickler in der Hilfe mehr dazu sagen.

P.S. Ich habe nicht eine einzige Zeile in MQL5 geschrieben. Daher können alle meine Gedanken zu diesem Thema ignoriert werden.

 

...Trotzdem ist das Unsinn. Im Client-Terminal-Benutzerhandbuch (Januar 2012) heißt es, dass eine der Bestellstufen die Stufe "Set(placed) - Händler akzeptiert Bestellung" ist.

D.h. laut Handbuch signalisiert der Auftrag das Lebensstadium einer Handelsanfrage, wenn er den Server bereits erfolgreich erreicht hat. Und die Beschreibung der Funktion OrderSendAsync() besagt genau das Gegenteil: Der Code TRADE_RETCODE_PLACED hängt nicht von der Ankunft auf dem Server ab.

 
hrenfx:

Ehrlich gesagt, sehe ich nicht, warum diese Nerdigkeit im Fall von OrderSend notwendig ist.

Mir persönlich gefiel der Gedanke, dass eine "Rückgabecodeverarbeitung" erforderlich ist. Aber um eine solche Verarbeitung richtig zu schreiben, muss man wissen, worum es dabei geht. Ich habe lange versucht zu verstehen, worauf sich der Code TRADE_RETCODE_PLACED genau bezieht.
 

Im Allgemeinen kann jeder einen seriellen MyOrderSend über OrderSendAsync schreiben:

  1. Aufgerufen OrderSendAsync.
  2. Warten Sie in onTrade auf die entsprechende Antwort des Servers.
  3. MyOrderSend wurde mit dieser Antwort beendet.

Mit dieser Implementierung ist MyOrderSend völlig identisch mit dem regulären OrderSend (der einfach aus der API entfernt werden kann, indem er über OrderSendAsync in der regulären Bibliothek implementiert wird).

 
hrenfx:

Mit dieser Implementierung ist MyOrderSend völlig identisch mit dem regulären OrderSend (das einfach aus der API entfernt werden kann, indem OrderSendAsync in der regulären Bibliothek implementiert wird).

Eine interessante Idee zur Selbstentwicklung. Solange onTrade jedoch nicht parametrisiert ist, werden alle Prüfungen, die onTrade in der Notensystembibliothek verwenden, wahrscheinlich viel langsamer sein als die OrderSend-Funktion selbst. Ich könnte mich irren.
Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 

Im Allgemeinen ist die OrderSendAsync-Eingabe ein historisches Ereignis für Metatrader. In der ganzen Zeit, in der es die Handels-API gibt (beginnend mit Metatrader3 (frühere Versionen habe ich nicht gesehen)) Metatrader wurde zwar in einer eigenen Sprache implementiert, ist aber im Kern nahezu unverändert geblieben. OrderSendAsync ist die erste wesentliche Änderung an der Handels-API von Metaquotes.

Ich gratuliere den Entwicklern aufrichtig zu diesem Ereignis und wünsche mir, dass das asynchrone Modell eine angemessene Funktionalität erhält!

 

Technische Meldung. Sammlung interessanter Aussagen in einem Thread.

Renat:

Beachten Sie, dass die Anzahl der gleichzeitigen Aufträge eines Kontos in der Ausführungswarteschlange begrenzt ist und auch in Zukunft sein wird. Im Moment sind es 16 Anträge, wenn ich mich nicht irre.

Asynchrone Vorgänge arbeiten sorgfältig mit dem "Fenster für die Anzahl der zulässigen Aufträge" und warten, bis ein Teil des vorherigen Stapels ausgeführt wurde, bevor sie den nächsten Stapel senden. Darüber hinaus wird es einen Schutz gegen dumme Überschwemmungen/Testfluten geben. Bislang wird ein Fehler angezeigt, wenn die Anzahl der zulässigen Anwendungen überschritten wird.

Die neue Methode der asynchronen Operationen durch OrderSendAsync löst das Hauptproblem - sie ermöglicht es, ein Dutzend von Operationen sofort durchzuführen. Dies ist ein sehr mächtiges Instrument, das mit Bedacht und immer mit Blick auf die Möglichkeit einer Sperre durch den Server und den Broker eingesetzt werden sollte.