order_send

Senden einer Auftrags zur Durchführung einer Handelsoperation vom Terminal zum Handelsserver. Die Funktion ist ähnlich wie OrderSend.

order_send(
   request      // request Struktur
   );

Parameter

request

[in] MqlTradeRequest Strukturtyp, die die Handelsaktion definiert. Benötigter unbenannter Parameter. Ein Beispiel für das Ausfüllen einer Anfrage und der Inhalt der Enumeration werden im Folgenden beschrieben.

Rückgabewert

Ausführungsergebnis in der Struktur MqlTradeResult. Das Feld request in der Antwort enthält die Struktur einer an order_send() übergebenen Handelsanforderung. Die Information über den Fehler kann über last_error() abgerufen werden.

Die Struktur MqlTradeRequest der Handelsanfrage

Feld

Beschreibung

action

Typ er Handelsoperation. Der Wert kann einer der Werte der Enumeration TRADE_REQUEST_ACTIONS sein.

magic

EA-ID. Ermöglicht das Erkennen von Handelsaufträgen für eine anlytische Behandlung. Jeder EA kann beim Senden einer Handelsanfrage eine eindeutige ID festlegen.

order

Order-Ticket. Erforderlich für die Änderung von Pending-Orders

symbol

Der Name des Handelsinstruments, für das der Auftrag erteilt wird. Nicht erforderlich bei der Änderung von Aufträgen und Schließung von Positionen.

volume

Gefordertes Volumen eines Geschäfts in Losen. Das tatsächliche Volumen eines Deals hängt von einem Auftragstyp.

price

Preis, zu dem ein Auftrag ausgeführt werden soll. Der Preis wird nicht bei Marktorders für Instrumente des Typs "Market Execution" (SYMBOL_TRADE_EXECUTION_MARKET) mit dem Typ TRADE_ACTION_DEAL verwendet.

stoplimit

Ein Preis, zu dem ein Pending-Limit-Order aktiviert wird, wenn der Preis den Wert von "price" erreicht (diese Bedingung ist obligatorisch). Die Pending-Order wird erst dann an das Handelssystem weitergeleitet.

sl

Ein Preis, zu dem eine Stop-Loss-Order aktiviert wird, wenn sich der Preis in eine ungünstige Richtung bewegt.

tp

Ein Preis, zu dem ein Take-Profit-Auftrag aktiviert wird, wenn sich der Preis in eine günstige Richtung bewegt.

deviation

Maximal akzeptierte Abweichung vom gewünschten Preis, angegeben in Punkten

type

Auftragsart. Der Wert kann einer der Werte der Enumeration ORDER_TYPE sein.

type_filling

Typ der Auftragsfüllung. Der Wert kann einer der Werte der Enumeration ORDER_TYPE_FILLING sein.

type_time

Auftragsart nach Zeitablauf. Der Wert kann einer der folgenden Werte der Enumeration ORDER_TYPE_TIME sein.

expiration

Ablaufzeit der Pending-Order (für den Ordertyp TIME_SPECIFIED)

comment

Kommentar zu einem Auftrag

position

Positionsticket. Füllen Sie es beim Ändern und Schließen einer Position aus, um diese eindeutig zu identifizieren. Normalerweise ist es das gleiche wie das Ticket des Auftrags, der die Position eröffnet hat.

position_by

Ticket der entgegengesetzten Position. Es wird verwendet, wenn eine Position durch eine entgegengesetzte Position geschlossen wird (die mit demselben Symbol, aber in entgegengesetzter Richtung geöffnet wird).

Hinweis

Eine Handelsanfrage durchläuft mehrere Verifizierungsstufen auf dem Handelsserver. Zuerst wird die Gültigkeit aller notwendigen Felder der Anfrage überprüft. Wenn keine Fehler vorliegen, nimmt der Server den Auftrag zur weiteren Bearbeitung an. Siehe die Funktionsbeschreibung OrderSend für die Einzelheiten der Ausführung von Handelsoperationen.

Beispiel:

import time
import MetaTrader5 as mt5
 
# Datenanzeige des Pakets von MetaTrader 5
print("MetaTrader5 package author: "mt5.__author__)
print("MetaTrader5 package version: "mt5.__version__)
 
# Verbindung zum MetaTrader 5 Terminal herstellen
if not mt5.initialize():
    print("initialize() failed, error code =",mt5.last_error())
    quit()
 
# Vorbereitung der Struktur request für einen Kauf
symbol = "USDJPY"
symbol_info = mt5.symbol_info(symbol)
if symbol_info is None:
    print(symbol, "not found, can not call order_check()")
    mt5.shutdown()
    quit()
 
# Wenn das Symbol im MarketWatch nicht verfügbar ist, wird es hinzugefügt
if not symbol_info.visible:
    print(symbol, "is not visible, trying to switch on")
    if not mt5.symbol_select(symbol,True):
        print("symbol_select({}}) failed, exit",symbol)
        mt5.shutdown()
        quit()
 
