Funktion OrderSendAsync()

 

Die Beschreibung besagt, dassdie Funktion OrderSendAsync() dazu dient, asynchrone Operationen durchzuführen , ohne auf die Antwort des Servers auf die gesendete Anfrage zu warten . Bei erfolgreicher Ausführung enthält der Antwortcode in der Ergebnisvariablen den Wert TRADE_RETCODE_PLACED ( Code 10008) - "Auftrag erteilt". Erfolgreiche Durchführung von . gibt uns keine Garantie, dass die Anfrage den Handelsserver erreicht hat und zur Bearbeitung angenommen wurde.

Einerseits wissen wir, dass das Feld retcode den Rückgabecode des Handelsservers enthält, d.h. es wird angenommen, dass dieser Code vom Server und nicht vom Benutzerterminal erzeugt wird. Andererseits heißt es im Referenzhandbuch, dass bei derFunktion OrderSendAsync() einer der vom Server zu generierenden Codes (Code 10008) zurückgegeben werden kann, auch wenn die Handelsanfrage selbst den Handelsserver nicht erreicht hat.

Frage 1: Wo genau (in welcher Phase) wird Code 10008 für dieFunktion OrderSendAsync erzeugt? (Vorausgesetzt, dieser Code kann ohne Beteiligung des Handelsservers zurückgegeben werden).

Frage 2: Handelt es sich bei Code 10008 um den Code des Handelsservers oder wird dieser Code auf der Seite des Client-Terminals generiert, bevor die Handelsanfrage vom Server empfangen wird?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 

1. Terminal, bei erfolgreichem Abfertigungsvorgang (Auftrag wurde erfolgreich aus dem Flugzeug abgeworfen, aber wir wissen nicht, was als nächstes kommt)

2. entschuldigen Sie die Tautologie, aber ich werde genauso antworten: Ja, Code 10008 ist der Antwortcode des Handelsservers. Ja, dieser Code wird vom Terminal zum Zeitpunkt der... nächster Punkt 1.

Warum versuchen Sie, zwischen den Zeilen zu finden, was bereits ausdrücklich geschrieben steht?

 

Das asynchrone Handelsauftragsmodell umfasst mehrere Ereignisse und Auftragszustände:

Diagramm der Marktauftragszustände

Diagramm der bedingten Auftragszustände

Derzeit im MT5:

  1. CREATED - die Tatsache, dass die OrderSendAsync- und OrderSend-Funktion aufgerufen wurde (dieser Auftragsstatus im MT5 ist von außen in keiner Weise erkennbar).
  2. Wenn der Auftrag ABGESAGT wird (das Terminal selbst hat ihn durch seine Filter abgeschnitten. Zum Beispiel ist der Limitkurs schlechter als der aktuelle Kurs), ist die Antwort von OrderSend und OrderSendAsync negativ.
  3. OPENED ist das Ergebnis von TRADE_RETCODE_PLACED (Ihre Bestellung durchläuft erfolgreich die internen Filter des Terminals und wird an den Server gesendet) für OrderSendAsync.
  4. SUBMIT_OK - der Server hat Ihren Handelsauftrag angenommen. Wenn es sich um einen schwebenden Auftrag handelt, wird OrderSend seine Ausführung abschließen. Wenn Markt - weiter warten.
  5. AUSGEFÜLLT - Ihr Auftrag befindet sich im Ausführungsstatus (z.B. Sie haben ihn über STP gesendet und warten auf eine Antwort). Warten Sie weiter.
  6. FILL_OK - Ihr Auftrag wurde ausgeführt. Wenn Markt - OrderSend seine Ausführung abschließt.

Weitere Einzelheiten entnehmen Sie bitte den obigen Diagrammen.

 
Rosh:

1. Terminal, bei erfolgreichem Abfertigungsvorgang (Auftrag wurde erfolgreich aus dem Flugzeug abgeworfen, aber wir wissen nicht, was als nächstes kommt)

2. entschuldigen Sie die Tautologie, aber ich werde genauso antworten: Ja, Code 10008 ist der Antwortcode des Handelsservers. Ja, dieser Code wird vom Terminal zum Zeitpunkt der... nächster Punkt 1.

Warum versuchen Sie, zwischen den Zeilen zu lesen, was bereits ausdrücklich geschrieben steht?

Ich bin nicht auf der Suche nach "zwischen den Zeilen", aber auch hier versuche ich, die Phasen von zwei (jetzt) Handelsfunktionen zu verstehen.

In Ihrem Kommentar zur Funktion OrderSendAsync sagen Sie, dass"die Funktion in Bezug auf Zweck und Parameter ähnlich wie OrderSend() ist". Aber Ihrer Antwort nach zu urteilen, ist die Funktion OrderSendAsync nicht ganz dasselbe wie die Funktion OrderSend. Letztere ist für die Überprüfung der Handelsanforderung auf dem Server bestimmt, so dass die von OrderSend() zurückgegebenen Codes die vom Server selbst erzeugten Codes sind und nicht irgendeine andere Substanz. Im Fall von OrderSendAsync() wird der Rückgabecode vom Terminal generiert, so dass dieser Code (Code 10008) nicht als Server-Rückgabecode betrachtet werden kann. Dies ist "vom Terminal erzeugter Code", auch wenn Sie ihn formal in die Codeliste des Servers aufnehmen.

