Expert Advisors • Indicators • Scripts • Libraries

MQL.RobotFX.org is the biggest collection of MetaTrader expert advisors (MT5 & MT4), indicators, scripts and libraries that can be used to improve trading results, minimize risks or simply automate trading tasks

MetaTrader 5 Libraries | TradeTransaction Class

MetaTrader Experts, Indicators, Scripts and Libraries

When performing some definite actions on a trade account, its state changes. Such actions include:

  • Sending a trade request from any MQL5 application in the client terminal using OrderSend and OrderSendAsync functions and its further execution;
  • Sending a trade request via the terminal graphical interface and its further execution;
  • activation of pending and stop orders on the server;
  • performing operations on the trade server side.

Special OnTradeTransaction() handler is provided in MQL5 to get trade transactions applied to an account.

void  OnTradeTransaction()    const MqlTradeTransaction&    trans,     // trade transaction structure    const MqlTradeRequest&        request,   // request structure    const MqlTradeResult&         result     // response structure    ); 

OnTradeTransaction() function can be used for:

  • Getting real-time notifications about trade transactions as they occur. 
  • Copying trades from one terminal to another.
  • Monitor trade transactions made by other ready-made expert advisors on different charts.
  • Having data on a trading operation type, you can decide on further analysis of the current state of orders, positions and deals on a trading account. (for example, update your calculations when the the list of open positions is changed).
  • Tracking the result of executing the trade request on a server sent by OrderSendAsync() function for conducting asynchronous trade operations without waiting for the trade server's response to a sent request. 

The OrderSendAsync() function is designed for high-frequency trading, when under the terms of the trading algorithm it is unacceptable to waste time waiting for a response from the server.

However, analysis of trade transations using the default OnTradeTransaction() handler provided in MQL5 seems complicated.

TradeTransaction class will map the underlying low-level trade transactions to a custom handler corresponding to the trade operation type. 

The class has the following methods:

//+------------------------------------------------------------------+ //| Class CTradeTransaction.                                         | //| Purpose: Base class for trade transactions.                      | //+------------------------------------------------------------------+ class CTradeTransaction   { public:                      CTradeTransaction(void)  {   }                     ~CTradeTransaction(void)  {   }    //--- event handler    void              OnTradeTransaction(const MqlTradeTransaction &trans,                                         const MqlTradeRequest &request,                                         const MqlTradeResult &result); protected:    //--- trade transactions    //--- these methods should be overridden in the derived class    virtual void      TradeTransactionOrderPlaced(ulong order)                      {   }    virtual void      TradeTransactionOrderModified(ulong order)                    {   }    virtual void      TradeTransactionOrderDeleted(ulong order)                     {   }    virtual void      TradeTransactionOrderExpired(ulong order)                     {   }    virtual void      TradeTransactionOrderTriggered(ulong order)                   {   }     virtual void      TradeTransactionPositionOpened(ulong position, ulong deal)    {   }    virtual void      TradeTransactionPositionStopTake(ulong position, ulong deal)  {   }    virtual void      TradeTransactionPositionClosed(ulong position, ulong deal)    {   }    virtual void      TradeTransactionPositionCloseBy(ulong position, ulong deal)   {   }    virtual void      TradeTransactionPositionModified(ulong position)              {   }   };  //+------------------------------------------------------------------+ //| TradeTransaction function                                        | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans,                         const MqlTradeRequest &request,                         const MqlTradeResult &result)   { //---    CTradeTransaction ExtTransaction; //---    ExtTransaction.OnTradeTransaction(trans,request,result);   } //+---- 

Finally this article makes an in-depth discussion about trade transactions in mql5  MQL5 Cookbook: Processing of the TradeTransaction Event

https://www.mql5.com/en/articles/1111

Updates:

2019.03.06 - v.1.00 : Initial release.

2025.03.05 - v.1.10 : Fixed issue with STOP LIMIT orders not being captured. Added 'SetLogging' public method to control printing verbose information to 'Experts' logs.

24901