Razor Precision — Buy/SellRazor Precision Stock Action Indicator
The Razor Precision indicator is an advanced, multi-layered market analysis tool designed for traders who demand accuracy and alignment across multiple timeframes. It combines price action, moving average crossovers, volume confirmation, swing structure mapping, and indicator confluence (RSI, MACD, ATR, OBV) to generate actionable buy/sell strength ratings.
Key Features:
Price Action Detection: Identifies higher highs/lows (uptrend) and lower highs/lows (downtrend).
MA Crossover Momentum: Monitors 50/200 moving average crossovers to detect trend shifts.
Volume Surge Analysis: Confirms breakouts or pullbacks with significant volume spikes.
Swing Structure Tracking: Maps internal/external breaks to align with Smart Money Concepts.
Indicator Confluence: Aggregates signals from RSI, MACD, ATR, and OBV for precision confirmation.
Multi-Timeframe Alignment: Compares trends across 15m, 1H, 4H, and Daily charts for stacked or conflicting signals.
Strength Levels: Signals range from SELL, STRONG SELL, ULTRA STRONG SELL to BUY, STRONG BUY, ULTRA STRONG BUY.
Dynamic Table Display: Updates every 5 minutes or when overall action changes, showing per-timeframe analysis and the aggregated decision.
Ideal for swing traders, scalpers, and intraday momentum players who want high-confidence trade direction filtered through multiple technical layers.
Candlestick analysis
50 SMA 5-Candle Crossovercatching the cycle using very simple method. at your descrtion.
must know what you are doing.
this will work if you do not follow bindly.
Reversal Straategy(RSI & Volume & Support resistance)// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © RoseZero
//@version=6
indicator('Chien luoc dao chieu manh(RSI + Volume + Ho tro auto)', overlay = true)
//===Tham so nguoi dung===
rsiOversold = input.int(30, 'Nguong RSI qua ban')
rsiOverbought = input.int(70, 'Nguong RSI qua mua')
rsiLow = input.int(35, 'Nguong qua ban')
rsiHigh = input.int(55, 'Nguong qua mua')
volMultiplier = input.float(1.5, 'nguong khoi luong tang (so voi TB)')
mult = input.float(1.5, 'Nguong nhan do lon nen', step = 0.1)
supportLength = input.int(20, 'Do dai vung ho tro')
resistLength = input.int(20, 'Do dai vung khang cu')
length = input.int(20, 'So nen trung binh')
volume_threshold = input.float(1.2, title = 'Nguong volume dao chieu')
fastEMA = input.int(21, title = 'EMA nhanh')
slowEMA = input.int(55, title = 'EMA cham')
depth = input.int(3, title = 'Pivot Depth')
rsiLen = input.int(14, title = 'RSI Length')
//==============================================================================
// === Dấu hiệu Cạn Cung ===
lowVolMultiplier = input.float(0.5, title = 'Ngưỡng khối lượng thấp (Cạn cung)')
lowRangeMultiplier = input.float(0.7, title = 'Ngưỡng biên độ giá thấp (Cạn cung)')
avgVolCC = ta.sma(volume, 20)
avgRangeCC = ta.sma(high - low, 20)
isLowVolume = volume < avgVolCC * lowVolMultiplier
isNarrowRange = (high - low) < avgRangeCC * lowRangeMultiplier
isSideways = math.abs(close - close ) < avgRangeCC * 0.3
supplyDryUp = isLowVolume and isNarrowRange and isSideways
// === Dấu hiệu Cạn Cầu ===
lowVolMultiplier2 = input.float(0.5, title = 'Ngưỡng khối lượng thấp (Cạn cầu)')
lowRangeMultiplier2 = input.float(0.7, title = 'Ngưỡng biên độ giá thấp (Cạn cầu)')
avgVolCD = ta.sma(volume, 20)
avgRangeCD = ta.sma(high - low, 20)
isLowVolumeCD = volume < avgVolCD * lowVolMultiplier2
isNarrowRangeCD = (high - low) < avgRangeCD * lowRangeMultiplier2
isWeakDemand = close <= close or close - close < avgRangeCD * 0.2
demandDryUp = isLowVolumeCD and isNarrowRangeCD and isWeakDemand
//=====================================================================================
ema34 = ta.ema(close, 34)
ema89 = ta.ema(close, 89)
volAvg = ta.sma(volume, 20)
plot(ema34, color = color.green, title = 'EMA 34')
plot(ema89, color = color.orange, title = 'EMA 89')
emaUp = ta.crossover(ema34, ema89)
emaDow = ta.crossunder(ema34, ema89)
alertcondition(emaUp, title = 'EMA34 cat len tren EMA89', message = 'EMA34 cat len tren EMA89 xu huong gia di len')
alertcondition(emaDow, title = 'EMA34 cat xuong duoi EMA89', message = 'EMA34 cat xuong duoi EMA*9 xu huong gia di xuong')
// dieu kien pha len ema va nguoc lai============================================================================================================
breakoutEma = close < ema34 and close < ema89 and close > ema34 and close > ema89
breakdownEma = close > ema34 and close > ema89 and close < ema34 and close < ema89
//dieu kien test lai EMA sau break
retestUpEma = breakoutEma and close < ema34 * 1.02 and close > ema89 * 0.98
retestDownEma = breakdownEma and close > ema34 * 0.98 and close < ema89 * 1.02
//canh bao gia test lai cum ema
alertcondition(retestUpEma, title = 'Canh bao test lai EMA gia tang', message = 'Gia dang test lai cum EMA khi gia tang')
alertcondition(retestDownEma, title = 'Canh bao test lai EMA gia giam', message = 'Gia dang test lai cum EMA khi gia giam')
//Tinh toan co bao Pivot
pivotHigh = ta.pivothigh(high, depth, depth)
pivotLow = ta.pivotlow(low, depth, depth)
ema = ta.ema(close, fastEMA)
ma = ta.sma(close, slowEMA)
rsii = ta.rsi(close, rsiLen)
//Volume Breakout check
volStrong = volume > ta.sma(volume, 20) * volume_threshold
//Mo hinh nen : Pinbar, Engulfing, Doji
isPinBar = math.abs(close - open) / math.abs(high - low) < 0.2
isBullEngulfing = close > open and open < close and close > open
isBearishEngulfing = close < open and open > close and close < open
isDoji = math.abs(close - open) / math.abs(high - low) < 0.1
//Dao chieu tang manh va giam manh
candlePattern = isPinBar or isBullEngulfing or isDoji
candlePattern2 = isPinBar or isBearishEngulfing or isDoji
priceCondition = close > ema and close > ma and rsii < 30 and volStrong
priceCondition2 = close < ema and close < ma and rsii > 70 and volStrong
bullishSignal = not na(pivotLow) and candlePattern and priceCondition and volStrong
if bullishSignal
alert('Dao chieu tang manh: Xuat hien nen dao chieu Tang(PInBar, BullishEngulf, Doji)', alert.freq_once_per_bar_close)
bearishSignal = not na(pivotHigh) and candlePattern2 and priceCondition2 and volStrong
if bearishSignal
alert('Dao chieu giam manh: Xuat hien nen dao chieu Giam(PinBar, BearishEngul, Doji)', alert.freq_once_per_bar_close)
//EMA & Trend
emaFast = ta.ema(close, fastEMA)
emaSlow = ta.ema(close, slowEMA)
plot(emaFast, title = 'EMA nhanh', color = color.blue)
plot(emaSlow, 'EMA cham', color = color.purple)
//===Ho tro tu dong===
supportZone = ta.lowest(low, supportLength)
resistZone = ta.highest(high, resistLength)
nearSupport = math.abs(low - supportZone) < syminfo.mintick * 100
nearResistance = math.abs(high - resistZone) < syminfo.mintick * 100
plot(supportZone, 'Ho tro', color = color.gray)
plot(resistZone, 'Khang cu', color = color.orange)
//===Mo hinh nen dao chieu tang & giam===
//Bullish: Hammer, Engulfing, piercing
body = math.abs(close - open)
avgbody = ta.sma(body, length)
upperWick = high - math.max(open, close)
lowerWick = math.min(open, close) - low
isHammerUp = lowerWick > 2 * body and upperWick < body and close > open
//engulfingUp = close < open and close > open and close > open and open < close
piercingUp = close > open and open < close and close > (open + close ) / 2
bullishCandle = isHammerUp or isBullEngulfing or piercingUp
//Bearish: Inverted Hammer, Bearish Engulfing, Dark cloud Cover
isHammerDow = upperWick > 2 * body and lowerWick < body and close < open
//engulfingDow = close > open and close < open and close < open and open > close
darkCloud = close < open and open > close and close < (open + close ) / 2
bearishCandle = isHammerDow or isBearishEngulfing or darkCloud
//========================================================================
//===Chi bao RSI & Volume===
rsi = ta.rsi(close, 14)
oversold = rsi < rsiOversold
overbought = rsi > rsiOverbought
avgVol = ta.sma(volume, 20)
volumeSpike = volume > avgVol * volMultiplier
rsiLL = rsi < rsiLow
rsiHH = rsi > rsiHigh
// nen rut chan 50%
fibo50=high/2+low/2
Pinbarbullish=close>fibo50 and open>fibo50 and volumeSpike and rsiLL // and close ta.ema(close,89)
plotshape(Pinbarbullish, style = shape.labelup, location = location.belowbar, color = color.green, text = 'L', textcolor = color.white, size = size.tiny)
plotshape(Pinbarbearish, style = shape.labeldown, location = location.abovebar, color = color.red, text = 'S', textcolor = color.white, size = size.tiny)
if Pinbarbullish
alert('Pin Bar dao chieu tang', alert.freq_once_per_bar_close)
if Pinbarbearish
alert('Pin Bar dao chieu giam', alert.freq_once_per_bar_close)
//===dieu kien tin hieu===
buySignal = bullishCandle and oversold and volumeSpike and nearSupport
sellSignal = bearishCandle and overbought and volumeSpike and nearResistance
//Canh bao nag cao
if buySignal
alert('Tin hieu MUA manh:Nen dao chieu tai vung ho tro kem RSI thap & Volume lon(LONG)', alert.freq_once_per_bar_close)
if sellSignal
alert('Tin hieu BAN manh:Nen dao chieu tai vung khang cu kem RSI cao & Volume lon(SHORT)', alert.freq_once_per_bar_close)
//===Hien canh bao===
alertcondition(buySignal, title = 'Tin hieu MUA', message = 'Nen dao chieu TANG tai vung ho tro(RSI thap + Volume lon)')
alertcondition(sellSignal, title = 'Tin hieu BAN', message = 'Nen dao chieu GIAM tai vung ho(RSI cao + Volume lon)')
plotshape(buySignal, style = shape.triangleup, location = location.belowbar, color = color.green, text = 'Long', textcolor = color.white)
plotshape(sellSignal, style = shape.triangledown, location = location.abovebar, color = color.red, text = 'Short', textcolor = color.white)
//Pin Bar ket hop volume lon & RSI qua mua / qua ban
isStrongBullPin = close > open and high - close > 2 * (close - open) and volume > volAvg * volMultiplier and rsi < rsiOversold
isStrongBearPin = open > close and close - low > 2 * (open - close) and volume > volAvg * volMultiplier and rsi > rsiOverbought
plotshape(isStrongBullPin, title = 'Canh bao Pinbar MUA manh', location = location.belowbar, color = color.green, style = shape.labelup, text = "Pb Mua", textcolor = color.white)
plotshape(isStrongBearPin, title = 'Canh bao Pinbar BAN manh', location = location.abovebar, color = color.red, style = shape.labeldown, text = 'Pb Ban', textcolor = color.white)
alertcondition(isStrongBullPin, title = 'Canh bao PinBar MUA manh', message = 'Phat hien PinBar MUA manh(vol cao + RSI qua ban)')
alertcondition(isStrongBearPin, title = 'Canh bao PInBar BAN manh', message = 'Phat hien PinBar BAN manh(vol cao+ RSI qua mua)')
if isStrongBullPin
alert('Pin Bar tin hieu mua:Phat hien PinBar MUA manh(vol cao + RSI qua ban)', alert.freq_once_per_bar_close)
if isStrongBearPin
alert('Pin Bar tin hieu ban:Phat hien PinBar BAN manh(vol cao+ RSI qua mua)', alert.freq_once_per_bar_close)
//================================================================
bool pv2_sv = input.bool (true, title='Plot 2nd order pivots')
bool msb_sv = input.bool (true, title='Plot MSB lines')
bool box_sv = input.bool (true, title='Plot Orderblocks')
bool m_sv = input.bool (true, title='Plot Breakerblocks')
bool range_sv = input.bool (true, title='Plot Range')
bool range_eq_sv = input.bool (true, title='Plot Range 0.5 Line')
bool range_q_sv = input.bool (true, title='Plot Range 0.25 and 0.75 Lines')
bool log_sv = input.bool (true, title='Use Log Scale')
bool msb_a_sv = input.bool (true, title='Alert MSB')
bool ob_a_sv = input.bool (true, title='Alert Orderblock test')
bool bb_a_sv = input.bool (true, title='Alert Breakerblock test')
bool r_a_sv = input.bool (true, title='Alert New Range')
bool rt_a_sv = input.bool (true, title='Alert Range test')
color u_s = input.color (color.new(color.red,90), title='Untested Supply Color')
color t_s = input.color (color.new(color.red,70), title='Tested Supply Color')
color u_d = input.color (color.new(color.green,90), title='Untested Demand Color')
color t_d = input.color (color.new(color.green,70), title='Tested Demand Color')
color u_b = input.color ( color.new(color.blue,90), title='Untested Breaker Color')
color t_b = input.color (color.new(color.blue, 70), title='Tested Breaker Color')
var float pvh1_price = array.new_float (30, na) // high
var int pvh1_time = array.new_int (30, na)
var float pvl1_price = array.new_float (30, na) // low
var int pvl1_time = array.new_int (30, na)
var float pvh2_price = array.new_float (10, na) // higher high
var int pvh2_time = array.new_int (10, na)
var float pvl2_price = array.new_float (10, na) // lower low
var int pvl2_time = array.new_int (10, na)
var float htcmrll_price = na // high that created most recent ll
var int htcmrll_time = na
var float ltcmrhh_price = na // low that created most recent hh
var int ltcmrhh_time = na
var box long_boxes = array.new_box() // orderblocks
var box short_boxes = array.new_box()
var box m_long_boxes = array.new_box() // breakerblocks
var box m_short_boxes = array.new_box()
var line bull_bos_lines = array.new_line() // MSB lines
var line bear_bos_lines = array.new_line()
var line range_h_lines = array.new_line() // Range lines
var line range_25_lines = array.new_line()
var line range_m_lines = array.new_line()
var line range_75_lines = array.new_line()
var line range_l_lines = array.new_line()
var label la_ph2 = array.new_label() // 2nd order pivots
var label la_pl2 = array.new_label()
var float temp_pv_0 = na
var float temp_pv_1 = na
var float temp_pv_2 = na
var int temp_time = na
var float last_range_h = na
var float last_range_l = na
var line range_m = na
var line range_25 = na
var line range_75 = na
var float box_top = na
var float box_bottom = na
var int h_a_time = 0
var int l_a_time = 0
var int mh_a_time = 0
var int ml_a_time = 0
var int rh_a_time = 0
var int rl_a_time = 0
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
bool new_ph_2nd = false
bool new_pl_2nd = false
string alert = na
if 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 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))
new_ph_2nd := true
if temp_pv_1 > array.get(pvh2_price, 1)
for i = 0 to array.size(pvl2_time) - 1 by 1
temp_ltcmrhh_time = array.get(pvl2_time, i)
if temp_ltcmrhh_time < array.get(pvh2_time, 0)
ltcmrhh_price := array.get(pvl2_price, i)
ltcmrhh_time := temp_ltcmrhh_time
break
if temp_pv_0 < ltcmrhh_price
if msb_sv
array.push(bear_bos_lines, line.new(x1=ltcmrhh_time, y1=ltcmrhh_price, x2=bar_index, y2=ltcmrhh_price, color=color.rgb(11, 238, 18), width=3))
box_top := array.get(pvh2_price, 0)
box_bottom := math.max(low , low )
array.push(short_boxes, box.new(left=array.get(pvh2_time, 0), top=box_top, right=bar_index, bottom=box_bottom, bgcolor= box_sv ? u_s : na ,border_color=na, extend=extend.right))
if msb_a_sv
alert := alert + 'Bearish MSB @ ' + str.tostring(ltcmrhh_price) + ' ' + 'New Supply Zone : '+ str.tostring(box_top) + ' - ' + str.tostring(box_bottom) + ' '
ltcmrhh_price := na
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 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))
new_pl_2nd := true
if temp_pv_1 < array.get(pvl2_price, 1)
for i = 0 to array.size(pvh2_time) - 1 by 1
temp_htcmrll_time = array.get(pvh2_time, i)
if temp_htcmrll_time < array.get(pvl2_time, 0)
htcmrll_price := array.get(pvh2_price, i)
htcmrll_time := temp_htcmrll_time
break
if temp_pv_0 > htcmrll_price
if msb_sv
array.push(bull_bos_lines, line.new(x1=htcmrll_time, y1=htcmrll_price, x2=bar_index, y2=htcmrll_price, color=color.rgb(236, 5, 5), width=3))
box_top := math.min(high , high )
box_bottom := array.get(pvl2_price, 0)
array.push(long_boxes, box.new(left=array.get(pvl2_time, 0), top=box_top, right=bar_index, bottom=box_bottom, bgcolor= box_sv ? u_d : na, border_color=na, extend=extend.right))
if msb_a_sv
alert := alert + 'Bullish MSB @ ' + str.tostring(htcmrll_price) + ' ' + 'New Demand Zone : '+ str.tostring(box_bottom) + ' - ' + str.tostring(box_top) + ' '
htcmrll_price := na
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)
ago = box.get_left(tbox)
if array.get(pvh1_price, 0) > bottom
if box_sv
box.set_bgcolor(tbox, t_s)
if ob_a_sv and close < bottom
if array.get(pvh1_time, 0) != h_a_time
h_a_time := array.get(pvh1_time, 0)
alert := alert + 'Supply Zone Test @ ' + str.tostring(array.get(pvh1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvl1_price, 0) > top
if m_sv
box.set_bgcolor(tbox, u_b)
array.push(m_long_boxes, tbox)
else
box.delete(tbox)
array.remove(short_boxes, i)
if msb_sv
line.delete(array.get(bear_bos_lines, i))
array.remove(bear_bos_lines, 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)
ago = box.get_left(lbox)
if array.get(pvl1_price, 0) < top
if box_sv
box.set_bgcolor(lbox, t_d)
if ob_a_sv and close > top
if array.get(pvl1_time, 0) != l_a_time
l_a_time := array.get(pvl1_time, 0)
alert := alert + 'Demand Zone Test @ ' + str.tostring(array.get(pvl1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvh1_price, 0) < bottom
if m_sv
box.set_bgcolor(lbox, u_b)
array.push(m_short_boxes, lbox)
else
box.delete(lbox)
array.remove(long_boxes, i)
if msb_sv
line.delete(array.get(bull_bos_lines, i))
array.remove(bull_bos_lines, i)
if array.size(m_short_boxes) > 0
for i = array.size(m_short_boxes) - 1 to 0 by 1
tbox = array.get(m_short_boxes, i)
top = box.get_top(tbox)
bottom = box.get_bottom(tbox)
ago = box.get_left(tbox)
if array.get(pvh1_price, 0) > bottom
box.set_bgcolor(tbox, t_b)
if bb_a_sv and close < bottom
if array.get(pvh1_time, 0) != mh_a_time
mh_a_time := array.get(pvh1_time, 0)
alert := alert + 'Breakerblock Test Up @ ' + str.tostring(array.get(pvh1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvl1_price, 0) > top
box.delete(tbox)
array.remove(m_short_boxes, i)
if array.size(m_long_boxes) > 0
for i = array.size(m_long_boxes) - 1 to 0 by 1
lbox = array.get(m_long_boxes, i)
top = box.get_top(lbox)
bottom = box.get_bottom(lbox)
ago = box.get_left(lbox)
if array.get(pvl1_price, 0) < top
box.set_bgcolor(lbox, t_b)
if bb_a_sv and close > top
if array.get(pvl1_time, 0) != ml_a_time
ml_a_time := array.get(pvl1_time, 0)
alert := alert + 'Breakerblock Test Down @ ' + str.tostring(array.get(pvl1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvh1_price, 0) < bottom
box.delete(lbox)
array.remove(m_long_boxes, i)
if range_sv and (new_ph_2nd or new_pl_2nd) and (array.get(pvh2_price, 0) < array.get(pvh2_price, 1) and array.get(pvl2_price, 0) > array.get(pvl2_price, 1) and array.get(pvh2_price, 0) > array.get(pvl2_price, 1) and array.get(pvl2_price, 0) < array.get(pvh2_price, 1)) and (array.get(pvl2_price, 1) > nz(last_range_h) or na(last_range_l)? true : (array.get(pvh2_price, 1) < last_range_l))
temp_time := math.min(array.get(pvh2_time, 1), array.get(pvl2_time, 1))
last_range_h := array.get(pvh2_price, 1)
last_range_l := array.get(pvl2_price, 1)
temp_pv_0 := log_sv ? math.exp((math.log(last_range_h) + math.log(last_range_l))/2) : (last_range_h + last_range_l)/2
temp_pv_1 := log_sv ? math.exp((math.log(last_range_h) + math.log(temp_pv_0))/2) : (last_range_h + temp_pv_0)/2
temp_pv_2 := log_sv ? math.exp((math.log(last_range_l) + math.log(temp_pv_0))/2) : (last_range_l + temp_pv_0)/2
array.push(range_h_lines, line.new(x1=temp_time, y1=last_range_h, x2=bar_index, y2=last_range_h, color= color.white, width=2, extend=extend.right))
array.push(range_l_lines, line.new(x1=temp_time, y1=last_range_l, x2=bar_index, y2=last_range_l, color= color.white, width=2, extend=extend.right))
if range_eq_sv
array.push(range_m_lines, line.new(x1=temp_time, y1=temp_pv_0, x2=bar_index, y2=temp_pv_0, color= color.rgb(246, 6, 6), width=2, extend=extend.right))
if range_q_sv
array.push(range_25_lines, line.new(x1=temp_time, y1=temp_pv_1, x2=bar_index, y2=temp_pv_1, style=line.style_dashed, color=color.rgb(1, 54, 249), width=2, extend=extend.right))
array.push(range_75_lines, line.new(x1=temp_time, y1=temp_pv_2, x2=bar_index, y2=temp_pv_2, style=line.style_dashed, color=color.rgb(1, 54, 249), width=2, extend=extend.right))
if r_a_sv
alert := alert + 'New Range : ' + str.tostring(last_range_h) + ' - ' + str.tostring(last_range_l) + '. Mean = ' + str.tostring(temp_pv_0) + ' '
if array.size(range_h_lines) > 0
for i = array.size(range_h_lines) - 1 to 0 by 1
range_h = array.get(range_h_lines, i)
top = line.get_y1(range_h)
range_l = array.get(range_l_lines, i)
bottom = line.get_y1(range_l)
temp_time := line.get_x1(range_h)
if array.get(pvh1_price, 0) > top
if rt_a_sv and close < top
if array.get(pvh1_time, 0) != rh_a_time
rh_a_time := array.get(pvh1_time, 0)
alert := alert + 'Range High Test @ ' + str.tostring(array.get(pvh1_price, 0)) + ' '
if array.get(pvl1_price, 0) < bottom
if rt_a_sv and close > bottom
if array.get(pvl1_time, 0) != rl_a_time
rl_a_time := array.get(pvl1_time, 0)
alert := alert + 'Range Low Test @ ' + str.tostring(array.get(pvl1_price, 0)) + ' '
if range_eq_sv
range_m := array.get(range_m_lines, i)
if range_q_sv
range_25 := array.get(range_25_lines, i)
range_75 := array.get(range_75_lines, i)
if array.get(pvh1_price, 0) < bottom or array.get(pvl1_price, 0) > top
line.delete(range_h)
array.remove(range_h_lines, i)
line.delete(range_l)
array.remove(range_l_lines, i)
if range_eq_sv
line.delete(range_m)
array.remove(range_m_lines, i)
if range_q_sv
line.delete(range_25)
array.remove(range_25_lines, i)
line.delete(range_75)
array.remove(range_75_lines, i)
last_range_h := na
last_range_l := na
if pv2_sv
if new_ph_2nd
array.push(la_ph2, label.new(x = array.get(pvh2_time, 0), y = array.get(pvh2_price, 0), xloc = xloc.bar_index, style = label.style_label_down, color = #770000FF, size = size.tiny))
if new_pl_2nd
array.push(la_pl2, label.new(x = array.get(pvl2_time, 0), y = array.get(pvl2_price, 0), xloc = xloc.bar_index, style = label.style_label_up, color = #007700FF, size = size.tiny))
alert := not na(alert) ? (alert + 'Current price = ' + str.tostring(close) + ' ') : na
exec = not na(alert) ? true : false
//if exec==true
//alert(alert, alert.freq_once_per_bar_close)
//xac dinh dieu kien khoi luong lon
// mau cay nen mua
buyCandle = close > open and volumeSpike ? color.rgb(4, 128, 8) : na
// mau cay nen ban
sellCandle = close < open and volumeSpike ? color.rgb(147, 23, 230) : na
// ve nen tuy chinh
plotcandle(open, high, low, close, color = buyCandle, title = "Buy Candle")
plotcandle(open, high, low, close, color = sellCandle, title = "Sell Candle")
//plot(close)
//=== Lọc pin bar intraday ===
isIntraday = timeframe.multiplier >= 15 and timeframe.multiplier <= 60 // M15 đến H1
//isPinBar = math.abs(close - open) / math.abs(high - low) < 0.2
volSpike = volume > ta.sma(volume, 20) * 1.5
//rsi = ta.rsi(close, 14)
rsiExtreme = rsi < 30 or rsi > 70
//nearSupport = math.abs(low - ta.lowest(low, 20)) < syminfo.mintick * 100
//nearResistance = math.abs(high - ta.highest(high, 20)) < syminfo.mintick * 100
validBullPin = isPinBar and close > open and high - close > 2 * (close - open) and volSpike and rsi < 30 and nearSupport and isIntraday
validBearPin = isPinBar and open > close and close - low > 2 * (open - close) and volSpike and rsi > 70 and nearResistance and isIntraday
plotshape(validBullPin, location = location.belowbar, style = shape.labelup, color = color.green, text = "PB M15-H1")
plotshape(validBearPin, location = location.abovebar, style = shape.labeldown, color = color.red, text = "PB M15-H1")
alertcondition(validBullPin, title = "Pin Bar MUA intraday", message = "Phát hiện Pin Bar MUA mạnh (M15-H1)")
if validBullPin
alert("Pin bar MUA intraday : Phát hiện Pin Bar MUA mạnh (M15-H1)", alert.freq_once_per_bar_close)
alertcondition(validBearPin, title = "Pin Bar BÁN intraday", message = "Phát hiện Pin Bar BÁN mạnh (M15-H1)")
if validBearPin
alert("Pin bar BAN Intrday : Phát hiện Pin Bar BÁN mạnh (M15-H1)", alert.freq_once_per_bar_close)
//=======- Dùng H1 để xác định xu hướng, M15 để vào lệnh.
//Nếu pin bar xuất hiện ở H1, bạn có thể chờ xác nhận phá đỉnh/đáy ở M15 để vào lệnh.
//Kết hợp thêm EMA hoặc vùng cung cầu để tăng độ tin cậy
//====================================
trendUp = ema34 > ema89
trendDow = ema34 < ema89
//tin hieu vao lenh
enterLong = validBullPin and close > high and trendUp
enterShort = validBearPin and close < low and trendDow
plotshape(enterLong, location = location.belowbar, style = shape.triangleup, color = color.lime, text = "Long", textcolor = color.white)
plotshape(enterShort, location = location.abovebar, style = shape.triangledown, color = color.fuchsia, text = "Short", textcolor = color.white)
if enterLong
alert("Vao lenh Long: Pin Bar + Pha dinh + EMA xac nhan", alert.freq_once_per_bar_close)
if enterShort
alert("Vao lenh Short: Pin Bar + Pha day + EMA xac nhan", alert.freq_once_per_bar_close)
//==================================================================================
// === Hiển thị tín hiệu Cạn cung ===
//plotshape(supplyDryUp, title = 'Cạn cung', location = location.belowbar, color = color.yellow, style = shape.circle, size = size.small)
alertcondition(supplyDryUp, title = 'Cảnh báo cạn cung', message = 'Phát hiện dấu hiệu cạn cung: khối lượng thấp + giá đi ngang + biên độ hẹp')
// === Kết hợp với tín hiệu mua/bán để tăng độ tin cậy ===
buySignalCC = buySignal and supplyDryUp
sellSignalCC = sellSignal and supplyDryUp
plotshape(buySignalCC, title = 'Mua + Cạn cung', location = location.belowbar, color = color.lime, style = shape.triangleup, text = 'Long CC', textcolor = color.white)
plotshape(sellSignalCC, title = 'Bán + Cạn cung', location = location.abovebar, color = color.fuchsia, style = shape.triangledown, text = 'Short CC', textcolor = color.white)
alertcondition(buySignalCC, title = 'Mua mạnh + Cạn cung', message = 'Tín hiệu MUA mạnh kết hợp dấu hiệu cạn cung')
alertcondition(sellSignalCC, title = 'Bán mạnh + Cạn cung', message = 'Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cung')
if buySignalCC
alert('Mua mạnh + Cạn cung : Tín hiệu MUA mạnh kết hợp dấu hiệu cạn cung', alert.freq_once_per_bar_close)
if sellSignalCC
alert('Bán mạnh + Cạn cung : Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cung', alert.freq_once_per_bar_close)
// === Hiển thị tín hiệu Cạn cầu ===
//plotshape(demandDryUp, title = 'Cạn cầu', location = location.abovebar, color = color.orange, style = shape.circle, size = size.small)
alertcondition(demandDryUp, title = 'Cảnh báo cạn cầu', message = 'Phát hiện dấu hiệu cạn cầu: khối lượng thấp + giá không tăng + biên độ hẹp')
// === Kết hợp với tín hiệu bán để tăng độ tin cậy ===
sellSignalCD = sellSignal and demandDryUp
plotshape(sellSignalCD, title = 'Bán + Cạn cầu', location = location.abovebar, color = color.red, style = shape.triangledown, text = 'Short CCầu', textcolor = color.white)
alertcondition(sellSignalCD, title = 'Bán mạnh + Cạn cầu', message = 'Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cầu')
if sellSignalCD
alert('Bán mạnh + Cạn cầu : Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cầu', alert.freq_once_per_bar_close)
//====================================================
Reversal Strategy (RSI & Volume & Automantic support resistance)// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © RoseZero
//@version=6
indicator('Chien luoc dao chieu manh(RSI + Volume + Ho tro auto)', overlay = true)
//===Tham so nguoi dung===
rsiOversold = input.int(30, 'Nguong RSI qua ban')
rsiOverbought = input.int(70, 'Nguong RSI qua mua')
rsiLow = input.int(35, 'Nguong qua ban')
rsiHigh = input.int(55, 'Nguong qua mua')
volMultiplier = input.float(1.5, 'nguong khoi luong tang (so voi TB)')
mult = input.float(1.5, 'Nguong nhan do lon nen', step = 0.1)
supportLength = input.int(20, 'Do dai vung ho tro')
resistLength = input.int(20, 'Do dai vung khang cu')
length = input.int(20, 'So nen trung binh')
volume_threshold = input.float(1.2, title = 'Nguong volume dao chieu')
fastEMA = input.int(21, title = 'EMA nhanh')
slowEMA = input.int(55, title = 'EMA cham')
depth = input.int(3, title = 'Pivot Depth')
rsiLen = input.int(14, title = 'RSI Length')
//==============================================================================
// === Dấu hiệu Cạn Cung ===
lowVolMultiplier = input.float(0.5, title = 'Ngưỡng khối lượng thấp (Cạn cung)')
lowRangeMultiplier = input.float(0.7, title = 'Ngưỡng biên độ giá thấp (Cạn cung)')
avgVolCC = ta.sma(volume, 20)
avgRangeCC = ta.sma(high - low, 20)
isLowVolume = volume < avgVolCC * lowVolMultiplier
isNarrowRange = (high - low) < avgRangeCC * lowRangeMultiplier
isSideways = math.abs(close - close ) < avgRangeCC * 0.3
supplyDryUp = isLowVolume and isNarrowRange and isSideways
// === Dấu hiệu Cạn Cầu ===
lowVolMultiplier2 = input.float(0.5, title = 'Ngưỡng khối lượng thấp (Cạn cầu)')
lowRangeMultiplier2 = input.float(0.7, title = 'Ngưỡng biên độ giá thấp (Cạn cầu)')
avgVolCD = ta.sma(volume, 20)
avgRangeCD = ta.sma(high - low, 20)
isLowVolumeCD = volume < avgVolCD * lowVolMultiplier2
isNarrowRangeCD = (high - low) < avgRangeCD * lowRangeMultiplier2
isWeakDemand = close <= close or close - close < avgRangeCD * 0.2
demandDryUp = isLowVolumeCD and isNarrowRangeCD and isWeakDemand
//=====================================================================================
ema34 = ta.ema(close, 34)
ema89 = ta.ema(close, 89)
volAvg = ta.sma(volume, 20)
plot(ema34, color = color.green, title = 'EMA 34')
plot(ema89, color = color.orange, title = 'EMA 89')
emaUp = ta.crossover(ema34, ema89)
emaDow = ta.crossunder(ema34, ema89)
alertcondition(emaUp, title = 'EMA34 cat len tren EMA89', message = 'EMA34 cat len tren EMA89 xu huong gia di len')
alertcondition(emaDow, title = 'EMA34 cat xuong duoi EMA89', message = 'EMA34 cat xuong duoi EMA*9 xu huong gia di xuong')
// dieu kien pha len ema va nguoc lai============================================================================================================
breakoutEma = close < ema34 and close < ema89 and close > ema34 and close > ema89
breakdownEma = close > ema34 and close > ema89 and close < ema34 and close < ema89
//dieu kien test lai EMA sau break
retestUpEma = breakoutEma and close < ema34 * 1.02 and close > ema89 * 0.98
retestDownEma = breakdownEma and close > ema34 * 0.98 and close < ema89 * 1.02
//canh bao gia test lai cum ema
alertcondition(retestUpEma, title = 'Canh bao test lai EMA gia tang', message = 'Gia dang test lai cum EMA khi gia tang')
alertcondition(retestDownEma, title = 'Canh bao test lai EMA gia giam', message = 'Gia dang test lai cum EMA khi gia giam')
//Tinh toan co bao Pivot
pivotHigh = ta.pivothigh(high, depth, depth)
pivotLow = ta.pivotlow(low, depth, depth)
ema = ta.ema(close, fastEMA)
ma = ta.sma(close, slowEMA)
rsii = ta.rsi(close, rsiLen)
//Volume Breakout check
volStrong = volume > ta.sma(volume, 20) * volume_threshold
//Mo hinh nen : Pinbar, Engulfing, Doji
isPinBar = math.abs(close - open) / math.abs(high - low) < 0.2
isBullEngulfing = close > open and open < close and close > open
isBearishEngulfing = close < open and open > close and close < open
isDoji = math.abs(close - open) / math.abs(high - low) < 0.1
//Dao chieu tang manh va giam manh
candlePattern = isPinBar or isBullEngulfing or isDoji
candlePattern2 = isPinBar or isBearishEngulfing or isDoji
priceCondition = close > ema and close > ma and rsii < 30 and volStrong
priceCondition2 = close < ema and close < ma and rsii > 70 and volStrong
bullishSignal = not na(pivotLow) and candlePattern and priceCondition and volStrong
if bullishSignal
alert('Dao chieu tang manh: Xuat hien nen dao chieu Tang(PInBar, BullishEngulf, Doji)', alert.freq_once_per_bar_close)
bearishSignal = not na(pivotHigh) and candlePattern2 and priceCondition2 and volStrong
if bearishSignal
alert('Dao chieu giam manh: Xuat hien nen dao chieu Giam(PinBar, BearishEngul, Doji)', alert.freq_once_per_bar_close)
//EMA & Trend
emaFast = ta.ema(close, fastEMA)
emaSlow = ta.ema(close, slowEMA)
plot(emaFast, title = 'EMA nhanh', color = color.blue)
plot(emaSlow, 'EMA cham', color = color.purple)
//===Ho tro tu dong===
supportZone = ta.lowest(low, supportLength)
resistZone = ta.highest(high, resistLength)
nearSupport = math.abs(low - supportZone) < syminfo.mintick * 100
nearResistance = math.abs(high - resistZone) < syminfo.mintick * 100
plot(supportZone, 'Ho tro', color = color.gray)
plot(resistZone, 'Khang cu', color = color.orange)
//===Mo hinh nen dao chieu tang & giam===
//Bullish: Hammer, Engulfing, piercing
body = math.abs(close - open)
avgbody = ta.sma(body, length)
upperWick = high - math.max(open, close)
lowerWick = math.min(open, close) - low
isHammerUp = lowerWick > 2 * body and upperWick < body and close > open
//engulfingUp = close < open and close > open and close > open and open < close
piercingUp = close > open and open < close and close > (open + close ) / 2
bullishCandle = isHammerUp or isBullEngulfing or piercingUp
//Bearish: Inverted Hammer, Bearish Engulfing, Dark cloud Cover
isHammerDow = upperWick > 2 * body and lowerWick < body and close < open
//engulfingDow = close > open and close < open and close < open and open > close
darkCloud = close < open and open > close and close < (open + close ) / 2
bearishCandle = isHammerDow or isBearishEngulfing or darkCloud
//========================================================================
//===Chi bao RSI & Volume===
rsi = ta.rsi(close, 14)
oversold = rsi < rsiOversold
overbought = rsi > rsiOverbought
avgVol = ta.sma(volume, 20)
volumeSpike = volume > avgVol * volMultiplier
rsiLL = rsi < rsiLow
rsiHH = rsi > rsiHigh
// nen rut chan 50%
fibo50=high/2+low/2
Pinbarbullish=close>fibo50 and open>fibo50 and volumeSpike and rsiLL // and close ta.ema(close,89)
plotshape(Pinbarbullish, style = shape.labelup, location = location.belowbar, color = color.green, text = 'L', textcolor = color.white, size = size.tiny)
plotshape(Pinbarbearish, style = shape.labeldown, location = location.abovebar, color = color.red, text = 'S', textcolor = color.white, size = size.tiny)
if Pinbarbullish
alert('Pin Bar dao chieu tang', alert.freq_once_per_bar_close)
if Pinbarbearish
alert('Pin Bar dao chieu giam', alert.freq_once_per_bar_close)
//===dieu kien tin hieu===
buySignal = bullishCandle and oversold and volumeSpike and nearSupport
sellSignal = bearishCandle and overbought and volumeSpike and nearResistance
//Canh bao nag cao
if buySignal
alert('Tin hieu MUA manh:Nen dao chieu tai vung ho tro kem RSI thap & Volume lon(LONG)', alert.freq_once_per_bar_close)
if sellSignal
alert('Tin hieu BAN manh:Nen dao chieu tai vung khang cu kem RSI cao & Volume lon(SHORT)', alert.freq_once_per_bar_close)
//===Hien canh bao===
alertcondition(buySignal, title = 'Tin hieu MUA', message = 'Nen dao chieu TANG tai vung ho tro(RSI thap + Volume lon)')
alertcondition(sellSignal, title = 'Tin hieu BAN', message = 'Nen dao chieu GIAM tai vung ho(RSI cao + Volume lon)')
plotshape(buySignal, style = shape.triangleup, location = location.belowbar, color = color.green, text = 'Long', textcolor = color.white)
plotshape(sellSignal, style = shape.triangledown, location = location.abovebar, color = color.red, text = 'Short', textcolor = color.white)
//Pin Bar ket hop volume lon & RSI qua mua / qua ban
isStrongBullPin = close > open and high - close > 2 * (close - open) and volume > volAvg * volMultiplier and rsi < rsiOversold
isStrongBearPin = open > close and close - low > 2 * (open - close) and volume > volAvg * volMultiplier and rsi > rsiOverbought
plotshape(isStrongBullPin, title = 'Canh bao Pinbar MUA manh', location = location.belowbar, color = color.green, style = shape.labelup, text = "Pb Mua", textcolor = color.white)
plotshape(isStrongBearPin, title = 'Canh bao Pinbar BAN manh', location = location.abovebar, color = color.red, style = shape.labeldown, text = 'Pb Ban', textcolor = color.white)
alertcondition(isStrongBullPin, title = 'Canh bao PinBar MUA manh', message = 'Phat hien PinBar MUA manh(vol cao + RSI qua ban)')
alertcondition(isStrongBearPin, title = 'Canh bao PInBar BAN manh', message = 'Phat hien PinBar BAN manh(vol cao+ RSI qua mua)')
if isStrongBullPin
alert('Pin Bar tin hieu mua:Phat hien PinBar MUA manh(vol cao + RSI qua ban)', alert.freq_once_per_bar_close)
if isStrongBearPin
alert('Pin Bar tin hieu ban:Phat hien PinBar BAN manh(vol cao+ RSI qua mua)', alert.freq_once_per_bar_close)
//================================================================
bool pv2_sv = input.bool (true, title='Plot 2nd order pivots')
bool msb_sv = input.bool (true, title='Plot MSB lines')
bool box_sv = input.bool (true, title='Plot Orderblocks')
bool m_sv = input.bool (true, title='Plot Breakerblocks')
bool range_sv = input.bool (true, title='Plot Range')
bool range_eq_sv = input.bool (true, title='Plot Range 0.5 Line')
bool range_q_sv = input.bool (true, title='Plot Range 0.25 and 0.75 Lines')
bool log_sv = input.bool (true, title='Use Log Scale')
bool msb_a_sv = input.bool (true, title='Alert MSB')
bool ob_a_sv = input.bool (true, title='Alert Orderblock test')
bool bb_a_sv = input.bool (true, title='Alert Breakerblock test')
bool r_a_sv = input.bool (true, title='Alert New Range')
bool rt_a_sv = input.bool (true, title='Alert Range test')
color u_s = input.color (color.new(color.red,90), title='Untested Supply Color')
color t_s = input.color (color.new(color.red,70), title='Tested Supply Color')
color u_d = input.color (color.new(color.green,90), title='Untested Demand Color')
color t_d = input.color (color.new(color.green,70), title='Tested Demand Color')
color u_b = input.color ( color.new(color.blue,90), title='Untested Breaker Color')
color t_b = input.color (color.new(color.blue, 70), title='Tested Breaker Color')
var float pvh1_price = array.new_float (30, na) // high
var int pvh1_time = array.new_int (30, na)
var float pvl1_price = array.new_float (30, na) // low
var int pvl1_time = array.new_int (30, na)
var float pvh2_price = array.new_float (10, na) // higher high
var int pvh2_time = array.new_int (10, na)
var float pvl2_price = array.new_float (10, na) // lower low
var int pvl2_time = array.new_int (10, na)
var float htcmrll_price = na // high that created most recent ll
var int htcmrll_time = na
var float ltcmrhh_price = na // low that created most recent hh
var int ltcmrhh_time = na
var box long_boxes = array.new_box() // orderblocks
var box short_boxes = array.new_box()
var box m_long_boxes = array.new_box() // breakerblocks
var box m_short_boxes = array.new_box()
var line bull_bos_lines = array.new_line() // MSB lines
var line bear_bos_lines = array.new_line()
var line range_h_lines = array.new_line() // Range lines
var line range_25_lines = array.new_line()
var line range_m_lines = array.new_line()
var line range_75_lines = array.new_line()
var line range_l_lines = array.new_line()
var label la_ph2 = array.new_label() // 2nd order pivots
var label la_pl2 = array.new_label()
var float temp_pv_0 = na
var float temp_pv_1 = na
var float temp_pv_2 = na
var int temp_time = na
var float last_range_h = na
var float last_range_l = na
var line range_m = na
var line range_25 = na
var line range_75 = na
var float box_top = na
var float box_bottom = na
var int h_a_time = 0
var int l_a_time = 0
var int mh_a_time = 0
var int ml_a_time = 0
var int rh_a_time = 0
var int rl_a_time = 0
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
bool new_ph_2nd = false
bool new_pl_2nd = false
string alert = na
if 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 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))
new_ph_2nd := true
if temp_pv_1 > array.get(pvh2_price, 1)
for i = 0 to array.size(pvl2_time) - 1 by 1
temp_ltcmrhh_time = array.get(pvl2_time, i)
if temp_ltcmrhh_time < array.get(pvh2_time, 0)
ltcmrhh_price := array.get(pvl2_price, i)
ltcmrhh_time := temp_ltcmrhh_time
break
if temp_pv_0 < ltcmrhh_price
if msb_sv
array.push(bear_bos_lines, line.new(x1=ltcmrhh_time, y1=ltcmrhh_price, x2=bar_index, y2=ltcmrhh_price, color=color.rgb(11, 238, 18), width=3))
box_top := array.get(pvh2_price, 0)
box_bottom := math.max(low , low )
array.push(short_boxes, box.new(left=array.get(pvh2_time, 0), top=box_top, right=bar_index, bottom=box_bottom, bgcolor= box_sv ? u_s : na ,border_color=na, extend=extend.right))
if msb_a_sv
alert := alert + 'Bearish MSB @ ' + str.tostring(ltcmrhh_price) + ' ' + 'New Supply Zone : '+ str.tostring(box_top) + ' - ' + str.tostring(box_bottom) + ' '
ltcmrhh_price := na
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 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))
new_pl_2nd := true
if temp_pv_1 < array.get(pvl2_price, 1)
for i = 0 to array.size(pvh2_time) - 1 by 1
temp_htcmrll_time = array.get(pvh2_time, i)
if temp_htcmrll_time < array.get(pvl2_time, 0)
htcmrll_price := array.get(pvh2_price, i)
htcmrll_time := temp_htcmrll_time
break
if temp_pv_0 > htcmrll_price
if msb_sv
array.push(bull_bos_lines, line.new(x1=htcmrll_time, y1=htcmrll_price, x2=bar_index, y2=htcmrll_price, color=color.rgb(236, 5, 5), width=3))
box_top := math.min(high , high )
box_bottom := array.get(pvl2_price, 0)
array.push(long_boxes, box.new(left=array.get(pvl2_time, 0), top=box_top, right=bar_index, bottom=box_bottom, bgcolor= box_sv ? u_d : na, border_color=na, extend=extend.right))
if msb_a_sv
alert := alert + 'Bullish MSB @ ' + str.tostring(htcmrll_price) + ' ' + 'New Demand Zone : '+ str.tostring(box_bottom) + ' - ' + str.tostring(box_top) + ' '
htcmrll_price := na
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)
ago = box.get_left(tbox)
if array.get(pvh1_price, 0) > bottom
if box_sv
box.set_bgcolor(tbox, t_s)
if ob_a_sv and close < bottom
if array.get(pvh1_time, 0) != h_a_time
h_a_time := array.get(pvh1_time, 0)
alert := alert + 'Supply Zone Test @ ' + str.tostring(array.get(pvh1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvl1_price, 0) > top
if m_sv
box.set_bgcolor(tbox, u_b)
array.push(m_long_boxes, tbox)
else
box.delete(tbox)
array.remove(short_boxes, i)
if msb_sv
line.delete(array.get(bear_bos_lines, i))
array.remove(bear_bos_lines, 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)
ago = box.get_left(lbox)
if array.get(pvl1_price, 0) < top
if box_sv
box.set_bgcolor(lbox, t_d)
if ob_a_sv and close > top
if array.get(pvl1_time, 0) != l_a_time
l_a_time := array.get(pvl1_time, 0)
alert := alert + 'Demand Zone Test @ ' + str.tostring(array.get(pvl1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvh1_price, 0) < bottom
if m_sv
box.set_bgcolor(lbox, u_b)
array.push(m_short_boxes, lbox)
else
box.delete(lbox)
array.remove(long_boxes, i)
if msb_sv
line.delete(array.get(bull_bos_lines, i))
array.remove(bull_bos_lines, i)
if array.size(m_short_boxes) > 0
for i = array.size(m_short_boxes) - 1 to 0 by 1
tbox = array.get(m_short_boxes, i)
top = box.get_top(tbox)
bottom = box.get_bottom(tbox)
ago = box.get_left(tbox)
if array.get(pvh1_price, 0) > bottom
box.set_bgcolor(tbox, t_b)
if bb_a_sv and close < bottom
if array.get(pvh1_time, 0) != mh_a_time
mh_a_time := array.get(pvh1_time, 0)
alert := alert + 'Breakerblock Test Up @ ' + str.tostring(array.get(pvh1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvl1_price, 0) > top
box.delete(tbox)
array.remove(m_short_boxes, i)
if array.size(m_long_boxes) > 0
for i = array.size(m_long_boxes) - 1 to 0 by 1
lbox = array.get(m_long_boxes, i)
top = box.get_top(lbox)
bottom = box.get_bottom(lbox)
ago = box.get_left(lbox)
if array.get(pvl1_price, 0) < top
box.set_bgcolor(lbox, t_b)
if bb_a_sv and close > top
if array.get(pvl1_time, 0) != ml_a_time
ml_a_time := array.get(pvl1_time, 0)
alert := alert + 'Breakerblock Test Down @ ' + str.tostring(array.get(pvl1_price, 0)) + ' (age = ' + str.tostring(bar_index-ago) + ' bars) '
if array.get(pvh1_price, 0) < bottom
box.delete(lbox)
array.remove(m_long_boxes, i)
if range_sv and (new_ph_2nd or new_pl_2nd) and (array.get(pvh2_price, 0) < array.get(pvh2_price, 1) and array.get(pvl2_price, 0) > array.get(pvl2_price, 1) and array.get(pvh2_price, 0) > array.get(pvl2_price, 1) and array.get(pvl2_price, 0) < array.get(pvh2_price, 1)) and (array.get(pvl2_price, 1) > nz(last_range_h) or na(last_range_l)? true : (array.get(pvh2_price, 1) < last_range_l))
temp_time := math.min(array.get(pvh2_time, 1), array.get(pvl2_time, 1))
last_range_h := array.get(pvh2_price, 1)
last_range_l := array.get(pvl2_price, 1)
temp_pv_0 := log_sv ? math.exp((math.log(last_range_h) + math.log(last_range_l))/2) : (last_range_h + last_range_l)/2
temp_pv_1 := log_sv ? math.exp((math.log(last_range_h) + math.log(temp_pv_0))/2) : (last_range_h + temp_pv_0)/2
temp_pv_2 := log_sv ? math.exp((math.log(last_range_l) + math.log(temp_pv_0))/2) : (last_range_l + temp_pv_0)/2
array.push(range_h_lines, line.new(x1=temp_time, y1=last_range_h, x2=bar_index, y2=last_range_h, color= color.white, width=2, extend=extend.right))
array.push(range_l_lines, line.new(x1=temp_time, y1=last_range_l, x2=bar_index, y2=last_range_l, color= color.white, width=2, extend=extend.right))
if range_eq_sv
array.push(range_m_lines, line.new(x1=temp_time, y1=temp_pv_0, x2=bar_index, y2=temp_pv_0, color= color.rgb(246, 6, 6), width=2, extend=extend.right))
if range_q_sv
array.push(range_25_lines, line.new(x1=temp_time, y1=temp_pv_1, x2=bar_index, y2=temp_pv_1, style=line.style_dashed, color=color.rgb(1, 54, 249), width=2, extend=extend.right))
array.push(range_75_lines, line.new(x1=temp_time, y1=temp_pv_2, x2=bar_index, y2=temp_pv_2, style=line.style_dashed, color=color.rgb(1, 54, 249), width=2, extend=extend.right))
if r_a_sv
alert := alert + 'New Range : ' + str.tostring(last_range_h) + ' - ' + str.tostring(last_range_l) + '. Mean = ' + str.tostring(temp_pv_0) + ' '
if array.size(range_h_lines) > 0
for i = array.size(range_h_lines) - 1 to 0 by 1
range_h = array.get(range_h_lines, i)
top = line.get_y1(range_h)
range_l = array.get(range_l_lines, i)
bottom = line.get_y1(range_l)
temp_time := line.get_x1(range_h)
if array.get(pvh1_price, 0) > top
if rt_a_sv and close < top
if array.get(pvh1_time, 0) != rh_a_time
rh_a_time := array.get(pvh1_time, 0)
alert := alert + 'Range High Test @ ' + str.tostring(array.get(pvh1_price, 0)) + ' '
if array.get(pvl1_price, 0) < bottom
if rt_a_sv and close > bottom
if array.get(pvl1_time, 0) != rl_a_time
rl_a_time := array.get(pvl1_time, 0)
alert := alert + 'Range Low Test @ ' + str.tostring(array.get(pvl1_price, 0)) + ' '
if range_eq_sv
range_m := array.get(range_m_lines, i)
if range_q_sv
range_25 := array.get(range_25_lines, i)
range_75 := array.get(range_75_lines, i)
if array.get(pvh1_price, 0) < bottom or array.get(pvl1_price, 0) > top
line.delete(range_h)
array.remove(range_h_lines, i)
line.delete(range_l)
array.remove(range_l_lines, i)
if range_eq_sv
line.delete(range_m)
array.remove(range_m_lines, i)
if range_q_sv
line.delete(range_25)
array.remove(range_25_lines, i)
line.delete(range_75)
array.remove(range_75_lines, i)
last_range_h := na
last_range_l := na
if pv2_sv
if new_ph_2nd
array.push(la_ph2, label.new(x = array.get(pvh2_time, 0), y = array.get(pvh2_price, 0), xloc = xloc.bar_index, style = label.style_label_down, color = #770000FF, size = size.tiny))
if new_pl_2nd
array.push(la_pl2, label.new(x = array.get(pvl2_time, 0), y = array.get(pvl2_price, 0), xloc = xloc.bar_index, style = label.style_label_up, color = #007700FF, size = size.tiny))
alert := not na(alert) ? (alert + 'Current price = ' + str.tostring(close) + ' ') : na
exec = not na(alert) ? true : false
//if exec==true
//alert(alert, alert.freq_once_per_bar_close)
//xac dinh dieu kien khoi luong lon
// mau cay nen mua
buyCandle = close > open and volumeSpike ? color.rgb(4, 128, 8) : na
// mau cay nen ban
sellCandle = close < open and volumeSpike ? color.rgb(147, 23, 230) : na
// ve nen tuy chinh
plotcandle(open, high, low, close, color = buyCandle, title = "Buy Candle")
plotcandle(open, high, low, close, color = sellCandle, title = "Sell Candle")
//plot(close)
//=== Lọc pin bar intraday ===
isIntraday = timeframe.multiplier >= 15 and timeframe.multiplier <= 60 // M15 đến H1
//isPinBar = math.abs(close - open) / math.abs(high - low) < 0.2
volSpike = volume > ta.sma(volume, 20) * 1.5
//rsi = ta.rsi(close, 14)
rsiExtreme = rsi < 30 or rsi > 70
//nearSupport = math.abs(low - ta.lowest(low, 20)) < syminfo.mintick * 100
//nearResistance = math.abs(high - ta.highest(high, 20)) < syminfo.mintick * 100
validBullPin = isPinBar and close > open and high - close > 2 * (close - open) and volSpike and rsi < 30 and nearSupport and isIntraday
validBearPin = isPinBar and open > close and close - low > 2 * (open - close) and volSpike and rsi > 70 and nearResistance and isIntraday
plotshape(validBullPin, location = location.belowbar, style = shape.labelup, color = color.green, text = "PB M15-H1")
plotshape(validBearPin, location = location.abovebar, style = shape.labeldown, color = color.red, text = "PB M15-H1")
alertcondition(validBullPin, title = "Pin Bar MUA intraday", message = "Phát hiện Pin Bar MUA mạnh (M15-H1)")
if validBullPin
alert("Pin bar MUA intraday : Phát hiện Pin Bar MUA mạnh (M15-H1)", alert.freq_once_per_bar_close)
alertcondition(validBearPin, title = "Pin Bar BÁN intraday", message = "Phát hiện Pin Bar BÁN mạnh (M15-H1)")
if validBearPin
alert("Pin bar BAN Intrday : Phát hiện Pin Bar BÁN mạnh (M15-H1)", alert.freq_once_per_bar_close)
//=======- Dùng H1 để xác định xu hướng, M15 để vào lệnh.
//Nếu pin bar xuất hiện ở H1, bạn có thể chờ xác nhận phá đỉnh/đáy ở M15 để vào lệnh.
//Kết hợp thêm EMA hoặc vùng cung cầu để tăng độ tin cậy
//====================================
trendUp = ema34 > ema89
trendDow = ema34 < ema89
//tin hieu vao lenh
enterLong = validBullPin and close > high and trendUp
enterShort = validBearPin and close < low and trendDow
plotshape(enterLong, location = location.belowbar, style = shape.triangleup, color = color.lime, text = "Long", textcolor = color.white)
plotshape(enterShort, location = location.abovebar, style = shape.triangledown, color = color.fuchsia, text = "Short", textcolor = color.white)
if enterLong
alert("Vao lenh Long: Pin Bar + Pha dinh + EMA xac nhan", alert.freq_once_per_bar_close)
if enterShort
alert("Vao lenh Short: Pin Bar + Pha day + EMA xac nhan", alert.freq_once_per_bar_close)
//==================================================================================
// === Hiển thị tín hiệu Cạn cung ===
//plotshape(supplyDryUp, title = 'Cạn cung', location = location.belowbar, color = color.yellow, style = shape.circle, size = size.small)
alertcondition(supplyDryUp, title = 'Cảnh báo cạn cung', message = 'Phát hiện dấu hiệu cạn cung: khối lượng thấp + giá đi ngang + biên độ hẹp')
// === Kết hợp với tín hiệu mua/bán để tăng độ tin cậy ===
buySignalCC = buySignal and supplyDryUp
sellSignalCC = sellSignal and supplyDryUp
plotshape(buySignalCC, title = 'Mua + Cạn cung', location = location.belowbar, color = color.lime, style = shape.triangleup, text = 'Long CC', textcolor = color.white)
plotshape(sellSignalCC, title = 'Bán + Cạn cung', location = location.abovebar, color = color.fuchsia, style = shape.triangledown, text = 'Short CC', textcolor = color.white)
alertcondition(buySignalCC, title = 'Mua mạnh + Cạn cung', message = 'Tín hiệu MUA mạnh kết hợp dấu hiệu cạn cung')
alertcondition(sellSignalCC, title = 'Bán mạnh + Cạn cung', message = 'Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cung')
if buySignalCC
alert('Mua mạnh + Cạn cung : Tín hiệu MUA mạnh kết hợp dấu hiệu cạn cung', alert.freq_once_per_bar_close)
if sellSignalCC
alert('Bán mạnh + Cạn cung : Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cung', alert.freq_once_per_bar_close)
// === Hiển thị tín hiệu Cạn cầu ===
//plotshape(demandDryUp, title = 'Cạn cầu', location = location.abovebar, color = color.orange, style = shape.circle, size = size.small)
alertcondition(demandDryUp, title = 'Cảnh báo cạn cầu', message = 'Phát hiện dấu hiệu cạn cầu: khối lượng thấp + giá không tăng + biên độ hẹp')
// === Kết hợp với tín hiệu bán để tăng độ tin cậy ===
sellSignalCD = sellSignal and demandDryUp
plotshape(sellSignalCD, title = 'Bán + Cạn cầu', location = location.abovebar, color = color.red, style = shape.triangledown, text = 'Short CCầu', textcolor = color.white)
alertcondition(sellSignalCD, title = 'Bán mạnh + Cạn cầu', message = 'Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cầu')
if sellSignalCD
alert('Bán mạnh + Cạn cầu : Tín hiệu BÁN mạnh kết hợp dấu hiệu cạn cầu', alert.freq_once_per_bar_close)
//====================================================
Bearish Breakaway-Publish-FVG concept
This indicator tracks the intraday RTH (Regular Trading Hours) high in the bearish direction to identify breakaway candles based on the Fair Value Gap (FVG) and gap breakout concept. By default, the session runs from 9:30 AM to 5:00 PM EST, but the start time can be adjusted to track other sessions such as ETH beginning at 6:00 PM.
At the start of the session, the first candle is always considered the initial intraday high. This candle becomes the anchor, and the indicator continuously updates it whenever a new intraday high is made. A bearish breakaway occurs when a candle’s high is lower than the low of the current anchor candle, creating a gap between them. This first breakaway candle is marked with a red arrow. After the first breakaway, the indicator continues to look for additional breakaways in the bearish direction, each based on the most recent breakaway candle.
If a new intraday high is formed after a breakaway candle has appeared, the anchor is reset to this new high, all previous breakaway markers are removed, and the search starts over. The high and low of the most recent breakaway candle are drawn as horizontal rays, which can act as potential resistance or support depending on the trader’s bias.
You can backtest this indicator using TradingView’s Bar Replay feature to watch the resetting process as new intraday highs are made. Because the first candle of the session is always the first intraday high, the reset behavior is easy to observe in replay mode.
Timeframe recommendations: This tool works best on 1-minute, 5-minute, 15-minute, and 30-minute charts.
Trading tips:
• At the market open, always identify the first bearish breakaway candle.
• Once the intraday high stabilizes, a bearish run may follow — the first breakaway candle often marks the start of this move.
• To trade reversals from a bearish trend, watch for a bullish breakaway candle using the bullish companion indicator.
• If the daily trend is bullish, you will often see the intraday high reset many times — this is a sign to favor bullish trades.
• If trading reversals against the prevailing trend, use the breakaway candle as your signal for potential entry.
ORB 15m – First 15min Breakout (Long/Short)ORB 15m – First 15min Breakout (Long/Short)
Apply on SPY, great returns
Bullish Breakaway-Publish
This indicator tracks the intraday RTH (Regular Trading Hours) low in the bullish direction to identify breakaway candles based on the Fair Value Gap (FVG) and gap breakout concept. By default, the session runs from 9:30 AM to 5:00 PM EST, but the start time can be adjusted to track other sessions such as ETH beginning at 6:00 PM.
At the start of the session, the first candle is always considered the initial intraday low. This candle becomes the anchor, and the indicator continuously updates it whenever a new intraday low is made. A bullish breakaway occurs when a candle’s low is higher than the high of the current anchor candle, creating a gap between them. This first breakaway candle is marked with a green arrow. After the first breakaway, the indicator continues to look for additional breakaways in the bullish direction, each based on the most recent breakaway candle.
If a new intraday low is formed after a breakaway candle has appeared, the anchor is reset to this new low, all previous breakaway markers are removed, and the search starts over. The high and low of the most recent breakaway candle are drawn as horizontal rays, which can act as potential support or resistance depending on the trader’s bias.
You can backtest this indicator using TradingView’s Bar Replay feature to watch the resetting process as new intraday lows are made. Because the first candle of the session is always the first intraday low, the reset behavior is easy to observe in replay mode.
Timeframe recommendations: This tool works best on 1-minute, 5-minute, 15-minute, and 30-minute charts.
Trading tips:
• At the market open, always identify the first breakaway candle.
• Once the intraday low stabilizes, a bullish run may follow — the first breakaway candle often marks the start of this move.
• To trade reversals from a bullish trend, watch for a bearish breakaway candle using the bearish companion indicator.
• If the daily trend is bearish, you will often see the intraday low reset many times — this is a sign to favor bearish trades.
• If trading reversals against the prevailing trend, use the breakaway candle as your signal for potential entry.
You should always trade in the daily trend direction and this indicator will give you the footprint of the daily trend as they are the breakaway candle.
TITAN SCALPER PRO BETA ## 📊 TITAN SCALPER PRO - PRECISION ENTRY/EXIT SYSTEM
### 🎯 OVERVIEW
The **Titan Scalper Pro** is a professional-grade trading system that identifies high-probability reversal points using advanced momentum analysis and multi-timeframe confluence. This indicator provides crystal-clear entry and exit signals with automatic profit targets, intelligent stop management, and dynamic trailing features.
### ⏰ TIMEFRAME REQUIREMENT
**OPTIMIZED FOR 15-MINUTE (M15) CHARTS** - Precision-calibrated for maximum accuracy!
### 💱 COMPATIBLE MARKETS
✅ **Universal Compatibility - Works on ALL Trading Instruments:**
- Major Forex Pairs: EUR/USD, GBP/USD, USD/JPY, etc.
- Minor Pairs: EUR/GBP, GBP/JPY, AUD/NZD, etc.
- Exotic Pairs: USD/ZAR, EUR/TRY, USD/MXN, etc.
- Stock Indices: US30, NAS100, S&P500, DAX, FTSE
- Precious Metals: XAUUSD (Gold), XAGUSD (Silver)
- Commodities: WTI Oil, Brent, Natural Gas
### 📈 TITAN INDICATOR COMPONENTS
#### **🟠 ORANGE LINE - TITAN TREND (EMA 50)**
- **Above price** = Bullish Dominance (Hunt for BUYS)
- **Below price** = Bearish Control (Hunt for SELLS)
- Your PRIMARY directional compass
#### **🟡 YELLOW LINE - MOMENTUM WAVE (EMA 20)**
- Fast momentum tracker
- Confirms trend acceleration
- Adds precision to entry timing
#### **🟢 GREEN ZONE SHADING**
- BULLISH TERRITORY activated
- Titan Trend confirms upward bias
- Prime hunting ground for long positions
#### **🔴 RED ZONE SHADING**
- BEARISH TERRITORY activated
- Titan Trend confirms downward pressure
- Optimal environment for short positions
### 📍 TITAN ENTRY SIGNALS
#### **🟢 "BUY" SIGNAL - BULLISH TITAN SETUP**
**Triggered when ALL conditions align:**
1. Price respects Titan Trend (above orange line)
2. Momentum surge detected (positive)
3. Oversold bounce pattern confirmed
4. Risk filters passed
**Action:** Execute LONG position at labeled price
#### **🔴 "SELL" SIGNAL - BEARISH TITAN SETUP**
**Triggered when ALL conditions align:**
1. Price respects Titan Trend (below orange line)
2. Momentum decline detected (negative)
3. Overbought reversal pattern confirmed
4. Risk filters passed
**Action:** Execute SHORT position at labeled price
### 🎯 TITAN EXIT MANAGEMENT
#### **✅ "TP HIT" - PROFIT TARGET ACHIEVED**
- Titan Target reached (default +30 points)
- Successful trade completion
- Auto-notification when hit
#### **❌ "SL HIT" - PROTECTIVE STOP TRIGGERED**
- Risk limit reached (default -20 points)
- Position protected from larger loss
- Disciplined exit execution
#### **🟠 "TRAIL HIT" - DYNAMIC EXIT**
- Titan Trailing Stop activated
- Profitable exit securing gains
- Shows captured profit amount
#### **🔵 "BE" - RISK ELIMINATED**
- Position moved to breakeven
- Triggers at +10 points profit
- Trade becomes risk-free
### 📊 TITAN POSITION LINES
#### **🔵 BLUE DOTTED - ENTRY MARKER**
- Your execution price
- Base reference for P&L
#### **🟢 GREEN SOLID - PROFIT OBJECTIVE**
- Titan Target level
- Default: Entry ±30 points
#### **🔴 RED SOLID - RISK BOUNDARY**
- Maximum acceptable loss
- Default: Entry ±20 points
#### **🟠 ORANGE DASHED - TRAILING GUARD**
- Dynamic profit protection
- Activates after +15 points
- Follows price by 10 points
### 📋 TITAN COMMAND CENTER (Top Right Display)
Real-time position monitoring:
- **STATUS**: LONG/SHORT/WAITING
- **Entry**: Execution price
- **Target**: Profit objective
- **Stop**: Current risk level
- **Trail**: Dynamic stop position
- **P&L**: Live profit/loss tracking
### 📖 TITAN TRADING PROTOCOL
#### **1. INITIALIZATION**
- Deploy on desired trading pair
- Set chart to 15-MINUTE timeframe
- Verify all Titan components visible
#### **2. SIGNAL MONITORING**
- Watch for Titan BUY/SELL alerts
- Confirm "WAITING" status before entry
- Validate trend alignment
#### **3. POSITION EXECUTION**
- Enter immediately on signal
- Note exact entry price
- Set orders per Titan levels
#### **4. TRADE MANAGEMENT**
- Monitor for BE activation (+10 pts)
- Trailing protection begins (+15 pts)
- Exit on any Titan exit signal
#### **5. RISK PROTOCOL**
- Maximum 2% risk per position
- Built-in 1.5:1 reward structure
- Pause after 3 consecutive stops
### ⚙️ TITAN CUSTOMIZATION
#### **Operating Modes:**
- **Conservative**: Highest precision, fewer signals
- **Balanced**: Optimal risk/reward balance
- **Aggressive**: Maximum opportunities
#### **Adjustable Parameters:**
- Profit/Stop distances for volatility
- Breakeven and trailing thresholds
- Visual preferences and alerts
### 💡 TITAN MASTERY TIPS
1. **Prime Hours**: London Open & NY Session overlap
2. **Avoid**: High-impact news releases
3. **Top Performers**: EUR/USD, GBP/USD, GOLD
4. **Daily Goal**: 3-5 quality setups
5. **Scaling**: Increase size after 5 winners
### ⚠️ ESSENTIAL NOTES
- 15-minute timeframe is MANDATORY
- Compatible with all liquid markets
- Demo test for minimum 50 trades
- Not financial advice - trade responsibly
- Risk management is paramount
### 🏆 TITAN PERFORMANCE METRICS
- **Strike Rate**: 70-80% (Balanced mode)
- **Average Winner**: 30 points
- **Average Loser**: 20 points
- **Reward/Risk**: 1.5:1 ratio
- **Monthly Potential**: 300-500 points
### 📞 TITAN SUPPORT
Questions or optimization ideas? Drop a comment on the TradingView page.
---
*The Titan Scalper Pro is an educational tool. Always validate with demo trading and implement professional risk management.*
Josh Sniper Laos📌 Josh Sniper Laos – Who It’s For & Why You Need It
If you’re…
Tired of indicators that throw false signals and leave you entering late or exiting too soon
Looking for trend direction, entry/exit points, and risk level all in one clean chart
Wanting a system that filters out noise and focuses only on high-probability opportunities
Trading Swing, Day Trade, or even Scalping and need adaptable tools
Josh Sniper Laos was built for you.
This isn’t just another “signal spam” tool — it’s a precision sniper system.
You’ll see the main trend, price zones, entry and exit levels, and risk levels at a glance, without flipping between multiple indicators or second-guessing your trades.
What Makes It Different
Combines trend analysis, entry timing, exit signals, and risk assessment in one tool
Filters out low-quality setups with volatility and price structure detection
Fully customizable to fit your trading style and risk tolerance
If you want a decision-making edge that shows you the big picture and the exact moments to act with confidence,
this is the one indicator you’ll want to keep on your chart — trade after trade.
Josh Sniper Hybrid📌 Josh Sniper Laos – Who It’s For & Why You Need It
If you’re…
Tired of indicators that throw false signals and leave you entering late or exiting too soon
Looking for trend direction, entry/exit points, and risk level all in one clean chart
Wanting a system that filters out noise and focuses only on high-probability opportunities
Trading Swing, Day Trade, or even Scalping and need adaptable tools
Josh Sniper Laos was built for you.
This isn’t just another “signal spam” tool — it’s a precision sniper system.
You’ll see the main trend, price zones, entry and exit levels, and risk levels at a glance, without flipping between multiple indicators or second-guessing your trades.
What Makes It Different
Combines trend analysis, entry timing, exit signals, and risk assessment in one tool
Filters out low-quality setups with volatility and price structure detection
Fully customizable to fit your trading style and risk tolerance
If you want a decision-making edge that shows you the big picture and the exact moments to act with confidence,
this is the one indicator you’ll want to keep on your chart — trade after trade.
PBR Strategy Assistant Gold.D FingerGold.D Finger Strategy. This indicator gives an overview of my first strategies with several confluences. I just wanted to test what it would look like in this format, but it does not exactly match the one I actually use.
Josh Sniper Laos📌 Josh Sniper Laos – เหมาะกับใคร และทำไมต้องใช้ตัวนี้
ถ้าคุณ…
เบื่อกับอินดี้ที่สัญญาณหลอกเยอะ เข้าก็ผิด ออกก็ช้า
อยากเห็นภาพแนวโน้ม, จุดเข้าออก และความเสี่ยง ในหน้าจอเดียว
อยากมีระบบที่คัดกรองสัญญาณให้เหลือเฉพาะจังหวะที่ “คุ้มเสี่ยง” เท่านั้น
ต้องการอินดี้ที่สามารถใช้ได้ทั้ง Swing, Day Trade หรือแม้แต่ Scalping
Josh Sniper Laos ถูกออกแบบมาเพื่อคุณ
นี่ไม่ใช่อินดี้ที่เน้น “ยิงทุกลูก” แต่มันเน้น “เลือกยิงเฉพาะเป้าหมายใหญ่”
คุณจะเห็นแนวโน้มหลัก โซนราคา จุดเข้า จุดออก และระดับความเสี่ยง ชัดเจนตั้งแต่แรกที่มองกราฟ
ไม่ต้องสลับอินดี้หลายตัว ไม่ต้องเดาสุ่ม ว่าเมื่อไหร่ควรเข้า-ออก
จุดเด่นที่ทำให้แตกต่าง
รวมการดูแนวโน้ม, จังหวะเข้า, จังหวะออก, และการประเมินความเสี่ยงในเครื่องมือเดียว
กรองสัญญาณหลอกด้วยระบบตรวจจับความผันผวนและโครงสร้างราคา
ออกแบบให้ใช้งานง่าย ปรับค่าได้ตามสไตล์ของคุณ
ถ้าคุณต้องการ “เครื่องมือช่วยตัดสินใจ” ที่ให้ทั้งมุมมองภาพรวมและจังหวะเข้าออกอย่างมั่นใจ
นี่คือตัวเดียวที่คุณต้องมีบนกราฟของคุณ
📌 Josh Sniper Laos – Who It’s For & Why You Need It
If you’re…
Tired of indicators that throw false signals and leave you entering late or exiting too soon
Looking for trend direction, entry/exit points, and risk level all in one clean chart
Wanting a system that filters out noise and focuses only on high-probability opportunities
Trading Swing, Day Trade, or even Scalping and need adaptable tools
Josh Sniper Laos was built for you.
This isn’t just another “signal spam” tool — it’s a precision sniper system.
You’ll see the main trend, price zones, entry and exit levels, and risk levels at a glance, without flipping between multiple indicators or second-guessing your trades.
What Makes It Different
Combines trend analysis, entry timing, exit signals, and risk assessment in one tool
Filters out low-quality setups with volatility and price structure detection
Fully customizable to fit your trading style and risk tolerance
If you want a decision-making edge that shows you the big picture and the exact moments to act with confidence,
this is the one indicator you’ll want to keep on your chart — trade after trade.
Momentum Candle DetectorThe momentum candle indicator highlights a candle with a body having a defined % of the range, and a close within a defined % of the high/low.
Key Box Zone Finder — ATR + EMA200 Filter//@version=5
indicator("Key Box Zone Finder — ATR + EMA200 Filter", overlay=true, max_lines_count=500, max_boxes_count=100, max_labels_count=500)
// ---------- Inputs ----------
len = input.int(60, "Box Length (bars)", minval=10)
maxWidthPct = input.float(0.6, "Max Box Width %", step=0.05)
edgeTolPct = input.float(0.08, "Edge tolerance %", step=0.01)
bins = input.int(8, "Bins inside box", minval=3, maxval=20)
extendBars = input.int(120, "Extend right (bars)", minval=0)
showTouches = input.bool(true, "Show edge touches")
showSubZone = input.bool(true, "Show densest sub-zone")
boxColor = input.color(color.new(color.teal, 85), "Box fill")
subBoxColor = input.color(color.new(color.orange, 75), "Sub-zone fill")
edgeLineColor = input.color(color.new(color.teal, 0), "Edge line color")
midLineColor = input.color(color.new(color.gray, 0), "Mid line color")
// فیلترها
atrLen = input.int(14, "ATR Length", minval=1)
atrMaxMult = input.float(0.5, "ATR Max % of Close", step=0.01)
emaLen = input.int(200, "EMA Length", minval=1)
emaDistancePct = input.float(0.5, "Max Distance % from EMA", step=0.1)
// ---------- Core calc ----------
hi = ta.highest(high, len)
lo = ta.lowest(low, len)
boxRange = hi - lo
boxRangePct = boxRange / math.max(close, 1e-6) * 100.0
isBoxWidth = boxRangePct <= maxWidthPct
// شمارش برخوردها
edgeTolHi = hi * (1 - edgeTolPct/100.0)
edgeTolLo = lo * (1 + edgeTolPct/100.0)
touchUpper = 0
touchLower = 0
for j = 0 to len - 1
touchUpper += (high >= edgeTolHi) ? 1 : 0
touchLower += (low <= edgeTolLo) ? 1 : 0
// ---------- ATR filter ----------
atrValue = ta.atr(atrLen)
atrCondition = (atrValue / close) * 100 <= atrMaxMult
// ---------- EMA200 filter ----------
emaValue = ta.ema(close, emaLen)
emaCondition = math.abs(close - emaValue) / close * 100 <= emaDistancePct
// ---------- Final filter ----------
isValidBox = isBoxWidth and atrCondition and emaCondition
// ---------- Draw main box ----------
var box bMain = na
var line lTop = na
var line lBot = na
var line lMid = na
var label labU = na
var label labL = na
if barstate.islast and isValidBox
if not na(bMain)
box.delete(bMain)
if not na(lTop)
line.delete(lTop)
if not na(lBot)
line.delete(lBot)
if not na(lMid)
line.delete(lMid)
if not na(labU)
label.delete(labU)
if not na(labL)
label.delete(labL)
left = bar_index - len + 1
right = bar_index + extendBars
bMain := box.new(left, hi, bar_index, lo, bgcolor=boxColor, border_color=edgeLineColor)
box.set_extend(bMain, extend.right)
lTop := line.new(left, hi, right, hi, extend=extend.right, color=edgeLineColor, width=1)
lBot := line.new(left, lo, right, lo, extend=extend.right, color=edgeLineColor, width=1)
mid = (hi + lo) / 2.0
lMid := line.new(left, mid, right, mid, extend=extend.right, color=midLineColor, style=line.style_dotted)
if showTouches
labU := label.new(bar_index, hi, "▲ touches: " + str.tostring(touchUpper), textcolor=color.white, color=color.new(color.teal, 0), style=label.style_label_down, size=size.tiny)
labL := label.new(bar_index, lo, "▼ touches: " + str.tostring(touchLower), textcolor=color.white, color=color.new(color.teal, 0), style=label.style_label_up, size=size.tiny)
// ---------- Densest sub-zone ----------
var box bSub = na
if barstate.islast and isValidBox and showSubZone and boxRange > 0
step = boxRange / bins
maxCount = -1
bestIdx = 0
for i = 0 to bins - 1
binLo = lo + step * i
binHi = binLo + step
cIn = 0
for j = 0 to len - 1
c = close
cIn += (c >= binLo and c <= binHi) ? 1 : 0
if cIn > maxCount
maxCount := cIn
bestIdx := i
subLo = lo + step * bestIdx
subHi = subLo + step
if not na(bSub)
box.delete(bSub)
bSub := box.new(bar_index - len + 1, subHi, bar_index, subLo, bgcolor=subBoxColor, border_color=color.new(color.orange, 0))
box.set_extend(bSub, extend.right)
label.new(bar_index, subHi, "Dense zone", style=label.style_label_down, textcolor=color.white, color=color.new(color.orange, 0), size=size.tiny)
// ---------- Alerts ----------
alertcondition(isValidBox, title="Valid Box Detected", message="Consolidation box detected with ATR & EMA filter")
Volume Profile (Simple)Simple Volume Profile (Simple)
Master the Market's Structure with a Clear View of Volume
by mercaderoaurum
The Simple Volume Profile (Simple) indicator removes the guesswork by showing you exactly where the most significant trading activity has occurred. By visualizing the Point of Control (POC) and Value Area (VA) for today and yesterday, you can instantly identify the price levels that matter most, giving you a critical edge in your intraday trading.
This tool is specifically optimized for day trading SPY on a 1-minute chart, but it's fully customizable for any symbol or timeframe.
Key Features
Multi-Day Analysis: Automatically plots the volume profiles for the current and previous trading sessions, allowing you to see how today's market is reacting to yesterday's key levels.
Automatic Key Level Plotting: Instantly see the most important levels from each session:
Point of Control (POC): The single price level with the highest traded volume, acting as a powerful magnet for price.
Value Area High (VAH): The upper boundary of the area where 50% of the volume was traded. It often acts as resistance.
Value Area Low (VAL): The lower boundary of the 50% value area, often acting as support.
Extended Levels: The POC, VAH, and VAL from previous sessions are automatically extended into the current day, providing a clear map of potential support and resistance zones.
Customizable Sessions: While optimized for the US stock market, you can define any session time and time zone, making it a versatile tool for forex, crypto, and futures traders.
Core Trading Strategies
The Simple Volume Profile helps you understand market context. Instead of trading blind, you can now make decisions based on where the market has shown the most interest.
1. Identifying Support and Resistance
This is the most direct way to use the indicator. The extended lines from the previous day are your roadmap for the current session.
Previous Day's POC (pPOC): This is the most significant level. Watch for price to react strongly here. It can act as powerful support if approached from above or strong resistance if approached from below.
Previous Day's VAH (pVAH): Expect this level to act as initial resistance. A clean break above pVAH can signal a strong bullish trend.
Previous Day's VAL (pVAL): Expect this level to act as initial support. A firm break below pVAL can indicate a strong bearish trend.
Example Strategy: If SPY opens and rallies up to the previous day's VAH and stalls, this is a high-probability area to look for a short entry, with a stop loss just above the level.
2. The "Open-Drive" Rejection
How the market opens in relation to the previous day's value area is a powerful tell.
Open Above Yesterday's Value Area: If the market opens above the pVAH, it signals strength. The first pullback to test the pVAH is often a key long entry point. The level is expected to flip from resistance to support.
Open Below Yesterday's Value Area: If the market opens below the pVAL, it signals weakness. The first rally to test the pVAL is a potential short entry, as the level is likely to act as new resistance.
3. Fading the Extremes
When price pushes far outside the previous day's value area, it can become overextended.
Reversal at Highs: If price rallies significantly above the pVAH and then starts to lose momentum (e.g., forming bearish divergence on RSI or a topping pattern), it could be an opportunity to short the market, targeting a move back toward the pVAH or pPOC.
Reversal at Lows: Conversely, if price drops far below the pVAL and shows signs of bottoming, it can be a good opportunity to look for a long entry, targeting a reversion back to the value area.
Recommended Settings (SPY Intraday)
These settings are the default and are optimized for scalping or day trading SPY on a 1-minute chart.
Value Area (%): 50%. This creates a tighter, more sensitive value area, perfect for identifying the most critical intraday zones.
Number of Rows: 1000. This high resolution is essential for a low-volatility instrument like SPY, ensuring that the profile is detailed and the levels are precise.
Session Time: 0400-1800 in America/New_York. This captures the full pre-market and core session, which is crucial for understanding the day's complete volume story.
Ready to trade with an edge? Add the Simple Volume Profile (Multi-Day) to your chart now and see the market in a new light!
BuySell-byALHELWANI🔱 BuySell-byALHELWANI | مؤشر التغيرات الاتجاهية الذكية
BuySell-byALHELWANI هو مؤشر احترافي متقدّم يرصد نقاط الانعكاس الحقيقية في حركة السوق، باستخدام خوارزمية تعتمد على تحليل القمم والقيعان الهيكلية للسعر (Structure-Based Detection) وليس على مؤشرات تقليدية.
المؤشر مبني على مكتبة signalLib_yashgode9 القوية، مع تخصيص كامل لأسلوب العرض والتنبيهات.
⚙️ ما يقدمه المؤشر:
🔹 إشارات واضحة للشراء والبيع تعتمد على كسر هيكل السوق.
🔹 تخصيص مرن للعمق والانحراف وخطوات التراجع (Backstep) لتحديد الدقة المطلوبة.
🔹 علامات ذكية (Labels) تظهر مباشرة على الشارت عند كل نقطة قرار.
🔹 تنبيهات تلقائية فورية عند كل تغير في الاتجاه (Buy / Sell).
🧠 الآلية المستخدمة:
DEPTH_ENGINE: يتحكم في مدى عمق النظر لحركة السعر.
DEVIATION_ENGINE: يحدد المسافة المطلوبة لتأكيد نقطة الانعكاس.
BACKSTEP_ENGINE: يضمن أن كل إشارة تستند إلى تغير هيكلي حقيقي في الاتجاه.
📌 المميزات:
✅ لا يعيد الرسم (No Repaint)
✅ يعمل على كل الأطر الزمنية وكل الأسواق (فوركس، مؤشرات، كريبتو، أسهم)
✅ تصميم بصري مرن (ألوان، حجم، شفافية)
✅ يدعم الاستخدام في السكالبينغ والسوينغ
ملاحظة:
المؤشر لا يعطي إشارات عشوائية، بل يستند إلى منطق السعر الحقيقي عبر تتبع التغيرات الحركية للسوق.
يُفضّل استخدامه مع خطة تداول واضحة وإدارة رأس مال صارمة.
🔱 BuySell-byALHELWANI | Smart Reversal Detection Indicator
BuySell-byALHELWANI is a high-precision, structure-based reversal indicator designed to identify true directional shifts in the market. Unlike traditional indicators, it doesn't rely on lagging oscillators but uses real-time swing analysis to detect institutional-level pivot points.
Powered by the robust signalLib_yashgode9, this tool is optimized for traders who seek clarity, timing, and strategic control.
⚙️ Core Engine Features:
🔹 Accurate Buy/Sell signals generated from structural highs and lows.
🔹 Adjustable sensitivity using:
DEPTH_ENGINE: Defines how deep the algorithm looks into past swings.
DEVIATION_ENGINE: Sets the deviation required to confirm a structural change.
BACKSTEP_ENGINE: Controls how many bars are validated before confirming a pivot.
🧠 What It Does:
🚩 Detects market structure shifts and confirms them visually.
🏷️ Plots clear Buy-point / Sell-point labels directly on the chart.
🔔 Sends real-time alerts when a directional change is confirmed.
🎯 No repainting – what you see is reliable and final.
✅ Key Benefits:
Works on all timeframes and all asset classes (FX, crypto, indices, stocks).
Fully customizable: colors, label size, transparency.
Ideal for scalping, swing trading, and strategy automation.
High visual clarity with minimal noise.
🔐 Note:
This script is designed for serious traders.
It highlights real market intent, especially when used with trendlines, zones, and volume analysis.
Pair it with disciplined risk management for best results.
Volume ChartThis Pine Script indicator, written in TradingView’s version 6, visualizes trading volume as a custom candlestick chart instead of a standard histogram. Rather than plotting volume bars, it constructs synthetic candles where each candle’s "open" is set to the previous candle’s "close" (stored in prevClose). The "close" of the synthetic candle moves upward by the volume value if the actual price candle was bullish (close > open) and downward by the volume value if it was bearish, with the "high" and "low" both fixed to the open to create a flat candle body line. This transforms volume into a price-like cumulative visual flow, color-coded green for bullish and red for bearish periods, allowing traders to intuitively track whether volume pressure is accumulating upward or downward over time, as though volume itself were moving like a market price series.
Buy/Sell Signal - RSI + EMA + MACD + VWAPdisplays buy/sell along with ema, vwap combined.. so it can be used as one indicator instead of 2 indicators on trading view..
Mouse Indicator Private V2.0The "Mouse Indicator Private" is a powerful Pine Script tool designed for XAU/USD (Gold) trading on the 1-minute (M1) timeframe. It incorporates a sophisticated set of conditions to identify potential trading opportunities, focusing on specific candlestick patterns and volume dynamics, combined with advanced capital management features.
Detector Mecha Profunda M20This indicator identifies a high-probability "Deep Wick Pattern" based on candlestick structure and volume analysis, filtered by the 20-period simple moving average (SMA). A buy signal is generated when the candle has a long lower wick, closes above the previous low, shows bullish structure, and is confirmed by increasing volume — all while the price is trading above the 20 SMA. A sell signal appears under the opposite conditions: a long upper wick, bearish candle closing below the previous high, with increased volume, and price trading below the 20 SMA. This tool helps traders spot potential reversals or continuations with added confirmation from trend direction and volume.
Detector Mecha Profunda M20This indicator identifies a high-probability "Deep Wick Pattern" based on candlestick structure and volume analysis, filtered by the 20-period simple moving average (SMA). A buy signal is generated when the candle has a long lower wick, closes above the previous low, shows bullish structure, and is confirmed by increasing volume — all while the price is trading above the 20 SMA. A sell signal appears under the opposite conditions: a long upper wick, bearish candle closing below the previous high, with increased volume, and price trading below the 20 SMA. This tool helps traders spot potential reversals or continuations with added confirmation from trend direction and volume.
ICT SMC By VIPIN | Volume OB + BOS, CHoCH, FVG, Sweep VTTitle:
Smart Money Concepts Pro – OB, FVG, BOS, CHoCH & Liquidity Sweep
Description:
This indicator is built on Smart Money Concepts (SMC) and is designed to help traders analyze market structure in depth. It identifies institutional trading levels, potential reversal points, and high-probability trade setups using advanced price action techniques.
Key Features:
1. Order Blocks (OB) – Detects and marks bullish and bearish order blocks to identify possible reversal and continuation zones.
2. Fair Value Gaps (FVG) – Highlights price imbalances that often attract price retracements.
3. Break of Structure (BOS) – Marks structural breaks that confirm trend continuation.
4. Change of Character (CHoCH) – Signals early signs of trend reversal.
5. Liquidity Sweep – Highlights buy-side and sell-side liquidity grabs to identify stop hunts and false breakouts.
6. Custom Styling & Filters – Users can customize colors, sizes, and filter settings for better clarity.
How It Works:
• The indicator automatically detects market structure (HH, HL, LH, LL) and identifies BOS and CHoCH based on price movement.
• Order Blocks are filtered using past price action and volume confluence to show only significant zones.
• Fair Value Gaps and Liquidity Sweeps are detected with a smart logic system for improved accuracy.
How to Use:
• Use higher timeframes (H1, H4, Daily) to determine the main trend and lower timeframes (M15, M5) for entries.
• Combine Order Blocks and FVGs for strong confluence.
• Wait for BOS/CHoCH confirmations along with liquidity sweep signals before entering trades.
Disclaimer:
This tool is for chart analysis assistance only. Always conduct your own research and apply proper risk management before trading.
Mutanabby_AI | Algo Pro Strategy# Mutanabby_AI | Algo Pro Strategy: Advanced Candlestick Pattern Trading System
## Strategy Overview
The Mutanabby_AI Algo Pro Strategy represents a systematic approach to automated trading based on advanced candlestick pattern recognition and multi-layered technical filtering. This strategy transforms traditional engulfing pattern analysis into a comprehensive trading system with sophisticated risk management and flexible position sizing capabilities.
The strategy operates on a long-only basis, entering positions when bullish engulfing patterns meet specific technical criteria and exiting when bearish engulfing patterns indicate potential trend reversals. The system incorporates multiple confirmation layers to enhance signal reliability while providing comprehensive customization options for different trading approaches and risk management preferences.
## Core Algorithm Architecture
The strategy foundation relies on bullish and bearish engulfing candlestick pattern recognition enhanced through technical analysis filtering mechanisms. Entry signals require simultaneous satisfaction of four distinct criteria: confirmed bullish engulfing pattern formation, candle stability analysis indicating decisive price action, RSI momentum confirmation below specified thresholds, and price decline verification over adjustable lookback periods.
The candle stability index measures the ratio between candlestick body size and total range including wicks, ensuring only well-formed patterns with clear directional conviction generate trading signals. This filtering mechanism eliminates indecisive market conditions where pattern reliability diminishes significantly.
RSI integration provides momentum confirmation by requiring oversold conditions before entry signal generation, ensuring alignment between pattern formation and underlying momentum characteristics. The RSI threshold remains fully adjustable to accommodate different market conditions and volatility environments.
Price decline verification examines whether current prices have decreased over a specified period, confirming that bullish engulfing patterns occur after meaningful downward movement rather than during sideways consolidation phases. This requirement enhances the probability of successful reversal pattern completion.
## Advanced Position Management System
The strategy incorporates dual position sizing methodologies to accommodate different account sizes and risk management approaches. Percentage-based position sizing calculates trade quantities as equity percentages, enabling consistent risk exposure across varying account balances and market conditions. This approach proves particularly valuable for systematic trading approaches and portfolio management applications.
Fixed quantity sizing provides precise control over trade sizes independent of account equity fluctuations, offering predictable position management for specific trading strategies or when implementing precise risk allocation models. The system enables seamless switching between sizing methods through simple configuration adjustments.
Position quantity calculations integrate seamlessly with TradingView's strategy testing framework, ensuring accurate backtesting results and realistic performance evaluation across different market conditions and time periods. The implementation maintains consistency between historical testing and live trading applications.
## Comprehensive Risk Management Framework
The strategy features dual stop loss methodologies addressing different risk management philosophies and market analysis approaches. Entry price-based stop losses calculate stop levels as fixed percentages below entry prices, providing predictable risk exposure and consistent risk-reward ratio maintenance across all trades.
The percentage-based stop loss system enables precise risk control by limiting maximum loss per trade to predetermined levels regardless of market volatility or entry timing. This approach proves essential for systematic trading strategies requiring consistent risk parameters and capital preservation during adverse market conditions.
Lowest low-based stop losses identify recent price support levels by analyzing minimum prices over adjustable lookback periods, placing stops below these technical levels with additional buffer percentages. This methodology aligns stop placement with market structure rather than arbitrary percentage calculations, potentially improving stop loss effectiveness during normal market fluctuations.
The lookback period adjustment enables optimization for different timeframes and market characteristics, with shorter periods providing tighter stops for active trading and longer periods offering broader stops suitable for position trading approaches. Buffer percentage additions ensure stops remain below obvious support levels where other market participants might place similar orders.
## Visual Customization and Interface Design
The strategy provides comprehensive visual customization through eight predefined color schemes designed for different chart backgrounds and personal preferences. Color scheme options include Classic bright green and red combinations, Ocean themes featuring blue and orange contrasts, Sunset combinations using gold and crimson, and Neon schemes providing high visibility through bright color selections.
Professional color schemes such as Forest, Royal, and Fire themes offer sophisticated alternatives suitable for business presentations and professional trading environments. The Custom color scheme enables precise color selection through individual color picker controls, maintaining maximum flexibility for specific visual requirements.
Label styling options accommodate different chart analysis preferences through text bubble, triangle, and arrow display formats. Size adjustments range from tiny through huge settings, ensuring appropriate visual scaling across different screen resolutions and chart configurations. Text color customization maintains readability across various chart themes and background selections.
## Signal Quality Enhancement Features
The strategy incorporates signal filtering mechanisms designed to eliminate repetitive signal generation during choppy market conditions. The disable repeating signals option prevents consecutive identical signals until opposing conditions occur, reducing overtrading during consolidation phases and improving overall signal quality.
Signal confirmation requirements ensure all technical criteria align before trade execution, reducing false signal occurrence while maintaining reasonable trading frequency for active strategies. The multi-layered approach balances signal quality against opportunity frequency through adjustable parameter optimization.
Entry and exit visualization provides clear trade identification through customizable labels positioned at relevant price levels. Stop loss visualization displays active risk levels through colored line plots, ensuring complete transparency regarding current risk management parameters during live trading operations.
## Implementation Guidelines and Optimization
The strategy performs effectively across multiple timeframes with optimal results typically occurring on intermediate timeframes ranging from fifteen minutes through four hours. Higher timeframes provide more reliable pattern formation and reduced false signal occurrence, while lower timeframes increase trading frequency at the expense of some signal reliability.
Parameter optimization should focus on RSI threshold adjustments based on market volatility characteristics and candlestick pattern timeframe analysis. Higher RSI thresholds generate fewer but potentially higher quality signals, while lower thresholds increase signal frequency with corresponding reliability considerations.
Stop loss method selection depends on trading style preferences and market analysis philosophy. Entry price-based stops suit systematic approaches requiring consistent risk parameters, while lowest low-based stops align with technical analysis methodologies emphasizing market structure recognition.
## Performance Considerations and Risk Disclosure
The strategy operates exclusively on long positions, making it unsuitable for bear market conditions or extended downtrend periods. Users should consider market environment analysis and broader trend assessment before implementing the strategy during adverse market conditions.
Candlestick pattern reliability varies significantly across different market conditions, with higher reliability typically occurring during trending markets compared to ranging or volatile conditions. Strategy performance may deteriorate during periods of reduced pattern effectiveness or increased market noise.
Risk management through stop loss implementation remains essential for capital preservation during adverse market movements. The strategy does not guarantee profitable outcomes and requires proper position sizing and risk management to prevent significant capital loss during unfavorable trading periods.
## Technical Specifications
The strategy utilizes standard TradingView Pine Script functions ensuring compatibility across all supported instruments and timeframes. Default configuration employs 14-period RSI calculations, adjustable candle stability thresholds, and customizable price decline verification periods optimized for general market conditions.
Initial capital settings default to $10,000 with percentage-based equity allocation, though users can adjust these parameters based on account size and risk tolerance requirements. The strategy maintains detailed trade logs and performance metrics through TradingView's integrated backtesting framework.
Alert integration enables real-time notification of entry and exit signals, stop loss executions, and other significant trading events. The comprehensive alert system supports automated trading applications and manual trade management approaches through detailed signal information provision.
## Conclusion
The Mutanabby_AI Algo Pro Strategy provides a systematic framework for candlestick pattern trading with comprehensive risk management and position sizing flexibility. The strategy's strength lies in its multi-layered confirmation approach and sophisticated customization options, enabling adaptation to various trading styles and market conditions.
Successful implementation requires understanding of candlestick pattern analysis principles and appropriate parameter optimization for specific market characteristics. The strategy serves traders seeking automated execution of proven technical analysis techniques while maintaining comprehensive control over risk management and position sizing methodologies.
Equilibrium TrackerWhat does this indicator do?
This is a screener that checks if the current HTF High moves above the previous HTF High.
This also applies for the low moving below the previous low.
If the 50% of the previous candle is touched, this wil also show in the table and send alerts.
Features
Select up to 2 timeframes and 10 instruments.
A screener table will show all instruments and will light up if an event occurs
Alerts can also get fired
Usage:
Select a chart for example 1 minute
Configure the indicator
Create a new alert on the indicator using the lower timeframe chart