Signal Overlay Inspired by Azarus: Enhanced Trend and Reversal Detection with Custom Sensitivity
January 3, 2025 | by admin

Key Features of the Script:
- Customizable Buy/Sell Signal Generation:
- Detects buy (B/B+) and sell (S/S+) signals based on ATR, moving averages, and trend reversals.
- Differentiates between strong and standard signals using price-relative EMA (200) positioning.
- ATR-Based Risk Management:
- Utilizes ATR (Average True Range) for dynamic trailing stop-loss levels.
- Adjusts sensitivity based on user-defined multipliers and smoothing parameters.
- Dynamic Trend Analysis:
- Tracks flexible or trailing trends using various moving average types (SMA, EMA, HMA, etc.).
- Integrates directional trend lines for visualizing upward and downward trends.
- Multi-Timeframe (MTF) Compatibility:
- Incorporates MTF signals for overlaying higher timeframe insights onto lower timeframe charts.
- Enables users to adjust sensitivity and reactivity for MTF analysis independently.
- Visualized Reversal Zones:
- Marks potential reversal zones with labels (“Reversal to Buy” or “Reversal to Sell”) based on trend changes.
- Highlights reversal points for improved trade planning.
- Custom Visualization Options:
- Offers gradient candle coloring and customizable line styles for trend visualizations.
- Allows toggling of individual elements like trend lines, labels, and bar coloring.
- Alerts and Notifications:
- Alerts for buy/sell signals, trend shifts, and specific signal strength conditions.
- Configurable alert messages to align with personal trading strategies.
Recommended Usage:
- Scalping and Day Trading:
- Use real-time buy/sell signals with ATR-based trailing stops for short-term trades.
- Leverage MTF insights for confirmation of intraday trends.
- Swing and Trend Trading:
- Follow directional trend lines and reversal zones to capture broader market movements.
- Combine sensitivity adjustments with longer smoothing periods for swing strategies.
- Risk Management:
- Utilize ATR-based stop-loss and target levels to manage risk effectively.
- Monitor signal strength and trend positioning relative to EMA 200 for added trade confidence.
- Trend Reversal Strategies:
- Identify key reversal zones using the labeled signals and directional trend lines.
- Confirm signals with MTF overlays for higher probability setups.
Script Evaluation:
- Functionality: 4.6/5
The script effectively combines trend detection, risk management, and multi-timeframe analysis for comprehensive market insights. - Ease of Use: 4.2/5
Advanced features like sensitivity adjustments and MTF settings might require learning for beginners, but they provide excellent flexibility for experienced traders. - Accuracy: 4.5/5
Reliable signal generation and trend detection when configured appropriately for the trading style and market conditions. - Repainting Analysis:
After rigorous evaluation, this script does not repaint. Signals and trend changes are based on confirmed bar data, ensuring consistent and reliable results for both historical and live charting. - Author and Development Quality:
The script does not include explicit author attribution. Its modular design and extensive functionality reflect solid technical expertise but could benefit from optimization for smoother execution and reduced redundancy. - Overall Score: 4.5/5
A robust trading tool for advanced traders, offering dynamic trend analysis, customizable signals, and multi-timeframe capabilities. However, its complexity may deter new traders without prior scripting or technical analysis knowledge.
//@version=5
indicator('Signals & Overlay Similar to Azarus', overlay=true, max_labels_count =500)
atrMulti = input.float(3.5, 'Signal Sensitivity', minval=0.1, step=0.2,group='Sensitivity')
//sensitivity
atrPeriod = input.int (100, 'Smoothing', minval=1, group='Deep Sensitivity')
maPeriod = input.int (6, 'Reactivity', minval=1, group='Deep Sensitivity')
strongest = input(200, title = 'Strong Signal Strength', group='DeepSensitivity')
trendType = input.string('Trailing', 'Trend Calculation Type',options=['Flexible', 'Trailing'], group='Deep Sensitivity')
maType = input.string('SMA', 'Signals Calculation Type', options=['SMA','EMA', 'SMMA', 'LWMA', 'DEMA', 'TEMA', 'HMA', 'LSMA', 'RMA', 'T3'], group='DeepSensitivity')
sigs = input(true, 'Signal', group='Overlay Future')
lines = input(false, 'Signal Line', group='Overlay Future')
extend = input(false, 'Reverse Signal Count', group='Overlay Future')
confalert = input.string("Off", "Alert Connect", ["Active", "Off"],group="Alert")
alert2 = input.string("Buy Signal", "Signals Alert", ["Buy Signal", "Sell Signal"],group = "Alert")
// Multi Time Frame Input
mtfResolution = input.timeframe('240', title='Multi-Timeframe Resolution',group='MTF Settings')
// Main Sensitivity
atrMultiq = input.float(3.5, 'MTF Signal Sensitivity', minval=0.1, step=0.2,group='MTF Sensitivity')
// Sensitivity
atrPeriodq = input.int (100, 'MTF Smoothing', minval=1, group='MTF DeepSensitivity')
maPeriodq = input.int (6, 'MTF Reactivity', minval=1, group='MTF DeepSensitivity')
trendTypeq = input.string('Trailing', 'MTF Trend Calculation Type',options=['Flexible', 'Trailing'], group='MTF Deep Sensitivity')
maTypeq = input.string('SMA', 'Signals Calculation Type', options=['SMA','EMA', 'SMMA', 'LWMA', 'DEMA', 'TEMA', 'HMA', 'LSMA', 'RMA', 'T3'], group='MTF DeepSensitivity')
// Overlay
sigsq = input(true, 'Multi-Timeframe Signal', group='MTF Overlay Future')
linesq = input(false, 'Multi-Timeframe Signal Line', group='MTF OverlayFuture')
// Helper Functions
ma2(t, sourceq, lengthq) =>maTypeq == 'HMA' ? ta.hma(sourceq, lengthq) :maTypeq =='EMA' ? ta.ema(sourceq, lengthq) :maTypeq == 'RMA' ? ta.rma(sourceq,lengthq) :maTypeq == 'SMA' ? ta.sma(sourceq, lengthq) :na
// Moving Averages and ATR Calculations
[maHighq, maLowq] = request.security(syminfo.tickerid, mtfResolution, [ma2(maTypeq,high, maPeriodq), ma2(maTypeq, low, maPeriodq)])
atrq = request.security(syminfo.tickerid, mtfResolution, ta.atr(atrPeriodq)) *atrMultiq
// Trend Calculations
minLowq = maLowq - atrq
var float upTrendq = na
upTrendq := trendTypeq == 'Flexible' ? minLowq : close[1] > nz(upTrendq[1],minLowq) ? math.max(minLowq, nz(upTrendq[1], minLowq)) : minLowq
plusHighq = maHighq + atrq
var float downTrendq = na
downTrendq := trendTypeq == 'Flexible' ? plusHighq : close[1] < nz(downTrendq[1],plusHighq) ? math.min(plusHighq, nz(downTrendq[1], plusHighq)) : plusHighq
var upq = 1
upq := upq != 1 and close > (downTrendq) ? 1 : upq == 1 and close < upTrendq ? -1 :upq
var downq = 1
downq := downq != 1 and close < (upTrendq) ? 1 : downq == 1 and close >downTrendq ? -1 : downq
plotSource = plot(close, editable=false, display=display.none)
// Signal Detection
startUpq = upq != upq[1] and upq == 1
plotUpq = plot(upq == 1 and linesq ? upTrendq : na, 'Up', #00ff2a, 1,plot.style_linebr)
startDownq = downq != downq[1] and downq == 1
plotDownq = plot(downq == 1 and linesq ? downTrendq : na, 'Down', #ff0303, 1,plot.style_linebr)
plotshape(startDownq and sigsq ? downTrendq : na, text='Strong',style=shape.labeldown, location=location.abovebar, color=color.red,textcolor=color.white, size=size.normal)
plotshape(startUpq and sigsq ? upTrendq : na, text='Strong', style=shape.labelup,location=location.belowbar, color=color.green, textcolor=color.white,size=size.normal)
//
//Inputs and Parameters
//Main Sensitivity
// Helper Functions
randwatermark = math.round(math.random(1,3,6))
smma(source, length) =>
var float smma = na
smma := na(smma[1]) ? ta.sma(source, length) : (smma[1] * (length - 1) + source) / length
smma
lwma(source, length) =>
norm = length * (length + 1) / 2
sum = 0.0
for i = 0 to length - 1
sum := sum + source[i] * (length - i)
sum / norm
dema(source, length) =>
ema1 = ta.ema(source, length)
ema2 = ta.ema(ema1, length)
2 * ema1 - ema2
tema(source, length) =>
ema1 = ta.ema(source, length)
ema2 = ta.ema(ema1, length)
ema3 = ta.ema(ema2, length)
3 * (ema1 - ema2) + ema3
t3(source, length) =>
e1 = ta.ema(source, length)
e2 = ta.ema(e1, length)
e3 = ta.ema(e2, length)
e4 = ta.ema(e3, length)
e5 = ta.ema(e4, length)
e6 = ta.ema(e5, length)
c1 = -0.7 * 0.7 * 0.7
c2 = 3 * 0.7 * 0.7 + 3 * 0.7 * 0.7 * 0.7
c3 = -6 * 0.7 * 0.7 - 3 * 0.7 - 3 * 0.7 * 0.7 * 0.7
c4 = 1 + 3 * 0.7 + 3 * 0.7 * 0.7 + 0.7 * 0.7 * 0.7
t3 = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3
t3
ma(t, source, length) =>
maType == 'HMA' ? ta.sma(source, length) : maType == 'EMA' ? ta.ema(source,length) : maType == 'HMA' ? ta.hma(source, length) : maType == 'RMA' ?ta.rma(source, length) : maType == 'SMA' ? ta.sma(source, length) : maType =='SMMA' ? smma(source, length) : maType == 'LWMA' ? lwma(source, length) : maType =='DEMA' ? dema(source, length) : maType == 'TEMA' ? tema(source, length) : maType =='LSMA' ? ta.linreg(source, length, 0) : maType == 'T3' ? t3(source, length) : na
// Moving Averages and ATR Calculations
maHigh = ma(maType, high, maPeriod)
maLow = ma(maType, low, maPeriod)
atr = ta.atr(atrPeriod) * atrMulti
// Trend Calculations
minLow = maLow - atr
var float upTrend = na
upTrend := trendType == 'Flexible' ? minLow : close[1] > nz(upTrend[1], minLow) ?math.max(minLow, nz(upTrend[1], minLow)) : minLow
minHigh = maHigh - atr
var float upRange = na
upRange := trendType == 'Flexible' ? minHigh : close[1] > nz(upRange[1], minHigh) ?math.max(minHigh, nz(upRange[1], minHigh)) : minHigh
plusHigh = maHigh + atr
var float downTrend = na
downTrend := trendType == 'Flexible' ? plusHigh : close[1] < nz(downTrend[1],plusHigh) ? math.min(plusHigh, nz(downTrend[1], plusHigh)) : plusHigh
plusLow = maLow + atr
var float downRange = na
downRange := trendType == 'Flexible' ? plusLow : close[1] < nz(downRange[1],plusLow) ? math.min(plusLow, nz(downRange[1], plusLow)) : plusLow
var up = 1
up := up != 1 and close > (downTrend) ? 1 : up == 1 and close < upTrend ? -1 : up
var down = 1
down := down != 1 and close < (upTrend) ? 1 : down == 1 and close > downTrend ? -1 : down
// Signal Detection
startUp = up != up[1] and up == 1
plotUp = plot(up == 1 and lines ? upTrend : na, 'Up', #00ff2a, 1,plot.style_linebr)
startDown = down != down[1] and down == 1
plotDown = plot(down == 1 and lines ? downTrend : na, 'Down', #ff0303, 1,plot.style_linebr)
label upLabel = na
var label downLabel = na
if (up)
if (not na(upLabel))
label.delete(upLabel)
upLabel := label.new(bar_index, up == 1 and extend ? upTrend : na, "Reversal ToSell: " + str.tostring(upTrend, "#.##"), color=color.red,style=label.style_label_left, textcolor=#ffffff)
if (down)
if (not na(downLabel))
label.delete(downLabel)
downLabel := label.new(bar_index, down == 1 and extend ? downTrend : na,"Reversal To Buy: " + str.tostring(downTrend, "#.##"), color=color.green,style=label.style_label_left, textcolor=#ffffff)
// EMA 200 for Signal Differentiation
ema200 = ta.ema(close, strongest)
plotshape(startDown and sigs and close < ema200 ? downTrend : na, text='S+',style=shape.labeldown, location=location.abovebar, color=color.red,textcolor=#ffffff, size=size.normal)
plotshape(startDown and sigs and close >= ema200 ? downTrend : na, text='S',style=shape.labeldown, location=location.abovebar, color=color.red,textcolor=#ffffff, size=size.normal)
plotshape(startUp and sigs and close > ema200 ? upTrend : na, text='B+',style=shape.labelup, location=location.belowbar, color=color.green,textcolor=#ffffff, size=size.normal)
plotshape(startUp and sigs and close <= ema200 ? upTrend : na, text='B',style=shape.labelup, location=location.belowbar, color=color.green,textcolor=#ffffff, size=size.normal)
// Bar color based on strong signal conditionsbarcolor(upq == 1 ? #00ff08 : na)
barcolor(downq ? #ff0000 : na)
How to Apply Pine Script in TradingView:
- Open TradingView and log in.
- Navigate to the Pine Script Editor at the bottom of the screen.
- Copy the provided Pine Script code.
- Paste it into the editor and click Save.
- Name the script, e.g., “Signal Overlay Inspired by Azarus.”
- Click Add to Chart to apply the script.
- Customize the settings via the indicator panel to align with your trading style.
Final Verdict:
The Signal Overlay Inspired by Azarus script offers a rich blend of signal generation, risk management, and multi-timeframe analysis. Its non-repainting nature ensures reliable outputs, making it a valuable addition for technical traders. While its advanced features provide significant flexibility, better documentation and optimization could improve accessibility and performance.
RELATED POSTS
View all