Mit anderen Worten, die beiden Funktionen sind zwei Ansätze: "Server-generierter Code" vs. "Terminal-generierter Code". Die Funktionen sind in dieser Hinsicht nicht identisch. Die Kenntnis dieser Feinheiten ist notwendig, um richtig zu verstehen, von wem genau der "Rückgabecode" kommt - vom Server oder vom Terminal.

 
hrenfx:

OPENED ist das Ergebnis von TRADE_RETCODE_PLACED für OrderSendAsync.

    Können wir daraus schließen, dass TRADE_RETCODE_PLACED (10008) bei Verwendung der ursprünglichen OrderSend-Funktion in Bezug auf seine Erwartung völlig nutzlos ist?

    Gracias für das Diagramm!

    Wie übersetzt man korrekt "Auftragsbedingung wird erfüllt"?

     
    Yedelkin:

    Können wir daraus schließen, dass TRADE_RETCODE_PLACED (10008) bei Verwendung der ursprünglichen OrderSend-Funktion in Bezug auf seine Erwartung völlig nutzlos ist?

    TRADE_RETCODE_PLACED hat nichts mit dem sequentiellen OrderSend zu tun.

    Wie übersetzt man korrekt "Auftragsbedingung wird erfüllt"?

    Der aktuelle Preis erfüllt die Auftragsbedingung. Anstelle von AUSGEFÜLLT kann er auch ABGESAGT werden, zum Beispiel wenn die Marge für die Ausführung des Auftrags nicht ausreicht.

    Um auch hier asynchron arbeiten zu können, benötigen wir ein leistungsfähiges Ereignissystem, bei dem bei Ankunft eine Empfangsoption besteht:

    • Die Textnachricht des Ereignisses.
    • Der Zeitpunkt der Erstellung.
    • Auf welchen Auftrag sie sich bezieht.
    • die Art der Nachricht (Nachricht, Bestellung, Kommunikationsstatus usw.)

    Die Architektur der Plattform selbst sollte sehr gut durchdacht sein. Wenn es in der Entwurfsphase der Architektur Lücken gibt, ist es äußerst schwierig, diese zu schließen, um Universalität zu erreichen.

    IMessage (JForex API 2.9.6.1 API)
    • www.dukascopy.com
    FRAMES    NO FRAMES
     

    hrenfx:

    Yedelkin:

    Können wir daraus schließen, dass TRADE_RETCODE_PLACED (10008) bei Verwendung der ursprünglichen OrderSend-Funktion in Bezug auf seine Erwartung völlig nutzlos ist?

    TRADE_RETCODE_PLACED hat nichts mit dem sequentiellen OrderSend zu tun.

    So! Ich bin vor etwa einem halben Jahr intuitiv darauf gekommen, und du bestätigst es irgendwie :) Schon gut :)
     
    hrenfx:

    Um asynchron arbeiten zu können, benötigen Sie wiederum ein leistungsfähiges Ereignissystem, das die Möglichkeit bietet, bei Ankunft zu empfangen:

    • Die Textnachricht des Ereignisses.
    • Der Zeitpunkt der Erstellung.
    • Auf welche Reihenfolge sie sich bezieht.
    • Art der Nachricht (Nachrichten, Bestellung, Kommunikationsstatus usw.)
    Geht es dabei unter anderem um die Notwendigkeit, das Ereignis OnTrade detailliert zu beschreiben?
     
    Yedelkin:
    So! Ich bin vor etwa einem halben Jahr intuitiv darauf gekommen, und du bestätigst es irgendwie :) Schon gut :)
    Ein Mensch ist immer froh, wenn jemand die Richtigkeit seiner Überlegungen bestätigt. Ganz gleich, wie sehr es der Realität entspricht.
     
    Rosh:
    Ein Mensch ist immer froh, wenn jemand die Richtigkeit seiner Überlegungen bestätigt. Ganz gleich, wie wahr es ist.
    Nun, in den vergangenen acht Monaten hat niemand die öffentlichen Schlussfolgerungen des Mannes widerlegt. Weder theoretisch noch durch Testergebnisse. Aber danke, dass du Zweifel gesät hast :)
     

    Dies sollte klargestellt werden:

    TRADE_RETCODE_PLACED für OrderSend ist die Serverantwort.

    TRADE_RETCODE_PLACED für OrderSendAsync ist die 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:

    TRADE_RETCODE_PLACED к последовательной OrderSend не имеет никакого отношения.

    muss in dem entsprechenden Kontext verstanden werden.