order_send

Invia un richiesta per eseguire unoperazione di trading dal terminale al trade server. La funzione è simile ad OrderSend.

order_send(
   request      // richiedi struttura
   );

Parametri

request

[in] MqlTradeRequest tipo struttura che descrive un'azione di trading richiesta. Parametro richiesto senza nome. Di seguito sono descritti esempi di compilazione di una richiesta ed il contenuto dell'enumerazione.

Valore di Ritorno

Risultato dell'esecuzione come struttura MqlTradeResult. Il campo request nella risposta contiene la struttura di una richiesta di trading passata ad order_send(). Restituisce Nessuna in caso di errore. Le informazioni sull'errore possono essere ottenute utilizzando last_error().

La struttura della richiesta di trading MqlTradeRequest

Campo

Descrizione

action

Tipo di operazione di trading. Il valore può essere uno dei valori dell'enumerazione TRADE_REQUEST_ACTIONS

magic

EA ID. Consente di organizzare la gestione analitica degli ordini di trading. Ogni EA può impostare un ID univoco quando invia una richiesta di trading

order

Ticket dell'ordine. Richiesto per modificare gli ordini pendenti

symbol

Il nome dello strumento di trading, per il quale viene piazzato l'ordine. Non richiesto per modificare ordini e chiudere posizioni

volume

Volume richiesto di un affare(deal) in lotti. Un volume reale quando si fa un affare(deal) dipende dal tipo di esecuzione dell'ordine.

price

Prezzo al quale eseguire un ordine. Il prezzo non è fissato nel caso di ordini di mercato per strumenti di tipo "Esecuzione a Mercato" (SYMBOL_TRADE_EXECUTION_MARKET) avente il tipo TRADE_ACTION_DEAL

stoplimit

Un prezzo a cui viene impostato un ordine limit pendente quando il prezzo raggiunge il valore 'price' (questa condizione è obbligatoria). L'ordine pendente non viene passato al sistema di trading fino a quel momento

sl

Un prezzo per cui viene attivato un ordine Stop Loss quando il prezzo si sposta in una direzione sfavorevole

tp

Un prezzo per cui viene attivato un ordine Take Profit quando il prezzo si muove in una direzione favorevole

deviation

Deviazione massima accettabile dal prezzo richiesto, specificata in punti

type

Tipo di ordine. Il valore può essere uno dei valori dell'enumerazione ORDER_TYPE

type_filling

Tipo di riempimento dell'ordine. Il valore può essere uno dei valori ORDER_TYPE_FILLING

type_time

Tipo di ordine per scadenza. Il valore può essere uno dei valori ORDER_TYPE_TIME

expiration

Tempo di espirazione(scadenza9 dell'ordine pendente (per tipo di ordini TIME_SPECIFIED)

comment

Commento ad un ordine

position

Ticket della posizione. Lo riempie quando si cambia e chiude una posizione per la sua chiara identificazione. Di solito, è lo stesso del ticket dell'ordine che ha aperto la posizione.

position_by

Ticket della posizione opposta. Viene utilizzato quando si chiude una posizione da una posizione opposta (aperta con lo stesso simbolo ma nella direzione opposta).

Nota

Una richiesta di trading supera diverse fasi di verifica sul trade server. Innanzitutto, viene controllata la validità di tutti i campi della richiesta necessari. Se non ci sono errori, il server accetta l'ordine per l'ulteriore gestione. Vedere la descrizione della funzione OrderSend per i dettagli sull'esecuzione delle operazioni di trading.

Esempio:

import time
import MetaTrader5 as mt5
 
# visualizza i dati sul pacchetto MetaTrader 5
print("MetaTrader5 package author: "mt5.__author__)
print("MetaTrader5 package version: "mt5.__version__)
 
# stabilisce la connessione al terminale MetaTrader 5
if not mt5.initialize():
    print("initialize() fallito, error code =",mt5.last_error())
    quit()
 
# prepara la struttura della richiesta di buy
symbol = "USDJPY"
symbol_info = mt5.symbol_info(symbol)
if symbol_info is None:
    print(symbol, "non trovato, non posso chiamare order_check()")
    mt5.shutdown()
    quit()
 
# se il simbolo non è disponibile in MarketWatch, aggiungerlo
if not symbol_info.visible:
    print(symbol, "non è visibile, prova ad attivarlo")
    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,
}
 
# invia una richiesta di trading
result = mt5.order_send(request)
# controlla il risultato dell'esecuzione
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 fallito, retcode={}".format(result.retcode))
   # richiede il risultato come dizionario e lo visualizza elemento per elemento
    result_dict=result._asdict()
    for field in result_dict.keys():
        print("   {}={}".format(field,result_dict[field]))
        # se questa è una struttura di richiesta di trading, visualizzala anche elemento per elemento
        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 fatto, "result)
print("   aperta posizione con POSITION_TICKET={}".format(result.order))
print("   sleep per 2 secondi prima di chiudere la posizione #{}".format(result.order))
time.sleep(2)
# crea una richiesta di chiusura
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,
}
# invia una richiesta di trading
result=mt5.order_send(request)
# controlla il risultato dell'esecuzione
print("3. chiudi pozione #{}: sell {} {} lotti a {} con deviazione={} punti".format(position_id,symbol,lot,price,deviation));
if result.retcode != mt5.TRADE_RETCODE_DONE:
    print("4. order_send fallito, retcode={}".format(result.retcode))
    print("   risultato",result)
else:
    print("4. posizione #{} chiusa, {}".format(position_id,result))
   # richiede il risultato come dizionario e lo visualizza elemento per elemento
    result_dict=result._asdict()
    for field in result_dict.keys():
        print("   {}={}".format(field,result_dict[field]))
        # se questa è una struttura di richiesta di trading, visualizzala anche elemento per elemento
        if field=="request":
            traderequest_dict=result_dict[field]._asdict()
            for tradereq_filed in traderequest_dict:
                print("       traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed]))
 
# interrompe la connessione al terminale MetaTrader 5
mt5.shutdown()
 
Risultato
Autore del pacchetto MetaTrader5: MetaQuotes Software Corp.
Versione del pacchetto MetaTrader5: 5.0.29
1. order_send(): di USDJPY 0.1 lotti a 108.023 con deviazione=20 punti
2. order_send fatto,  OrderSendResult(retcode=10009, deal=535084512, order=557416535, volume=0.1, price=108.023, ...
  aperta posizione con POSITION_TICKET=557416535
  sleep per 2 secondi prima di chiudere la pozione #557416535
3. chiudi posizione #557416535: sell USDJPY 0.1 lotti a 108.018 con deviazione=20 punti
4. posizione #557416535 chiusa, 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

See also

order_check, OrderSend, Tipi di operazioni di trading, Struttura richiesta di trading, Struttura dei risultati del controllo della richiesta di trading, Struttura dei risultati della richiesta di trading