EA-42283 · Scalping

CCI MACD Scalper

This EA is a scalping strategy that combines CCI zero-line crossover signals with MACD histogram crossover confirmations and EMA34 trend filtering to generate buy/sell entries. It uses fixed risk-reward ratio position sizing based on account balance percentage and recent swing high/low for stop loss placement. An optional trailing stop mechanism with partial profit taking is also included.

Open the interactive view (equity curve, symbol switch)

Key facts

CategoryScalping
RiskCaution
Blow-up riskLow
Rating★★☆☆☆
TypeTrading EA
TimeframesM5, M15, M30
IndicatorsEMA, CCI, MACD
Author—

Backtest results (H1, about 1 year)

SymbolP&LAnnualMax DDTradesWin rateSharpeRecoveryLosing streakPer tradeStatus
EURUSD-3.52%-3.06%8.84%10.00%————Same as other EAs
GBPUSD+2.68%+2.32%6.56%10.00%————Same as other EAs
USDJPY-2.68%-2.33%7.60%10.00%————Same as other EAs
XAUUSD-8.50%-7.07%66.13%10.00%————Same as other EAs

On every market this backtest is identical to EA-1812. The automatic conversion almost certainly lost what makes this EA different (a custom indicator, a filter or the money management), so these results are not ranked or counted.

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.

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 core concept of this strategy is to use CCI zero-line crossover signals from overbought/oversold zones as momentum reversal triggers, while requiring MACD histogram crossover confirmation for multi-indicator confluence entries. For entry conditions, a buy requires price above EMA34 (trend filter), CCI crossing from negative to positive (momentum reversal), and MACD histogram bullish crossover below zero (confirmation); sells are the mirror opposite. Exit conditions include stop loss based on the recent 5-bar swing low/high, take profit calculated from the risk-reward ratio, and an optional trailing stop mechanism that closes half the position on the first trailing move to lock in partial profits. Position sizing uses dynamic lot calculation based on account risk percentage and stop loss distance, accounting for lot step size and maximum volume limits. For money management, users can set each trade to risk 2% of account balance, and trades are rejected if the stop loss distance is below a minimum threshold, providing some degree of capital protection.

Strengths

  • Multi-indicator confluence entry (CCI+MACD+EMA) reduces false signals
  • Dynamic position sizing based on account risk percentage keeps risk controlled
  • Minimum stop loss distance requirement prevents getting stopped out by noise

Weaknesses

  • Trailing stop uses NormalizeDouble(sl, SYMBOL_TRADE_TICK_SIZE) incorrectly - second parameter should be digits, not a price value
  • No CopyBuffer return value checking, invalid indicator data could cause erroneous trades
  • Sell takeProfit calculation on line 145 is wrong: uses bid + riskReward*(bid-stopLoss) which gives a positive value instead of bid - riskReward*(stopLoss-bid), producing an incorrect take profit level
  • EventSetTimer is not paired with EventKillTimer in OnDeinit, causing potential timer leaks
  • No spread filter - scalping strategy can lose money in high-spread environments

Possible improvements

  • Fix the takeProfit calculation bug and NormalizeDouble misuse, add CopyBuffer return value checks
  • Add spread filter and EventKillTimer cleanup in OnDeinit
  • Trailing stop logic should be based on ATR or a proper trailing mechanism rather than simple fixed-unit addition/subtraction

Risk assessment

Overall risk: Caution

  • Scalping strategy lacks spread filter - stop loss may not cover spread costs in high-spread environments
  • TakeProfit calculation bug for sell orders could set incorrect take profit levels leading to losses
  • NormalizeDouble misuse in trailing stop could cause stop loss modification failures

Evaluation scores

Code quality2.0
Strategy logic3.0
Risk management3.0
Robustness2.0
Innovation2.0
Documentation1.0
Overall2.2

Parameters

ParameterDefaultDescription
magicNumber0Magic number for identifying EA orders
accountRisk2Account risk percentage per trade
riskReward1.5Risk-reward ratio
emaPeriod34EMA period for trend filtering
cciPeriod50CCI indicator period
minHour0Hour when EA starts trading
maxHour24Hour when EA stops trading
minimalStopLoss100Minimum stop loss in points
useTrailingStopfalseEnable trailing stop
tslPoints100Trailing stop in points

Similar Scalping 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.