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
Bitte sagen Sie mir, wenn die Funktion OrderSend true zurückgibt und result.order ein Orderticket hat (result.order!=0), ist dann garantiert, dass die Order vom Broker akzeptiert wird und sich im Trading-Tab befindet, oder wird die Anfrage in diesem Stadium nur vom Server des Brokers akzeptiert, aber nicht von der Börse?
Und die zweite Frage, kann es eine Situation geben, in der OrderSend true zurückgibt und result.order==0?
Können Sie mir bitte sagen, wenn die Funktion OrderSend true zurückgibt und result.order ein Orderticket hat (result.order!=0), ist dann garantiert, dass die Order vom Broker akzeptiert wird und sich im Trading-Tab befindet, oder wird die Anfrage in diesem Stadium nur vom Server des Brokers akzeptiert, aber nicht von der Börse?
Garantiert.
Und die zweite Frage, kann es eine Situation geben, in der OrderSend true zurückgibt und result.order==0?
Nein.
Garantien.
Nein.
Erst neulich wurde eine Klarstellung für die Funktion OrderSend hinzugefügt, siehe die Online-Hilfe.
Erst neulich wurde eine Klarstellung für die Funktion OrderSend hinzugefügt, die Sie in der Online-Hilfe nachlesen können.
Gilt dies auch für Marktaufträge?
Jeder akzeptierte Auftrag wird auf dem Handelsserver gespeichert und wartet auf seine Bearbeitung, bis eine der Bedingungen für seine Ausführung eintritt:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Typische Fehler und deren Beseitigung bei der Arbeit mit der Handelsumgebung
fxsaber, 2018.02.20 12:23 Uhr.
Bedingtes Schema der Implementierung des Standard OrderSend (ohne Timeout)Aus diesem Schema geht klar hervor, dass es bei der Platzierung einer Market-Order über OrderSendAsync auf demselben MetaQuotes-Demo unmöglich ist, das Ereignis der Platzierung der entsprechenden Order zu garantieren, bis die Order ausgeführt oder abgelehnt wird. Das heißt, MT5 verfügt über keine einfachen Mechanismen zur Auswertung der Zwischenergebnisse seiner OrderSendAsync.
OrderSend wird so lange ausgeführt, bis Result.request_id gleich dem gleichen Wert von OrderSendAsync in OnTradeTransaction ist. Oder es wird durch Timeout abgebrochen. Daher hängt das Ergebnis von OrderSend nur von der Art der Nachricht in OnTradeTransaction mit der entsprechenden request_id ab.
Es wäre nützlich, etwas über die Bildung der request_id selbst zu erfahren. Wenn ich es richtig verstehe, handelt es sich um einen Zähler der an den Handelsserver gesendeten Aufträge ab dem Zeitpunkt des Starts/der Verbindung des Terminals/Kontos. Das Terminal selbst analysiert die vom Handelsserver eingehenden Nachrichten und ordnet die erforderliche request_id entweder nur einer einzigen zu (was zweifelhaft ist) oder setzt die request_id auf eine bestimmte Nachricht zurück (was sehr wahrscheinlich ist). Durch dieses Verhalten war es vor einiger Zeit möglich, die Bidding History mit der OrderSend-Ausgabe in Übereinstimmung zu bringen. Da aber nur eine Nachricht in OnTradeTransaction mit der richtigen request_id sichtbar ist, kommt es zu der unangenehmen asynchronen Situation im obigen Zitat.
Guten Tag, ich habe Inkonsistenzen bei MqlTradeResult.deal und MqlTradeResult.order gefunden
1) Beschreibung (MQL5 Referenzhandbuch)
2) Handel in Echtzeit
Ich platziere Marktaufträge (TRADE_ACTION_DEAL). Ich gebe die Werte von MqlTradeResult mit der Funktion Print aus:
und das Geschäft erscheint im Log:
Ich habe versucht, mit der Funktion Sleep für ein paar Sekunden "einzuschlafen" und die Daten erneut auszugeben (wenn das Geschäft bereits genau getätigt wurde und die Position offen ist), die Nummer des Geschäfts ist nicht erschienen.
3) Strategie-Tester
Hier sind alle Felder ausgefüllt:
Woher kommen diese Unterschiede?
Guten Tag, habe Inkonsistenzen bei MqlTradeResult.deal und MqlTradeResult.order gefunden
https://www.mql5.com/de/docs/trading/ordersend
Beim Senden einer Marktorder (MqlTradeRequest.action=TRADE_ACTION_DEAL) bedeutet das erfolgreiche Ergebnis der Funktion OrderSend() nicht, dass die Order ausgeführt wurde (die entsprechenden 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 Werte der Geschäfts- oder Auftragsfelder in der zurückgegebenen Ergebnisstruktur ausfüllen , wenn ihm diese Daten zum Zeitpunkt der Bildung der Antwort auf den OrderSend()-Aufruf bekannt sind. Im Allgemeinen können das Ereignis oder die Ereignisse der Ausführung von Geschäften, die der Order entsprechen, nach dem Senden der Antwort auf den OrderSend()-Aufruf eintreten. Daher ist es bei jeder Art von Handelsanfrage erforderlich, beim Empfang des Ergebnisses der OrderSend()-Ausführung zunächst den Rückgabecode des Handelsservers retcode und den Antwortcode des externen Handelssystems retcode_external (falls erforderlich)zu prüfen , die in der zurückgegebenen Ergebnisstruktur verfügbar sind.
Vielen Dank für diesen informativen Artikel. @MetaQuotes
Frage: Wie kann ich in einer einzigen for()-Schleife sowohl offene Aufträge als auch offene Positionen gemeinsam durchlaufen (ähnlich wie wir in MQL4 alle Aufträge durchlaufen und dann prüfen, ob ein Auftrag bereits ausgeführt wurde oder ein schwebender Auftrag ist)?
Vielen Dank für diesen informativen Artikel. @MetaQuotes
Frage: Wie kann ich in einer einzigen for()-Schleife sowohl offene Aufträge als auch offene Positionen gemeinsam durchlaufen (ähnlich wie wir in MQL4 alle Aufträge durchlaufen und dann prüfen, ob ein Auftrag bereits ausgeführt wurde oder ein schwebender Auftrag ist)?
Um POSITIONEN und PENDING ORDERS zu berechnen, müssen Sie zwei unabhängige Zyklen verwenden. Ein Zyklus zählt die POSITIONEN auf, der zweite Zyklus zählt die ANHÄNGIGEN ORDERS auf. Beispiel: Berechnung von Positionen und hängenden Aufträgen
Ich weiß, dass Sie sich nicht wirklich um diejenigen kümmern, die mit der Sprache mql5 anfangen, angesichts der starken Gemeinschaft, die Sie haben, trotz vieler Kritikpunkte, hier ist noch einer:
Die Übersetzung und der Wortlaut des Textes erschweren das Verständnis... Ich habe geschwitzt, ich musste weit gehen, um herauszufinden, wer zuerst kommen sollte, da die Dokumentation sich selbst widerspricht, im Text:
Um Informationen über einen Auftrag aus der Historie zu erhalten, müssen Sie zunächst den Auftragshistorie-Cache mit einer der drei Funktionen erstellen: HistorySelect(start, end), HistorySelectByPosition() oder HistoryOrderSelect(ticket). Bei erfolgreicher Ausführung speichert der Cache die Anzahl der Aufträge, die von der FunktionHistoryOrdersTotal() zurückgegeben wird. Der Zugriff auf die Eigenschaften dieser Aufträge erfolgt über die einzelnen Elemente des Tickets unter Verwendung der entsprechenden Funktion:
Im Gegensatz zu: https: //www.mql5.com/pt/docs/trading/historyorderstotal unten transkribiert.
HistoryOrdersTotalGibt die Anzahl der Aufträge in der Historie zurück. Bevor Sie HistoryOrdersTotal() aufrufen, müssen Sie zunächst die Historie der Trades und Orders mit demHistorySelect() Befehl oder demHistorySelectByPosition() Befehl erhalten.
int HistoryOrdersTotal();
Rückgabewert
Wert vom Typdouble.
Hinweis
Verwechseln Sie die Aufträge aus der Handelshistorie nicht mit denschwebenden Aufträgen, die auf der Registerkarte "Handel" der Toolbox-Leiste erscheinen. Die Liste derAufträge, die storniert wurden oder zu einer Transaktion geführt haben, ist auf der Registerkarte "Historie" in der Toolbox des Client-Terminals zu sehen.
Siehe auch
Die erste Passage widerspricht sich selbst, sie braucht keine Hilfe, aber die zweite kommt hinzu und verkompliziert die Dinge....: denn wer kommt zuerst, HistoryOrdersTotal oder eine der drei Funktionen HistorySelect (start, end) HistorySelectByPosition() oder HistoryOrderSelect(ticket), oder sogar HistorySelectByPosition(), die im zweiten Text erwähnt wird.
Das war schwierig, es hätte einfacher sein können... aber ich denke, das erste, was mir einfällt, ist eine der drei Funktionen HistorySelect(start, end) HistorySelectByPosition () oder HistoryOrderSelect(ticket) oder sogar HistorySelectByPosition(), die im zweiten Text erwähnt werden...
Guten Tag,
Frage an die Entwickler: können Sie mir eine ungefähre Information geben, wie viel Speicher der History-Cache benötigt? ungefähr kbytes für ein Geschäft und eine Bestellung.
Ich habe das Skript in einem Terminal mit einer kleinen Historie ausgeführt und dieses Ergebnis erhalten:
Das bedeutet, dass bei einer Historie von ein paar Millionen Geschäften und einer Million Aufträgen der Cache etwa ein Gigabyte benötigt?
Und so für jedes mql-Programm?