This is how open prices mode works in the tester by design. It's not intended for accurate testing of multisymbol robots. You can use M1 OHLC mode or trade by timer. You can find more info about the modes in the book.
MQL5 Book: Generating ticks in tester / Trading automation
- www.mql5.com
The presence of the OnTick handler in the Expert Advisor is not mandatory for it to be tested in the tester. The Expert Advisor can use one or more...
Here is more closely-related chapter for the subject in the book. It explains your observations and suggests what to do (you need to synchronize symbols on your own - by the way, you need it for proper trading online anyway).
MQL5 Book: Multicurrency testing / Trading automation
- www.mql5.com
As you know, the MetaTrader 5 tester allows you to test strategies that trade multiple financial instruments. Purely technically, subject to the...
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Observation / research note
While backtesting a multi-symbol portfolio EA on EURUSD M15, I noticed that entries for GBPUSD, USDCHF, USDCAD, and GBPJPY were systematically about 15 minutes late. EURUSD, EURJPY, and EURAUD entered on time.
This happened in Open Prices Only mode. When I ran each symbol in its own separate backtest, the delay disappeared.
So I tested whether iTime() returns a stale bar time for off-chart symbols at the exact moment the primary symbol's new-bar OnTick fires.
Test setup
I used a small EA, BarTimingProbe.mq5 , running on EURUSD M15. On each EURUSD new-bar event, it opened a 50-tick tracking window and polled:
iTime(secondary, PERIOD_M15, 0)
for these secondary symbols: GBPUSD, USDCHF, USDCAD, GBPJPY, EURJPY, EURAUD.
The EA recorded how many ticks it took for the secondary symbol's current bar time to catch up to the EURUSD bar time.
Period: 2025-05-08 to 2026-05-08
Primary: EURUSD M15
Bars tested: 24,751 M15 bars
Results
Values show the percentage of M15 bars where the secondary symbol had not yet advanced when the EURUSD new-bar tick fired.
Main finding
In tick-based modes, the non-EUR off-chart symbols lag on about 99.7% of M15 bars, but usually only by 1 tick. So the stale read is very brief.
In Open Prices Only mode, the issue becomes much more serious. MT5 generates only one tick per bar. If the off-chart symbol has not advanced on that tick, there is no second tick inside the same M15 bar to correct it.
That means iTime() , iOpen() , iClose() , etc. for those off-chart symbols only become current on the next M15 bar. In practice, this creates a systematic +1 bar / +15 minute delay on M15.
Practical implication
If a multi-symbol EA runs on EURUSD and reads bar-indexed data from non-EUR off-chart symbols inside the primary symbol's new-bar OnTick , it may read the previous bar's data.
This is especially dangerous in Open Prices Only mode, because the stale state lasts for the whole bar.
Workaround
For production-style testing, the cleanest workaround I found is to run each symbol in its own independent MT5 backtest and then merge the resulting trade records afterwards. When each symbol is tested as the primary symbol, the lag obviously disappears. Although, this could introduce problems with certain risk management and trade methods.
Minimal probe logic
The probe produces no trades. It only records timing data.
Summary: In the MT5 Strategy Tester, off-chart symbol bar timestamps may not be synchronized with the primary symbol at the exact new-bar tick. In Open Prices Only mode, this can create a full one-bar delay for multi-symbol EAs.
Test period: 2025-05-08 to 2026-05-08 | Primary: EURUSD M15 | MT5 Strategy Tester