All parameters exposed via [NinjaScriptProperty] for easy optimisation.
Customization highlights
Q / R noise, Z-score period, EMA length.
Toggle dynamic bands, EMA filter, price-bar painting.
Independent color/opacity settings for every element.
Drop the file into NinjaTrader 8 → Indicators, compile, and add it to a chart in its own panel. Adjust the thresholds to suit your market / timeframe and let the arrows guide your entries. Happy trading!
I wouldn’t mind putting this together. Instead of triggering an alert on every signal bar, consider integrating a volume-awareness filter:
Identify the highest volume bar in a recent lookback window.
Trigger the alert only when price returns to the price level (or zone) of that high-volume bar, signaling interaction with significant liquidity.
This could reduce noise and align alerts with meaningful participation zones.
(Pseudo-Code )
// Define lookback period for volume analysis
int volumeLookback = 20;
double highVolume = 0;
double highVolumePrice = 0;
// OnBarUpdate logic
if (CurrentBar < volumeLookback)
return;
// Step 1: Scan past N bars for highest volume
for (int i = 1; i <= volumeLookback; i++)
{
if (Volume[i] > highVolume)
{
highVolume = Volume[i];
highVolumePrice = (High[i] + Low[i]) / 2; // Mid-price of the high-volume bar
}
}
// Step 2: Check if current price is within tolerance of that price zone
double toleranceTicks = 2; // adjustable — defines the zone width
double tickSize = TickSize;
double lowerBound = highVolumePrice - (toleranceTicks * tickSize);
double upperBound = highVolumePrice + (toleranceTicks * tickSize);