The ninja scalping indicator runs four checks and needs all of them. A 5 over 13 EMA cross sets the bias, a stochastic cross confirms the short-term swing, RSI has to sit the right side of 50, and ATR has to clear a floor so dead-flat bars never produce a signal. Each condition removes a class of bad trade, and together they leave a small number of arrows.
This build ships as a compiled .ex4 for MT4 and .ex5 for MT5; the screenshots below come from EURUSD H1.
| Platforms | MT4 (.ex4) + MT5 (.ex5) |
|---|---|
| Chart window | Main price chart |
| Plots | 4: Ninja BUY, Ninja SELL, Fast EMA, Slow EMA |
| Alerts | popup, push notification, email, sound |
| Inputs | 18 |
What the Ninja scalping Indicator draws on the chart
Ninja BUY places a lime arrow below the bar when all four checks agree upward.
Ninja SELL places a red arrow above it on the bearish side.
Fast EMA in dodger blue and Slow EMA in orange plot the first of the four conditions.
The stochastic, RSI and ATR readings stay internal, so arrows can appear when the two lines alone look ordinary.
- Ninja BUY: arrow, lime, width 2, arrow code 233
- Ninja SELL: arrow, red, width 2, arrow code 234
- Fast EMA: line, dodger blue, width 1
- Slow EMA: line, orange, width 1

How the Ninja scalping Indicator calculates its values
Everything computed in one forward pass
The source header is explicit: no per-bar iMA, iRSI, iATR or stochastic calls anywhere. fastK takes 2.0 / (FastEMA + 1.0), and the recursion seeds at seed_fast with a plain average, so BufFast never starts from zero. The RSI, stochastic and ATR arrays build the same way, each in one pass, which keeps a long history fast.
Wilder smoothing done properly
The RSI seeds at seed_rsi with simple averages, then smooths. avgG becomes (avgG * (RsiPeriod – 1) + gain) / RsiPeriod, and avgL follows the same shape. ATR uses that pattern too. Both follow Wilder’s original recursions rather than plain rolling means, so the readings match MetaTrader’s built-ins.
Four conditions, then a confirmed bar
The header states the stack: an EMA cross for bias, stochastic %K against %D for the swing, RSI against `RsiLongMin` or `RsiShortMax` to block counter-trend triggers, and ATR above minAtr to block flat bars. `NoRepaintMode` at `true` then confirms everything on the last closed bar, index 1, so a printed arrow stays where it printed.
How to read the signals
Silence is normal. Four conditions rarely align, which is the design rather than a fault.
Only the EMA pair is visible, so a signal often looks unremarkable from the chart alone.
The ATR floor means quiet sessions produce nothing at all, however the other three read.
With no-repaint mode on, arrows confirm on the closed bar and do not move afterwards.
Alert channels in this build: popup, push notification, email and sound, one message per closed bar.
Four channels sit beneath `EnableAlerts`, and this build enables more of them than most: `EnablePushNotify` and `EnableSound` both ship `true` alongside the popup, with `SoundFileName` naming the clip. Only email starts off. The guard permits one message per closed bar.
Every Ninja scalping Indicator input
Core settings
| Setting | What it does | Default |
|---|---|---|
FastEMA |
Fast EMA period. Fast average length, default `5`, with `SlowEMA` at `13` for the slower leg. | 5 |
SlowEMA |
Slow EMA period. | 13 |
StochK |
Stochastic %K period. Stochastic %K period, default `5`, with `StochD` at `3` and `StochSlowing` at `3`. | 5 |
StochD |
Stochastic %D smoothing. | 3 |
StochSlowing |
Stochastic slowing. | 3 |
RsiPeriod |
RSI period. Momentum lookback, default `14`. `RsiLongMin` and `RsiShortMax` both sit at `50.0`. | 14 |
RsiLongMin |
RSI must be ABOVE this for BUY. | 50.0 |
RsiShortMax |
RSI must be BELOW this for SELL. | 50.0 |
AtrPeriod |
ATR period. Volatility lookback, default `14`. | 14 |
MinAtrPoints |
Min ATR in points. Smallest ATR that allows a signal, default `5.0` points. Raise it to block more quiet-market bars. | 5.0 |
NoRepaintMode |
Confirm on closed bar only. On by default, confirming on the last closed bar. Turning it off gives earlier arrows that can vanish. | on |
Display settings
| Setting | What it does | Default |
|---|---|---|
ArrowOffsetPts |
Arrow offset in points. | 8 |
Alert settings
| Setting | What it does | Default |
|---|---|---|
EnableAlerts |
(see inputs panel) | on |
EnablePopup |
(see inputs panel) | on |
EnablePushNotify |
(see inputs panel) | on |
EnableEmail |
(see inputs panel) | off |
EnableSound |
(see inputs panel) | on |
SoundFileName |
(see inputs panel) | alert.wav |

Settings that fit your chart
Fast EMAs and a short stochastic point this at intraday charts. EURUSD H1 is the reference. On M5 and M15 the four conditions align a few times a session, which is what a scalping stack is meant to do. Note `MinAtrPoints` is a raw point count, so on gold or an index it blocks almost nothing at `5.0` and needs raising.
When the Ninja scalping Indicator fails
Four lagging inputs agreeing is still four lagging inputs. Confluence arrives after a move has started.
The RSI filter sits at the midline, which blocks roughly half of counter-trend triggers rather than most of them.
The ATR floor is measured in raw points, so one setting cannot suit both a 5-digit forex pair and gold.
Copy the compiled Ninja scalping Indicator file into your MQL4/Indicators folder, and the MT5 build into MQL5/Indicators, then restart the terminal and drag it onto a chart. The step-by-step guide with screenshots is at how to install MT4 and MT5 indicators.
Download the Ninja scalping Indicator for MT4 and MT5
The zip holds the compiled Ninja scalping Indicator build for MT4 and MT5, plus a short README. Compiled files only, no source. Enter your email below and the download link arrives in your inbox.
Download this indicator free
Enter your email and the file is yours. You also get the full MT4 and MT5 library.
FAQ
What does MinAtrPoints actually block?
Bars where the market is barely moving. ATR has to clear `5.0` points before any signal counts, which removes the dead-flat range bars where an EMA and stochastic cross mean nothing. On instruments with a different tick size, gold especially, that figure is far too low and should be raised.
Why does RsiPeriod get computed by hand instead of via iRSI?
Speed. The header notes that every array builds in a single forward pass rather than through per-bar calls, which matters on a long history with four separate inputs. The recursions still follow Wilder’s originals: seed with plain averages, then smooth. So the values match the built-ins.
What does NoRepaintMode change?
It confirms every condition on the last closed bar, index 1, rather than the bar still forming. With it on, which is the default, a printed arrow never moves. Turning it off gives you the signal sooner and accepts that it can disappear if the bar closes differently.
Why do RsiLongMin and RsiShortMax both default to 50?
Because the RSI leg is there to block counter-trend triggers rather than to demand strong momentum. Sitting at the midline means a buy simply cannot fire while momentum points down. Raising `RsiLongMin` to 55 turns it into a stricter filter and reduces the arrow count further.
Are results guaranteed?
No. Trading involves risk. Results are not guaranteed; past performance is not indicative of future results. Use the Ninja scalping Indicator as one input. Always backtest before trading live.
Category: this is part of our Signal and Forecast collection. Browse more Signal and Forecast for MetaTrader, or explore every MT4 indicator and MT5 indicator on the site.
External references
- For background on this concept, see Reuters 3000 Xtra on Wikipedia.
- For broader market context, see ibwmfi (BWMFI) at the MQL5 Documentation.
