Developing an Arbitrage Expert Advisor for MetaTrader 5: Key Differences and Considerations Compared to MetaTrader 4

Creating a MetaTrader 4 (MT4) arbitrage Expert Advisor (EA) requires a combination of trading strategy insights, programming skills, and a thorough understanding of the MT4 platform. Here’s a step-by-step guide to help you develop a basic MT4 arbitrage EA:

Creating an arbitrage Expert Advisor (EA) for MetaTrader 4 (MT4)

Understanding Arbitrage Trading

  1. Concept: Arbitrage in forex trading involves exploiting price discrepancies in different markets or instruments. For example, you might trade currency pairs across different brokers or use the price difference between a currency pair and its related futures contract.
  2. Types of Arbitrage:
    • Spatial Arbitrage: Buying and selling the same asset on different markets.
    • Triangular Arbitrage: Involves three currencies and their respective pairs.
    • Statistical Arbitrage: Based on mathematical models and historical price relationships.

Preparing the Development Environment

  1. Install MT4: Download and install MetaTrader 4 from an official or broker-provided source.
  2. Familiarize with MQL4: Learn the basics of MQL4, the programming language used for creating EAs in MT4.
  3. Access Historical Data: Ensure you have access to historical price data for backtesting.

Coding the Arbitrage EA

  1. Define Parameters: Set up input parameters for your EA, such as the instruments to trade, lot sizes, thresholds for arbitrage opportunities, and any risk management settings.
  2. Data Handling:
    • Fetch prices of the instruments you are monitoring.
    • Handle and process data efficiently to detect arbitrage opportunities in real-time.
  3. Arbitrage Logic:
    • Implement the core algorithm that detects and exploits price discrepancies.
    • This could involve complex mathematical models, especially for statistical arbitrage.
  4. Order Execution:
    • Code the EA to place and manage orders based on identified opportunities.
    • Implement error handling and consider slippage and execution delays.
  5. Risk Management: Incorporate features to manage risks, like setting stop-loss orders or limiting the number of concurrent trades.

Testing and Optimization

  1. Backtesting: Use MT4’s built-in strategy tester to backtest your EA on historical data.
  2. Optimization: Adjust parameters and refine the algorithm to improve performance.
  3. Demo Trading: Before going live, test your EA in a demo account to see how it performs in real-market conditions.

Going Live

  1. Choose a Broker: Select a broker that supports MT4 and is suitable for arbitrage trading (e.g., low spreads, fast execution).
  2. Monitor Performance: Keep an eye on the EA’s performance and make adjustments as needed.
  3. Compliance and Ethics: Ensure your trading strategy complies with broker policies and ethical standards.

Maintenance and Improvement

  • Regularly update and refine your EA to adapt to changing market conditions.
  • Stay informed about financial markets and algorithmic trading trends.

You can find Free arbitrage EA with source code on our page and use it for your own MT4 arbitrage EA development.


Developing an MT4 arbitrage EA requires a blend of trading expertise, programming skills, and continuous testing and refinement. Remember, success in trading, especially with automated systems, involves a significant amount of risk, and there are no guarantees of profit. Always test thoroughly and trade responsibly.

Creating an arbitrage Expert Advisor (EA) for MetaTrader 5 (MT5)

Creating an arbitrage Expert Advisor (EA) for MetaTrader 5 (MT5) involves considerations that are both similar to and different from those for MetaTrader 4 (MT4). Here are the key differences to keep in mind when developing an arbitrage EA for MT5 compared to MT4:

1. Programming Language and Environment

  • MT4 uses MQL4: MQL4 is simpler and more focused on forex trading.
  • MT5 uses MQL5: MQL5 is more advanced, offering more functionality and flexibility. It’s closer to C++ in terms of its programming capabilities and complexity.

2. Execution Model

  • MT4 Execution: Primarily supports the instant execution model.
  • MT5 Execution: Offers more advanced execution modes, including market execution, which can be more suitable for certain arbitrage strategies.

3. Order Handling

  • MT4 Order System: MT4 uses a simpler order system, primarily tailored for forex trading.
  • MT5 Order System: MT5 supports a more complex order system, including features like filling or partial filling of orders, which can be crucial for some arbitrage strategies.

4. Market Depth

  • MT4 Market Depth: Limited market depth information.
  • MT5 Market Depth: Offers extensive market depth data, which can be essential for more sophisticated arbitrage strategies, especially those that rely on liquidity and order book analysis.

5. Financial Instruments

  • MT4 Instruments: Primarily focused on Forex.
  • MT5 Instruments: Supports a wider range of instruments, including stocks, futures, and options. This broadens the scope for arbitrage opportunities.

6. Backtesting Capabilities

  • MT4 Backtesting: Less advanced, with a focus on single-threaded backtesting.
  • MT5 Backtesting: Offers multi-threaded, multi-currency, and real tick data backtesting, providing more accurate and comprehensive testing environments for complex arbitrage strategies.

