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
Backtest results (H1, about 1 year)
| Symbol | P&L | Annual | Max DD | Trades | Win rate | Sharpe | Recovery | Losing streak | Per trade | Status |
|---|---|---|---|---|---|---|---|---|---|---|
| EURUSD | -3.52% | -3.06% | 8.84% | 1 | 0.00% | — | — | — | — | Same as other EAs |
| GBPUSD | +2.68% | +2.32% | 6.56% | 1 | 0.00% | — | — | — | — | Same as other EAs |
| USDJPY | -2.68% | -2.33% | 7.60% | 1 | 0.00% | — | — | — | — | Same as other EAs |
| XAUUSD | -8.50% | -7.07% | 66.13% | 1 | 0.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
Parameters
| Parameter | Default | Description |
|---|---|---|
magicNumber | 0 | Magic number for identifying EA orders |
accountRisk | 2 | Account risk percentage per trade |
riskReward | 1.5 | Risk-reward ratio |
emaPeriod | 34 | EMA period for trend filtering |
cciPeriod | 50 | CCI indicator period |
minHour | 0 | Hour when EA starts trading |
maxHour | 24 | Hour when EA stops trading |
minimalStopLoss | 100 | Minimum stop loss in points |
useTrailingStop | false | Enable trailing stop |
tslPoints | 100 | Trailing stop in points |
Similar Scalping EAs
Backtests are historical simulations and do not guarantee future results. Not financial advice.