NightMeanRevert EA
Bollinger-band night session mean-reversion
A disciplined, well-built clean-room EA with no edge. Fails 4 of 6 acceptance gates and misses the ≥200-trade prerequisite by ~8×. Price reverts to the band-center target only 21% of the time and stops out 66% — the mean-reversion thesis simply does not hold in the night window.
- Category
- Mean-reversion
- Window
- 2018–2026 (8.5y)
- Instruments
- EURUSD, GBPUSD, USDJPY, AUDUSD
- Timeframe
- M5 (night session)
- Tested
- 2026-06-20
The story in one line
A clean-room, 985-line MQL5 night-session mean-reversion EA — Bollinger-band rejection in low-vol, low-trend regimes, with genuinely well-built risk controls — loses money on real 2018–2026 Dukascopy M5 data: net −$181 (−3.62%), profit factor 0.655, Sharpe −0.48, win rate 29.6% across 71 trades. It is net-negative in every out-of-sample segment, and every single parameter perturbation tested is break-even at best. This is not a cost problem or a tuning problem — the mean-reversion edge is absent in the data.
This is the opposite failure mode of the basket-grid bots that over-traded into ruin: NightMeanRevert is so selective it produces only ~8 trades/year across 4 pairs, and the few it takes lose. The 4th archetype to fail — and the most disciplined of them.
Headline result
| Metric | Value |
|---|---|
| Profit factor | 0.655 |
| Win rate | 29.6% |
| Net P&L | −$181 (−3.62%) |
| Trades (8.5y, 4 pairs) | 71 (8.4/yr) |
| Reverts to target | 21% (15/71) |
| Stops out | 66% (47/71) |
The realised reward:risk is a healthy 1.56, but a 29.6% win rate needs to be ≥39.1% to break even. It isn’t. Price reaches the BB-center target only 21% of the time and hits the 1.40-ATR stop 66% of the time — the mean-reversion thesis does not hold within the 3-hour night window.
Per-segment performance
| Segment | n | PF | Win% | Net $ | Positive? |
|---|---|---|---|---|---|
| Dev 2018–2021 | 33 | 0.98 | 36.4 | −4.01 | ❌ |
| Validation 2022–2023 | 13 | 0.42 | 23.1 | −60.61 | ❌ |
| Locked OOS 2024–Jun 2026 | 25 | 0.47 | 24.0 | −116.50 | ❌ |
Every segment is negative. The dev period is the “least bad” (a statistical zero on n=33), and performance degrades out-of-sample — the opposite of a robust edge. The README required ≥200 OOS trades; the locked OOS produced 25, an 8× miss, leaving the strategy statistically un-validatable.
No profitable island
A one-at-a-time parameter sweep finds no profitable neighbourhood. The best result anywhere in the grid is short_rsi_min=75 at PF 1.001 (dead flat, no net trades) and bands_period=15 at PF 0.984 — the least-bad perturbations are break-even at best, and they straddle a negative default rather than sitting on a robust plateau. Every other cell lands at PF 0.25–0.72. Loosening filters to get more trades (long_rsi_max=45 → n=181) makes it worse (−7.49%). DST/server-clock offsets (−1h / default / +1h) all lose (−$407 / −$181 / −$151). The “tunings” that nudge PF toward 1.0 do so by removing losing trades until nothing is left — converging to no-trade, not to a profitable system. This is the signature of no edge, not overfitting.
Verdict: REJECT (PF 0.655). Do not deploy. NightMeanRevert is the most disciplined of the failed retail EAs — the clean-room engineering is sound and the risk controls are genuinely well-built — but the signal those controls gate has no demonstrable edge on real data. A backtest that loses before any live frictions (real night spreads, swap, tick-fill slippage) are added will only lose more with them.
Charts & evidence
Frequently asked
Does Bollinger-band night mean-reversion work in forex?
Not in this clean-room test. A Bollinger-band night-session mean-reversion EA backtested on real 2018–2026 M5 data returned a profit factor of 0.655 and was net-negative in every out-of-sample segment. Price reverted to the band-center target only 21% of the time while stopping out 66% of the time; a 29.6% win rate needs to be at least 39.1% just to break even.
Could parameter tuning rescue the night mean-reversion EA?
No. Every one-at-a-time parameter perturbation was break-even at best (the least-bad reached PF 1.001 with no trades), and loosening filters to get more trades made it worse. There is no profitable parameter island — the signature of no edge rather than overfitting. It also failed the ≥200-OOS-trade prerequisite by about 8×, producing only ~8 trades per year across four pairs.
Methodology: The Validation Gauntlet — pre-registered spec, 11-gate battery, real market data.
Full reproducible report: backtests/nightmr/REPORT.md in the source repository.
Author: Brent Akamine (Founder, Vinovest). Backtests are not investment advice.