7. Hedging

  • MT4 Hedging: Offers simple hedging capabilities.
  • MT5 Hedging: Advanced hedging options, which can be beneficial for certain arbitrage strategies that involve hedging across different instruments.

8. Strategy Complexity

  • MT4 Strategies: Generally simpler due to the limitations of the platform.
  • MT5 Strategies: Can be more complex and sophisticated, leveraging the advanced capabilities of MT5.

9. Speed and Performance

  • MT4 Performance: Generally sufficient for many trading strategies, but might lag in more demanding scenarios.
  • MT5 Performance: Enhanced performance and faster execution, beneficial for high-frequency trading strategies like arbitrage.

10. Community and Resources

  • MT4 Community: Larger user base and more resources available due to its longer presence in the market.
  • MT5 Community: Growing community, but resources and expert advisors might be less compared to MT4.

Code Examples for MT5 Arbitrage EA

Shift calculation

Certain CFDs, precious metals, and indices offered by a slow MT5 broker often display quotes that are variably shifted compared to those from a fast feed source. Your MT5 Arbitrage EA needs to be designed to compute the offset between these quotes and incorporate this variance into its operational strategy.

   int int1 = 0, int2 = 0, int3 = 50, int4 = 20;
   double LmaxAsk = 0, LmaxBid = 0;
   double SP = 0, SP2 = 0;
   double AskOffsetSum = 0, BidOffsetSum = 0;

   double LastLMAXBid =0, LastLMAXAsk=0;
   string tmp_comment = "Calculating offset: ";

   bool ReadOk = false;

   int3 = 30;  
   int4 = 5;  

   Print("Calculating offset...");

   while (int1 < int3 && int2 < 600) 
      ReadOk = false;
      if (GetQuotes(LmaxBid, LmaxAsk))

         if (LmaxBid > m_symbol.Point() && LmaxAsk > m_symbol.Point()) ReadOk = true;
         if (LmaxBid <= 0 || LmaxAsk  <= 0) Print("Warning: incorrect quotes received... (Ask = ", LmaxAsk, ", Bid = ", LmaxBid, ")");
      //check if the new quotes received from FIX
      if (fabs(LastLMAXBid-LmaxBid)<m_symbol.Point()&&fabs(LastLMAXAsk-LmaxAsk)<m_symbol.Point())
         ReadOk = false;//old quote
      if (ReadOk)

         LmaxAsk = LmaxAsk;
         LmaxBid = LmaxBid;
         SP = m_symbol.Ask() - m_symbol.Bid();
         SP2 = LmaxAsk - LmaxBid;

         AskOffsetSum += m_symbol.Ask()  - LmaxAsk;
         BidOffsetSum += m_symbol.Bid()  - LmaxBid;
         LastLMAXBid = LmaxBid;
         LastLMAXAsk = LmaxAsk;
         tmp_comment += "|";

      if (int1 < int4 && int2 > 598) int2 = 0;  

   if (int1 > 0)
      g_AskOffset = NormalizeDouble(AskOffsetSum / int1, _Digits);
      g_BidOffset = NormalizeDouble(BidOffsetSum / int1, _Digits);

   if (PrintDebugInfo)
      Print("CalculateAutoOffset() -> AskOffsetSum: ", DoubleToString(AskOffsetSum, _Digits), ", BidOffsetSum: ", DoubleToString(BidOffsetSum, _Digits), ", Tick count: ", int1);
      Print("CalculateAutoOffset() -> g_AskOffset: ", DoubleToString(g_AskOffset, _Digits), ", g_BidOffset: ", DoubleToString(g_BidOffset, _Digits));

   Print("Offset calculation is completed ");
   LastOffsetCalcTime = TimeCurrent();
   g_OffsetCalculationComplete = true;   

Fast feed for MT5 Latency Arbitrage EA

To effectively utilize the Free MT5 Latency Arbitrage EA, you are required to develop a custom fast feed solution. This involves coding a mechanism to retrieve rapid quotes from a fast broker and subsequently recording these quotes into MT5 Global Variables. The MT5 Arbitrage EA will then access these quotes from the Global Variables, comparing them against the quotes from a slower MT5 broker.

        int connected = GlobalVariableGet("FEEDER_connected");
        if (connected==0) return false;  
        if (!GlobalVariableGet("FEEDER_"+FeederSymbolName+"_BID",BidFast)) return false;
        if (!GlobalVariableGet("FEEDER_"+FeederSymbolName+"_ASK",AskFast)) return false;
   return true;


When developing an arbitrage EA for MT5, take advantage of its advanced features such as enhanced market depth, broader instrument support, advanced order types, and superior backtesting capabilities. However, also consider the increased complexity of the platform and the programming language, which might require more sophisticated coding skills compared to MT4.

Leave a Reply

Your email address will not be published. Required fields are marked *