lot = 0.1
point = mt5.symbol_info(symbol).point
price = mt5.symbol_info_tick(symbol).ask
deviation = 20
request = {
    "action"mt5.TRADE_ACTION_DEAL,
    "symbol"symbol,
    "volume"lot,
    "type"mt5.ORDER_TYPE_BUY,
    "price"price,
    "sl"price - 100 * point,
    "tp"price + 100 * point,
    "deviation"deviation,
    "magic"234000,
    "comment""python script open",
    "type_time"mt5.ORDER_TIME_GTC,
    "type_filling"mt5.ORDER_FILLING_RETURN,
}
 
# Senden eines Handelsauftrags
result = mt5.order_send(request)
# Prüfen des Ausführungsergebnisses
print("1. order_send(): by {} {} lots at {} with deviation={} points".format(symbol,lot,price,deviation));
if result.retcode != mt5.TRADE_RETCODE_DONE:
    print("2. order_send failed, retcode={}".format(result.retcode))
   # Abrufen des Ergebnisses als Liste und Darstellung Element für Element
    result_dict=result._asdict()
    for field in result_dict.keys():
        print("   {}={}".format(field,result_dict[field]))
        # Wenn es die Struktur eines Handelsauftrags ist, werden die Elemente auch einzeln angezeigt
        if field=="request":
            traderequest_dict=result_dict[field]._asdict()
            for tradereq_filed in traderequest_dict:
                print("       traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed]))
    print("shutdown() and quit")
    mt5.shutdown()
    quit()
 
print("2. order_send done, "result)
print("   opened position with POSITION_TICKET={}".format(result.order))
print("   sleep 2 seconds before closing position #{}".format(result.order))
time.sleep(2)
# Erstellen eines Schließauftrages
position_id=result.order
price=mt5.symbol_info_tick(symbol).bid
deviation=20
request={
    "action"mt5.TRADE_ACTION_DEAL,
    "symbol"symbol,
    "volume"lot,
    "type"mt5.ORDER_TYPE_SELL,
    "position"position_id,
    "price"price,
    "deviation"deviation,
    "magic"234000,
    "comment""python script close",
    "type_time"mt5.ORDER_TIME_GTC,
    "type_filling"mt5.ORDER_FILLING_RETURN,
}
# Senden eines Handelsauftrags
result=mt5.order_send(request)
# Prüfen des Ausführungsergebnisses
print("3. close position #{}: sell {} {} lots at {} with deviation={} points".format(position_id,symbol,lot,price,deviation));
if result.retcode != mt5.TRADE_RETCODE_DONE:
    print("4. order_send failed, retcode={}".format(result.retcode))
    print("   result",result)
else:
    print("4. position #{} closed, {}".format(position_id,result))
   # Abrufen des Ergebnisses als Liste und Darstellung Element für Element
    result_dict=result._asdict()
    for field in result_dict.keys():
        print("   {}={}".format(field,result_dict[field]))
        # Wenn es die Struktur eines Handelsauftrags ist, werden die Elemente auch einzeln angezeigt
        if field=="request":
            traderequest_dict=result_dict[field]._asdict()
            for tradereq_filed in traderequest_dict:
                print("       traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed]))
 
# Schließen der Verbindung zum MetaTrader 5
mt5.shutdown()
 
Ergebnis
MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.29
1. order_send(): by USDJPY 0.1 lots at 108.023 with deviation=20 points
2. order_send done,  OrderSendResult(retcode=10009, deal=535084512, order=557416535, volume=0.1, price=108.023, ...
   opened position with POSITION_TICKET=557416535
   sleep 2 seconds before closing position #557416535
3. close position #557416535: sell USDJPY 0.1 lots at 108.018 with deviation=20 points
4. position #557416535 closed, OrderSendResult(retcode=10009, deal=535084631, order=557416654, volume=0.1, price=...
   retcode=10009
   deal=535084631
   order=557416654
   volume=0.1
   price=108.015
   bid=108.015
   ask=108.02
   comment=Request executed
   request_id=55
   retcode_external=0
   request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=0.1, price=108.018, stoplimit=0.0, ...
       traderequest: action=1
       traderequest: magic=234000
       traderequest: order=0
       traderequest: symbol=USDJPY
       traderequest: volume=0.1
       traderequest: price=108.018
       traderequest: stoplimit=0.0
       traderequest: sl=0.0
       traderequest: tp=0.0
       traderequest: deviation=20
       traderequest: type=1
       traderequest: type_filling=2
       traderequest: type_time=0
       traderequest: expiration=0
       traderequest: comment=python script close
       traderequest: position=557416535
       traderequest: position_by=0

Siehe auch

order_check, OrderSend,Trading operation types, Trading request structure, Structure of the trading request check results, Structure of the trading request result