- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
OnTradeTransaction
La fonction est appelée dans les EA lorsque l'évènement TradeTransaction apparaît. La fonction permet de traiter les résultats de l'exécution des demandes de trade.
void OnTradeTransaction()
|
Parameters
trans
[in] variable de type MqlTradeTransaction décrivant une transaction effectuée sur un compte de trading.
request
[in] variable de type MqlTradeRequest décrivant une demande de trade qui a conduit à une transaction. Elle contient les valeurs pour la transaction de type TRADE_TRANSACTION_REQUEST uniquement.
result
[in] variable de type MqlTradeResult contenant le résultat de l'exécution d'une demande de trade qui a conduit à une transaction. Elle contient les valeurs pour la transaction de type TRADE_TRANSACTION_REQUEST uniquement.
Valeur de Retour
Aucune valeur de retour
Note
OnTradeTransaction() est appelé pour traiter l'évènement TradeTransaction envoyé par le serveur de trades au terminal dans les cas suivants :
- envoi d'une demande de trade depuis un programme MQL5 en utilisant les fonctions OrderSend()/OrderSendAsync() et leur exécution ultérieure ;
- envoi d'une demande de trade manuellement via l'interface utiliteur et son exécution ultérieure ;
- activations des ordres en attente et des ordres stop sur le serveur ;
- opérations sur le serveur de trades.
Les données sur le type transaction sont contenues dans le champ type de la variable trans. Les types de transactions de trades sont décrits dans l'énumération ENUM_TRADE_TRANSACTION_TYPE :
- TRADE_TRANSACTION_ORDER_ADD ajout d'un nouvel ordre actif
- TRADE_TRANSACTION_ORDER_UPDATE changement d'un ordre existant
- TRADE_TRANSACTION_ORDER_DELETE suppression d'un ordre de la liste des ordres actifs
- TRADE_TRANSACTION_DEAL_ADD ajout d'une transaction dans l'historique
- TRADE_TRANSACTION_DEAL_UPDATE changement d'une transaction dans l'historique
- TRADE_TRANSACTION_DEAL_DELETE suppression d'une transaction dans l'historique
- TRADE_TRANSACTION_HISTORY_ADD ajout d'un ordre dans l'historique en résultat d'une exécution ou d'une annulation
- TRADE_TRANSACTION_HISTORY_UPDATE changement d'un ordre dans l'historique des ordres
- TRADE_TRANSACTION_HISTORY_DELETE suppression d'un ordre dans l'historique des ordres
- TRADE_TRANSACTION_POSITION changement d'une position non lié à l'exécution d'un trade
- TRADE_TRANSACTION_REQUEST notification qu'une demande de trade a été traitée par le serveur et le résultat de son traitement a été reçu.
Lors du traitement des transactions de type TRADE_TRANSACTION_REQUEST, il est nécessaire d'analyser les 2ème et 3ème paramètres de la fonction OnTradeTransaction() la demande et le résultat pour récupérer des informations supplémentaires.
L'envoi d'une demande de trade entraîne une chaîne de transactions de trade sur un compte de trading : 1) la demande est acceptée pour traitement, 2) un ordre d'achat approprié est créé pour le compte, 3) l'ordre est ensuite exécuté, 4) l'ordre exécuté est supprimé de la liste des ordres actifs, 5) ajout à l'historique des ordres, 6) la transaction suivante est ajoutée à l'historique et 7) une nouvelle position est créée. Toutes ces étapes sont des transactions de trade. L'arrivée de chacune de ces transactions dans le terminal est l'évènement TradeTransaction. La priorité de l'arrivée de ces transactions dans le terminal n'est pas garantie. Vous ne devez donc pas vous attendre à ce qu'un groupe de transactions arrive l'un après l'autre lors du développement de votre algorithme de trading.
Lorsque les transactions sont traitées par la fonction OnTradeTransaction() de l'EA, le terminal continue à gérer les transactions de trade entrantes. Le status du compte de trading peut donc changer pendant l'exécution de OnTradeTransaction(). Par exemple, pendant qu'un programme MQL5 gère l'ajout d'un nouvel ordre, il peut être exécuté, supprimé de la liste des ordres ouverts et déplacé dans l'historique. Le programme est notifié de tous ces évènements.
La longueur de la queue de transactions est de 1024 éléments. Si OnTradeTransaction() traite déjà une autre transaction depuis longtemps, les précédentes peuvent être remplacées par de nouvelles transactions dans la queue.
La fonction OnTrade() est appelée après les appels à OnTradeTransaction() correspondants. En général, il n'y a pas de corrélation exacte entre le nombre d'appels à OnTrade() et à OnTradeTransaction(). Un appel à OnTrade() correspond à un ou plusieurs appels à OnTradeTransaction.
Chaque évènement Trade peut être le résultat d'une ou plusieurs demandes de trades. Les demandes de trades sont envoyées au serveur en utilisant OrderSend() ou OrderSendAsync(). Chaque demande peut aboutir à plusieurs évènements de trading. Vous ne pouvez pas vous fier à la phrase "Une demande - un évènement Trade", puisque le traitement des évènements peut être effectué en plusieurs étapes, et chaque opération peut changer l'état des ordres, des positions et de l'historique de trading.
EA exemple avec la fonction OnTradeTransaction()
//+------------------------------------------------------------------+
|
Voir également
OrderSend, OrderSendAsync, OnTradeTransaction, structure de demande de trade, Structure de transaction de trade, Types de transaction de trade, Types d'opération de trade, Evènements du terminal client