EA-1070 · Mean Reversion

Exp_BBands_Stop

This EA trades Bollinger Band stop signals, entering long when the upper band stop value is active and the lower band confirms direction, and vice versa for shorts. It uses the custom BBands_Stop_v1 indicator on a configurable timeframe with fixed Stop Loss and Take Profit levels. Position sizing is controlled via a deposit share or fixed lot parameter.

Open the interactive view (equity curve, symbol switch)

Key facts

RiskMedium
Blow-up riskLow
Rating★★★☆☆
TypeTrading EA
TimeframesH1, H4, D1
IndicatorsBollinger Bands
AuthorCopyright © 2012, Nikolay Kositsin

Backtest results (H1, about 1 year)

SymbolP&LAnnualMax DDTradesWin rateSharpeRecoveryLosing streakPer tradeStatus
EURUSD-2.44%-2.12%5.87%14543.10%-0.51-0.426−$1.93Reliable
GBPUSD+3.28%+2.84%4.19%14547.90%0.580.786+$2.11Reliable
USDJPY+5.50%+4.76%3.29%27452.40%0.981.675+$2.07Reliable
XAUUSD+119.89%+91.75%30.57%15251.70%2.293.926+$81.04Reliable

Profitable on 3 of 4 markets with reliable results.

Converted from MQL5 to Python and run with the same rules for every EA. Positions use MT5 lot sizes (100,000 units per FX lot, 100 oz per gold lot) with 1:100 leverage, one order at a time, and a stop-out below 10% of the starting balance. Sharpe is computed from the equity curve. Results marked as unreliable are shown for completeness only.

Against the other Mean Reversion EAs with a reliable result on the same market: EURUSD: better than 47% of 30 · GBPUSD: better than 75% of 32 · USDJPY: better than 84% of 32 · XAUUSD: better than 90% of 31

Month by month

MarketMonths with a gainBest monthWorst month
EURUSD62%+1.83% 2026-04-2.21% 2026-09
GBPUSD62%+1.90% 2026-05-2.15% 2026-03
USDJPY62%+4.36% 2026-01-2.04% 2026-05
XAUUSD54%+52.07% 2026-02-9.62% 2026-08

From the backtest equity curve, sampled about every two days; only reliable results.

Blow-up risk: No blow-up pattern found

None of the usual blow-up patterns were found in the code, and the account was not stopped out in our backtests. That is not a guarantee: any EA can lose money.

High: stopped out in our backtest, or martingale/grid sizing without a stop loss. Elevated: martingale or grid sizing with a stop loss, or several positions at once without a stop loss. What the label means and what we found →

Strategy analysis

The strategy concept is based on the BBands_Stop_v1 custom indicator, which generates signals when price breaks above or below Bollinger Bands, classifying it as a mean reversion strategy. Entry conditions: a buy signal fires when the upper band stop value is non-zero on the SignalBar and the lower band value also exists on the current bar; conversely, a sell signal fires when the lower band stop value is non-zero and the upper band value is present. Exit conditions are dual: fixed Stop Loss and Take Profit in points provide primary exits, while opposing signals trigger early position closure (longs close on sell signals, shorts close on buy signals). Position sizing is controlled by the MM parameter, where negative values represent fixed lot sizes and positive values represent a share of the deposit. Money management delegates to TradeAlgorithms.mqh functions (BuyPositionOpen/SellPositionOpen), and the MoneyRisk offset factor adjusts the Bollinger Band displacement to control entry sensitivity. The strategy recalculates signals only on new bar formation or when SignalBar equals zero, preventing redundant trades within the same bar.

Strengths

  • Dual signal confirmation (both upper and lower band values must be present) reduces false signals
  • Dual exit protection combining signal-based and fixed SL/TP closures
  • New bar detection prevents redundant trades within the same bar, keeping logic clean
  • Flexible permission switches for long/short opening and closing independently
  • Basic fault tolerance with Recount flag on CopyBuffer failure for retry on next tick

Weaknesses

  • Depends on external custom indicator BBands_Stop_v1 without source code transparency
  • No EMPTY_VALUE check on indicator buffer values, potentially misinterpreting empty data as valid signals
  • No spread filter, making Stop Loss and Take Profit vulnerable to high-spread environments
  • Core money management logic delegated to external TradeAlgorithms.mqh include file, making it opaque
  • Default SignalBar=1 may cause signal lag, and there is no boundary validation for SignalBar input

Possible improvements

  • Add EMPTY_VALUE checks on indicator buffer results to avoid misinterpreting invalid data as trading signals
  • Add spread filtering and minimum stop distance validation to improve stability in high-spread or low-liquidity conditions

Risk assessment

Overall risk: Medium

  • Indicator buffer values not checked against EMPTY_VALUE, potentially generating false signals and unexpected positions
  • No spread filter means fixed Stop Loss may be too close in high-spread conditions
  • External dependency on TradeAlgorithms.mqh makes internal stop/position logic unauditable

Evaluation scores

Code quality3.0
Strategy logic3.0
Risk management3.0
Robustness2.0
Innovation2.0
Documentation2.0
Overall2.5

Parameters

ParameterDefaultDescription
MM-0.1Trade deposit percentage; negative value = fixed lot size
StopLoss_1000Stop loss in points
TakeProfit_2000Take profit in points
Deviation_10Max price deviation in points (slippage tolerance)
BuyPosOpentrueAllow opening buy positions
SellPosOpentrueAllow opening sell positions
BuyPosClosetrueAllow closing buy positions
SellPosClosetrueAllow closing sell positions
InpInd_TimeframePERIOD_H4Indicator timeframe
Length20Bollinger Bands period
Deviation2Bollinger Bands standard deviation multiplier
MoneyRisk1.00Offset factor
SignalBar1Bar index for entry signal

Similar Mean Reversion EAs

Backtests are historical simulations and do not guarantee future results. Not financial advice.

Get the weekly Arena report

One email a week: ranking changes, new signals and new research. No spam; unsubscribe any time.