• Overview
  • Reviews (3)
  • Comments (64)
  • What's new

PZ Triangular Arbitrage EA

The Triangular Arbitrage EA exploits inefficiencies between three related currency pairs, placing offsetting transactions which cancel each other for a net profit.

  • Easy to set up and supervise
  • No indicators or hard analysis needed
  • The strategy is time-frame independent
  • The strategy is neutral to news, gaps or price spikes
  • Deals are completely hedged: all you can lose is the spread
  • Under ideal trading conditions, triangular arbitrage is a zero-risk strategy
  • Arbitrage is a high-volume strategy and generates a lot of rebates

It implements a set of unique features:

  • You decide which pair set to trade
  • Adapts to spread, commissions and swaps
  • Implements an optional trade-expiration feature
  • Customizable price trigger and profit target

It can trade any of the following pair sets:


What is Triangular Arbitrage?

Triangular arbitrage (also referred to as cross currency arbitrage or three-point arbitrage) is the act of exploiting an arbitrage opportunity resulting from a pricing discrepancy among three different forex pairs in the foreign exchange market. A triangular arbitrage deal involves three trades, exchanging the initial currency for a second, the second currency for a third, and the third currency for the initial. During the second trade, the arbitrageur locks in a zero-risk profit from the discrepancy that exists when the market cross exchange rate is not aligned with the implicit cross exchange rate. A profitable deal is only possible when a market inneficiency arises and if execution times are small.

Important - there is substantial execution risk in employing a triangular arbitrage strategy for retail traders, as execution times are never perfect on the server-side.


At the time of writing, the MT4 Tester does not support multi-currency-pairs testing. To backtest the EA, test the MT5 version.

Input Parameters

  • Triangulation Pairs - Select the pair set to trade.
  • Symbol Name Suffix - Type the suffix of the symbol names of your broker. For instance, if EURUSD is named EURUSDfx, fx is the suffix.
  • Symbol Name Prefix - Type the prefix of the symbol names of your broker. For instance, if EURUSD is named mEURUSD, m is the prefix.
  • Trade Trigger - The trade trigger defines how deep the inefficiencies must be to trade, as multiplier of the combined spreads and commissions the deal must pay to enter a deal. A higher value means deeper inefficiencies are traded, but it also means that trading activity won't happen very often. Use this parameter to offset any slippage.
  • Profit Target in Pips - Amount of pips in profit needed to close the deal. A higher values means deals will be opened for longer. Make sure this parameter is never above the combined spread of the symbols traded.
  • Expiration of trades - Optionally, you can select an expiration in time for the trades. This is very effective to cut exposure in situations at which slippage as ruined the trading opportunity.
  • Lotsize for trades - Enter the lotsize for the first trade, which is the parent symbol trade. If the volume is too much for your account equity, the EA won't trade.
  • Slippage for orders - Maximum slippage on orders, in points, allowed for the trades.
  • Magic Number for the trades - Enter an unique magic number, not present in other EAs.
  • Custom comment for trades - Comment for the trades sent to the broker


Arturo Lopez Perez, private investor and speculator, software engineer and founder of Point Zero Trading Solutions.

Nuno Silva Da Cruz
2017.05.27 13:49 

Eu testei o robo 1 mes nao deo nota 0

Daniele Tosolini
2017.05.01 14:31 

No trade in 1 month with 3 different broker and on 3 instruments each one...sorry for Arthur he is great but this EA it's a waste of money

Ke Huang
2017.04.04 06:56   

Hi,Arturo.I once contact with you , but you did't reply me.I rent your EA for a month until 2017.4.25 . In the testing , I found that if I set trigger to "1" , it opened trade frequently; and if I set trigger to "1.5", it hardly opened a trade. How big the risk between "1" and "1.5"? And where to set the S/L ?Thank you!Best regards.

Version 7.5 - 2017.12.18
- Improved lotsize calculation
Version 6.5 - 2017.06.28
- Improvement in order filling, using actual filling prices, instead of bid/ask quotes
Version 6.0 - 2017.05.17
- Bug fix regarding profit calculations in pips. Please update.
Version 5.0 - 2017.02.20
- Fixed expiration bug. Please update.
Version 4.0 - 2017.01.31
- Automatic Magic Number Assignation
- Algorithm execution made faster and using OnTimer() instead of ticks
- Magic Numbers used are from 76543 to 76550
Version 3.0 - 2017.01.13
- Important bug fix. Please update.