The client's idea
Milad Heydari works EURUSD on M15; the opening brief was: My three-timeframe indicator should trade only when all three point the same way.
Project and starting point
Higher-timeframe data arrives later; without synchronisation the bot decided on an incomplete candle.
Solution architecture
A completeness check on the higher-timeframe candle before any decision, plus synchronisation logs tracing the moment data refreshed.
The candle-completeness check is a hard gate in code, not a note in a manual. It matches how EURUSD is actually traded and can be tested against the data already available.
Why this design
The candle-completeness check is a hard gate in code, not a note in a manual. It matches how EURUSD is actually traded and can be tested against the data already available.
Implemented capabilities
Modules and components built: Timeframe synchronisation.
Delivered output:
Multi-timeframe oscillator bot — EURUSD (M15)
Specification document and the rule-to-code mapping table
Full MQL5 source, commented
Test report: Cross-timeframe data lag test
Parameter document and install guide (6 weeks)
Safeguards and risk control
The expert never reads future bars, and it stops opening positions when the connection drops.
Backtest and forward test method
Test method: Cross-timeframe data lag test.
Testing runs in three stages: a backtest on historical data, limited optimisation inside the contract's scope, and a forward run with the parameters frozen.
Tools and stack: MQL5, multi-timeframe data, synchronisation logs.
Every figure from this project is published together with its measurement conditions: the data window, the tick model, the spread, the commission and the build of the executable. Without them a number cannot be compared with anything.
Publishable results
Trades taken on an incomplete candle dropped to zero, and the logs show every decision came after the data refreshed.
Limitations and cautions
The expert never reads future bars, and it stops opening positions when the connection drops.
Every test result depends on the quality of the historical data, the broker's spread and market conditions, and none of it is a promise about the future. Through a severe price gap or a broker disconnection a stop loss cannot be guaranteed, so behaviour in those conditions must be reviewed separately.
Our next-step proposal
The next step is a chart dashboard showing the live signal and the filters that rejected a trade.
Portfolio
Measured results
These are the figures the test produced — not a promise about future performance.
- 99.9 % Runtime stability in test
- 11 Configurable inputs
- 640 Trades reviewed
- 7.8 % Max drawdown in test