SMC Scalper PRO v6 (Stable Zones Fixed)//@version=6
indicator("SMC Scalper PRO v6 (Stable Zones Fixed)", overlay=true)
// ================= INPUTS =================
htf_tf = input.timeframe("60", "HTF Bias Timeframe")
ema_len = input.int(50, "HTF EMA Length")
rr = input.float(2.0, "Risk Reward", step=0.1)
atr_len = input.int(14, "ATR Length")
atr_mult = input.float(1.2, "ATR Multiplier", step=0.1)
pivot_len = input.int(3, "Swing Length")
zone_width_bars = input.int(15, "Zone width (bars)", minval=1)
// ================= HTF BIAS =================
htf_close = request.security(syminfo.tickerid, htf_tf, close)
htf_ema = request.security(syminfo.tickerid, htf_tf, ta.ema(close, ema_len))
bullBias = htf_close > htf_ema
bearBias = htf_close < htf_ema
plot(htf_ema, color=color.orange, title="HTF EMA")
// ================= SWING STRUCTURE =================
ph = ta.pivothigh(high, pivot_len, pivot_len)
pl = ta.pivotlow(low, pivot_len, pivot_len)
var float lastHigh = na
var float lastLow = na
if not na(ph)
lastHigh := ph
if not na(pl)
lastLow := pl
// ================= LIQUIDITY SWEEP =================
sweepUp = not na(lastHigh) and high > lastHigh and close < lastHigh
sweepDown = not na(lastLow) and low < lastLow and close > lastLow
plotshape(sweepUp, location=location.abovebar, color=color.yellow, style=shape.triangleup, size=size.tiny, title="Buy-side Sweep")
plotshape(sweepDown, location=location.belowbar, color=color.aqua, style=shape.triangledown, size=size.tiny, title="Sell-side Sweep")
// ================= MSS =================
bullMSS = not na(lastHigh) and close > lastHigh
bearMSS = not na(lastLow) and close < lastLow
// ================= ENTRY CONDITIONS =================
longSignal = bullBias and sweepDown and bullMSS
shortSignal = bearBias and sweepUp and bearMSS
// ================= RISK =================
atr = ta.atr(atr_len)
slBuffer = atr * atr_mult
// persistent references for boxes (so we can delete old ones)
var box slBox = na
var box tpBox = na
// function to safely delete a box reference
safe_delete_box(ref boxToDelete) =>
if not na(boxToDelete)
box.delete(boxToDelete)
// return na so caller can assign na back
na
else
boxToDelete
// LONG path
if longSignal
entry = close
sl = low - slBuffer
tp = entry + (entry - sl) * rr
// delete previous boxes (if any)
slBox := safe_delete_box(slBox)
tpBox := safe_delete_box(tpBox)
// Create SL zone (named params)
slBox := box.new(
left=bar_index,
top=entry,
right=bar_index + zone_width_bars,
bottom=sl,
bgcolor=color.new(color.red, 85),
border_color=color.red,
extend=extend.right
)
// Create TP zone (named params)
tpBox := box.new(
left=bar_index,
top=tp,
right=bar_index + zone_width_bars,
bottom=entry,
bgcolor=color.new(color.green, 85),
border_color=color.green,
extend=extend.right
)
// Labels
label.new(x=bar_index, y=entry, text="LONG", style=label.style_label_up, color=color.green, textcolor=color.white)
label.new(x=bar_index, y=sl, text="SL\n" + str.tostring(sl, format.mintick), style=label.style_label_down, color=color.red, textcolor=color.white)
label.new(x=bar_index, y=tp, text="TP\n" + str.tostring(tp, format.mintick), style=label.style_label_up, color=color.green, textcolor=color.white)
// SHORT path
if shortSignal
entry = close
sl = high + slBuffer
tp = entry - (sl - entry) * rr
// delete previous boxes (if any)
slBox := safe_delete_box(slBox)
tpBox := safe_delete_box(tpBox)
// Create SL zone (named params)
slBox := box.new(
left=bar_index,
top=sl,
right=bar_index + zone_width_bars,
bottom=entry,
bgcolor=color.new(color.red, 85),
border_color=color.red,
extend=extend.right
)
// Create TP zone (named params)
tpBox := box.new(
left=bar_index,
top=entry,
right=bar_index + zone_width_bars,
bottom=tp,
bgcolor=color.new(color.green, 85),
border_color=color.green,
extend=extend.right
)
// Labels
label.new(x=bar_index, y=entry, text="SHORT", style=label.style_label_down, color=color.red, textcolor=color.white)
label.new(x=bar_index, y=sl, text="SL\n" + str.tostring(sl, format.mintick), style=label.style_label_up, color=color.red, textcolor=color.white)
label.new(x=bar_index, y=tp, text="TP\n" + str.tostring(tp, format.mintick), style=label.style_label_down, color=color.green, textcolor=color.white)
// ================= ALERTS =================
alertcondition(longSignal, title="SMC LONG", message="SMC Long Signal")
alertcondition(shortSignal, title="SMC SHORT", message="SMC Short Signal")
Индикатор Pine Script®






















