The client's idea
Bahar Quant Team works NAS100 on M5; the opening brief was: Take the signal from the order-flow data, but leave the entry to our execution layer.
Project and starting point
The signal appeared on screen, but by the time the team clicked, the market had moved — spreads at the open made it worse.
Solution architecture
The signal feeds the execution layer directly with a tunable threshold, a spread guard around the open, and each trade written with the signal id that triggered it.
Every trade carries its signal id so later analysis can tell which setting worked better. It matches how NAS100 is actually traded and can be tested against the data already available.
Why this design
Every trade carries its signal id so later analysis can tell which setting worked better. It matches how NAS100 is actually traded and can be tested against the data already available.
Implemented capabilities
Modules and components built: Signal threshold + fast execution.
Delivered output:
Order-flow signal bot — NAS100 (M5)
Specification document and the rule-to-code mapping table
Full MQL5 source, commented
Test report: Combined data and execution test
Parameter document and install guide (7 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: Combined data and execution 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, order data, execution 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
Entry delay fell from seconds to under half a second, and the team could measure each threshold separately.
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.
- 45 ms Order round-trip time
- 0.4 pt Average execution slippage
- 980 Trades reviewed
- 6 scenarios Scenario test coverage