Ultimate Scalping DashboardWhat This Dashboard Includes (Visually Compact):
Trend: EMA 9/21/50 alignment
Momentum: MACD + Stochastic RSI direction
Bias: VWAP position (above/below)
Volume: Spike status
Squeeze: Bollinger Band squeeze
SuperTrend: Bullish/Bearish
Divergence: RSI/MACD signal
Buy/Sell Signal Summary
It gives you a clean table-style display at the top or bottom of the screen — super useful for 15m scalping.
Real-time dashboard at the bottom-right of your chart
Color-coded cells for instant visual clarity
Final signal to tell you: BUY, SELL, or WAIT
Indicators and strategies
Million Moves Algø v4.3//...................../´¯¯/)
//...................,/¯.../
//.................../..../
//.............../´¯/'..'/´¯¯`·¸
//.........../'/.../..../....../¨¯\
//..........('(....´...´... ¯~/'..')
//...........\..............'...../
//............\....\.........._.·´
//.............\..............(
//..............\..............\
//----
//---------
// Telegram Join Us >> t.me
//@version=5
indicator("Million Moves Algø v4.3",overlay = true,max_labels_count = 500)
bullColor = #e43a72
bearColor = #00ffcc
sigsensiviti = input.float(2.5, "Sensivity", tooltip = "Changes the signal display frequency",group = "Main Settings")
signaltype = input.string("All Signals","Signals", ,tooltip = "Changes the Signal Typr" ,group = "Main Settings",display = display.none)
factor = 11//input.int(11, "Factor")
trend_ribbon = input.bool(true, "Trend Ribbon        ",inline = '1', group="Trend Settings")
trend_cloud = input.bool(true, "Trend Cloud",inline = '1', group="Trend Settings",tooltip = "")
chaos_trend = input.bool(true, "Chaos Trend Line  ",inline = '2', group="Trend Settings")
order_blocks = input.bool(false, "Order Block",inline = '2', group="Trend Settings",tooltip = "")
moving_avarg = input.bool(true, "Moving Average  ",inline = '3', group="Trend Settings")
ma_value = input.int(200, "",inline = '3', group="Trend Settings",tooltip = "")
candlestick_color = input.bool(true, "Candlestik Colors  ",inline = '4', group="Advance Settings")
candletype = input.string("CleanScalper","", ,tooltip = "" ,inline = '4',group="Advance Settings",display = display.none)
over_rsi = input.bool(true, "Show Overbought/OverSold", group="Advance Settings",tooltip = "")
c_break = input.bool(false, "Show Channel Breakouts", group="Advance Settings",tooltip = "")
signals_show = input.bool(true, "Turn Signals Off", group="Advance Settings",tooltip = "")
dashboard = "Million Moves DASHBOARD Settings"
showDashboard = input.bool(true,"Dashboard On/Off",tooltip = "Changes the size of the dashboard" ,group = dashboard,display = display.none)
dashboardLocation = input.string("Bottom Right","Dashboard Location", , inline = "3",tooltip = "Changes dashboard positions" ,group = dashboard,display = display.none)
dashboardSize = input.string("Small","Dashboard Size       ", , inline = "4",tooltip = "Changes the size of the dashboard" ,group = dashboard,display = display.none)
riskmanage = input.bool(false, "On/Off -Strength  ",inline = '1', group="Enable Stop-loss/take-profit areas")
tpstrength = input.float(1,"",tooltip = "" ,inline = '1',group="Enable Stop-loss/take-profit areas",display = display.none)
TP1 = input.bool(true, "TP 1Â Â ",inline = '2', group="Enable Stop-loss/take-profit areas")
TP2 = input.bool(true, "TP 2Â Â ",inline = '2', group="Enable Stop-loss/take-profit areas")
TP3 = input.bool(true, "TP 3Â Â ",inline = '2', group="Enable Stop-loss/take-profit areas")
// MainMA
emaLength = ma_value//input.int(title="EMA Length", defval=200, minval=2)
emaSource = close
ema = ta.ema(emaSource, emaLength)
ema2 = ta.ema(emaSource, emaLength)
plot(moving_avarg? ema : na, color=close > ema and close > ema ? color.green : color.red, linewidth=4,editable = false)
// Signals
supertrend(_close, factor, atrLen) =>
atr = ta.atr(atrLen)
upperBand = _close + factor * atr
lowerBand = _close - factor * atr
prevLowerBand = nz(lowerBand )
prevUpperBand = nz(upperBand )
lowerBand := lowerBand > prevLowerBand or close < prevLowerBand ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or close > prevUpperBand ? upperBand : prevUpperBand
int direction = na
float superTrend = na
prevSuperTrend = superTrend
if na(atr )
direction := 2
else if prevSuperTrend == prevUpperBand
direction := close > upperBand ? -1 : 1
else
direction := close < lowerBand ? 1 : -1
superTrend := direction == -1 ? lowerBand : upperBand
sma1 = ta.sma(close, 8)
sma2 = ta.sma(close, 9)
sma3 = ta.sma(close, 13)
= supertrend(open, sigsensiviti, factor)
Cbull = ta.crossover(close, supertrend) and close >= sma3
Cbear = ta.crossunder(close, supertrend) and close <= sma3
bull = ta.crossover(close, supertrend) and close >= sma3 and not(close > ema and close > ema)
bear = ta.crossunder(close, supertrend) and close <= sma3 and not(not(close > ema and close > ema))
Sbull = ta.crossover(close, supertrend) and close >= sma3 and (close > ema and close > ema)
Sbear = ta.crossunder(close, supertrend) and close <= sma3 and not(close > ema and close > ema)
countbull = ta.barssince(Cbull)
countbear = ta.barssince(Cbear)
Trigger = nz(countbull, bar_index) < nz(countbear, bar_index) ? 1 : 0
plotshape(signals_show?signaltype =="Smart Signals"? na : bull:na, title = "Buy", text = 'Buy', style = shape.labelup, location = location.belowbar, color= bearColor,textcolor = color.black, size = size.normal,editable = false)
plotshape(signals_show?signaltype =="Smart Signals"? na : bear:na, title = "Sell", text = 'Sell', style = shape.labeldown, color= bullColor,textcolor = color.white, size = size.normal,editable = false)
plotshape(signals_show?Sbull:na, title = "Buy", text = 'Smart Buy', style = shape.labelup, location = location.belowbar, color= bearColor,textcolor = color.black, size = size.normal,editable = false)
plotshape(signals_show?Sbear:na, title = "Sell", text = 'Smart Sell', style = shape.labeldown, color= bullColor,textcolor = color.white, size = size.normal,editable = false)
// Trends
HighestTrend = ta.ema(close, 20)
LowestTrend = ta.ema(close, 55)
Trend01 = ta.ema(close,50)
Trend02 = ta.ema(close,45)
Trend03 = ta.ema(close,40)
Trend04 = ta.ema(close,35)
Trend05 = ta.ema(close,30)
Trend06 = ta.ema(close,25)
var bool uptrend = false
buySignal = ta.crossover(HighestTrend, LowestTrend)
sellSignal = ta.crossunder(HighestTrend, LowestTrend)
uptrend := buySignal ? true : sellSignal ? false : uptrend
plot(trend_ribbon?HighestTrend:na, color = uptrend ? color.new(bearColor,80) : color.new(bullColor,80),editable = false)
plot(trend_ribbon?Trend01:na, color = uptrend ? color.new(bearColor,20) : color.new(bullColor,20), editable = false)
plot(trend_ribbon?Trend02:na, color = uptrend ? color.new(bearColor,30) : color.new(bullColor,30), editable = false)
plot(trend_ribbon?Trend03:na, color = uptrend ? color.new(bearColor,40) : color.new(bullColor,40), editable = false)
plot(trend_ribbon?Trend04:na, color = uptrend ? color.new(bearColor,50) : color.new(bullColor,50), editable = false)
plot(trend_ribbon?Trend05:na, color = uptrend ? color.new(bearColor,60) : color.new(bullColor,60), editable = false)
plot(trend_ribbon?Trend06:na, color = uptrend ? color.new(bearColor,70) : color.new(bullColor,70), editable = false)
plot(trend_ribbon?LowestTrend:na, color = uptrend ? color.new(bearColor,10) : color.new(bullColor,10), editable = false)
// Dashboard
indicatorTF = "Chart"
// -- MTF Function
f_chartTfInMinutes() =>
float _resInMinutes = timeframe.multiplier * (
timeframe.isseconds ? 1. / 60 :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 60. * 24 :
timeframe.isweekly ? 60. * 24 * 7 :
timeframe.ismonthly ? 60. * 24 * 30.4375 : na)
equal_tf(res) => str.tonumber(res) == f_chartTfInMinutes()
higher_tf(res) => str.tonumber(res) > f_chartTfInMinutes()
too_small_tf(res) => (timeframe.isweekly and res=="1") or (timeframe.ismonthly and str.tonumber(res) < 10)
securityNoRep(sym, res, src) =>
bool _bull = na
_bull := equal_tf(res) ? src : _bull
_bull := higher_tf(res) ? request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on) : _bull
bull_array = request.security_lower_tf(syminfo.tickerid, higher_tf(res) ? str.tostring(f_chartTfInMinutes()) : too_small_tf(res) ? (timeframe.isweekly ? "3" : "10") : res, src)
if array.size(bull_array) > 1 and not equal_tf(res) and not higher_tf(res)
_bull := array.pop(bull_array)
array.clear(bull_array)
_bull
// Checking Trend
di_length = 14
adx_smoothing = 14
bullish_threshold_multiplier = 1.2
bearish_threshold_multiplier = 0.8
= ta.dmi(di_length, adx_smoothing)
median_adx = ta.sma(_adx, 14)
bullish_threshold = median_adx * bullish_threshold_multiplier
bearish_threshold = median_adx * bearish_threshold_multiplier
detectADXTrend() =>
isBullish = _adx > bullish_threshold
isBearish = _adx < bearish_threshold
trendQuality = isBullish ? 1 : isBearish ? -1 : 0
// Wywołanie funkcji
adxTrend = detectADXTrend()
// MTF
TF1Bull = securityNoRep(syminfo.tickerid, "1" , adxTrend)
TF3Bull = securityNoRep(syminfo.tickerid, "3" , adxTrend)
TF5Bull = securityNoRep(syminfo.tickerid, "5" , adxTrend)
TF10Bull = securityNoRep(syminfo.tickerid, "10" , adxTrend)
TF15Bull = securityNoRep(syminfo.tickerid, "15" , adxTrend)
TF30Bull = securityNoRep(syminfo.tickerid, "30" , adxTrend)
TF60Bull = securityNoRep(syminfo.tickerid, "60" , adxTrend)
TF120Bull = securityNoRep(syminfo.tickerid, "120" , adxTrend)
TF240Bull = securityNoRep(syminfo.tickerid, "240" , adxTrend)
TF720Bull = securityNoRep(syminfo.tickerid, "720" , adxTrend)
TFDBull = securityNoRep(syminfo.tickerid, "1440", adxTrend)
// -- Volatility
atrr = 3 * ta.atr(10)
stdAtr = 2 * ta.stdev(atrr, 20)
smaAtr = ta.sma(atrr, 20)
topAtrDev = smaAtr + stdAtr
bottomAtrDev = smaAtr - stdAtr
calcDev = (atrr - bottomAtrDev) / (topAtrDev - bottomAtrDev)
percentVol = 40 * calcDev + 30
string VolStatus = percentVol < 35 ? "Very Low" :percentVol < 50 ? "Low" :percentVol < 70 ? "High" :"Very High"
// Set RSI parameters
rsiLength = 14
rsiSource = close
rsiValue = ta.rsi(rsiSource, rsiLength)
bullishThreshold = 50
rsiColor = rsiValue > bullishThreshold ? color.green : color.red
table_position = dashboardLocation == 'Bottom Left' ? position.bottom_left
: dashboardLocation == 'Top Right' ? position.top_right
: position.bottom_right
table_size = dashboardSize == 'Tiny' ? size.tiny
: dashboardSize == 'Small' ? size.small
: size.normal
tb = table.new(table_position, 18, 8
, bgcolor = #11172565
, border_color = #373a4600
, border_width = 1
, frame_color = #000000
, frame_width = 1)
if showDashboard
if barstate.islast
table.cell(tb, 0, 0, '  Million Moves Dashboard                                ', text_color = color.white,text_halign = text.align_left, text_size = table_size,bgcolor = #18233a)
table.merge_cells(tb, 0, 0, 3, 0)
tb.cell(0, 2, "âš ï¸ Volatility", text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(1, 2, VolStatus, text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(2, 2, "ðŸ³ï¸„1¤7 RSI", text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(3, 2, str.tostring(rsiValue,"#.##"), text_color = rsiColor, text_size = table_size, text_halign = text.align_center)
tb.cell(0, 3, "Timeframe", text_color = #b0b2b9, text_size = table_size, text_halign = text.align_center)
tb.cell(1, 3, "Trend", text_color = #b0b2b9, text_size = table_size, text_halign = text.align_center)
tb.cell(2, 3, "Timeframe", text_color = #b0b2b9, text_size = table_size, text_halign = text.align_center)
tb.cell(3, 3, "Trend", text_color = #b0b2b9, text_size = table_size, text_halign = text.align_center)
tb.cell(0, 4, "3 Minute", text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(1, 4, TF3Bull?"Bullish":"Bearish", text_color = TF3Bull?color.green:color.red, text_size = table_size, text_halign = text.align_center)
tb.cell(2, 4, "2 Hour", text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(3, 4, TF120Bull?"Bullish":"Bearish", text_color = TF120Bull?color.green:color.red, text_size = table_size, text_halign = text.align_center)
tb.cell(0, 5, "5 Minute", text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(1, 5, TF5Bull?"Bullish":"Bearish", text_color = TF5Bull?color.green:color.red, text_size = table_size, text_halign = text.align_center)
tb.cell(2, 5, "4 Hour", text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(3, 5, TF240Bull?"Bullish":"Bearish", text_color = TF240Bull?color.green:color.red, text_size = table_size, text_halign = text.align_center)
tb.cell(0, 6, "15 Minute", text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(1, 6, TF15Bull?"Bullish":"Bearish", text_color = TF15Bull?color.green:color.red, text_size = table_size, text_halign = text.align_center)
tb.cell(2, 6, "12 Hour", text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(3, 6, TF720Bull?"Bullish":"Bearish", text_color = TF720Bull?color.green:color.red, text_size = table_size, text_halign = text.align_center)
tb.cell(0, 7, "1 Hour", text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(1, 7, TF60Bull?"Bullish":"Bearish", text_color = TF60Bull?color.green:color.red, text_size = table_size, text_halign = text.align_center)
tb.cell(2, 7, "Daily", text_color = color.white, text_size = table_size, text_halign = text.align_center)
tb.cell(3, 7, TFDBull?"Bullish":"Bearish", text_color = TFDBull?color.green:color.red, text_size = table_size, text_halign = text.align_center)
// bgcolor
// Define the RSI
rsi_Source = close
rsi_Period = 14
rsi_ = ta.rsi(rsi_Source, rsi_Period)
// Define thresholds for high and highest bullish/bearish levels
highBull = 75
highestBull = 85
highBear = 25
highestBear = 15
// Background color based on RSI level
bgColor = rsi_ > highestBull ? color.rgb(0, 255, 204, 86) : rsi_ > highBull ? #00ffcc10 :rsi_ < highestBear ? #e43a7333 : rsi_ < highBear ? color.rgb(228, 58, 115, 93) : na // High Bear - Light Red
bgcolor(over_rsi?bgColor:na, title="RSI Background")
//Ema Cloud
ema150 = ta.ema(close, 150)
ema250 = ta.ema(close, 250)
fill(plot(trend_cloud? ema150: na, "", na, editable=false), plot(trend_cloud? ema250: na, "", na, editable=false), ema150 > ema250 ? color.new(color.green, 70) : ema150 < ema250 ? color.new(color.red, 70) : na)
// Bar color
src = close
len = 14//input.int(14, minval=1, title='RSI Length')
up = ta.rma(math.max(ta.change(src), 0), len)
down = ta.rma(-math.min(ta.change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
tierLow = rsi <= 45
tierMid = rsi > 45 and rsi <= 55
tierHigh = rsi > 55
color colorVar = na
colorVar := tierLow ? #db3943 : // Red for low RSI
tierMid ? #9900CA : // Purple for mid RSI
tierHigh ? #30b56a : // Green for high RSI
na
if (tierMid)
colorVar := rsi <= 50 ? #9900ca : #b200ff // Gradient between the mid values
if (tierHigh)
colorVar := rsi <= 65 ? #30b56a : #30b56a // Gradient between high values
green = #00DD00
red = #DD0000
barcolor(candlestick_color?candletype=="CleanScalper"?colorVar:candletype=="Trend Ribbon"?uptrend?green:red:close > ema and close > ema ? green : red:na)
// Define finer tiers for a more nuanced gradient
tierLow1 = rsi <= 30
tierLow2 = rsi > 30 and rsi <= 45
tierHigh2 = rsi > 65 and rsi <= 75
tierHigh3 = rsi > 55
color upTier = na
color downTier = na
downTier := tierLow1 ? #e43a72 : tierLow2 ? #e6002352 : color(na)
upTier := tierHigh2 ? #00ffcc : tierHigh3 ? #00ffcc65 :color(na)
// Cloud
k_length = 0.425
uphighColor = #ca009e4d
uplowColor = #ca009e27
downhighColor = #b300ff2f
downlowColor = #9700ca10
= ta.kc(close, 10, 10.5*k_length)
= ta.kc(close, 10, 9.5*k_length)
= ta.kc(close, 10, 8*k_length)
= ta.kc(close, 10, 3*k_length)
middleLineValue = ta.ema((upperKC1 + lowerKC1) / 2, 50)
middleLineColor = middleLineValue > middleLineValue ? color.green : color.red
middleLine = plot(middleLineValue, "Middle Line", color=middleLineColor,linewidth=2, editable=false)
k1 = plot(ta.ema(upperKC1, 50), "", color = downTier, style=plot.style_circles,linewidth = 2, editable=false)
k2 = plot(ta.ema(upperKC2, 50), "", na, editable=false)
k3 = plot(ta.ema(upperKC3, 50), "", na, editable=false)
k4 = plot(ta.ema(upperKC4, 50), "", na, editable=false)
k5 = plot(ta.ema(lowerKC4, 50), "", na, editable=false)
k6 = plot(ta.ema(lowerKC3, 50), "", na, editable=false)
k7 = plot(ta.ema(lowerKC2, 50), "", na, editable=false)
k8 = plot(ta.ema(lowerKC1, 50), "", color = upTier, style=plot.style_circles,linewidth = 2, editable=false)
fill(k1, k2, uphighColor , editable=false)
fill(k2, k3, uplowColor , editable=false)
//fill(k3, k4, color.new(red2, 90) , editable=false)
//fill(k5, k6, color.new(green2, 90) , editable=false)
fill(k6, k7, downlowColor , editable=false)
fill(k7, k8, downhighColor, editable=false)
//Tralling Step
amplitude = 3//input(title='Amplitude', defval=2)
channelDeviation = 2//input(title='Channel Deviation', defval=2)
showArrows = false//input(title='Show Arrows', defval=true)
showChannels = false//input(title='Show Channels', defval=true)
src5 = close
len_a = 14
up_a = ta.rma(math.max(ta.change(src5), 0), len_a)
var int trend = 0
var int nextTrend = 0
var float maxLowPrice = nz(low , low)
var float minHighPrice = nz(high , high)
var float up1 = 0.0
var float down1 = 0.0
float atrHigh = 0.0
float atrLow = 0.0
float arrowUp = na
float arrowDown = na
atr2 = ta.atr(100) / 2
dev = channelDeviation * atr2
highPrice1 = high
lowPrice1 = low
highma = ta.sma(high, amplitude)
lowma = ta.sma(low, amplitude)
if nextTrend == 1
maxLowPrice := math.max(lowPrice1, maxLowPrice)
if highma < maxLowPrice and close < nz(low , low)
trend := 1
nextTrend := 0
minHighPrice := highPrice1
minHighPrice
else
minHighPrice := math.min(highPrice1, minHighPrice)
if lowma > minHighPrice and close > nz(high , high)
trend := 0
nextTrend := 1
maxLowPrice := lowPrice1
maxLowPrice
if trend == 0
if not na(trend ) and trend != 0
up1 := na(down1 ) ? down1 : down1
arrowUp := up_a - atr2
arrowUp
else
up1 := na(up1 ) ? maxLowPrice : math.max(maxLowPrice, up1 )
up1
atrHigh := up1 + dev
atrLow := up1 - dev
atrLow
else
if not na(trend ) and trend != 1
down1 := na(up1 ) ? up1 : up1
arrowDown := down1 + atr2
arrowDown
else
down1 := na(down1 ) ? minHighPrice : math.min(minHighPrice, down1 )
down1
atrHigh := down1 + dev
atrLow := down1 - dev
atrLow
ht = trend == 0 ? up1 : down1
var color buyColor = #00e73a
var color sellColor = color.red
htColor = trend == 0 ? buyColor : sellColor
htPlot = plot(chaos_trend?ht:na, title='ATR', linewidth=2, color=htColor,editable = false)
// Risk Manager
tpLabels(tp,bull,bear) =>
rsi1 = ta.rsi(close, 14)
countBull = ta.barssince(bull)
countBear = ta.barssince(bear)
trigger = nz(countBull, bar_index) < nz(countBear, bar_index) ? 1 : 0
tp1Bull = ta.crossover (rsi1, 70), tp2Bull = ta.crossover (rsi1, 85), tp3Bull = ta.crossover (rsi1, 100)
tp1Bear = ta.crossunder(rsi1, 30), tp2Bear = ta.crossunder(rsi1, 15), tp3Bear = ta.crossunder(rsi1, 5)
tp1Bull := tp1Bull and (nz(ta.barssince(tp1Bull) , 9999) > countBull), tp2Bull := tp2Bull and (ta.barssince(tp1Bull) <= countBull), tp2Bull := tp2Bull and (nz(ta.barssince(tp2Bull) , 9999) > countBull), tp3Bull := tp3Bull and (ta.barssince(tp2Bull) <= countBull), tp3Bull := tp3Bull and (nz(ta.barssince(tp3Bull) , 9999) > countBull)
tp1Bear := tp1Bear and (nz(ta.barssince(tp1Bear) , 9999) > countBear), tp2Bear := tp2Bear and (ta.barssince(tp1Bear) <= countBear), tp2Bear := tp2Bear and (nz(ta.barssince(tp2Bear) , 9999) > countBear), tp3Bear := tp3Bear and (ta.barssince(tp2Bear) <= countBear), tp3Bear := tp3Bear and (nz(ta.barssince(tp3Bear) , 9999) > countBear)
trigger ? (tp == 1 ? tp1Bull : tp == 2 ? tp2Bull : tp3Bull) : (tp == 1 ? tp1Bear : tp == 2 ? tp2Bear : tp3Bear)
plotshape(TP1 and tpLabels(1,Cbull,Cbear) and Trigger, "TP", shape.xcross, location.abovebar, color.green , 0, "TP1", color.green , false,size = size.tiny)
plotshape(TP2 and tpLabels(2,Cbull,Cbear) and Trigger, "TP", shape.xcross, location.abovebar, color.green , 0, "TP2", color.green , false,size = size.tiny)
plotshape(TP3 and tpLabels(3,Cbull,Cbear) and Trigger, "TP", shape.xcross, location.abovebar, color.green , 0, "TP3", color.green , false,size = size.tiny)
plotshape(TP1 and tpLabels(1,Cbull,Cbear) and not Trigger, "TP", shape.xcross, location.belowbar, color.red, 0, "TP1", color.red, false,size = size.tiny)
plotshape(TP2 and tpLabels(2,Cbull,Cbear) and not Trigger, "TP", shape.xcross, location.belowbar, color.red, 0, "TP2", color.red, false,size = size.tiny)
plotshape(TP3 and tpLabels(3,Cbull,Cbear) and not Trigger, "TP", shape.xcross, location.belowbar, color.red, 0, "TP3", color.red, false,size = size.tiny)
_bull = Cbull
_bear = Cbear
risksteps = tpstrength
percTrailingSL = 1//input.float(1, "", 0, step=0.1, inline="2", group="RISK MANAGEMENT SETTINGS")
usePercSL = false//input(false, "% Trailing sl", inline="2", group="RISK MANAGEMENT SETTINGS")
enableTpSlAreas = riskmanage
useTP1 = true //input(true, "", inline="4", group="RISK MANAGEMENT SETTINGS")
multTP1 = risksteps //input.float(1, "TP 1", 0, inline="4", group="RISK MANAGEMENT SETTINGS")
useTP2 = true//input(true, "", inline="5", group="RISK MANAGEMENT SETTINGS")
multTP2 = risksteps * 2 //input.float(2, "TP 2", 0, inline="5", group="RISK MANAGEMENT SETTINGS")
useTP3 = true //input(true, "", inline="6", group="RISK MANAGEMENT SETTINGS")
multTP3 = risksteps * 3 //input.float(3, "TP 3", 0, inline="6", group="RISK MANAGEMENT SETTINGS")
tpLabels = true //input(true, "Take profit labels", group="RISK MANAGEMENT SETTINGS")
// Plots
none = close > 0
countBull = ta.barssince(_bull)
countBear = ta.barssince(_bear)
trigger = nz(countBull, bar_index) < nz(countBear, bar_index) ? 1 : 0
atrBand = usePercSL ? (trigger ? low : high) * (percTrailingSL / 100) : ta.atr(14) * 2.2
atrStop = trigger ? low - atrBand : high + atrBand
lastTrade(src) => ta.valuewhen(_bull or _bear, src, 0)
entry_y = lastTrade(close)
stop_y = lastTrade(atrStop)
tp1_y = (entry_y-lastTrade(atrStop))*multTP1 + entry_y
tp2_y = (entry_y-lastTrade(atrStop))*multTP2 + entry_y
tp3_y = (entry_y-lastTrade(atrStop))*multTP3 + entry_y
labelTpSl(cond, y, txt, color) =>
label labelTpSl = enableTpSlAreas and cond ? label.new(bar_index + 1, y, txt, xloc.bar_index, yloc.price, color, label.style_label_left, color.white, size.normal) : na
label.delete(labelTpSl )
labelTpSl(none, entry_y, "Entry : " + str.tostring(math.round_to_mintick(entry_y)), color.orange)
labelTpSl(none, stop_y , "Stop loss : " + str.tostring(math.round_to_mintick(atrStop)), color.red)
labelTpSl(useTP1 and multTP1 != 0, tp1_y, "TP 1 : " + str.tostring(math.round_to_mintick(tp1_y)), color.green)
labelTpSl(useTP2 and multTP2 != 0, tp2_y, "TP 2 : " + str.tostring(math.round_to_mintick(tp2_y)), color.green)
labelTpSl(useTP3 and multTP3 != 0, tp3_y, "TP 3 : " + str.tostring(math.round_to_mintick(tp3_y)), color.green)
lineTpSl(cond, y, color, style) =>
line lineTpSl = enableTpSlAreas and cond ? line.new(bar_index - (trigger ? countBull : countBear), y, bar_index + 1, y, xloc.bar_index, extend.none, color, style) : na
line.delete(lineTpSl )
lineTpSl(none, entry_y, color.orange, line.style_dashed)
lineTpSl(none, stop_y , color.red , line.style_solid )
lineTpSl(useTP1 and multTP1 != 0, tp1_y, color.green, line.style_dotted)
lineTpSl(useTP2 and multTP2 != 0, tp2_y, color.green, line.style_dotted)
lineTpSl(useTP3 and multTP3 != 0, tp3_y, color.green, line.style_dotted)
// Reversal Signals
enableReversal = true
ReversalInputs = 25//input.int(14, minval=1, title="Reversals Sensitivity", group="Reversal Settings")
overbought = 75//input(75, 'Reversal Down Level', group='Reversal Settings')
oversold = 25//input(25, 'Reversal Up Level', group='Reversal Settings')
upwardd = ta.rma(math.max(ta.change(close), 0), ReversalInputs)
dnwardd = ta.rma(-math.min(ta.change(close), 0), ReversalInputs)
source = dnwardd == 0 ? 100 : upwardd == 0 ? 0 : 100 - (100 / (1 + upwardd / dnwardd))
revdn = ta.crossunder(source, overbought) and enableReversal
revup = ta.crossover(source, oversold) and enableReversal
plotshape(revup, 'Reversal Up Signal', shape.labelup, location.belowbar, #b300ff4f, text='', size=size.small, textcolor=color.white)
plotshape(revdn, 'Reversal Down Signal', shape.labeldown, location.abovebar, #ca009e79, text='', size=size.small, textcolor=color.white)
//Channel Breakouts
bars = 3//input(3)
checkbox = true//input.bool(title= "color chenging by trend", defval=true)
ph = ta.pivothigh(high, bars, bars)
pl = ta.pivotlow(low, bars, bars)
//INIT VARIABLES
var int ph_uptrend_flag = 0
var float ph_valid1 = 0
var float ph_valid2 = 0
var float ph_valid3 = 0
var float ph_valid4 = 0
var float ph_valid5 = 0
var float pl_valid1 = 0
var float pl_valid2 = 0
var float pl_valid3 = 0
var float pl_valid4 = 0
var float pl_valid5 = 0
var float ph_valid_old = 2
var float pl_valid_old = 0 // non meaningful number here for initialization only
ph_non_na = nz(ph, 0)
pl_non_na = nz(pl, 0) // stores 0's instead of na's for non-pivot-pointed bars
if ph_non_na != 0
ph_valid5 := ph_valid4
ph_valid4 := ph_valid3
ph_valid3 := ph_valid2
ph_valid2 := ph_valid1
ph_valid1 := ph_non_na
ph_valid_old := ph_valid1
ph_valid_old
else
ph_valid1 := ph_valid1
ph_valid_old := ph_valid_old
ph_valid_old
if pl_non_na != 0
pl_valid5 := pl_valid4
pl_valid4 := pl_valid3
pl_valid3 := pl_valid2
pl_valid2 := pl_valid1
pl_valid1 := pl_non_na
pl_valid_old := pl_valid1
pl_valid_old
else
pl_valid1 := pl_valid1
pl_valid_old := pl_valid_old
pl_valid_old
max = math.max(ph_valid2, ph_valid1)
min = math.min(pl_valid2, pl_valid1)
avg = math.avg(ph_valid2, ph_valid1,pl_valid2, pl_valid1)
plot(c_break ?max:na, title = "High level", color=green)
plot(c_break ?min:na, title = "Low level", color=red)
//plot(avg, title = "Mid level", color=color.yellow )
// OrderBlock
box_ob = order_blocks//input.bool(false, "Toggle Order Block", group="ORDER BLOCK")
box_hide_gray = true//input.bool(false, "Hide gray boxes", group="ORDER BLOCK")
bos_type = "High and Low"//input.string("High and Low", "MSB trigger", , group="ORDER BLOCK")
box_sv = true//input.bool(true, "Plot demand boxes", group="ORDER BLOCK")
box_test_delay = 3//input.int(3, "Delay to count test of demand box", 1, group="ORDER BLOCK")
box_fill_delay = 3//input.int(3, "Delay to count fill of demand box", 1, group="ORDER BLOCK")
box_test_sv = true//input.bool(true, "Dim tested demand boxes", group="ORDER BLOCK")
box_stop_sv = true//input.bool(true, "Stop plotting filled demand boxes", group="ORDER BLOCK")
var float pvh1_price = array.new_float(1000, na)
var int pvh1_time = array.new_int (1000, na)
var float pvl1_price = array.new_float(1000, na)
var int pvl1_time = array.new_int (1000, na)
var float pvh2_price = array.new_float(1000, na)
var int pvh2_time = array.new_int (1000, na)
var float pvl2_price = array.new_float(1000, na)
var int pvl2_time = array.new_int (1000, na)
var float htcmrll_price = na
var int htcmrll_time = na
var float ltcmrhh_price = na
var int ltcmrhh_time = na
var box long_boxes = array.new_box()
var box short_boxes = array.new_box()
var float temp_pv_0 = na
var float temp_pv_1 = na
var float temp_pv_2 = na
bool pvh = high < high and high > high
bool pvl = low > low and low < low
int pv1_time = bar_index
float pv1_high = high
float pv1_low = low
float trigger_high = bos_type == "High and Low" ? high : math.max(open, close)
float trigger_low = bos_type == "High and Low" ? low : math.min(open, close)
if box_ob and barstate.isconfirmed
if pvh
array.pop(pvh1_price)
array.pop(pvh1_time)
array.unshift(pvh1_price, pv1_high)
array.unshift(pvh1_time, pv1_time)
if array.size(pvh1_price) > 2
temp_pv_0 := array.get(pvh1_price, 0)
temp_pv_1 := array.get(pvh1_price, 1)
temp_pv_2 := array.get(pvh1_price, 2)
if temp_pv_0 > temp_pv_1
for i = 0 to array.size(pvl1_time) - 1 by 1
temp_ltcmrhh_time = array.get(pvl1_time, i)
if temp_ltcmrhh_time < array.get(pvh1_time, 0)
ltcmrhh_price := array.get(pvl1_price, i)
ltcmrhh_time := temp_ltcmrhh_time
break
if temp_pv_0 < temp_pv_1 and temp_pv_1 > temp_pv_2
array.pop(pvh2_price)
array.pop(pvh2_time)
array.unshift(pvh2_price, temp_pv_1)
array.unshift(pvh2_time, array.get(pvh1_time, 1))
if pvl
array.pop(pvl1_price)
array.pop(pvl1_time)
array.unshift(pvl1_price, pv1_low)
array.unshift(pvl1_time, pv1_time)
if array.size(pvl1_price) > 2
temp_pv_0 := array.get(pvl1_price, 0)
temp_pv_1 := array.get(pvl1_price, 1)
temp_pv_2 := array.get(pvl1_price, 2)
if temp_pv_0 < temp_pv_1
for i = 0 to array.size(pvh1_time) - 1 by 1
temp_htcmrll_time = array.get(pvh1_time, i)
if temp_htcmrll_time < array.get(pvl1_time, 0)
htcmrll_price := array.get(pvh1_price, i)
htcmrll_time := temp_htcmrll_time
break
if temp_pv_0 > temp_pv_1 and temp_pv_1 < temp_pv_2
array.pop(pvl2_price)
array.pop(pvl2_time)
array.unshift(pvl2_price, temp_pv_1)
array.unshift(pvl2_time, array.get(pvl1_time, 1))
if trigger_high > htcmrll_price
if box_sv
loBox = box.new(left=array.get(pvl1_time, 0), top=math.min(high , high ), right=bar_index, bottom=array.get(pvl1_price, 0), bgcolor=color.rgb(0, 255, 0, 80), border_color=color.rgb(0, 255, 0, 80), extend=extend.right)
if array.size(long_boxes) >= 25
box.delete(array.shift(long_boxes))
array.push(long_boxes, loBox)
htcmrll_price := na
htcmrll_price
if trigger_low < ltcmrhh_price
if box_sv
hiBox = box.new(left=array.get(pvh1_time, 0), top=array.get(pvh1_price, 0), right=bar_index, bottom=math.max(low , low ), bgcolor=color.rgb(255, 0, 0, 80), border_color=color.rgb(255, 0, 0, 80), extend=extend.right)
if array.size(short_boxes) >= 25
box.delete(array.shift(short_boxes))
array.push(short_boxes, hiBox)
ltcmrhh_price := na
ltcmrhh_price
if array.size(short_boxes) > 0
for i = array.size(short_boxes) - 1 to 0 by 1
tbox = array.get(short_boxes, i)
top = box.get_top(tbox)
bottom = box.get_bottom(tbox)
if trigger_high > bottom and box.get_left(tbox) + box_test_delay < bar_index and box_test_sv
if box_hide_gray
box.set_bgcolor(tbox, #00000000)
box.set_border_color(tbox, #00000000)
else
box.set_bgcolor(tbox, color.rgb(192, 192, 192, 80))
box.set_border_color(tbox, color.rgb(192, 192, 192, 80))
if trigger_high > top and box.get_left(tbox) + box_fill_delay < bar_index
if box_stop_sv
box.set_right(tbox, bar_index)
box.set_extend(tbox, extend.none)
array.remove(short_boxes, i)
if array.size(long_boxes) > 0
for i = array.size(long_boxes) - 1 to 0 by 1
lbox = array.get(long_boxes, i)
top = box.get_top(lbox)
bottom = box.get_bottom(lbox)
if trigger_low < top and box.get_left(lbox) + box_test_delay < bar_index and box_test_sv
if box_hide_gray
box.set_bgcolor(lbox, #00000000)
box.set_border_color(lbox, #00000000)
else
box.set_bgcolor(lbox, color.rgb(192, 192, 192, 80))
box.set_border_color(lbox, color.rgb(192, 192, 192, 80))
if trigger_low < bottom and box.get_left(lbox) + box_fill_delay < bar_index
if box_stop_sv
box.set_right(lbox, bar_index)
box.set_extend(lbox, extend.none)
array.remove(long_boxes, i)
RSI Divergence Strategy - AliferCryptoStrategy Overview
The RSI Divergence Strategy is designed to identify potential reversals by detecting regular bullish and bearish divergences between price action and the Relative Strength Index (RSI). It automatically enters positions when a divergence is confirmed and manages risk with configurable stop-loss and take-profit levels.
Key Features
Automatic Divergence Detection: Scans for RSI pivot lows/highs vs. price pivots using user-defined lookback windows and bar ranges.
Dual SL/TP Methods:
- Swing-based: Stops placed a configurable percentage beyond the most recent swing high/low.
- ATR-based: Stops placed at a multiple of Average True Range, with a separate risk/reward multiplier.
Long and Short Entries: Buys on bullish divergences; sells short on bearish divergences.
Fully Customizable: Input groups for RSI, divergence, swing, ATR, and general SL/TP settings.
Visual Plotting: Marks divergences on chart and plots stop-loss (red) and take-profit (green) lines for active trades.
Alerts: Built-in alert conditions for both bullish and bearish RSI divergences.
Detailed Logic
RSI Calculation: Computes RSI of chosen source over a specified period.
Pivot Detection:
- Identifies RSI pivot lows/highs by scanning a lookback window to the left and right.
- Uses ta.barssince to ensure pivots are separated by a minimum/maximum number of bars.
Divergence Confirmation:
- Bullish: Price makes a lower low while RSI makes a higher low.
- Bearish: Price makes a higher high while RSI makes a lower high.
Entry:
- Opens a Long position when bullish divergence is true.
- Opens a Short position when bearish divergence is true.
Stop-Loss & Take-Profit:
- Swing Method: Computes the recent swing high/low then adjusts by a percentage margin.
- ATR Method: Uses the current ATR × multiplier applied to the entry price.
- Take-Profit: Calculated as entry price ± (risk × R/R ratio).
Exit Orders: Uses strategy.exit to place bracket orders (stop + limit) for both long and short positions.
Inputs and Configuration
RSI Settings: Length & price source for the RSI.
Divergence Settings: Pivot lookback parameters and valid bar ranges.
SL/TP Settings: Choice between Swing or ATR method.
Swing Settings: Swing lookback length, margin (%), and risk/reward ratio.
ATR Settings: ATR length, stop multiplier, and risk/reward ratio.
Usage Notes
Adjust the Pivot Lookback and Range values to suit the volatility and timeframe of your market.
Use higher ATR multipliers for wider stops in choppy conditions, or tighten swing margins in trending markets.
Backtest different R/R ratios to find the balance between win rate and reward.
Disclaimer
This script is for educational purposes only and does not constitute financial advice. Trading carries significant risk and you may lose more than your initial investment. Always conduct your own research and consider consulting a professional before making any trading decisions.
Trend Breakout Strategy with Separated Alertshz, nado denygi zarabatuvaty, onoto i xoposho i ploxo sho tak trudno, no po drugomy nikak
Gold Certificate vs Gram Gold – Price Difference📌 Gold Certificate vs Gram Gold – Price Deviation Indicator
✅ Overview
This indicator is designed to analyze and visualize the price discrepancy between the Turkish Gold Certificate (BIST:ALTIN) and the international Gram Gold price (FX_IDC:XAUTRYG).
It helps investors identify whether the certificate is overvalued (premium) or undervalued (discount) compared to its theoretical price.
📐 What Does It Calculate?
In theory:
1 BIST Gold Certificate = 1/100 of Gram Gold price
However, in practice, this parity is rarely exact due to:
Local supply & demand
Limited liquidity in BIST
Investor sentiment
Timezone differences and market hours
This indicator calculates:
The % difference between actual certificate price and its theoretical value
The 100-day average of that difference for baseline comparison
🔍 Why Is This Useful?
Understanding the premium/discount level is crucial for:
Gold investors in Turkey who want to avoid buying overpriced certificates
Arbitrage traders seeking deviation opportunities between spot gold and certificate price
Long-term holders who want to enter at fair value or during discounts
Fundamental analysts who evaluate local sentiment divergence from international price
📊 What Does It Display?
% Price Difference
How much the certificate is trading above or below its theoretical price
100-Day Moving Average of the Difference
Historical baseline to understand if the current gap is excessive
Status Tag (Color-coded):
🔶 Expensive → Current difference is higher than 100-day average
🟢 Cheap → Current difference is below 0%
🔸 Normal → Within average range
Market Warning
A reminder to switch to a 24-hour chart like XAUTRYG when BIST is closed, as stale data may lead to misleading signals.
Multi-language Support
All interface text can be displayed in either Turkish or English, based on user selection in the settings.
⚙️ How to Use
Add the indicator to any chart
For the most accurate readings, open it on a 24/7 active symbol (e.g., XAUTRYG)
Watch the table in the top-right corner to track:
Current % Difference
100-Day Average
Market Status (Expensive, Cheap, Normal)
Pay attention to overbought conditions (e.g. +10%) as a signal to avoid buying
💡 Practical Example:
If:
Gram Gold = 2000 TRY
Theoretical ALTIN = 2000 / 100 = 20 TRY
But BIST:ALTIN is trading at 22.50 TRY → +12.5% premium
This tool would mark the certificate as 🔶 Expensive, showing that local traders are paying significantly more than the real value of gold.
🚨 Note:
Values may temporarily distort when BIST is closed and global gold continues to move.
This is not a buy/sell signal tool, but a valuation tool to assist in decision-making and timing.
🙌 Final Words
This indicator is ideal for:
Retail traders
Portfolio managers
Gold ETF analysts
Long-term investors
Use it to avoid overpaying during high-premium periods and to detect favorable buying windows.
If you find it useful, please like, save, and share!
Feel free to leave feedback or suggestions in the comments.
Bollinger Band Expansion with EMAsCall Entry above Purple Candle's High, Stop loss previous candle low.
Sell Entry Below Grey Candle's Low, Stop loss previous candle High.
NEO Super 1The main changes include:
Added parameters from the second indicator
Expanded the MA function to support types from both indicators
Integrated moving average calculations
Added new signal logic using conditions:
MA Fast/Slow crossover 2 bars ago
Checking the close of the previous candle
Definition of the Hull Ribbon zone
Added new arrows and alerts
Kept all original visuals and alerts
All controls from both indicators are available in the script settings. You can enable/disable individual components via parameters.
supertrend.ch support band level 1if support level 1 breaks the blue band
we go usually tend to go to support level 2 the white band
and rebound from there
💥 Early Breakout Detector (Penny Stocks)Early Breakout Detector – Penny Stocks Edition"
This script is designed to detect early breakout signals in low-priced stocks (penny stocks) before the actual breakout happens. It combines multiple technical indicators to spot high-probability setups where a price explosion may be imminent.
🔍 Included logic:
– Unusual relative volume (volume > 2x 20-period average)
– RSI momentum turning bullish (RSI > 50)
– Price trading above the 20-period moving average
– Price approaching recent resistance (within 3%) but not yet breaking it
📈 When all conditions align, a "PRE" label appears on the chart, and an alert can be triggered to catch the move before it happens.
💡 Ideal for traders looking to enter positions before breakouts occur, especially in momentum-driven penny stocks.
🚨 Alerts included. Works on any timeframe. Best results observed on 5min–1H for intraday setups.
🛠 You can modify volume thresholds, RSI period, or resistance distance to suit your strategy.
— Built by AI
DC - Volatility ZigZag Support/ResistanceThis indicator combines advanced Volatility ZigZag detection, SMA 200 trend analysis, and dynamic support/resistance zones based on volume and price pivots. It's designed to help traders visually identify trend reversals, key price levels, and potential breakouts or bounces with clarity and precision.
What It Does
Volatility ZigZag: Uses price volatility (standard deviation, ATR, true range) to plot ZigZag lines and identify significant trend changes. Labels provide reversal price, price/percentage change, and volume data between pivots.
SMA 200: Plots the 200-period Simple Moving Average to indicate the long-term trend direction.
Support/Resistance Zones: Automatically detects price levels based on pivot highs/lows confirmed by volume conditions. Boxes are color-coded and dynamically update based on breakout or retest behavior.
⚙️ Key Features
Fully customizable ZigZag settings: deviation %, pivot confirmation, std dev factor, and lookback length.
Configurable visuals: pivot markers (⦿), alert points (◯), and labeled statistics between pivots.
Volume-sensitive support/resistance zones that react to breakouts or bounces.
Alerts for new ZigZag pivots.
Data window feedback on trend status and deviation metrics.
✅ Ideal For
Swing traders tracking reversals or continuation patterns.
Trend followers using SMA 200 and pivot points for confirmation.
Volume-based traders looking for support/resistance backed by meaningful volume spikes or drops.
PRO SMC Full Suite BY Mashrur“PRO SMC Full Suite BY Mashrur”
A Pine Script (v5) indicator for TradingView, focused on Smart Money Concepts (SMC). It overlays on price charts and provides visual tools for identifying key institutional trading behaviors.
🎯 Purpose
This script is designed to help traders analyze and trade using SMC principles by automatically detecting:
Order Blocks (OBs)
Fair Value Gaps (FVGs)
Breaks of Structure (BoS)
Liquidity Sweeps (Buy/Sell Side Liquidity Grabs)
Mitigation Entries
⚙️ Inputs / Settings
Show Fair Value Gaps: Toggle FVGs on/off
Higher Timeframe (HTF): Choose HTF for OB analysis
Use HTF OBs: Switch between current TF OBs and HTF OBs
Show Order Blocks: Toggle OBs on/off
Show OB Mitigation Entries: Toggle mitigation entry signals on/off
🧠 Core Logic Overview
🔹 1. Swing Points Detection
Identifies swing highs/lows using a 3-bar pattern (pivot-based structure).
🔹 2. Break of Structure (BoS)
A bullish BoS happens when price closes above the last swing high.
A bearish BoS occurs when price closes below the last swing low.
🔹 3. Order Block Detection
Upon BoS, the script marks the previous candle as the Order Block.
Uses either:
Current TF OBs (based on price action)
HTF OBs (based on candle body direction)
🔹 4. Mitigation Entry Logic
A mitigation occurs when price returns to the OB and reacts with confirmation:
Bullish: price dips into OB and closes above
Bearish: price wicks into OB and closes below
Plots entry markers for these mitigations.
🔹 5. Liquidity Sweeps
Detects equal highs/lows (liquidity zones)
Marks Buy SL when price dips below an equal low then closes above
Marks Sell SL when price breaks above an equal high then closes below
🔹 6. Fair Value Gaps (FVGs)
FVG Up: Gap between candle 3 and candle 1 (low > high )
FVG Down: Gap between candle 3 and candle 1 (high < low )
Plots highlighted boxes on these gaps
📊 Visual Elements
Boxes: For OB zones and FVGs
Shapes:
Labels: OB Buy/Sell entries
Triangles: Buy SL / Sell SL liquidity sweeps
Lines: Equal Highs and Lows
🔔 Alerts
Built-in alerts to notify when:
OB entries are confirmed
Liquidity sweeps happen
Helps in automation or active monitoring
✅ Ideal For
Traders using SMC, ICT concepts, Wyckoff, or institutional trading models
Anyone wanting to automate detection of structural elements on their chart
Umair Volume-Based Buy/Sell SignalsA volume-based indicator is a technical analysis tool that utilizes trading volume data to assess market activity and predict potential price movements. By analyzing the number of shares or contracts traded over a specific period, these indicators help confirm trends, identify reversals, or spot divergence between volume and price. Examples include On-Balance Volume (OBV), Volume Weighted Average Price (VWAP), and Chaikin Money Flow. They provide insights into market strength, liquidity, and investor sentiment, aiding traders in validating whether price changes are supported by market participation or likely to reverse. High volume often reinforces trend legitimacy, while low volume may signal weak momentum.
PRO SMC Full Suite BY Mashrur“PRO SMC Full Suite BY Mashrur”
A Pine Script (v5) indicator for TradingView, focused on Smart Money Concepts (SMC). It overlays on price charts and provides visual tools for identifying key institutional trading behaviors.
🎯 Purpose
This script is designed to help traders analyze and trade using SMC principles by automatically detecting:
Order Blocks (OBs)
Fair Value Gaps (FVGs)
Breaks of Structure (BoS)
Liquidity Sweeps (Buy/Sell Side Liquidity Grabs)
Mitigation Entries
⚙️ Inputs / Settings
Show Fair Value Gaps: Toggle FVGs on/off
Higher Timeframe (HTF): Choose HTF for OB analysis
Use HTF OBs: Switch between current TF OBs and HTF OBs
Show Order Blocks: Toggle OBs on/off
Show OB Mitigation Entries: Toggle mitigation entry signals on/off
🧠 Core Logic Overview
🔹 1. Swing Points Detection
Identifies swing highs/lows using a 3-bar pattern (pivot-based structure).
🔹 2. Break of Structure (BoS)
A bullish BoS happens when price closes above the last swing high.
A bearish BoS occurs when price closes below the last swing low.
🔹 3. Order Block Detection
Upon BoS, the script marks the previous candle as the Order Block.
Uses either:
Current TF OBs (based on price action)
HTF OBs (based on candle body direction)
🔹 4. Mitigation Entry Logic
A mitigation occurs when price returns to the OB and reacts with confirmation:
Bullish: price dips into OB and closes above
Bearish: price wicks into OB and closes below
Plots entry markers for these mitigations.
🔹 5. Liquidity Sweeps
Detects equal highs/lows (liquidity zones)
Marks Buy SL when price dips below an equal low then closes above
Marks Sell SL when price breaks above an equal high then closes below
🔹 6. Fair Value Gaps (FVGs)
FVG Up: Gap between candle 3 and candle 1 (low > high )
FVG Down: Gap between candle 3 and candle 1 (high < low )
Plots highlighted boxes on these gaps
📊 Visual Elements
Boxes: For OB zones and FVGs
Shapes:
Labels: OB Buy/Sell entries
Triangles: Buy SL / Sell SL liquidity sweeps
Lines: Equal Highs and Lows
🔔 Alerts
Built-in alerts to notify when:
OB entries are confirmed
Liquidity sweeps happen
Helps in automation or active monitoring
✅ Ideal For
Traders using SMC, ICT concepts, Wyckoff, or institutional trading models
Anyone wanting to automate detection of structural elements on their chart
Clenow MomentumClenow Momentum Method
The Clenow Momentum Method, developed by Andreas Clenow, is a systematic, quantitative trading strategy focused on capturing medium- to long-term price trends in financial markets. Popularized through Clenow’s book, Stocks on the Move: Beating the Market with Hedge Fund Momentum Strategies, the method leverages momentum—an empirically observed phenomenon where assets that have performed well in the recent past tend to continue performing well in the near future.
Theoretical Foundation
Momentum investing is grounded in behavioral finance and market inefficiencies. Investors often exhibit herding behavior, underreact to new information, or chase trends, causing prices to trend beyond fundamental values. Clenow’s method builds on academic research, such as Jegadeesh and Titman (1993), which demonstrated that stocks with high returns over 3–12 months outperform those with low returns over similar periods.
Clenow’s approach specifically uses **annualized momentum**, calculated as the rate of return over a lookback period (typically 90 days), annualized to reflect a yearly percentage. The formula is:
Momentum=(((Close N periods agoCurrent Close)^N252)−1)×100
- Current Close: The most recent closing price.
- Close N periods ago: The closing price N periods back (e.g., 90 days).
- N: Lookback period (commonly 90 days).
- 252: Approximate trading days in a year for annualization.
This metric ranks stocks by their momentum, prioritizing those with the strongest upward trends. Clenow’s method also incorporates risk management, diversification, and volatility adjustments to enhance robustness.
Methodology
The Clenow Momentum Method involves the following steps:
1. Universe Selection:
- A broad universe of liquid stocks is chosen, often from major indices (e.g., S&P 500, Nasdaq 100) or global exchanges.
- Filters should exclude illiquid stocks (e.g., low average daily volume) or those with extreme volatility.
2. Momentum Calculation:
- Stocks are ranked based on their annualized momentum over a lookback period (typically 90 days, though 60–120 days can be common tests).
- The top-ranked stocks (e.g., top 10–20%) are selected for the portfolio.
3. Volatility Adjustment (Optional):
- Clenow sometimes adjusts momentum scores by volatility (e.g., dividing by the standard deviation of returns) to favor stocks with smoother trends.
- This reduces exposure to erratic price movements.
4. Portfolio Construction:
- A diversified portfolio of 10–25 stocks is constructed, with equal or volatility-weighted allocations.
- Position sizes are often adjusted based on risk (e.g., 1% of capital per position).
5. Rebalancing:
- The portfolio is rebalanced periodically (e.g., weekly or monthly) to maintain exposure to high-momentum stocks.
- Stocks falling below a momentum threshold are replaced with higher-ranked candidates.
6. Risk Management:
- Stop-losses or trailing stops may be applied to limit downside risk.
- Diversification across sectors reduces concentration risk.
Implementation in TradingView
Key features include:
- Customizable Lookback: Users can adjust the lookback period in pinescript (e.g., 90 days) to align with Clenow’s methodology.
- Visual Cues: Background colors (green for positive, red for negative momentum) and a zero line help identify trend strength.
- Integration with Screeners: TradingView’s stock screener can filter high-momentum stocks, which can then be analyzed with the custom indicator.
Strengths
1. Simplicity: The method is straightforward, relying on a single metric (momentum) that’s easy to calculate and interpret.
2. Empirical Support: Backed by decades of academic research and real-world hedge fund performance.
3. Adaptability: Applicable to stocks, ETFs, or other asset classes, with flexible lookback periods.
4. Risk Management: Diversification and periodic rebalancing reduce idiosyncratic risk.
5. TradingView Integration: Pine Script implementation enables real-time visualization, enhancing decision-making for stocks like NVDA or SPY.
Limitations
1. Mean Reversion Risk: Momentum can reverse sharply in bear markets or during sector rotations, leading to drawdowns.
2. Transaction Costs: Frequent rebalancing increases trading costs, especially for retail traders with high commissions. This is not as prevalent with commission free trading becoming more available.
3. Overfitting Risk: Over-optimizing lookback periods or filters can reduce out-of-sample performance.
4. Market Conditions: Underperforms in low-momentum or highly volatile markets.
Practical Applications
The Clenow Momentum Method is ideal for:
Retail Traders: Use TradingView’s screener to identify high-momentum stocks, then apply the Pine Script indicator to confirm trends.
Portfolio Managers: Build diversified momentum portfolios, rebalancing monthly to capture trends.
Swing Traders: Combine with volume filters to target short-term breakouts in high-momentum stocks.
Cross-Platform Workflow: Integrate with Python scanners to rank stocks, then visualize on TradingView for trade execution.
Comparison to Other Strategies
Vs. Minervini’s VCP: Clenow’s method is purely quantitative, while Minervini’s Volatility Contraction Pattern (your April 11, 2025 query) combines momentum with chart patterns. Clenow is more systematic but less discretionary.
Vs. Mean Reversion: Momentum bets on trend continuation, unlike mean reversion strategies that target oversold conditions.
Vs. Value Investing: Momentum outperforms in bull markets but may lag value strategies in recovery phases.
Conclusion
The Clenow Momentum Method is a robust, evidence-based strategy that capitalizes on price trends while managing risk through diversification and rebalancing. Its simplicity and adaptability make it accessible to retail traders, especially when implemented on platforms like TradingView with custom Pine Script indicators. Traders must be mindful of transaction costs, mean reversion risks, and market conditions. By combining Clenow’s momentum with volume filters and alerts, you can optimize its application for swing or position trading.
VOBNazzyATRGeared for Nasdaq micros.
Can be adjusted for other pairs.
Took the Volume Order block script and turned it into a strategy with fixed and ATR based stop loss and take profit. Adjust if you need. Fun for scalping 1 min chart.
Ive used it to some benefit. Other days its been to my detriment. Markets never the same. Use at your own discretion!
Have fun!
RSI Candlestick Oscillator [LuxAlgo]The RSI Candlestick Oscillator displays a traditional Relative Strength Index (RSI) as candlesticks. This indicator references OHLC data to locate each candlestick point relative to the current RSI Value, leading to a more accurate representation of the Open, High, Low, and Close price of each candlestick in the context of RSI.
In addition to the candlestick display, Divergences are detected from the RSI candlestick highs and lows and can be displayed over price on the chart.
🔶 USAGE
Translating candlesticks into the RSI oscillator is not a new concept and has been attempted many times before. This indicator stands out because of the specific method used to determine the candlestick OHLC values. When compared to other RSI Candlestick indicators, you will find that this indicator clearly and definitively correlates better to the on-chart price action.
Traditionally, the RSI indicator is simply one running value based on (typically) the close price of the chart. By introducing high, low, and open values into the oscillator, we can better gauge the specific price action throughout the intrabar movements.
Interactions with the RSI levels can now take multiple forms, whether it be a full-bodied breakthrough or simply a wick test. Both can provide a new analysis of price action alongside RSI.
An example of wick interactions and full-bodied interactions can be seen below.
As a result of the candlestick display, divergences become simpler to spot. Since the candlesticks on the RSI closely resemble the candlesticks on the chart, when looking for divergence between the chart and RSI, it is more obvious when the RSI and price are diverging.
The divergences in this indicator not only show on the RSI oscillator, but also overlay on the price chart for clearer understanding.
🔹 Filtering Divergence
With the candlesticks generating high and low RSI values, we can better sense divergences from price, since these points are generally going to be more dramatic than the (close) RSI value.
This indicator displays each type of divergence:
Bullish Divergence
Bearish Divergence
Hidden Bullish Divergence
Hidden Bearish Divergence
From these, we get many less-than-useful indications, since every single divergence from price is not necessarily of great importance.
The Divergence Filter disregards any divergence detected that does not extend outside the RSI upper or lower values.
This does not replace good judgment, but this filter can be helpful in focusing attention towards the extremes of RSI for potential reversal spotting from divergence.
🔶 DETAILS
In order to get the desired results for a display that resembles price action while following RSI, we must scale. The scaling is the most important part of this indicator.
To summarize the process:
Identify a range on Price and RSI
Consider them as equal to create a scaling factor
Use the scaling factor to locate RSI's "Price equivalent" Upper, Lower, & Mid on the Chart
Use those prices (specifically the RSI Mid) to check how far each OHLC value lies from it
Use those differences to translate the price back to the RSI Oscillator, pinning the OHLC values at their relative location to our anchor (RSI Mid)
🔹 RSI Channel
To better understand, and for your convenience, the indicator includes the option to display the RSI Channel on the chart. This channel helps to visualize where the scaled RSI values are relative to price.
If you analyze the RSI channel, you are likely to notice that the price movement throughout the channel matches the same movement witnessed in the RSI Oscillator below. This makes sense since they are the exact same thing displayed on different scales.
🔹 Scaling the Open
While the scaling method used is important, and provides a very close view of the real price bar's relative locations on the RSI oscillator… It is designed for a single purpose.
The scaling does NOT make the price candles display perfectly on the RSI oscillator.
The largest place where this is noticeable is with the opening of each candle.
For this reason, we have included a setting that modifies the opening of each RSI candle to be more accurate to the chart's price candles.
This setting positions the current bar's opening RSI candlestick value accurately relative to the price's open location to the previous closing price. As seen below.
🔶 SETTINGS
🔹 RSI Candles
RSI Length: Sets the Length for the RSI Oscillator.
Overbought/Oversold Levels: Sets the Overbought and Oversold levels for the RSI Oscillator.
Scale Open for Chart Accuracy: As described above, scales the open of each candlestick bar to more accurately portray the chart candlesticks.
🔹 Divergence
Show on Chart: Choose to display divergence line on the chart as well as on the Oscillator.
Divergence Length: Sets the pivot width for divergence detection. Normal Fractal Pivot Detection is used.
Divergence Style: Change color and line style for Regular and Hidden divergences, as well as toggle their display.
Divergence Filter: As described above, toggle on or off divergence filtering.
🔹 RSI Channel
Toggle: Display RSI Channel on Chart.
Color: Change RSI Channel Color
EMA Crossover StrategyEma crossover with ovtlyer exit criteria. If price is over 50 EMA enter, if price drops below 10 ema at any point exit. Inversed if bearish
EMA Pullback & Trend Indicator MyraxesEMA Pullback & Trend Indicator by Max Retri
Plots five EMAs—9, 15, 30, 65 and 200—and draws clean, easy-to-interpret signals when the fast EMAs cross in the direction of the longer-term trend. No other indicators or overlays are required; simply add it to your chart and watch for the arrows and crosses.
⸻
What It Does & How It Works
1. EMAs & Colors
• Red (EMA 9) – Fast signal line
• Blue (EMA 15) – Confirmation line
• Orange (EMA 30) – Pullback zone 1
• Purple (EMA 65) – Pullback zone 2 & mid-term trend
• White (EMA 200) – Long-term trend
2. Trend Filter
• Bullish regime when price is above both EMA 65 and EMA 200.
• Bearish regime when price is below both EMA 65 and EMA 200.
3. Pullback Requirement
• Only consider a signal if price has retraced into the EMA 30 or EMA 65 zone.
4. Signal Logic
Long Entry ▲: EMA 9 (red) crosses above EMA 15 (blue) while in a bullish regime and after a pullback into EMA 30/65.
Short Entry ▼: EMA 9 crosses below EMA 15 while in a bearish regime and after a retracement up to EMA 30/65.
Exit ✖: Opposite EMA 9/15 crossover marks the close of the position.
⸻
How to Use
1. Add the indicator to any chart/timeframe.
2. Identify trend: make sure price is aligned above or below the 65 and 200 EMAs.
3. Watch for pullbacks into the orange or purple EMAs.
4. Enter on the black ▲ or ▼ arrow.
5. Exit when you see the gray ✖ cross.
Because it’s a pure‐EMA indicator (no heavy calculations), it runs quickly even on lower-end machines.
Xpips Trade TrendLooking to boost your trend-following strategy? Discover this ultra-precise indicator, designed to deliver fast and responsive trend signals with zero lag. By combining a no-lag EMA (ZLEMA), adaptive volatility bands, and dynamic alerts, you'll gain a clear, real-time view of the market—no matter your trading timeframe. 🔍
🔹 Lag-free analysis: Smooth price action using ZLEMA for fast and fluid trend readings.
🔹 Multi-timeframe view: Track up to 5 timeframes simultaneously (from intraday to daily) in a clean, intuitive panel.
🔹 Adaptive volatility bands: Spot reversals with greater accuracy and reduced false signals.
🔹 Smart alerts: Get instantly notified when trend shifts occur—no need to constantly monitor your chart.
🔹 Optimized visuals: Clear color-coded signals help you instantly identify bullish and bearish trends.
🔹 Fully customizable: Tweak EMA length, band settings, colors, and timeframes to perfectly fit your strategy.
To set an alert, simply create an alert on the indicator:
- For a sell alert: select the indicator and choose *bearish trend*
- For a buy alert: select the indicator and choose *bullish trend*
"You can also create alerts on the small triangles after the label.
It’s the same thing."
- For a sell alert: select the indicator and choose *bearish entry signal*
- For a buy alert: select the indicator and choose *bullish entry signal*
Global M2 Money Supply // Days Offset =Implementation of Colin Crypto M2 money supply indicator which seems to lead BTC movement.
📈 RX Swing This Pine Script strategy is designed for trading Nifty options on a 4-hour chart. Here’s a breakdown of how it works:
Timeframe Enforcement: The strategy is designed to only work on a 4-hour chart. If you try to run it on any other timeframe, it will throw an error.
Inputs:
RSI length: Determines the length for the Relative Strength Index (RSI) indicator.
RSI MA Length: Determines the moving average length for smoothing the RSI.
MA Type: Allows you to choose between SMA or EMA for the RSI moving average.
Stop Loss & Take Profit: These define the exit points in percentage terms.
Capital per Trade: Defines how much capital is allocated per trade.
Lot Size: Specifies the number of Nifty options contracts to trade.
Trailing Stop-Loss Points: Defines how many points the price has to move against the position before the trailing stop is triggered.
Trading Logic:
RSI & Moving Average: The strategy generates buy (call) and sell (put) signals based on the crossover and crossunder of RSI and its moving average.
Position Size: The position size is based on capital allocated and the current price of the Nifty.
Stop Loss/Take Profit: The strategy uses both percentage-based stop loss and take profit levels, as well as a trailing stop mechanism to lock profits.
Exit Conditions:
The strategy has several exit triggers:
Trailing Stop-Loss: When the price moves against the trade by a certain number of points, it exits.
Reversal Exit: The strategy will exit a position if the opposite signal (long vs. short or vice versa) occurs.
TP/SL Exit: The strategy will also exit the position when the target profit or stop loss levels are hit.
Loss Count: The strategy tracks the number of consecutive losing trades, and if the count exceeds two, no new trades are allowed until the count resets.
Reset Loss Count: The loss count resets every day at 9:15 AM.
Plotting:
Entry signals (long/short) are marked with green (buy call) and red (buy put) triangles.
Exit signals for TP, SL, Reversal, and Trailing SL are marked with respective shapes (crosses, circles, squares).
This strategy is designed to manage risk with a stop loss and take profit system, while also incorporating a trailing stop-loss mechanism to lock in profits. It ensures that the strategy works only on the 4-hour chart, and limits trading activity after consecutive losses to maintain discipline.
Market Pulse TableMarket Pulse Table — Multi-Asset Momentum Dashboard
This indicator creates a customizable dashboard that monitors key market assets and their momentum using MACD and RSI signals. It's designed to give a quick pulse of market sentiment and trend strength in one glance.
📊 What it shows:
% Daily Change of selected symbols (e.g., VIX, ES1!, NQ1!, YM1!, RTY1!, DXY)
MACD Signal: Buy / Sell / Neutral, based on your selected timeframe
RSI Value: Color-coded by strength and potential overbought/oversold conditions
⚙️ How to use:
Select the assets you want to track in the settings.
Choose your preferred timeframes for MACD and RSI.
The table updates in real time with:
Price % change (colored by intensity)
MACD signal direction
RSI value (green/red for oversold/overbought)
📍 Table placement:
You can position the table anywhere on your chart (top, middle, bottom — left, center, or right).