- OrderCalcMargin
- OrderCalcProfit
- OrderCheck
- OrderSend
- OrderSendAsync
- PositionsTotal
- PositionGetSymbol
- PositionSelect
- PositionSelectByTicket
- PositionGetDouble
- PositionGetInteger
- PositionGetString
- PositionGetTicket
- OrdersTotal
- OrderGetTicket
- OrderSelect
- OrderGetDouble
- OrderGetInteger
- OrderGetString
- HistorySelect
- HistorySelectByPosition
- HistoryOrderSelect
- HistoryOrdersTotal
- HistoryOrderGetTicket
- HistoryOrderGetDouble
- HistoryOrderGetInteger
- HistoryOrderGetString
- HistoryDealSelect
- HistoryDealsTotal
- HistoryDealGetTicket
- HistoryDealGetDouble
- HistoryDealGetInteger
- HistoryDealGetString
OrderSend
Die Funktion OrderSend() wird für die Durchführung von Handelsoperationen durch das Senden von Anfragen an einen Handelsserver verwendet.
bool OrderSend(
|
Parameter
request
[in] Pointer auf eine Struktur vom Typ MqlTradeRequest, die die Aktion des Kunden beschreibt.
result
[in,out] Pointer auf eine Struktur vom Typ MqlTradeResult, die das Ergebnis einer Handelsoperation beschreibt, wenn diese erfolgreich durchgeführt wurde (wenn true zurückgegeben wurde).
Rückgabewert
Wenn die Basisprüfung der Strukturen erfolgreich war (Prüfung der Indexe), wird true zurückgegeben - das heißt allerdings nicht, dass eine Handelsoperation erfolgreich durchgeführt wurde. Um eine ausführliche Beschreibung des Ergebnisses der Funktion zu bekommen, sollte man die Felder der Struktur result analysieren.
Hinweis
Eine Handelsanfrage durchläuft mehrere Stufen der Prüfungen auf dem Handelsserver. Zunächst wird überprüft, ob alle benötigten Felder des Parameters request korrekt ausgefüllt werden. Wenn es keine Fehler gibt, akzeptiert der Server die Order für die weitere Verarbeitung. Wird die Order erfolgreich vom Handelsserver akzeptiert, gibt die Funktion OrderSend() den Wert true zurück.
Es ist empfehlenswert, die Anfrage vor dem Senden an den Handelsserver selbständig zu überprüfen. Um die Anfrage zu überprüfen, verwenden Sie die Funktion OrderCheck(). Sie prüft, ob es genügend Geld für die Ausführung der Transaktion gibt und gibt viele nützliche Parameter in den Ergebnissen der Prüfung der Handelsanfrage zurück:
- Rückgabecode, der über Fehler in der zu prüfenden Anfrage informiert;
- Kontostand nach der Ausführung der Handelsoperation;
- Equity nach der Ausführung der Handelsoperation;
- Floating Profit nach der Ausführung der Handelsoperation;
- Margin, die für die Handelsoperation erforderlich ist;
- Freie Eigenmittel, die nach Ausführung der Handelsoperation bleiben;
- Level der Margin, der nach der Ausführung der Handelsoperation gesetzt wird;
- Kommentar zum Antwort-Code, Beschreibung des Fehlers.
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 Trades ausgeführt wurden). In diesem Fall bedeutet true nur, dass die Order im Handelssystem erfolgreich platziert wurde. Der Handelsserver kann die Felder deal oder order in der Struktur des Ergebnisses result ausfüllen, wenn diese Werte im Moment der Erzeugung einer Antwort auf einen Aufruf von OrderSend() bekannt sein werden. Im allgemeinen Fall kann das Ereignis oder die Ereignisse der Ausführung von Trades, die einer Order entsprechen, bereits nach dem Senden einer Antwort auf den Aufruf von OrderSend() eintreten. Deswegen muss man beim Erhalten des Ergebnisses der Ausführung von OrderSend() in erster Linie den Rückgabecode des Handelsservers retcode und den Antwort-Code des externen Handelssystems retcode_external (wenn nötig) überprüfen, die in der Struktur result verfügbar sind.
Jede akzeptierte Order wird während des Wartens auf die Verarbeitung auf dem Handelsserver gespeichert, bis eine der Bedingungen für ihre Ausführung erfüllt wird:
- Ablaufzeit,
- Erscheinen einer entgegengesetzten Anfrage,
- Auslösung der Order beim Erscheinen des Ausführungspreises,
- Eintreffen einer Anfrage, die Order zu löschen.
Zum Zeitpunkt der Orderbearbeitung sendet der Handelsserver eine Meldung an das Terminal über das Auftreten des Handelsereignisses Trade, das mit der Funktion OnTrade() verarbeitet werden kann.
Das Ergebnis der Ausführung der Handelsanfrage, die mit der Funktion OrderSend() gesendet wurde, kann mithilfe des Handlers OnTradeTransaction auf dem Server verfolgt werden. Dabei ist es zu beachten, dass der Handler OnTradeTransaction infolge der Ausführung einer Handelsanfrage mehrmals aufgerufen wird.
Zum Beispiel, beim Senden einer Market Buy Order wird sie verarbeitet, und eine entsprechende Kauforder wird für das Konto erstellt. Die Order wird ausgeführt, von der Liste der offenen entfernt und der Orderhistorie hinzugefügt. Dann wird der entsprechende Abschluss der Historie hinzugefügt und eine neue Position wird eröffnet. Für jedes dieser Ereignisse wird die Funktion OnTradeTransaction aufgerufen.
Beispiel:
//--- Werte für ORDER_MAGIC
|
Sehen Sie auch
Typen der Handelsoperationen, Struktur der Handelsanfrage, Struktur des Ergebnisses einer Handelsanfrage