- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
OnTradeTransaction
La funzione è chiamata nell' EA quando si verifica l'evento TradeTransaction. La funzione è destinata alla gestione dei risultati di esecuzione delle richieste di trade.
void OnTradeTransaction()
|
Parametri
trans
[in] MqlTradeTransaction tipo di variabile che descrive una transazione effettuata su un conto di trading.
request
[in] MqlTradeRequest tipo di variabile che descrive una richiesta di trade che ha portato alla transazione. Contiene i valori per i tipi di transazione TRADE_TRANSACTION_REQUEST solo.
result
[in] MqlTradeResult tipo di variabile contenente un risultato di esecuzione di una richiesta di trade che ha portato alla transazione. Contiene i valori per i tipi di transazione TRADE_TRANSACTION_REQUEST solo.
Valore di ritorno
Nessun valore di ritorno
Nota
OnTradeTransaction() è chiamato a gestire l'evento TradeTransaction inviato dal trade server al terminale nei seguenti casi:
- invia una richiesta di trade da un programma MQL5 usando le funzioni OrderSend()/OrderSendAsync() e la sua successiva esecuzione;
- inviare manualmente una richiesta di trade tramite la GUI e la sua successiva esecuzione;
- attivazioni di ordini pendenti e stop, sul server;
- eseguire operazioni sul lato del trade server.
I dati sul tipo di transazione sono contenuti nel tipo di campo della variabile trans. I tipi di transazioni di trade sono descritti nell'enumerazione ENUM_TRADE_TRANSACTION_TYPE:
- TRADE_TRANSACTION_ORDER_ADD - aggiunta di un nuovo ordine attivo
- TRADE_TRANSACTION_ORDER_UPDATE - modifica di un ordine esistente
- TRADE_TRANSACTION_ORDER_DELETE - eliminazione di un ordine dall'elenco di quelli attivi
- TRADE_TRANSACTION_DEAL_ADD: aggiunta di un affare alla cronistoria
- TRADE_TRANSACTION_DEAL_UPDATE - modifica di un affare nella cronistoria
- TRADE_TRANSACTION_DEAL_DELETE: eliminazione di un affare dalla cronistoria
- TRADE_TRANSACTION_HISTORY_ADD - aggiunta di un ordine alla cronologia come risultato di esecuzione o cancellazione
- TRADE_TRANSACTION_HISTORY_UPDATE - modifica di un ordine nella cronistoria degli ordini
- TRADE_TRANSACTION_HISTORY_DELETE - eliminazione di un ordine dalla cronistoria degli ordini
- TRADE_TRANSACTION_POSITION - modifica della posizione non correlata ad un'esecuzione di trade
- TRADE_TRANSACTION_REQUEST - notifica che una richiesta di trade è stata elaborata dal server ed il risultato del suo trattamento è stato ricevuto.
Quando si gestiscono le transazioni del tipo TRADE_TRANSACTION_REQUEST, è necessario analizzare il secondo e il terzo parametro della funzione OnTradeTransaction() - request e result - per ricevere ulteriori informazioni.
L'invio di una richiesta di trade porta ad una catena di transazioni di trade su un conto di trading: 1) la richiesta è accettata per l'elaborazione, 2) viene creato un ordine di acquisto appropriato per l'account, 3) l'ordine viene quindi eseguito, 4) l'ordine eseguito viene rimosso dalla lista di quelli attivi, 5) aggiunto alla cronistoria degli ordini, 6) la transazione successiva viene aggiunta alla cronistoria e 7) viene creata una nuova posizione. Tutte queste fasi sono transazioni di trade. L'arrivo di ciascuna di tali transazioni al terminale è l'evento TradeTransaction. La priorità dell'arrivo di queste transazioni al terminale non è garantita. Pertanto, non dovresti aspettarti che un gruppo di transazioni arrivi dopo un altro quando sviluppi il tuo algoritmo di trading.
Quando le transazioni vengono elaborate dal gestore OnTradeTransaction() di EA, il terminale continua a gestire le transazioni di trade in entrata. Pertanto, lo stato dell'account di trading può cambiare nel corso dell'operazione OnTradeTransaction(). Ad esempio, mentre un programma MQL5 gestisce l'aggiunta di un nuovo ordine, può essere eseguito, eliminato dall'elenco degli ordini aperti e spostato nella cronistoria. Il programma viene informato di tutti questi eventi.
La lunghezza della coda delle transazioni comprende 1024 elementi. Se OnTradeTransaction() gestisce ancora un'altra transazione troppo a lungo, le precedenti possono essere sostituite da nuove transazioni nella coda.
L'handler OnTrade() viene chiamato dopo le chiamate OnTradeTransaction() appropriate. In generale, non esiste una correlazione esatta nel numero di chiamate OnTrade() e OnTradeTransaction(). Una chiamata OnTrade () corrisponde a una o più chiamate OnTradeTransaction.
Ogni evento Trade può apparire come risultato di una o più richieste di trade. Le richieste di trade vengono inviate al server utilizzando OrderSend() o OrderSendAsync(). Ogni richiesta può portare a diversi eventi di trade. Non è possibile fare affidamento sull'affermazione "Una richiesta - un evento di trade", poiché l'elaborazione degli eventi può essere eseguita in più fasi ed ogni operazione può modificare lo stato degli ordini, delle posizioni e della cronistoria di trade.
Esempio di EA con il gestore OnTradeTransaction()
//+------------------------------------------------------------------+
|
Guarda anche
OrderSend, OrderSendAsync, OnTradeTransaction, Struttura della richiesta di Trade, Struttura delle transazioni di trade, Tipi di transazione di trade, Tipi di operazioni di trade, Eventi del terminale client