Indicator - Multiple Moving Averages 1.0Features:
- Each moving average has customizable length, type and source
- The ability to change the source of all moving averages with one input (changing an individual MA source will override the general for that MA)
- At a glance comparison of 20 SMA and 20 VWMA to gauge volume trend
Defaults: Four SMAs (20, 50, 100, 200) and a 20 VWMA.
Usage:
- Use Fibonacci levels, pivots .etc for confluence
- Personally, I like to set overall source to low in uptrends, to high in downtrends and then set alerts for when the price crosses any of the averages. Then pay particular attention to the candlesticks and other indicators.
TODO:
- Add alerts option so that it send alert on crossing up or down any alert lines.
Поиск скриптов по запросу "黄金近20年走势"
XPloRR MA-Trailing-Stop StrategyXPloRR MA-Trailing-Stop Strategy
Long term MA-Trailing-Stop strategy with Adjustable Signal Strength to beat Buy&Hold strategy
None of the strategies that I tested can beat the long term Buy&Hold strategy. That's the reason why I wrote this strategy.
Purpose: beat Buy&Hold strategy with around 10 trades. 100% capitalize sold trade into new trade.
My buy strategy is triggered by the fast buy EMA (blue) crossing over the slow buy SMA curve (orange) and the fast buy EMA has a certain up strength.
My sell strategy is triggered by either one of these conditions:
the EMA(6) of the close value is crossing under the trailing stop value (green) or
the fast sell EMA (navy) is crossing under the slow sell SMA curve (red) and the fast sell EMA has a certain down strength.
The trailing stop value (green) is set to a multiple of the ATR(15) value.
ATR(15) is the SMA(15) value of the difference between the high and low values.
The scripts shows a lot of graphical information:
The close value is shown in light-green. When the close value is lower then the buy value, the close value is shown in light-red. This way it is possible to evaluate the virtual losses during the trade.
the trailing stop value is shown in dark-green. When the sell value is lower then the buy value, the last color of the trade will be red (best viewed when zoomed)(in the example, there are 2 trades that end in gain and 2 in loss (red line at end))
the EMA and SMA values for both buy and sell signals are shown as a line
the buy and sell(close) signals are labeled in blue
How to use this strategy?
Every stock has it's own "DNA", so first thing to do is tune the right parameters to get the best strategy values voor EMA , SMA, Strength for both buy and sell and the Trailing Stop (#ATR).
Look in the strategy tester overview to optimize the values Percent Profitable and Net Profit (using the strategy settings icon, you can increase/decrease the parameters)
Then keep using these parameters for future buy/sell signals only for that particular stock.
Do the same for other stocks.
Important : optimizing these parameters is no guarantee for future winning trades!
Here are the parameters:
Fast EMA Buy: buy trigger when Fast EMA Buy crosses over the Slow SMA Buy value (use values between 10-20)
Slow SMA Buy: buy trigger when Fast EMA Buy crosses over the Slow SMA Buy value (use values between 30-100)
Minimum Buy Strength: minimum upward trend value of the Fast SMA Buy value (directional coefficient)(use values between 0-120)
Fast EMA Sell: sell trigger when Fast EMA Sell crosses under the Slow SMA Sell value (use values between 10-20)
Slow SMA Sell: sell trigger when Fast EMA Sell crosses under the Slow SMA Sell value (use values between 30-100)
Minimum Sell Strength: minimum downward trend value of the Fast SMA Sell value (directional coefficient)(use values between 0-120)
Trailing Stop (#ATR): the trailing stop value as a multiple of the ATR(15) value (use values between 2-20)
Example parameters for different stocks (Start capital: 1000, Order=100% of equity, Period 1/1/2005 to now) compared to the Buy&Hold Strategy(=do nothing):
BEKB(Bekaert): EMA-Buy=12, SMA-Buy=44, Strength-Buy=65, EMA-Sell=12, SMA-Sell=55, Strength-Sell=120, Stop#ATR=20
NetProfit: 996%, #Trades: 6, %Profitable: 83%, Buy&HoldProfit: 78%
BAR(Barco): EMA-Buy=16, SMA-Buy=80, Strength-Buy=44, EMA-Sell=12, SMA-Sell=45, Strength-Sell=82, Stop#ATR=9
NetProfit: 385%, #Trades: 7, %Profitable: 71%, Buy&HoldProfit: 55%
AAPL(Apple): EMA-Buy=12, SMA-Buy=45, Strength-Buy=40, EMA-Sell=19, SMA-Sell=45, Strength-Sell=106, Stop#ATR=8
NetProfit: 6900%, #Trades: 7, %Profitable: 71%, Buy&HoldProfit: 2938%
TNET(Telenet): EMA-Buy=12, SMA-Buy=45, Strength-Buy=27, EMA-Sell=19, SMA-Sell=45, Strength-Sell=70, Stop#ATR=14
NetProfit: 129%, #Trade
EMA Indicators with BUY sell SignalCombine 3 EMA indicators into 1. Buy and Sell signal is based on
- Buy signal based on 20 Days Highest High resistance
- Sell signal based on 10 Days Lowest Low support
Input :-
1 - Short EMA (20), Mid EMA (50) and Long EMA (200)
2 - Resistance (20) = 20 Days Highest High line
3 - Support (10) = 10 Days Lowest Low line
Responsive ADX (RADX)Introducing the new Responsive ADX (RADX), running with a (length = 9) and exactly how it differs from the standard built-in ADX you see on TradingView chart.
This indicator is still a true ADX at its core — it measures trend strength from 0 to 100 and uses the classic +DI and –DI lines to show direction — but it has been carefully "tuned" to react noticeably faster while staying smooth and usable. With the length set to 9, it is one of the most responsive versions you can run without turning into noise.
How it behaves differently from the normal (Wilder) ADX
Normal ADX is lagging, now this version gives you the same trend-strength reading 4–8 bars earlier than the built-in ADX. On a daily chart that can easily be 4–8 calendar days of earlier warning. On a 4-hour chart it’s 16–32 hours earlier. That head-start is the whole point.
The ADX line rises and falls much quicker.
When a new trend actually starts, you will often see this Fast ADX cross above 18–20 while the built-in ADX is still sleeping below 15. Conversely, when a trend dies, this version drops faster, so you’re not left holding a dead trade for an extra week.
The +DI and –DI lines are almost identical to the original, but lightly smoothed with a 5-period EMA (you can turn this off). This makes the DI crossovers cleaner and reduces whipsaws without adding meaningful lag.
The final ADX smoothing uses a lightweight Hull-style technique instead of Wilder’s very slow RMA. This is the main “secret sauce” that removes roughly half the lag while keeping the line smooth and readable.
Values are realistic and tradable.
With length 9 you will typically see:
– 0–18 = flat / chop
– 15–20 = emerging trend (background starts colouring)
– 20–50 = strong trend (most people take this as confirmation)
– above 50–60 only in very powerful moves (same as normal ADX)
The aqua / purple background only appears when both conditions are met: the correct DI is on top and Fast ADX is above your chosen “weak-to-trending” level (default 18).
This prevents the background from flashing on and off in sideways markets — exactly the same logic you liked in the original Trinity ADX, but now much earlier.
In very simple terms
Think of the normal built-in ADX as a diesel truck — reliable but slow to accelerate and slow to stop. Fast Responsive ADX with length 9 is the same truck with a turbocharger — same destination and same load capacity, but it gets up to speed twice as fast and brakes earlier when the road turns.
We would recommend people who switch to this version keep the (length 9–12) because the edge in timing is obvious on the chart.
That’s it — this is a new more responsive version, still-logical ADX!
SR & POI Indicator//@version=5
indicator(title='SR & POI Indicator', overlay=true, max_boxes_count=500, max_lines_count=500, max_labels_count=500)
//============================================================================
// SUPPLY/DEMAND & POI SETTINGS
//============================================================================
swing_length = input.int(10, title = 'Swing High/Low Length', group = 'Supply/Demand Settings', minval = 1, maxval = 50)
history_of_demand_to_keep = input.int(20, title = 'History To Keep', group = 'Supply/Demand Settings', minval = 5, maxval = 50)
box_width = input.float(2.5, title = 'Supply/Demand Box Width', group = 'Supply/Demand Settings', minval = 1, maxval = 10, step = 0.5)
show_price_action_labels = input.bool(false, title = 'Show Price Action Labels', group = 'Supply/Demand Visual Settings')
supply_color = input.color(color.new(#EDEDED,70), title = 'Supply', group = 'Supply/Demand Visual Settings', inline = '3')
supply_outline_color = input.color(color.new(color.white,75), title = 'Outline', group = 'Supply/Demand Visual Settings', inline = '3')
demand_color = input.color(color.new(#00FFFF,70), title = 'Demand', group = 'Supply/Demand Visual Settings', inline = '4')
demand_outline_color = input.color(color.new(color.white,75), title = 'Outline', group = 'Supply/Demand Visual Settings', inline = '4')
bos_label_color = input.color(color.white, title = 'BOS Label', group = 'Supply/Demand Visual Settings')
poi_label_color = input.color(color.white, title = 'POI Label', group = 'Supply/Demand Visual Settings')
swing_type_color = input.color(color.black, title = 'Price Action Label', group = 'Supply/Demand Visual Settings')
//============================================================================
// SR SETTINGS
//============================================================================
enableSR = input(true, "SR On/Off", group="SR Settings")
colorSup = input(#00DBFF, "Support Color", group="SR Settings")
colorRes = input(#E91E63, "Resistance Color", group="SR Settings")
strengthSR = input.int(2, "S/R Strength", 1, group="SR Settings")
lineStyle = input.string("Dotted", "Line Style", , group="SR Settings")
lineWidth = input.int(2, "S/R Line Width", 1, group="SR Settings")
useZones = input(true, "Zones On/Off", group="SR Settings")
useHLZones = input(true, "High Low Zones On/Off", group="SR Settings")
zoneWidth = input.int(2, "Zone Width %", 0, tooltip="it's calculated using % of the distance between highest/lowest in last 300 bars", group="SR Settings")
expandSR = input(true, "Expand SR", group="SR Settings")
//============================================================================
// SUPPLY/DEMAND FUNCTIONS
//============================================================================
// Function to add new and remove last in array
f_array_add_pop(array, new_value_to_add) =>
array.unshift(array, new_value_to_add)
array.pop(array)
// Function for swing H & L labels
f_sh_sl_labels(array, swing_type) =>
var string label_text = na
if swing_type == 1
if array.get(array, 0) >= array.get(array, 1)
label_text := 'HH'
else
label_text := 'LH'
label.new(bar_index - swing_length, array.get(array,0), text = label_text, style=label.style_label_down, textcolor = swing_type_color, color = color.new(swing_type_color, 100), size = size.tiny)
else if swing_type == -1
if array.get(array, 0) >= array.get(array, 1)
label_text := 'HL'
else
label_text := 'LL'
label.new(bar_index - swing_length, array.get(array,0), text = label_text, style=label.style_label_up, textcolor = swing_type_color, color = color.new(swing_type_color, 100), size = size.tiny)
// Function to check overlapping
f_check_overlapping(new_poi, box_array, atr) =>
atr_threshold = atr * 2
okay_to_draw = true
for i = 0 to array.size(box_array) - 1
top = box.get_top(array.get(box_array, i))
bottom = box.get_bottom(array.get(box_array, i))
poi = (top + bottom) / 2
upper_boundary = poi + atr_threshold
lower_boundary = poi - atr_threshold
if new_poi >= lower_boundary and new_poi <= upper_boundary
okay_to_draw := false
break
else
okay_to_draw := true
okay_to_draw
// Function to draw supply or demand zone
f_supply_demand(value_array, bn_array, box_array, label_array, box_type, atr) =>
atr_buffer = atr * (box_width / 10)
box_left = array.get(bn_array, 0)
box_right = bar_index
var float box_top = 0.00
var float box_bottom = 0.00
var float poi = 0.00
if box_type == 1
box_top := array.get(value_array, 0)
box_bottom := box_top - atr_buffer
poi := (box_top + box_bottom) / 2
else if box_type == -1
box_bottom := array.get(value_array, 0)
box_top := box_bottom + atr_buffer
poi := (box_top + box_bottom) / 2
okay_to_draw = f_check_overlapping(poi, box_array, atr)
if box_type == 1 and okay_to_draw
box.delete( array.get(box_array, array.size(box_array) - 1) )
f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = supply_outline_color,
bgcolor = supply_color, extend = extend.right, text = 'SUPPLY', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = color.new(poi_label_color,90),
bgcolor = color.new(poi_label_color,90), extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
else if box_type == -1 and okay_to_draw
box.delete( array.get(box_array, array.size(box_array) - 1) )
f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = demand_outline_color,
bgcolor = demand_color, extend = extend.right, text = 'DEMAND', text_halign = text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = color.new(poi_label_color,90),
bgcolor = color.new(poi_label_color,90), extend = extend.right, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc = xloc.bar_index))
// Function to change supply/demand to BOS if broken
f_sd_to_bos(box_array, bos_array, label_array, zone_type) =>
if zone_type == 1
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_top(array.get(box_array,i))
if close >= level_to_break
copied_box = box.copy(array.get(box_array,i))
f_array_add_pop(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), 'BOS' )
box.set_text_color( array.get(bos_array,0), bos_label_color)
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
if zone_type == -1
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_bottom(array.get(box_array,i))
if close <= level_to_break
copied_box = box.copy(array.get(box_array,i))
f_array_add_pop(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), 'BOS' )
box.set_text_color( array.get(bos_array,0), bos_label_color)
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
// Function to extend box endpoint
f_extend_box_endpoint(box_array) =>
for i = 0 to array.size(box_array) - 1
box.set_right(array.get(box_array, i), bar_index + 100)
//============================================================================
// SR FUNCTIONS
//============================================================================
percWidth(len, perc) => (ta.highest(len) - ta.lowest(len)) * perc / 100
//============================================================================
// SUPPLY/DEMAND CALCULATIONS
//============================================================================
atr = ta.atr(50)
swing_high = ta.pivothigh(high, swing_length, swing_length)
swing_low = ta.pivotlow(low, swing_length, swing_length)
var swing_high_values = array.new_float(5,0.00)
var swing_low_values = array.new_float(5,0.00)
var swing_high_bns = array.new_int(5,0)
var swing_low_bns = array.new_int(5,0)
var current_supply_box = array.new_box(history_of_demand_to_keep, na)
var current_demand_box = array.new_box(history_of_demand_to_keep, na)
var current_supply_poi = array.new_box(history_of_demand_to_keep, na)
var current_demand_poi = array.new_box(history_of_demand_to_keep, na)
var supply_bos = array.new_box(5, na)
var demand_bos = array.new_box(5, na)
// New swing high
if not na(swing_high)
f_array_add_pop(swing_high_values, swing_high)
f_array_add_pop(swing_high_bns, bar_index )
if show_price_action_labels
f_sh_sl_labels(swing_high_values, 1)
f_supply_demand(swing_high_values, swing_high_bns, current_supply_box, current_supply_poi, 1, atr)
// New swing low
else if not na(swing_low)
f_array_add_pop(swing_low_values, swing_low)
f_array_add_pop(swing_low_bns, bar_index )
if show_price_action_labels
f_sh_sl_labels(swing_low_values, -1)
f_supply_demand(swing_low_values, swing_low_bns, current_demand_box, current_demand_poi, -1, atr)
f_sd_to_bos(current_supply_box, supply_bos, current_supply_poi, 1)
f_sd_to_bos(current_demand_box, demand_bos, current_demand_poi, -1)
f_extend_box_endpoint(current_supply_box)
f_extend_box_endpoint(current_demand_box)
//============================================================================
// SR CALCULATIONS & PLOTTING
//============================================================================
rb = 10
prd = 284
ChannelW = 10
label_loc = 55
style = lineStyle == "Solid" ? line.style_solid : lineStyle == "Dotted" ? line.style_dotted : line.style_dashed
ph = ta.pivothigh(rb, rb)
pl = ta.pivotlow (rb, rb)
sr_levels = array.new_float(21, na)
prdhighest = ta.highest(prd)
prdlowest = ta.lowest(prd)
cwidth = percWidth(prd, ChannelW)
zonePerc = percWidth(300, zoneWidth)
aas = array.new_bool(41, true)
u1 = 0.0, u1 := nz(u1 )
d1 = 0.0, d1 := nz(d1 )
highestph = 0.0, highestph := highestph
lowestpl = 0.0, lowestpl := lowestpl
var sr_levs = array.new_float(21, na)
label hlabel = na, label.delete(hlabel )
label llabel = na, label.delete(llabel )
var sr_lines = array.new_line(21, na)
var sr_linesH = array.new_line(21, na)
var sr_linesL = array.new_line(21, na)
var sr_linesF = array.new_linefill(21, na)
var sr_labels = array.new_label(21, na)
if ph or pl
for x = 0 to array.size(sr_levels) - 1
array.set(sr_levels, x, na)
highestph := prdlowest
lowestpl := prdhighest
countpp = 0
for x = 0 to prd
if na(close )
break
if not na(ph ) or not na(pl )
highestph := math.max(highestph, nz(ph , prdlowest), nz(pl , prdlowest))
lowestpl := math.min(lowestpl, nz(ph , prdhighest), nz(pl , prdhighest))
countpp += 1
if countpp > 40
break
if array.get(aas, countpp)
upl = (ph ? high : low ) + cwidth
dnl = (ph ? high : low ) - cwidth
u1 := countpp == 1 ? upl : u1
d1 := countpp == 1 ? dnl : d1
tmp = array.new_bool(41, true)
cnt = 0
tpoint = 0
for xx = 0 to prd
if na(close )
break
if not na(ph ) or not na(pl )
chg = false
cnt += 1
if cnt > 40
break
if array.get(aas, cnt)
if not na(ph )
if high <= upl and high >= dnl
tpoint += 1
chg := true
if not na(pl )
if low <= upl and low >= dnl
tpoint += 1
chg := true
if chg and cnt < 41
array.set(tmp, cnt, false)
if tpoint >= strengthSR
for g = 0 to 40 by 1
if not array.get(tmp, g)
array.set(aas, g, false)
if ph and countpp < 21
array.set(sr_levels, countpp, high )
if pl and countpp < 21
array.set(sr_levels, countpp, low )
// Plot SR
var line highest_ = na, line.delete(highest_)
var line lowest_ = na, line.delete(lowest_)
var line highest_fill1 = na, line.delete(highest_fill1)
var line highest_fill2 = na, line.delete(highest_fill2)
var line lowest_fill1 = na, line.delete(lowest_fill1)
var line lowest_fill2 = na, line.delete(lowest_fill2)
hi_col = close >= highestph ? colorSup : colorRes
lo_col = close >= lowestpl ? colorSup : colorRes
if enableSR
highest_ := line.new(bar_index - 311, highestph, bar_index, highestph, xloc.bar_index, expandSR ? extend.both : extend.right, hi_col, style, lineWidth)
lowest_ := line.new(bar_index - 311, lowestpl , bar_index, lowestpl , xloc.bar_index, expandSR ? extend.both : extend.right, lo_col, style, lineWidth)
if useHLZones
highest_fill1 := line.new(bar_index - 311, highestph + zonePerc, bar_index, highestph + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
highest_fill2 := line.new(bar_index - 311, highestph - zonePerc, bar_index, highestph - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill1 := line.new(bar_index - 311, lowestpl + zonePerc , bar_index, lowestpl + zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill2 := line.new(bar_index - 311, lowestpl - zonePerc , bar_index, lowestpl - zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
linefill.new(highest_fill1, highest_fill2, color.new(hi_col, 80))
linefill.new(lowest_fill1 , lowest_fill2 , color.new(lo_col, 80))
if ph or pl
for x = 0 to array.size(sr_lines) - 1
array.set(sr_levs, x, array.get(sr_levels, x))
for x = 0 to array.size(sr_lines) - 1
line.delete(array.get(sr_lines, x))
line.delete(array.get(sr_linesH, x))
line.delete(array.get(sr_linesL, x))
linefill.delete(array.get(sr_linesF, x))
if array.get(sr_levs, x) and enableSR
line_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
array.set(sr_lines, x, line.new(bar_index - 355, array.get(sr_levs, x), bar_index, array.get(sr_levs, x), xloc.bar_index, expandSR ? extend.both : extend.right, line_col, style, lineWidth))
if useZones
array.set(sr_linesH, x, line.new(bar_index - 355, array.get(sr_levs, x) + zonePerc, bar_index, array.get(sr_levs, x) + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesL, x, line.new(bar_index - 355, array.get(sr_levs, x) - zonePerc, bar_index, array.get(sr_levs, x) - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesF, x, linefill.new(array.get(sr_linesH, x), array.get(sr_linesL, x), color.new(line_col, 80)))
for x = 0 to array.size(sr_labels) - 1
label.delete(array.get(sr_labels, x))
if array.get(sr_levs, x) and enableSR
lab_loc = close >= array.get(sr_levs, x) ? label.style_label_up : label.style_label_down
lab_col = close >= array.get(sr_levs, x) ? colorSup : colorRes
array.set(sr_labels, x, label.new(bar_index + label_loc, array.get(sr_levs, x), str.tostring(math.round_to_mintick(array.get(sr_levs, x))), color=lab_col , textcolor=#000000, style=lab_loc))
hlabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, highestph, "High Level : " + str.tostring(highestph), color=hi_col, textcolor=#000000, style=label.style_label_down) : na
llabel := enableSR ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, lowestpl , "Low Level : " + str.tostring(lowestpl) , color=lo_col, textcolor=#000000, style=label.style_label_up ) : na
3-bar Swing Liquidity Grab📊 3-BAR SWING LIQUIDITY GRAB
WHAT IT DOES
Automatically detects 3-bar swing highs/lows and alerts you to liquidity grab moments — when price breaks structural levels to trigger stop-losses, then reverses.
SIGNALS AT A GLANCE
Signal What It Means Trade Idea
SH 🟠▼ Swing High (Resistance) Reference level
SL 🔵▲ Swing Low (Support) Reference level
LQH 🔴❌ Fake break ABOVE resistance SHORT ⬇️
LQL 🟢❌ Fake break BELOW support LONG ⬆️
HOW TO TRADE IT
Spot the trend — Is price going up or down?
Wait for signal — LQL (green) in uptrend, LQH (red) in downtrend
Enter on signal — Place order on that bar
Stop Loss — Just outside the swing level
Take Profit — At the next swing level
SETTINGS EXPLAINED
Swing length: 1 = 3-bar swing, 2 = 5-bar swing (use 1 for scalp, 2 for larger TF)
Lookback bars: Time window to find liquidity grabs (10-20 for scalp, 50+ for position)
Toggles: Show/hide swing markers and signals
BEST ON THESE TIMEFRAMES
TF Type Settings
M5-M15 Scalp SL: 1, LB: 10-15
M15-H1 Intraday SL: 1, LB: 15-20
H1-H4 Swing SL: 1-2, LB: 20-50
D+ Position SL: 2, LB: 50+
KEY RULES
✅ DO:
Trade signals aligned with major trend
Always use stop loss
Use 2-5% risk per trade
Confirm with price action
❌ DON'T:
Trade choppy/sideways markets
Ignore the trend
Chase signals
Overtrade
REAL EXAMPLE
LONG Trade (LQL Signal):
text
Uptrend → Swing Low forms at 1.0950
→ Price dips to 1.0930 (below SL)
→ Closes at 1.0955 (above SL) = GREEN ❌ (LQL)
→ BUY at 1.0960
→ Stop Loss: 1.0920
→ Take Profit: 1.1050 (previous Swing High)
WORKS ON
✅ Crypto (Bitcoin, Ethereum, Altcoins)
✅ Forex (EUR/USD, GBP/USD, etc.)
✅ Stocks & Indices
✅ Commodities (Gold, Oil, etc.)
Any asset, any timeframe, any market.
DISCLAIMER
This is a technical analysis tool, not financial advice. Past performance does not guarantee future results. Always use proper risk management and test on a demo account first.
PRO Trade Manager//@version=5
indicator("PRO Trade Manager", shorttitle="PRO Trade Manager", overlay=false)
// ============================================================================
// INPUTS
//This code and all related materials are the exclusive property of Trade Confident LLC. Any reproduction, distribution, modification, or unauthorized use of this code, in whole or in part, is strictly prohibited without the express written consent of Trade Confident LLC. Violations may result in civil and/or criminal penalties to the fullest extent of the law.
// © Trade Confident LLC. All rights reserved.
// ============================================================================
// Moving Average Settings
maLength = input.int(15, "Signal Strength", minval=1, tooltip="Length of the moving average to measure deviation from (lower = more sensitive)")
maType = "SMA" // Fixed to SMA, no longer user-selectable
// Deviation Settings
deviationLength = input.int(20, "Deviation Period", minval=1, tooltip="Lookback period for standard deviation calculation")
// Signal Frequency dropdown - controls both upper and lower thresholds
signalFrequency = input.string("More/Good Accuracy", "Signal Frequency", options= ,
tooltip="Normal/Highest Accuracy = ±2.0 StdDev | More/Good Accuracy = ±1.5 StdDev | Most/Moderate Accuracy = ±1.0 StdDev")
// Set thresholds based on selected frequency
upperThreshold = signalFrequency == "Most/Moderate Accuracy" ? 1.0 : signalFrequency == "More/Good Accuracy" ? 1.5 : 2.0
lowerThreshold = signalFrequency == "Most/Moderate Accuracy" ? -1.0 : signalFrequency == "More/Good Accuracy" ? -1.5 : -2.0
// Continuation Signal Settings
atrMultiplier = input.float(2.0, "TP/DCA Market Breakout Detection", minval=0, step=0.5, tooltip="Number of ATR moves required to trigger continuation signals (Set to 0 to disable)")
// Visual Settings
showMA = false // MA display removed from settings
showSignals = input.bool(true, "Show Alert Signals", tooltip="Show visual signals when price is overextended")
// ============================================================================
// CALCULATIONS
// ============================================================================
// Calculate Moving Average based on type
ma = switch maType
"SMA" => ta.sma(close, maLength)
"EMA" => ta.ema(close, maLength)
"WMA" => ta.wma(close, maLength)
"VWMA" => ta.vwma(close, maLength)
=> ta.sma(close, maLength)
// Calculate deviation from MA
deviation = close - ma
// Calculate standard deviation
stdDev = ta.stdev(close, deviationLength)
// Calculate number of standard deviations away from MA
deviationScore = stdDev != 0 ? deviation / stdDev : 0
// Smooth the deviation score slightly for cleaner signals
smoothedDeviation = ta.ema(deviationScore, 3)
// ============================================================================
// SIGNALS
// ============================================================================
// Overextended conditions
overextendedHigh = smoothedDeviation >= upperThreshold
overextendedLow = smoothedDeviation <= lowerThreshold
// Signal triggers (crossing into overextended territory)
bullishSignal = ta.crossunder(smoothedDeviation, lowerThreshold)
bearishSignal = ta.crossover(smoothedDeviation, upperThreshold)
// Track if we're in bright histogram zones
isBrightGreen = smoothedDeviation <= lowerThreshold
isBrightRed = smoothedDeviation >= upperThreshold
// Track if we were in bright zone on previous bar
wasBrightGreen = smoothedDeviation <= lowerThreshold
wasBrightRed = smoothedDeviation >= upperThreshold
// Detect oscillator turning up after bright green (buy signal)
// Trigger if we were in bright green and oscillator turns up, even if no longer bright green
oscillatorTurningUp = smoothedDeviation > smoothedDeviation
buySignal = barstate.isconfirmed and wasBrightGreen and oscillatorTurningUp and smoothedDeviation <= smoothedDeviation
// Detect oscillator turning down after bright red (sell signal)
// Trigger if we were in bright red and oscillator turns down, even if no longer bright red
oscillatorTurningDown = smoothedDeviation < smoothedDeviation
sellSignal = barstate.isconfirmed and wasBrightRed and oscillatorTurningDown and smoothedDeviation >= smoothedDeviation
// ============================================================================
// ATR-BASED CONTINUATION SIGNALS
// ============================================================================
// Calculate ATR for distance measurement
atrLength = 14
atr = ta.atr(atrLength)
// Track price levels when ANY sell or buy signal occurs (original or continuation)
var float lastSellPrice = na
var float lastBuyPrice = na
// Initialize tracking on original signals
if sellSignal
lastSellPrice := close
if buySignal
lastBuyPrice := close
// Continuation Sell Signal: Price moved up by ATR multiplier from last red dot
// Disabled when atrMultiplier is set to 0
continuationSell = atrMultiplier > 0 and barstate.isconfirmed and not na(lastSellPrice) and close >= lastSellPrice + (atrMultiplier * atr)
// Continuation Buy Signal: Price moved down by ATR multiplier from last green dot
// Disabled when atrMultiplier is set to 0
continuationBuy = atrMultiplier > 0 and barstate.isconfirmed and not na(lastBuyPrice) and close <= lastBuyPrice - (atrMultiplier * atr)
// Update reference prices when continuation signals trigger (reset the 3 ATR counter)
if continuationSell
lastSellPrice := close
if continuationBuy
lastBuyPrice := close
// Combine original and continuation signals for plotting
allBuySignals = buySignal or continuationBuy
allSellSignals = sellSignal or continuationSell
// Track if a signal occurred to keep it visible on dashboard
// Signals trigger at barstate.isconfirmed (bar close)
var bool showBuyOnDashboard = false
var bool showSellOnDashboard = false
// Update dashboard flags immediately when signals occur
if allBuySignals
showBuyOnDashboard := true
showSellOnDashboard := false
else if allSellSignals
showSellOnDashboard := true
showBuyOnDashboard := false
else if barstate.isconfirmed
// Reset flags on bar close if no new signal
showBuyOnDashboard := false
showSellOnDashboard := false
// ============================================================================
// PLOTTING
// ============================================================================
// Professional color scheme
var color colorBullish = #00C853 // Professional green
var color colorBearish = #FF1744 // Professional red
var color colorNeutral = #2962FF // Professional blue
var color colorGrid = #363A45 // Dark gray for lines
var color colorBackground = #1E222D // Chart background
// Dynamic line color based on value
lineColor = smoothedDeviation > upperThreshold ? colorBearish :
smoothedDeviation < lowerThreshold ? colorBullish :
smoothedDeviation > 0 ? color.new(colorBearish, 50) :
color.new(colorBullish, 50)
// Plot the deviation oscillator with dynamic coloring
plot(smoothedDeviation, "Deviation Score", color=lineColor, linewidth=2)
// Plot zero line
hline(0, "Zero Line", color=color.new(colorGrid, 0), linestyle=hline.style_solid, linewidth=1)
// Subtle fill for overextended zones (without visible threshold lines)
upperLine = hline(upperThreshold, "Upper Threshold", color=color.new(color.gray, 100), linestyle=hline.style_dashed, linewidth=1)
lowerLine = hline(lowerThreshold, "Lower Threshold", color=color.new(color.gray, 100), linestyle=hline.style_dashed, linewidth=1)
fill(upperLine, hline(3), color=color.new(colorBearish, 95), title="Overextended High Zone")
fill(lowerLine, hline(-3), color=color.new(colorBullish, 95), title="Overextended Low Zone")
// Histogram style visualization (optional alternative)
histogramColor = smoothedDeviation >= upperThreshold ? color.new(colorBearish, 20) :
smoothedDeviation <= lowerThreshold ? color.new(colorBullish, 20) :
smoothedDeviation > 0 ? color.new(colorBearish, 80) :
color.new(colorBullish, 80)
plot(smoothedDeviation, "Histogram", color=histogramColor, style=plot.style_histogram, linewidth=3)
// ============================================================================
// BUY/SELL SIGNAL MARKERS
// ============================================================================
// Plot buy signals at -3.5 level (includes both initial and extended signals)
plot(allBuySignals ? -3.5 : na, title="Buy Signal", style=plot.style_circles,
color=color.new(colorBullish, 0), linewidth=4)
// Plot sell signals at 3.5 level (includes both initial and extended signals)
plot(allSellSignals ? 3.5 : na, title="Sell Signal", style=plot.style_circles,
color=color.new(colorBearish, 0), linewidth=4)
// ============================================================================
// ALERTS - SIMPLIFIED TO ONLY TWO ALERTS
// ============================================================================
// Alert 1: Long Entry/Short TP - fires on ANY green dot (original or continuation)
alertcondition(allBuySignals, "Long Entry/Short TP", "Long Entry/Short TP")
// Alert 2: Long TP/Short Entry - fires on ANY red dot (original or continuation)
alertcondition(allSellSignals, "Long TP/Short Entry", "Long TP/Short Entry")
// ============================================================================
// DATA DISPLAY
// ============================================================================
// Create a professional table for current readings
var color tableBgColor = #1a2332 // Dark blue background
var table infoTable = table.new(position.middle_right, 2, 2, border_width=1,
border_color=color.new(#2962FF, 30),
frame_width=1,
frame_color=color.new(#2962FF, 30))
if barstate.islast
// Determine status
statusText = overextendedHigh ? "OVEREXTENDED ↓" :
overextendedLow ? "OVEREXTENDED ↑" :
smoothedDeviation > 0 ? "Buyers In Control" : "Sellers In Control"
statusColor = overextendedHigh ? color.new(colorBearish, 0) :
overextendedLow ? color.new(colorBullish, 0) :
color.white
// Background color for status cell
statusBgColor = color.new(tableBgColor, 0)
// Status Row
table.cell(infoTable, 0, 0, "Status",
bgcolor=color.new(tableBgColor, 0),
text_color=color.white,
text_size=size.normal)
table.cell(infoTable, 1, 0, statusText,
bgcolor=statusBgColor,
text_color=statusColor,
text_size=size.normal)
// Signal Row - always show
table.cell(infoTable, 0, 1, "Signal",
bgcolor=color.new(tableBgColor, 0),
text_color=color.white,
text_size=size.normal)
// Show signal if flags are set (will stay visible during the bar)
if showBuyOnDashboard or showSellOnDashboard
// Green dot (buy signal) = "Long Entry/Short TP" with arrow up, white text on green background
// Red dot (sell signal) = "Long TP/Short Entry" with arrow down, white text on red background
signalText = showBuyOnDashboard ? "↑ Long Entry/Short TP" : "↓ Long TP/Short Entry"
signalColor = showBuyOnDashboard ? color.new(colorBullish, 0) : color.new(colorBearish, 0)
table.cell(infoTable, 1, 1, signalText,
bgcolor=signalColor,
text_color=color.white,
text_size=size.normal)
else
table.cell(infoTable, 1, 1, "Watching...",
bgcolor=color.new(tableBgColor, 0),
text_color=color.new(color.white, 60),
text_size=size.normal)
Robrechtian Long-Medium Breakout Trend SystemRobrechtian Long–Medium-Term Breakout Trend System
A professional, rule-based trend-following strategy designed to capture large, sustained price movements using pure price action and breakouts.
This system follows long-established trend-following philosophy: no prediction, no volatility targeting, and no profit targets. Only disciplined entries, position additions, and exits driven entirely by trend structure.
Core Principles
Breakout-driven entries: Initial positions are taken only when price breaks above/below the 80-day Donchian channel, confirming a long–medium-term trend shift.
Short-term confirmation: Breakouts must also exceed the 20-day channel, reducing false positives.
Trend-direction filter: A 50-day moving average slope filter ensures alignment with the broader trend.
Explosive bar filter: Entries avoid excessively large, single-candle expansions (>2.5× ATR(20)) to prevent chasing exhaustion spikes.
Pyramiding into strength: Additional units are added only when price makes fresh 20-day breakouts in the direction of the trend. No scaling out. No adding on dips.
Exit only on trend violation: Positions are closed exclusively when price breaks the opposite 80-day channel. This preserves unlimited upside while enforcing disciplined exits.
Pure trend philosophy: No volatility targeting, no smoothing, no discretionary overrides, no optimization for short-term performance.
Intended Use
This system is designed primarily for diversified futures portfolios, where diversification across dozens of globally liquid markets creates robustness and stability. However, it may also be used on individual assets for educational and analytical purposes.
The system embraces the core trend-following logic:
Small losses, big winners, and unlimited upside when trends persist.
⚠️ WARNINGS / DISCLAIMERS
⚠️ Warning 1 — This strategy is not optimized for single stocks
The Robrechtian Trend System is designed for multi-asset futures portfolios, not single equities.
Performance on individual tickers may vary greatly due to lack of diversification.
⚠️ Warning 2 — Trend following includes substantial drawdowns
Deep drawdowns are a normal and expected feature of all long-term trend-following systems.
The strategy does not attempt to smooth returns or manage volatility.
If you seek steady, low-volatility equity curves, this system is not suitable.
⚠️ Warning 3 — No volatility targeting or risk smoothing
This system intentionally avoids volatility-based position sizing.
Trades may experience larger fluctuations than systems using risk parity or vol targeting.
⚠️ Warning 4 — Not financial advice
This script is for educational and research purposes only.
Past performance does not guarantee future results.
Use at your own risk.
⚠️ Warning 5 — TradingView backtests have known limitations
TradingView does not simulate:
futures contract roll logic
slippage
real bid/ask spreads
liquidity conditions
limit-up/limit-down behavior
Results may vary from live market execution.
Market Maker Position Bars (Position Size)**Market Maker Position Bars (Position Size) – Indicator Description for TradingView**
This indicator is a clean, professional visualization tool designed for traders who track suspected **market maker / institutional positioning** (especially popular in ICT/SMC communities) on indices like the SPX, NDX, ES, etc.
It draws up to **20 horizontal position bars** directly on the chart, anchored to the very last bar, representing hypothetical long and short positions at specific price levels with corresponding position sizes.
### Key Features & Visual Logic
- **Green bars (Boxes 1–10)** → Extend to the **right** of the last bar
Represent **long positions** (bullish interest)
Default translucent green fill
- **Red bars (Boxes 11–20)** → Extend to the **left** of the last bar
Represent **short positions** (bearish interest)
Default translucent red fill
- **Bar width = Position size**
The length of each box is automatically scaled based on the absolute value you enter in “Position Size”.
Larger position → wider (longer) bar
- Each box displays **Price / Position Size** text inside (e.g., `5720.50 / 1250`)
### Fully Customizable Settings
**Global Geometry**
- Total Box Height (default 10.0) – controls vertical thickness of all boxes
**Position Size Scaling**
- Base Box Width (bars)
- Width per Position Unit – fine-tune how aggressively width grows with size
- Minimum & Maximum Bar Width – prevents boxes from becoming too tiny or excessively long
**Global Text Settings**
- Text color, size (Tiny → Huge), and bold option
**Individual Box Controls (20 independent boxes)**
- Show/Hide toggle
- SPX Price (or any symbol price level)
- Position Size (any positive/negative number; absolute value determines width)
- Fill color (override default green/red if desired)
### How It Works Internally
- All boxes are drawn only on the **last confirmed bar** (`barstate.islast`)
- Width calculation:
`Width = BaseWidth + (|Position Size| × Width per Unit)`
Clamped between Min and Max Bar Width
- Green boxes start at the current bar and extend forward (right)
- Red boxes end at the current bar and extend backward (left)
- Uses Pine Script v6 `box.new()` with `xloc.bar_index` for perfect alignment and performance
### Ideal Use Cases
- Visualizing daily/weekly **order block** or **fair value gap** interest levels with estimated size
- Mapping **dealer positioning**, gamma exposure levels, or large options interest
- Quickly seeing where the “smart money” is theoretically stacked on both sides of the market
- Clean chart markup for screenshots, mentoring, or live trading journals
A minimalist yet powerful tool favored by ICT, SMC, and footprint-style traders who want to see **where the big players might be positioned** — all in one glance without cluttering the chart with hundreds of objects.
Clean. Visual. Size-aware. Perfect for high-level market profiling.
BTC Fear & Greed Incremental StrategyIMPORTANT: READ SETUP GUIDE BELOW OR IT WON'T WORK
# BTC Fear & Greed Incremental Strategy — TradeMaster AI (Pure BTC Stack)
## Strategy Overview
This advanced Bitcoin accumulation strategy is designed for long-term hodlers who want to systematically take profits during greed cycles and accumulate during fear periods, while preserving their core BTC position. Unlike traditional strategies that start with cash, this approach begins with a specified BTC allocation, making it perfect for existing Bitcoin holders who want to optimize their stack management.
## Key Features
### 🎯 **Pure BTC Stack Mode**
- Start with any amount of BTC (configurable)
- Strategy manages your existing stack, not new purchases
- Perfect for hodlers who want to optimize without timing markets
### 📊 **Fear & Greed Integration**
- Uses market sentiment data to drive buy/sell decisions
- Configurable thresholds for greed (selling) and fear (buying) triggers
- Automatic validation to ensure proper 0-100 scale data source
### 🐂 **Bull Year Optimization**
- Smart quarterly selling during bull market years (2017, 2021, 2025)
- Q1: 1% sells, Q2: 2% sells, Q3/Q4: 5% sells (configurable)
- **NO SELLING** during non-bull years - pure accumulation mode
- Preserves BTC during early bull phases, maximizes profits at peaks
### 🐻 **Bear Market Intelligence**
- Multi-regime detection: Bull, Early Bear, Deep Bear, Early Bull
- Different buying strategies based on market conditions
- Enhanced buying during deep bear markets with configurable multipliers
- Visual regime backgrounds for easy market condition identification
### 🛡️ **Risk Management**
- Minimum BTC allocation floor (prevents selling entire stack)
- Configurable position sizing for all trades
- Multiple safety checks and validation
### 📈 **Advanced Visualization**
- Clean 0-100 scale with 2 decimal precision
- Three main indicators: BTC Allocation %, Fear & Greed Index, BTC Holdings
- Real-time portfolio tracking with cash position display
- Enhanced info table showing all key metrics
## How to Use
### **Step 1: Setup**
1. Add the strategy to your BTC/USD chart (daily timeframe recommended)
2. **CRITICAL**: In settings, change the "Fear & Greed Source" from "close" to a proper 0-100 Fear & Greed indicator
---------------
I recommend Crypto Fear & Greed Index by TIA_Technology indicator
When selecting source with this indicator, look for "Crypto Fear and Greed Index:Index"
---------------
3. Set your "Starting BTC Quantity" to match your actual holdings
4. Configure your preferred "Start Date" (when you want the strategy to begin)
### **Step 2: Configure Bull Year Logic**
- Enable "Bull Year Logic" (default: enabled)
- Adjust quarterly sell percentages:
- Q1 (Jan-Mar): 1% (conservative early bull)
- Q2 (Apr-Jun): 2% (moderate mid bull)
- Q3/Q4 (Jul-Dec): 5% (aggressive peak targeting)
- Add future bull years to the list as needed
### **Step 3: Fine-tune Thresholds**
- **Greed Threshold**: 80 (sell when F&G > 80)
- **Fear Threshold**: 20 (buy when F&G < 20 in bull markets)
- **Deep Bear Fear Threshold**: 25 (enhanced buying in bear markets)
- Adjust based on your risk tolerance
### **Step 4: Risk Management**
- Set "Minimum BTC Allocation %" (default 20%) - prevents selling entire stack
- Configure sell/buy percentages based on your position size
- Enable bear market filters for enhanced timing
### **Step 5: Monitor Performance**
- **Orange Line**: Your BTC allocation percentage (target: fluctuate between 20-100%)
- **Blue Line**: Actual BTC holdings (should preserve core position)
- **Pink Line**: Fear & Greed Index (drives all decisions)
- **Table**: Real-time portfolio metrics including cash position
## Reading the Indicators
### **BTC Allocation Percentage (Orange Line)**
- **100%**: All portfolio in BTC, no cash available for buying
- **80%**: 80% BTC, 20% cash ready for fear buying
- **20%**: Minimum allocation, maximum cash position
### **Trading Signals**
- **Green Buy Signals**: Appear during fear periods with available cash
- **Red Sell Signals**: Appear during greed periods in bull years only
- **No Signals**: Either allocation limits reached or non-bull year
## Strategy Logic
### **Bull Years (2017, 2021, 2025)**
- Q1: Conservative 1% sells (preserve stack for later)
- Q2: Moderate 2% sells (gradual profit taking)
- Q3/Q4: Aggressive 5% sells (peak targeting)
- Fear buying active (accumulate on dips)
### **Non-Bull Years**
- **Zero selling** - pure accumulation mode
- Enhanced fear buying during bear markets
- Focus on rebuilding stack for next bull cycle
## Important Notes
- **This is not financial advice** - backtest thoroughly before use
- Designed for **long-term holders** (4+ year cycles)
- **Requires proper Fear & Greed data source** - validate in settings
- Best used on **daily timeframe** for major trend following
- **Cash calculations**: Use allocation % and BTC holdings to calculate available cash: `Cash = (Total Portfolio × (1 - Allocation%/100))`
## Risk Disclaimer
This strategy involves active trading and position management. Past performance does not guarantee future results. Always do your own research and never invest more than you can afford to lose. The strategy is designed for educational purposes and long-term Bitcoin accumulation thesis.
---
*Developed by Sol_Crypto for the Bitcoin community. Happy stacking! 🚀*
SPX Breadth – Stocks Above 200-day SMA//@version=6
indicator("SPX Breadth – Stocks Above 200-day SMA",
overlay = false,
max_lines_count = 500,
max_labels_count = 500)
//–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
// Inputs
group_source = "Source"
breadthSymbol = input.symbol("SPXA200R", "Breadth symbol", group = group_source)
breadthTf = input.timeframe("", "Timeframe (blank = chart)", group = group_source)
group_params = "Parameters"
totalStocks = input.int(500, "Total stocks in index", minval = 1, group = group_params)
smoothingLen = input.int(10, "SMA length", minval = 1, group = group_params)
//–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
// Breadth series (symbol assumed to be percent 0–100)
string tf = breadthTf == "" ? timeframe.period : breadthTf
float rawPct = request.security(breadthSymbol, tf, close) // 0–100 %
float breadthN = rawPct / 100.0 * totalStocks // convert to count
float breadthSma = ta.sma(breadthN, smoothingLen)
//–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
// Regime levels (0–20 %, 20–40 %, 40–60 %, 60–80 %, 80–100 %)
float lvl0 = 0.0
float lvl20 = totalStocks * 0.20
float lvl40 = totalStocks * 0.40
float lvl60 = totalStocks * 0.60
float lvl80 = totalStocks * 0.80
float lvl100 = totalStocks * 1.0
p0 = plot(lvl0, "0%", color = color.new(color.black, 100))
p20 = plot(lvl20, "20%", color = color.new(color.red, 0))
p40 = plot(lvl40, "40%", color = color.new(color.orange, 0))
p60 = plot(lvl60, "60%", color = color.new(color.yellow, 0))
p80 = plot(lvl80, "80%", color = color.new(color.green, 0))
p100 = plot(lvl100, "100%", color = color.new(color.green, 100))
// Colored zones
fill(p0, p20, color = color.new(color.maroon, 80)) // very oversold
fill(p20, p40, color = color.new(color.red, 80)) // oversold
fill(p40, p60, color = color.new(color.gold, 80)) // neutral
fill(p60, p80, color = color.new(color.green, 80)) // bullish
fill(p80, p100, color = color.new(color.teal, 80)) // very strong
//–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
// Plots
plot(breadthN, "Stocks above 200-day", color = color.orange, linewidth = 2)
plot(breadthSma, "Breadth SMA", color = color.white, linewidth = 2)
// Optional label showing live value
var label infoLabel = na
if barstate.islast
label.delete(infoLabel)
string txt = "Breadth: " +
str.tostring(breadthN, format.mintick) + " / " +
str.tostring(totalStocks) + " (" +
str.tostring(rawPct, format.mintick) + "%)"
infoLabel := label.new(bar_index, breadthN, txt,
style = label.style_label_left,
color = color.new(color.white, 20),
textcolor = color.black)
Bifurcation Early WarningBifurcation Early Warning (BEW) — Chaos Theory Regime Detection
OVERVIEW
The Bifurcation Early Warning indicator applies principles from chaos theory and complex systems research to detect when markets are approaching critical transition points — moments where the current regime is likely to break down and shift to a new state.
Unlike momentum or trend indicators that tell you what is happening, BEW tells you when something is about to change. It provides early warning of regime shifts before they occur, giving traders time to prepare for increased volatility or trend reversals.
THE SCIENCE BEHIND IT
In complex systems (weather, ecosystems, financial markets), major transitions don't happen randomly. Research has identified three universal warning signals that precede critical transitions:
1. Critical Slowing Down
As a system approaches a tipping point, it becomes "sluggish" — small perturbations take longer to decay. In markets, this manifests as rising autocorrelation in returns.
2. Variance Amplification
Short-term volatility begins expanding relative to longer-term baselines as the system destabilizes.
3. Flickering
The system oscillates between two potential states before committing to one — visible as increased crossing of mean levels.
BEW combines all three signals into a single composite score.
COMPONENTS
AR(1) Coefficient — Critical Slowing Down (Blue)
Measures lag-1 autocorrelation of returns over a rolling window.
• Rising toward 1.0: Market becoming "sticky," slow to mean-revert — transition approaching
• Low values (<0.3): Normal mean-reverting behavior, stable regime
Variance Ratio (Purple)
Compares short-term variance to long-term variance.
• Above 1.5: Short-term volatility expanding — energy building before a move
• Near 1.0: Volatility stable, no unusual pressure
Flicker Count (Yellow/Teal)
Counts state changes (crossings of the dynamic mean) within the lookback period.
• High count: Market oscillating between states — indecision before commitment
• Low count: Price firmly in one regime
INTERPRETING THE BEW SCORE
0–50 (STABLE): Normal market conditions. Existing strategies should perform as expected.
50–70 (WARNING): Elevated instability detected. Consider reducing exposure or tightening risk parameters.
70–85 (DANGER): High probability of regime change. Avoid initiating new positions; widen stops on existing ones.
85+ (CRITICAL): Bifurcation likely imminent or in progress. Expect large, potentially unpredictable moves.
HOW TO USE
As a Regime Filter
• BEW < 50: Normal trading conditions — apply your standard strategies
• BEW > 60: Elevated caution — reduce position sizes, avoid mean-reversion plays
• BEW > 80: High alert — consider staying flat or hedging existing positions
As a Preparation Signal
BEW tells you when to pay attention, not which direction. When readings elevate:
• Watch for confirmation from volume, order flow, or other directional indicators
• Prepare for breakout scenarios in either direction
• Adjust take-profit and stop-loss distances for larger moves
For Volatility Adjustment
High BEW periods correlate with larger candles. Use this to:
• Widen stops during elevated readings
• Adjust position sizing inversely to BEW score
• Set more ambitious profit targets when entering during high-BEW breakouts
Divergence Analysis
• Price making new highs/lows while BEW stays low: Trend likely to continue smoothly
• Price consolidating while BEW rises: Breakout incoming — direction uncertain but move will be significant
SETTINGS GUIDE
Core Settings
• Lookback Period: General reference period (default: 50)
• Source: Price source for calculations (default: close)
Critical Slowing Down (AR1)
• AR(1) Calculation Period: Bars used for autocorrelation (default: 100). Higher = smoother, slower.
• AR(1) Warning Threshold: Level at which AR(1) is considered elevated (default: 0.85)
Variance Growth
• Variance Short Period: Fast variance window (default: 20)
• Variance Long Period: Slow variance window (default: 100)
• Variance Ratio Threshold: Level for maximum score contribution (default: 1.5)
Regime Flickering
• Flicker Detection Period: Window for counting state changes (default: 20)
• Flicker Bandwidth: ATR multiplier for state detection — lower = more sensitive (default: 0.5)
• Flicker Count Threshold: Number of crossings for maximum score (default: 4)
TIMEFRAME RECOMMENDATIONS
• 5m–15m: Use shorter periods (AR: 30–50, Var: 10/50). Expect more noise.
• 1H: Balanced performance with default or slightly extended settings (AR: 100, Var: 20/100).
• 4H–Daily: Extend periods further (AR: 100–150, Var: 30/150). Cleaner signals, less frequent.
ALERTS
Three alert conditions are included:
• BEW Warning: Score crosses above 50
• BEW Danger: Score crosses above 70
• BEW Critical: Score crosses above 85
LIMITATIONS
• No directional bias: BEW detects instability, not direction. Combine with trend or momentum indicators.
• Not a timing tool: Elevated readings may persist for several bars before the actual move.
• Parameter sensitive: Optimal settings vary by asset and timeframe. Backtest before live use.
• Leading indicator trade-off: Early warning means some false positives are inevitable.
CREDITS
Inspired by research on early warning signals in complex systems:
• Dakos et al. (2012) — "Methods for detecting early warnings of critical transitions"
DISCLAIMER
This indicator is for educational and informational purposes only. It does not constitute financial advice. Past performance is not indicative of future results. Always conduct your own analysis and risk management. Use at your own risk.
Advanced ICC Multi-Timeframe 1.0Advanced ICC Multi-Timeframe Trading System
A comprehensive implementation and interpretation of the Indication, Correction, Continuation (ICC) trading methodology made popular by Trades by Sci, enhanced with advanced multi-timeframe analysis and automation features.
⚠️ CRITICAL TRADING WARNINGS:
DO NOT blindly follow BUY/SELL signals from this indicator
This indicator shows potential entry points but YOU must validate each trade
PAPER TRADE EXTENSIVELY before risking real capital
BACKTEST THOROUGHLY on your chosen instruments and timeframes
The ICC methodology requires understanding and discretion - automated signals are guidance only
This tool aids analysis but does not replace proper trade planning, risk management, or trader judgment
⚠️ Important Disclaimers:
This indicator is not endorsed by or affiliated with Trades by Sci
This is an early implementation and interpretation of the ICC methodology
May not work exactly as Trades by Sci executes his trades and entries
Requires further debugging, backtesting, and real-world validation
Completely free to use - no purchase required
I'm just one person obsessed with this method and wanted some better visualization of the chart/entries
About ICC:
The ICC method identifies complete market cycles through three phases: Indication (breakout), Correction (pullback), and Continuation (entry). This indicator automates the identification of these phases and adds powerful features for modern traders.
Key Features:
Multi-Timeframe Capabilities:
Automatic timeframe detection with optimized settings for 5m, 15m, 30m, 1H, 4H, and Daily charts
Higher timeframe overlay to view HTF ICC levels on lower timeframe charts for precise entry timing
Smart defaults that adjust swing length and consolidation detection based on your timeframe
Advanced Phase Tracking:
Complete ICC cycle tracking: Indication, Correction, Consolidation, Continuation, and No Setup phases
Live structure detection shows potential peaks/troughs before full confirmation
Intelligent invalidation logic detects failed setups when market structure reverses
Dynamic phase backgrounds for instant visual confirmation
Three Types of Entry Signals:
Traditional Entries - Price crosses back through the original indication level (strongest signals)
"BUY" (green) / "SELL" (red)
Breakout Entries - Price breaks out of consolidation range in the same direction
"BUY" (green) / "SELL" (red)
Reversal Entries (Optional, can be toggled off) - Price breaks consolidation in opposite direction, indicating failed setup
"⚠ BUY" (yellow) / "⚠ SELL" (orange)
More aggressive, counter-trend signals
Can be disabled for more conservative trading
Professional Features:
Volatility-based support/resistance zones (ATR-adjusted) that adapt to market conditions
Historical zone tracking (0-3 configurable) with visual hierarchy
Comprehensive real-time info table displaying all key metrics
Full alert system for entries, indications, and consolidation detection
Visual distinction between high-confidence trend entries and cautionary reversal entries
📖 USAGE GUIDE
Entry Signal Types:
The indicator provides three types of entry signals with visual distinction:
Strong Entries (High Confidence):
"BUY" (bright green) / "SELL" (bright red)
Includes traditional entries (crossing back through indication level) and breakout entries (breaking consolidation in trend direction)
These are trend continuation or breakout signals with higher probability
Recommended for all traders
Reversal Entries (Caution - Counter-Trend):
"⚠ BUY" (yellow) / "⚠ SELL" (orange)
Triggered when price breaks out of correction/consolidation in the OPPOSITE direction
Indicates a failed setup and potential trend reversal
More aggressive, counter-trend plays
Can be toggled off in settings for more conservative trading
Recommended only for experienced traders or after thorough backtesting
Swing Length Settings:
The swing length determines how many bars on each side are needed to confirm a swing high/low. This is the most important setting for tuning the indicator to your style.
Auto Mode (Recommended for beginners): Toggle "Use Auto Timeframe Settings" ON
5-minute: 30 bars
15-minute: 20 bars
30-minute: 12 bars
1-hour: 7 bars
4-hour: 5 bars
Daily: 3 bars
Manual Mode: Toggle "Use Auto Timeframe Settings" OFF
Lower values (3-7): More aggressive, detects smaller swings
Pros: More signals, faster entries, catches smaller moves
Cons: More noise, more false signals, requires tighter stops
Best for: Scalping, active day trading, volatile markets
Higher values (12-20): More conservative, only major swings
Pros: More reliable signals, fewer false breakouts, clearer structure
Cons: Fewer signals, delayed entries, might miss smaller opportunities
Best for: Swing trading, position trading, trending markets
Default Manual Setting: 7 bars (balanced for 1H charts)
Minimum: 3 bars
Consolidation Bars Setting:
Determines how many bars without new structure are needed before flagging consolidation.
Lower values (3-10): Faster detection, catches brief pauses, more sensitive
Best for: Lower timeframes, volatile markets, avoiding any chop
Higher values (20-40): More reliable, only flags true extended consolidation
Best for: Higher timeframes, trending markets, patient traders
Current defaults scale with timeframe (more bars needed on shorter timeframes)
Historical S/R Zones:
Shows previous support and resistance levels to provide context.
Default: 2 historical zones (shows current + 2 previous)
Range: 0-3 zones
Visual Hierarchy: Older zones are more transparent with dashed borders
Usage: Higher numbers (2-3) show more historical context but can clutter the chart. Start with 2 and adjust based on your preference.
Live Structure Feature (Yellow Warning ⚠):
Provides early warning of potential structure changes before full confirmation.
What it does: Detects potential swing highs/lows after just 2 bars instead of waiting for full swing_length confirmation
Live Peak: Shows when a high is followed by 2 lower closes (potential top forming)
Live Trough: Shows when a low is followed by 2 higher closes (potential bottom forming)
Important: These are UNCONFIRMED - they may be invalidated if price reverses
Use case: Get early awareness of potential reversals while waiting for confirmation
Displayed in: Info table only (no visual markers on chart to reduce clutter)
Only shows: Peaks higher than last swing high, or troughs lower than last swing low (filters out noise)
Higher Timeframe (HTF) Analysis:
View higher timeframe ICC structure while trading on lower timeframes.
How to enable: Toggle "Show Higher Timeframe ICC" ON
Setup: Set "Higher Timeframe" to your reference timeframe
Example: Trading on 15-minute? Set HTF to 240 (4-hour) or 60 (1-hour)
Example: Trading on 5-minute? Set HTF to 60 (1-hour) or 15 (15-minute)
What it shows:
HTF indication levels displayed as dashed lines
Blue = HTF Bullish Indication
Purple = HTF Bearish Indication
HTF phase and levels shown in info table
Trading workflow:
Check HTF phase for overall market direction
Wait for HTF correction phase
Drop to lower timeframe to find precise entries
Enter when lower TF shows continuation in alignment with HTF
Best practice: HTF should be 3-4x your trading timeframe for best results
Reversal Entries Toggle:
Default: ON (shows all signal types)
Toggle OFF for more conservative trading (only trend continuation signals)
Recommended: Backtest with both settings to see which works better for your style
New traders should consider disabling reversal entries initially
Volatility-Based Zones:
When enabled, support/resistance zones automatically adjust their height based on ATR (Average True Range).
More volatile = wider zones
Less volatile = tighter zones
Toggle OFF for fixed-width zones
Community Feedback Welcome:
This is an evolving project and your input is valuable! Please share:
Bug reports and issues you encounter
Feature requests and suggestions for improvement
Results from your backtesting and live trading experience
Feedback on the reversal entry feature (too aggressive? working well?)
Ideas for better aligning with the ICC methodology
Perfect for traders learning or implementing the ICC methodology with the benefit of modern automation, multi-timeframe analysis, and flexible entry signal options.
Echo Chamber [theUltimator5]The Echo Chamber - When history repeats, maybe you should listen.
Ever had that eerie feeling you've seen this exact price action before? The Echo Chamber doesn't just give you déjà vu—it mathematically proves it, scales it, and projects what happened next.
📖 WHAT IT DOES
The Echo Chamber is an advanced pattern recognition tool that scans your chart's history to find segments that closely match your current price action. But here's where it gets interesting: it doesn't just find similar patterns - It expands and contracts the time window to create a uniquely scaled fractal. Patterns don't always follow the same timeframe, but they do follow similar patterns.
Using a custom correlation analysis algorithm combined with flexible time-scaling, this indicator:
Finds historical price segments that mirror your current market structure
Scales and overlays them perfectly onto your current chart
Projects forward what happened AFTER that historical match
Gives you a visual "echo" from the past with a glimpse into potential futures
══════════════════════════════
HOW TO USE IT
This indicator starts off in manual mode, which means that YOU, the user, can select the point in time that you want to project from. Simply click on a point in time to set the starting value.
Once you select your point in time, the indicator will automatically plot the chosen historical chart pattern and correlation over the current chart and project the price forwards based on how the chart looked in the past. If you want to change the point in time, you can update it from the settings, or drag the point on the chart over to a new position.
You can manually select any point in time, and the chart will quickly update with the new pattern. A correlation will be shown in a table alongside the date/timestamp of the selected point in time.
You can switch to auto mode, which will automatically search out the best-fit pattern over a defined lookback range and plot the past/future projection for you without having to manually select a point in time at all. It simply finds the best fit for you.
You can change the scale factor by adjusting multiplication and division variables to find time-scaled fractal patterns.
══════════════════════════════
🎯 KEY FEATURES
Two Operating Modes:
🔧 MANUAL MODE - Select any historical point and see how it correlates with current price action in real-time. Perfect for:
• Analyzing specific past events (crashes, rallies, consolidations)
• Testing historical patterns against current conditions
• Educational analysis of market structure repetition
🤖 AUTO MODE - It automatically scans through your lookback period to find the single best-correlated historical match. Ideal for:
• Quick pattern discovery
• Systematic trading approach
• Unbiased pattern recognition
Time Warp Technology:
The time warp feature expands and compresses the correlation window to provide a custom fractal so you can analyze windows of time that don't necessarily match the current chart.
💡 *Example: Multiplier=3, Divisor=2 gives you a 1.5x time stretch—perfect for finding patterns that played out 50% slower than current price action.*
Drawing Modes:
Scale Only : Pure vertical scaling—matches price range while maintaining temporal alignment at bar 0
Rotate & Scale : Advanced geometric transformation that anchors both the start AND end points, creating a rotated fit that matches your current segment's slope and range
Visual Components:
🟠 Orange Overlay : The historical match, perfectly scaled to your current price action
🟣 Purple Projection : What happened NEXT after that historical pattern (dotted line into the future)
📦 Highlight Boxes : Shows you exactly where in history these patterns came from
📊 Live Correlation Table : Real-time correlation coefficient with color-coded strength indicator
══════════════════════════════
⚙️ PARAMETERS EXPLAINED
Correlation Window Length (20) : How many bars to match. Smaller = more precise matches but noisier. Larger = broader patterns but fewer matches.
Note: if this value is too high in auto mode, the script may time out from computational overload.
Multiplication Factor : Historical time multiplier. 2 = sample every 2nd bar from history. Higher values find slower historical patterns.
Division Factor : Historical time divisor applied after multiplication. Final sample rate = (Length × Factor) ÷ Divisor, rounded down.
Lookback Range : How far back to search for patterns. More history = better chance of finding matches but slower performance.
Note: if this value is too high in auto mode, the script may time out from computational overload.
Future Projection Length : How many bars forward to project from the historical match. Your crystal ball's focal length.
══════════════════════════════
💼 TRADING APPLICATIONS
Trend Continuation/Reversal :
If the purple projection continues the current trend, that's your historical confirmation. If it reverses, you've found a potential turning point that's happened before under similar conditions.
Support/Resistance Validation :
Does the projection respect your S/R levels? History suggests those levels matter. Does it break through? You've found historical precedent for a breakout.
Time-Based Exits :
The projection shows not just WHERE price might go, but WHEN. Use it to anticipate timing of moves.
Multi-Timeframe Analysis :
Use time compression to overlay higher timeframe patterns onto lower timeframes. See daily patterns on hourly charts, weekly on daily, etc.
Pattern Education :
In Manual Mode, study how specific historical events correlate with current conditions. Build your pattern recognition library.
══════════════════════════════
📊 CORRELATION TABLE
The table shows your correlation coefficient as a percentage:
80-100%: Extremely strong correlation—history is practically repeating
60-80%: Strong correlation—significant similarity
40-60%: Moderate correlation—some structural similarity
20-40%: Weak correlation—limited similarity
0-20%: Very weak correlation—essentially random match
-20-40%: Weak inverse correlation
-40-60%: Moderate inverse correlation
-60-80%: Strong inverse correlation
-80-100%: Extremely strong inverse correlation—history is practically inverting
**Important**: The correlation measures SHAPE similarity, not price level. An 85% correlation means the price movements follow a very similar pattern, regardless of whether prices are higher or lower.
══════════════════════════════
⚠️ IMPORTANT DISCLAIMERS
- Past performance does NOT guarantee future results (but it sure is interesting to study)
- High correlation doesn't mean causation—markets are complex adaptive systems
- Use this as ONE tool in your analytical toolkit, not a standalone trading system
- The projection is what HAPPENED after a similar pattern in the past, not a prediction
- Always use proper risk management regardless of what the Echo Chamber suggests
══════════════════════════════
🎓 PRO TIPS
1. Start with Auto Mode to find high-correlation matches, then switch to Manual Mode to study why that period was similar
2. Experiment with time warping on different timeframes—a 2x factor on a daily chart lets you see weekly patterns
3. Watch for correlation decay —if correlation drops sharply after the match, current conditions are diverging from history
4. Combine with volume —check if volume patterns also match
5. Use "Rotate & Scale" mode when the current trend angle differs from the historical match
6. Increase lookback range to 500-1000+ on daily/weekly charts for finding rare historical parallels
══════════════════════════════
🔧 TECHNICAL NOTES
- Uses Pearson correlation coefficient for pattern matching
- Implements range-based scaling to normalize different price levels
- Rotation mode uses linear interpolation for geometric transformation
- All calculations are performed on close prices
- Boxes highlight actual historical bar ranges (high/low)
- Maximum of 500 lines and 500 boxes for performance optimization
Reversal_Detector//@version=6
indicator("상승 반전 탐지기 (Reversal Detector)", overlay=true)
// ==========================================
// 1. 설정 (Inputs)
// ==========================================
rsiLen = input.int(14, title="RSI 길이")
lbR = input.int(5, title="다이버전스 확인 범위 (오른쪽)")
lbL = input.int(5, title="다이버전스 확인 범위 (왼쪽)")
rangeUpper = input.int(60, title="RSI 과매수 기준")
rangeLower = input.int(30, title="RSI 과매도 기준")
// ==========================================
// 2. RSI 상승 다이버전스 계산 (핵심 로직)
// ==========================================
osc = ta.rsi(close, rsiLen)
// 피벗 로우(Pivot Low) 찾기: 주가의 저점
plFound = na(ta.pivotlow(osc, lbL, lbR)) ? false : true
// 다이버전스 조건 확인
// 1) 현재 RSI 저점이 이전 RSI 저점보다 높아야 함 (상승)
// 2) 현재 주가 저점이 이전 주가 저점보다 낮아야 함 (하락)
showBull = false
if plFound
// 이전 피벗 지점 찾기
oscLow = osc
priceLow = low
// 과거 데이터를 탐색하여 직전 저점과 비교
for i = 1 to 60
if not na(ta.pivotlow(osc, lbL, lbR) ) // 이전에 저점이 있었다면
prevOscLow = osc
prevPriceLow = low
// 다이버전스 조건: 가격은 더 떨어졌는데(Lower Low), RSI는 올랐을 때(Higher Low)
if priceLow < prevPriceLow and oscLow > prevOscLow and oscLow < rangeLower
showBull := true
break // 하나 찾으면 루프 종료
// ==========================================
// 3. 보조 조건 (MACD 골든크로스 & 이평선)
// ==========================================
= ta.macd(close, 12, 26, 9)
macdCross = ta.crossover(macdLine, signalLine) // MACD 골든크로스
ma5 = ta.sma(close, 5)
ma20 = ta.sma(close, 20)
maCross = ta.crossover(ma5, ma20) // 5일선이 20일선 돌파
// ==========================================
// 4. 시각화 (Plotting)
// ==========================================
// 1) 상승 다이버전스 발생 시 (강력한 바닥 신호)
plotshape(showBull,
title="상승 다이버전스",
style=shape.labelup,
location=location.belowbar,
color=color.red,
textcolor=color.white,
text="Bull Div\n(바닥신호)",
size=size.small,
offset=-lbR) // 과거 시점에 표시
// 2) MACD 골든크로스 (추세 확인용)
plotshape(macdCross and macdLine < 0, // 0선 아래에서 골든크로스 날 때만
title="MACD 골든크로스",
style=shape.triangleup,
location=location.belowbar,
color=color.yellow,
size=size.tiny,
text="MACD")
// 3) 이동평균선
plot(ma5, color=color.blue, title="5일선")
plot(ma20, color=color.orange, title="20일선")
// 알림 설정
alertcondition(showBull, title="상승 다이버전스 포착", message="상승 다이버전스 발생! 추세 반전 가능성")
Trinity CCI Pro PlusWhat It Is
Trinity CCI Pro Plus is an innovative overlay indicator that reimagines the classic Commodity Channel Index (CCI) by plotting its levels directly on the price chart. No more separate oscillator panel—instead, you get dynamic price-based bands and lines for instant momentum insights.
What You See on the Chart
Orange line: The CCI zero line (20-period SMA of typical price, hlc3)—acts as the baseline.
Aqua line: Dynamic upper band at CCI = +100 (overbought threshold).
Purple line: Dynamic lower band at CCI = -100 (oversold threshold).
Optional thick purple line: The extra SMA of CCI (14-period smooth) scaled back to price—serves as a signal line for crossovers.
Optional outer zones: ±200 bands (aqua/purple extensions) for extreme momentum levels, often added as dotted or filled areas to spot blow-off tops/bottoms.
Key Differences from Regular CCI
Standard CCI lives in a lower pane with fixed horizontal lines at +100, 0, and -100, forcing you to split your focus. This version overlays everything on price: the bands curve with market volatility, the zero line becomes a moving average, and the extra SMA/signal line integrates seamlessly for price-action trading. Plus, it naturally supports outer ±200 zones without extra coding, making extremes visually pop.
How Traders Use It
Momentum breakouts: Buy when price closes above the +100 aqua band (or +200 for aggressive entries); sell below -100 purple (or -200).
Mean reversion: Fade touches on the bands—take profits if price rejects the +100/-100 levels, or watch for exhaustion at ±200.
Trend bias: Price above orange zero = bullish filter; below = bearish. Use the extra SMA for confirmation (e.g., price crossing above it signals upside).
Crossover signals: Price vs. the thick purple SMA line—bullish above, bearish below—pairs perfectly with band breaks.
Range trading: Treat ±100 bands as dynamic support/resistance; outer ±200 zones highlight potential breakout setups.
This setup shines in trending markets (e.g., stocks or forex on 1H/daily charts), turning CCI into a one-glance channel system. Start with the defaults, add the ±200 and extra SMA via simple code tweaks, and backtest for your style—it's versatile and reduces screen clutter dramatically.
More Info
The 20 period MA is the original and still the most common setting for CCI, and it is exactly what the creator of the CCI, Donald Lambert, published it in 1980 with these exact parameters:
Length: 20 periods
Constant: 0.015 (to make CCI fall between +100 and –100 about 70–80 % of the time)
Typical Price: hlc3 (or sometimes (high + low + close)/3)
Deviation measure: Mean Deviation (not standard deviation)
So the “Trinity CCI Pro Plus” you are using is 100 % faithful to Lambert’s original design when the length is set to 20.
VCP Base Detector
📊 VCP BASE DETECTOR - AUTO-DETECT CONSOLIDATION ZONES
🎯 WHAT IS THIS INDICATOR?
This indicator automatically detects and marks ALL consolidation bases (VCP bases) on your chart. It:
✅ Auto-detects when price enters consolidation
✅ Measures base tightness (volatility contraction)
✅ Tracks base duration (how long consolidating)
✅ Rates base quality (1-5 stars)
✅ Shows volume drying confirmation
✅ Detects base breakouts
✅ Shows progression of multiple bases (VCP pattern)
Use this WITH the "Mark Minervini SEPA Balanced" indicator for complete trading setups!
✅ Mark Minervini SEPA Balanced = Trend + RS + Stage
✅ VCP Base Detector = Base Quality + Progression
Combined = Complete professional trading system!
🎨 WHAT YOU SEE ON YOUR CHART
1️⃣ COLORED BOXES (Base Zones):
🟦 Aqua Box = ⭐⭐⭐⭐⭐ Excellent base (tightest)
🔵 Blue Box = ⭐⭐⭐⭐ Very good base
🟣 Purple Box = ⭐⭐⭐ Good base
🟠 Orange Box = ⭐⭐ Fair base
⬜ Gray Box = ⭐ Weak base
2️⃣ BASE LABELS (With Metrics):
Shows above each base:
• Duration: 20 days
• Tightness: 0.9%
• Quality: ⭐⭐⭐⭐⭐
3️⃣ BREAKOUT LABELS (When price exits base):
Green "BREAKOUT ✓" label shows:
• Price: ₹800
• Volume: 1.6x
4️⃣ DASHBOARD (Top-Left Panel):
Real-time base metrics showing:
• In Base: YES/NO
• Tightness: 0.8%
• Duration: 22 days
• Range: 3.5%
• Volume: Drying/Normal
• Quality: ⭐⭐⭐⭐
📊 UNDERSTANDING BASE QUALITY (⭐ Rating System)
⭐⭐⭐⭐⭐ (EXCELLENT)
├─ Tightness: < 0.8% ATR
├─ Duration: 15-40 days
├─ Volume: Significantly drying
├─ Price Range: < 5%
└─ Result: Most explosive breakouts (best quality)
⭐⭐⭐⭐ (VERY GOOD)
├─ Tightness: 0.8-1.0% ATR
├─ Duration: 15-35 days
├─ Volume: Very dry
├─ Price Range: < 7%
└─ Result: High probability breakouts
⭐⭐⭐ (GOOD)
├─ Tightness: 1.0-1.3% ATR
├─ Duration: 15-30 days
├─ Volume: Drying
├─ Price Range: < 8%
└─ Result: Decent breakout probability
⭐⭐ (FAIR)
├─ Tightness: 1.3-1.5% ATR
├─ Duration: 15-25 days
├─ Volume: Moderate drying
├─ Price Range: < 10%
└─ Result: Lower quality, riskier
⭐ (WEAK)
├─ Tightness: > 1.5% ATR
├─ Duration: Varies
├─ Volume: Not drying enough
├─ Price Range: > 10%
└─ Result: Low quality, skip these
📈 HOW TO USE - STEP BY STEP
STEP 1: ADD INDICATOR TO CHART
────────────────────────────────
1. Open any stock chart (use 1D timeframe for swing trading)
2. Click "Indicators"
3. Search "VCP Base Detector"
4. Click to add to chart
5. Wait a moment for boxes to appear
STEP 2: SCAN FOR BASES
───────────────────────
Look for:
✓ Colored boxes appearing on chart (bases forming)
✓ Dashboard showing "In Base: YES"
✓ Tightness below 1.5%
✓ Volume Dry: YES
STEP 3: MONITOR BASE QUALITY
──────────────────────────────
Dashboard shows stars:
⭐⭐⭐⭐⭐ = Wait for breakout (best setup)
⭐⭐⭐⭐ = Good quality, watch for breakout
⭐⭐⭐ = Decent, but not ideal
⭐⭐ or ⭐ = Skip (lower probability)
STEP 4: WAIT FOR BREAKOUT
──────────────────────────
When price breaks above the box:
✓ Green "BREAKOUT ✓" label appears
✓ Shows breakout price and volume
✓ If volume shows 1.3x+, breakout is confirmed
✓ This is your entry signal!
STEP 5: CHECK MINERVINI CRITERIA (Use Both Indicators)
───────────────────────────────────────────────────────
Before entering:
✓ VCP Base Detector shows ⭐⭐⭐⭐+ quality base
✓ Mark Minervini indicator shows BUY SIGNAL
✓ Dashboard shows 10+ criteria GREEN
✓ Stage shows S2
Result: HIGH-PROBABILITY SETUP! 🎯
📋 DASHBOARD INDICATORS - WHAT EACH MEANS
BASE METRICS SECTION:
─────────────────────
In Base = ✓ YES or ✗ NO
Show if price is currently consolidating
Tightness = 0-3% (lower = tighter = better)
< 0.8% = ⭐⭐⭐⭐⭐ (excellent)
0.8-1.0% = ⭐⭐⭐⭐ (very good)
1.0-1.3% = ⭐⭐⭐ (good)
1.3-1.5% = ⭐⭐ (fair)
> 1.5% = ⭐ (weak)
Duration = Number of days in consolidation
15 days = ⭐ (too short, weak)
20 days = ⭐⭐⭐ (ideal)
30 days = ⭐⭐⭐⭐ (very long, strong)
> 40 days = ⚠️ (too long, may break down)
Range = % movement within the base
< 5% = ⭐⭐⭐⭐⭐ (excellent, very tight)
5-8% = ⭐⭐⭐ (good)
> 10% = ⭐ (loose, not ideal)
Vol Dry = Volume status during consolidation
✓ YES = Volume contracting (good)
✗ NO = Normal/high volume (weak setup)
QUALITY SECTION:
────────────────
Stars = Overall base quality rating
⭐⭐⭐⭐⭐ = Best quality bases (most explosive)
⭐⭐⭐⭐ = Excellent quality
⭐⭐⭐ = Good quality
⭐⭐ = Fair quality
⭐ = Weak quality (skip)
52W INFO SECTION:
─────────────────
From 52W Hi = How far below 52-week high is price?
< 25% = In sweet zone ✓
> 25% = Too far from highs ✗
From 52W Lo = How far above 52-week low is price?
> 30% = In sweet zone ✓
< 30% = Too close to lows ✗
⚙️ CUSTOMIZATION GUIDE
Click ⚙️ gear icon next to indicator to adjust:
MINIMUM BASE DAYS (Default: 15)
──────────────────────────────
Current: 15 = Include shorter bases
Change to 20 = Longer bases only (higher quality)
Change to 10 = Include very short bases (more frequent)
Why: Longer bases = better breakouts, but fewer opportunities
ATR% TIGHTNESS THRESHOLD (Default: 1.5)
────────────────────────────────────────
Current: 1.5 = BALANCED for Indian stocks
Change to 1.0 = ONLY very tight bases (⭐⭐⭐⭐⭐)
Change to 2.0 = Looser bases included (more frequent)
Why: Lower = tighter bases = better quality, fewer signals
VOLUME DRYING THRESHOLD (Default: 0.7)
──────────────────────────────────────
Current: 0.7 = Volume at 70% of average (good drying)
Change to 0.6 = Stricter (more volume drying required)
Change to 0.8 = Looser (less volume drying required)
Why: Volume drying = consolidation confirmation
52W PERIOD (Default: 252)
─────────────────────────
Current: 252 = Full year lookback
Don't change unless you know what you're doing
📈 REAL TRADING EXAMPLE
SCENARIO: Trading MARUTI over 6 weeks
WEEK 1: Nothing happening
─────────────────────────
- No boxes on chart
- Dashboard: "In Base: NO"
- Action: SKIP (not consolidating)
WEEK 2: Base Starting to Form
─────────────────────────────
- Purple box appears (⭐⭐⭐ quality)
- Dashboard: "In Base: YES"
- Tightness: 1.2%
- Duration: 3 days (too new)
- Action: MONITOR (let it develop)
WEEK 3-4: Base Tightening
──────────────────────────
- Box color changes from Purple → Blue (⭐⭐⭐⭐ quality)
- Dashboard: Duration: 12 days
- Tightness: 0.9%
- Vol Dry: YES
- Action: GET READY (high-quality base forming)
WEEK 4-5: Perfect Base Formed
──────────────────────────────
- Box changes to Aqua (⭐⭐⭐⭐⭐ EXCELLENT!)
- Dashboard: Duration: 22 days ✓
- Tightness: 0.8% ✓
- Vol Dry: YES ✓
- Range: 4.2% ✓
- Action: WATCH FOR BREAKOUT
WEEK 5: BREAKOUT HAPPENS!
──────────────────────────
- Price closes above box
- Green "BREAKOUT ✓" label appears
- Shows: Price ₹850, Volume 1.6x
- Mark Minervini indicator: BUY SIGNAL ✓
- Dashboard all GREEN ✓
- Action: ENTER TRADE
Entry: ₹850
Stop: Box low (₹820)
Target: ₹980 (20% move)
RESULT: +15.3% profit in 2 weeks! ✅
💡 PRO TIPS FOR BEST RESULTS
1. COMBINE WITH MINERVINI INDICATOR
Use BOTH indicators together:
✓ VCP Detector = Base quality
✓ Minervini = Trend + RS + Volume
Result = Best high-probability setups
2. PREFER ⭐⭐⭐⭐+ QUALITY BASES
Don't trade ⭐⭐ or ⭐ quality bases
Only trade ⭐⭐⭐+ (ideally ⭐⭐⭐⭐+)
Higher quality = Higher win rate
3. WAIT FOR VOLUME CONFIRMATION
Base must show "Vol Dry: YES"
Breakout must have 1.3x+ volume
Low volume breakouts fail often
4. USE 1D TIMEFRAME ONLY
This indicator optimized for daily charts
Intraday = Too many false signals
Weekly = Misses good setups
5. MONITOR MULTIPLE BASES (VCP PATTERN)
Multiple bases getting tighter = VCP pattern
Each base should be better quality than last
Tightest base = Biggest breakout
6. COMBINE WITH 52W CONTEXT
Dashboard shows "From 52W Hi" and "From 52W Lo"
Price should be in sweet zone:
< 25% from 52W high (uptrend territory)
> 30% above 52W low (not oversold)
7. BACKTEST FIRST
Use TradingView Replay
Go back 6-12 months
See how many bases appeared
See which were profitable
❌ BASES TO SKIP (Lower Probability)
Skip if:
❌ Quality rating < ⭐⭐⭐ (only 1-2 stars)
❌ Tightness > 1.5% (too loose)
❌ Duration < 10 days (too short, weak)
❌ Duration > 50 days (too long, may break down)
❌ Vol Dry: NO (volume not contracting)
❌ Range > 10% (not tight consolidation)
❌ Price < 30% from 52W low (too weak)
❌ Price > 30% from 52W high (too far up, late entry)
⚠️ IMPORTANT DISCLAIMERS
✓ This indicator is for educational purposes only
✓ Past performance does not guarantee future results
✓ Always use proper risk management (position sizing, stop loss)
✓ Never risk more than 2% of your account on one trade
✓ Base detection is technical analysis, not investment advice
✓ Losses can occur - trade at your own risk
✓ Combine with other indicators for best results
🎓 LEARNING RESOURCES
To understand VCP bases better:
→ Study "Trade Like a Stock Market Wizard" by Mark Minervini
→ Watch: "VCP Pattern" videos on YouTube
→ Practice: Backtest on 1-2 years of historical data
→ Learn: How consolidation precedes breakouts
🚀 YOU'RE READY!
Happy trading! 📈🎯
Support & Resistance Pro by 🅰🅻🅿Support & Resistance Pro by 🅰🅻🅿
A Multi-Layer Market Structure Engine for Professional Price Analysis
Support & Resistance Pro is a next-generation price structure algorithm designed to identify the most meaningful support and resistance levels across any market or timeframe.
Instead of relying on simple fractals, random pivots, or fixed-distance lines, this script analyzes the way price interacts with historical levels — including wick reactions, close rejections, structural pivots, retests, and liquidity sweeps.
The result is a clean, intelligent, and highly accurate market structure map that adapts to every style of trading.
🚀 Key Features
1. Multi-Layer S/R Engine (Up to 20 Dynamic Levels)
The algorithm computes and ranks up to 20 unique levels , from strongest to weakest.
Each level is scored using:
Structural pivot strength
Number of historical touches
Closeness of each interaction
Market memory & reaction weight
Breakout and retest behavior
This produces an objective hierarchy of price levels — ideal for scalping, day trading, or swing analysis.
2. Smart Strength Filter
To remove noise, the Smart Strength Filter evaluates how often price has interacted with each level and hides the ones that lack significance.
You can customize:
Lookback range
Minimum touch count
Touch tolerance sensitivity
This ensures your chart displays only the most relevant and reliable structural zones for the current environment.
3. Heat Map Intensity Coloring
Levels automatically change opacity based on their strength:
More touches → stronger color
Fewer touches → lighter color
This creates a natural visual heat map that highlights where market memory is strongest — perfect for identifying high-probability breakout or reversal zones.
4. Multi-Timeframe Compatibility
Project higher timeframe S/R onto lower timeframe charts to enhance confluence:
Day traders: render 4H levels on 5m–15m
Swing traders: render 1D levels on 1H
Scalpers: render 1H levels on 1m–3m
This gives you powerful structural awareness without switching charts.
5. Clean Visual Design
Every element has been designed to stay out of your way:
Choose your preferred level count (8–20)
Adjustable line thickness
Label sizing and offset controls
Optional price tags
Light or dark color-friendly styling
The visual layout is clean, modern, and tailored for long chart sessions.
6. Profile Presets for Every Trader
Four built-in trading profiles are included:
Scalp Mode
Reactive levels
Tight tolerance
Best for 1m–5m
Day Trade Mode
Balanced structure
Ideal for 5m–1H
Swing Mode
Broad pivots
Higher significance
Perfect for 4H–1D
Custom Mode
Full control over every parameter.
🎯 How Traders Use This
Identify major reversal zones
Find liquidity pockets before they form
Improve breakout accuracy
Locate fair-value areas for entries
Combine HTF structure with LTF setups
Simplify noise-heavy charts
Whether you’re looking for scalping precision or long-term structure, the indicator adapts instantly.
⚠️ Disclaimer
This script is intended for market analysis and educational purposes only.
It does not constitute financial advice.
Always backtest and verify settings before trading live markets.
🅐🅛🅟 – Author
Created with care, precision, and countless hours of testing by alpprofitmax.
Licensed under the Mozilla Public License 2.0.
Minervini VCP Pattern -Indian ContextThis script implements Mark Minervini's Trend Template and VCP (Volatility Contraction Pattern) pattern, specifically adapted for Indian stock markets (NSE). It helps identify stocks that are in strong uptrends and ready to break out.
Core Concepts Explained
1. What is the Minervini Trend Template?
Mark Minervini's method identifies stocks in Stage 2 uptrends - the sweet spot where institutional money is accumulating and stocks show the strongest momentum. Think of it as finding stocks that are "leaders" rather than "laggards."
2. What is VCP (Volatility Contraction Pattern)?
A VCP occurs when:
Stock price consolidates (moves sideways) after an uptrend
Price swings get tighter and tighter (like a coiled spring)
Volume dries up (fewer people trading)
Then it breaks out with force.
You can customize the strategy settings without editing code.
Key Settings:
Minimum Price (₹50): Filters out penny stocks that are too volatile
Min Distance from 52W Low (30%): Stock should be at least 30% above its yearly low
Max Distance from 52W High (25%): Stock should be within 25% of its yearly high (showing strength)
Moving Average Periods: 10, 50, 150, 200 days (industry standard)
Minimum Volume (100,000 shares): Ensures the stock is liquid enough to trade
Indian Market Adaptation: The default values (₹50 minimum, volume thresholds) are adjusted for NSE stocks, which behave differently than US markets.
The script pulls weekly chart data even when you're viewing daily charts.
Why it matters: Weekly trends are more reliable than daily noise. Professional traders use weekly charts to confirm the bigger picture.
What are Moving Averages (MAs)?
Simple averages of closing prices over X days
They smooth out price action to show trends
Think of them as the "average cost" of buyers over different time periods
The 4 Key MAs:
10 MA (Fast): Very short-term trend
50 MA: Short to medium-term trend
150 MA: Medium to long-term trend
200 MA: Long-term trend (the "grandfather" of all MAs)
Why Weekly MAs?
The script also calculates 10 and 50 MAs on weekly data for additional confirmation of the bigger trend.
The script Finds the highest and lowest prices over the past 52 weeks (1 year).
Why it matters:
Stocks near 52-week highs are showing strength (institutions buying)
Stocks far from 52-week lows have "room to run" upward
This is a psychological level that influences trader behaviour.
What is Volume here ?
The number of shares traded each day
High volume = many traders interested (conviction)
Low volume = lack of interest (weakness or consolidation)
Volume in VCP:
During consolidation (sideways movement), volume should dry up - this shows sellers are exhausted and buyers are holding. When volume spikes on a breakout, it confirms the move.
NSE Context: Indian stocks often have different volume patterns than US stocks, so the 50-day average is used as a baseline.
Relative Strength vs Nifty:
Example:
If your stock is up 20% and Nifty is up 10%, your stock has strong RS
If your stock is up 5% and Nifty is up 15%, your stock has weak RS (avoid it!)
Why it matters: The best performing stocks almost always have strong relative strength before major moves.
The 13 Minervini Conditions:-
Condition 1: Price > 50/150/200 MA
Meaning: Current price must be above ALL three major moving averages.
Why: This confirms the stock is in a clear uptrend. If price is below these MAs, the stock is weak or in a downtrend.
Condition 2: MA 50 > 150 > 200
Meaning: The moving averages themselves must be in proper order.
Analogy: Think of this like layers in a cake - short-term on top, long-term at bottom. If they're tangled, the trend is unclear.
Condition 3: 200 MA Rising (1 Month)
Meaning: The 200 MA today must be higher than it was 20 days ago.
Why: This confirms the long-term trend is UP, not flat or down. The means "20 bars ago."
Condition 4: 50 MA Rising
Meaning: The 50 MA today must be higher than 5 days ago.
Why: Confirms short-term momentum is accelerating upward.
Condition 5: Within 25% of 52-Week High
Meaning: Current price should be within 25% of its 1-year high.
Example:
52-week high = ₹1000
Current price must be above ₹750 (within 25%)
Why: Strong stocks stay near their highs. Weak stocks fall far from highs.
Condition 6: 30%+ Above 52-Week Low (OPTIONAL)
Meaning: Stock should be at least 30% above its yearly low.
Note: The script marks this as "SECONDARY - Optional" because the other conditions are more important. However, it's still a good confirmation.
Condition 7: Price > 10 MA
Meaning: Very short-term strength - price above the 10-day moving average.
Why: Ensures the stock hasn't just rolled over in the immediate term.
Condition 8: Price >= ₹50
Meaning: Filters out stocks below ₹50.
Why: In Indian markets, stocks below ₹50 tend to be penny stocks with poor liquidity and higher manipulation risk.
Condition 9: Weekly Uptrend
Meaning: On the weekly chart, price must be above both weekly MAs, and they must be properly aligned.
Why: Confirms the bigger picture trend, not just daily fluctuations.
Condition 10: 150 MA Rising
Meaning: The 150 MA is trending upward over the past 10 days.
Why: Another confirmation of medium-term trend health.
Condition 11: Sufficient Volume
Meaning: Average volume must exceed 100,000 shares (or your custom setting).
Why: Ensures you can actually buy/sell the stock without moving the price too much (liquidity).
Condition 12: RS vs Nifty Strong
Meaning: The stock's relative strength vs Nifty must be improving.
Why: You want stocks that are outperforming the market, not underperforming.
Condition 13: Nifty in Uptrend
Meaning: The Nifty 50 index itself must be above its 50 MA.
Why: "A rising tide lifts all boats." It's easier to make money in individual stocks when the overall market is bullish.
VCP Requirements:
Volatility Contracting: Price swings getting tighter (coiling spring)
Volume Drying Up: Fewer shares trading + trending lower
The Setup: When volatility contracts and volume dries up WHILE all 13 trend conditions are met, you have a VCP setup ready to explode.
What You See on Chart:
Colored Lines: 10 MA (green), 50 MA (blue), 150 MA (orange), 200 MA (red)
Blue Background: Trend template conditions met (watch zone)
Green Background: Full VCP setup detected (buy zone)
↟ Symbol Below Price: New VCP buy signal just triggered
Information Table:
What it does: Creates a checklist table on your chart showing the status of all conditions.
Table Structure:
Column 1: Condition name
Column 2: Status (✓ green = met, ✗ red = not met)
Final Row: Shows "BUY" (green) or "WAIT" (red) based on full VCP setup status.
Dos:
Example:
Account size: ₹5,00,000
Risk per trade: 1% = ₹5,000
Entry: ₹1000
Stop loss: ₹920 (8% below)
Distance to stop: ₹80
Shares to buy: ₹5,000 / ₹80 = 62 shares
Exit Strategy:
Sell 1/3 at +20% profit
Sell another 1/3 at +40% profit
Let the final 1/3 run with a trailing stop
Always exit if price closes below 10 MA on heavy volume
What This Script Does NOT Do:
Guarantee profits - No strategy works 100% of the time
Account for news events - Earnings, regulatory changes, etc.
Consider fundamentals - Company financials, debt, management quality
Adapt to market crashes - Works best in bull markets
Best Market Conditions:
✅ Nifty in uptrend (above 50 MA)
✅ Market breadth positive (more stocks advancing)
✅ Sector rotation happening
❌ Avoid in bear markets or high volatility periods
References:
Trade Like a Stock Market Wizard by Mark Minervini
Think & Trade Like a Champion by Mark Minervini
Chart attached: AU Small Finance Bank as on EoD dated 28/11/25
This script is a powerful tool for educational purpose only, remember: It's a tool, not a crystal ball. Use it to find high-probability setups, then apply proper risk management and patience. Good luck!
DarkPool's Gann High Low Activator DarkPool's Gann High-Low Activator.
It enhances the traditional trend-following logic by integrating Heikin Ashi smoothing, Multi-Timeframe (MTF) analysis, and volatility filtering. It is designed to filter out market noise and provide clearer trend signals during volatile conditions.
Underlying Concepts
Heikin Ashi Smoothing: Standard price candles can produce erratic signals due to wicks and short-term volatility. This script includes a "Calculation Mode" setting that allows the Gann logic to run on Heikin Ashi average prices. This smoothes out price data, helping traders stay in trends longer by ignoring temporary pullbacks.
Gann High-Low Logic: The core algorithm tracks the Simple Moving Average (SMA) of Highs and Lows over a user-defined period.
Bullish Trend: Price closes above the trailing SMA of Highs.
Bearish Trend: Price closes below the trailing SMA of Lows.
Volatility & Trend Filtering: To reduce false signals during sideways markets, this tool employs two filters:
ADX Filter (Choppiness): Uses the Average Directional Index to detect low-volatility environments. If the ADX is below the defined threshold (default 20), the indicator identifies the market as "choppy" and suppresses signals to preserve capital.
EMA Filter (Baseline): An optional Exponential Moving Average filter ensures trades are only taken in the direction of the longer-term trend (e.g., Longs only above the 200 EMA).
Features
Dual Calculation Modes: Switch between Standard price logic and Heikin Ashi smoothing logic.
Multi-Timeframe (MTF): Calculate the trend based on a higher timeframe (e.g., 4-Hour) while viewing a lower timeframe chart (e.g., 15-Minute).
Automated JSON Alerts: Generates machine-readable JSON alert payloads compatible with external trading bots and webhooks.
Live Dashboard: A data table displaying the current Trend State, Calculation Mode, ADX Value, and risk percentage.
How to Use
Buy Signal: Generated when the trend flips Bullish, provided the ADX indicates sufficient momentum and the price satisfies the EMA filter (if enabled).
Sell Signal: Generated when the trend flips Bearish, subject to the same momentum and trend filters.
Neutral State (Gray Cloud): When the cloud fill turns gray, the market is in consolidation. It is recommended to avoid entering new positions during this state.
Trailing Stop: The Gann Line serves as a dynamic trailing stop-loss level. A close beyond this line invalidates the current trend.
Settings Configuration
Calculation Mode: Select "Standard" for raw price action or "Heikin Ashi" for smoothed trend following.
Gann Length: Lower values (3-5) are suitable for short-term scalping; higher values (10+) are better for swing trading.
MTF Mode: Enable to lock the calculation to a specific higher timeframe.
ADX Threshold: Adjust based on asset volatility. Recommended: 20-25 for Crypto, 15-20 for Forex/Indices.
Disclaimer
This source code and the information presented here are for educational purposes only. This script does not constitute financial advice, trading recommendations, or a solicitation to buy or sell any financial instruments. Trading in financial markets involves a high degree of risk and may not be suitable for all investors. Past performance is not indicative of future results. The author assumes no responsibility for any losses incurred while using this indicator. Use this tool at your own discretion and risk.
Student Wyckoff Target Shooter
**Target Shooter — Equal Move Target Tool (Larry Williams idea)**
**1. What this indicator does**
Target Shooter is a tool that measures the last meaningful price swing and projects an **equal move target** in the direction of the breakout.
The logic is simple:
* The market makes a move from point A to point B (a swing high to a swing low, or vice versa).
* Then price breaks out above or below this swing range.
* Target Shooter takes the size of that swing and **adds it in the direction of the breakout**, showing a logical **price target zone** where the move may:
* slow down,
* react,
* or potentially reverse.
This is a practical implementation of the “Equal Moves” idea often referenced by Larry Williams.
---
**2. Core idea (example)**
Example from the classic explanation:
* Price drops from **80 down to 20** → the move is **60 points**.
* The swing range is now: **High = 80, Low = 20**.
* Later, price **breaks above 80**.
Target Shooter assumes:
> “If the market could move 60 points in one direction, after a breakout it may travel another 60 points in the opposite direction.”
So the upside target becomes:
* Move size: 80 − 20 = 60
* Breakout above 80
* **Target = 80 + 60 = 140**
The indicator finds such swings automatically and draws:
* **UT (Upper Target)** on upside breakouts
* **DT (Down Target)** on downside breakouts
---
**3. What you see on the chart**
1. **Target lines**
* When price breaks **above** a previous swing range, the indicator plots a horizontal **UT (Upper Target)** line — the projected equal move target.
* When price breaks **below** the previous swing range, it plots a **DT (Down Target)** line — the downside target.
* Each line is drawn from the breakout bar and extended to the right for a user-defined number of bars.
2. **Price labels**
* A small label “UT” or “DT” is shown at the end of the line with the exact target price.
* This makes it easy to see where the projected target is without checking the scale.
3. **Optional swing range (debug view)**
* There is an option to display the **swing range** that the target is based on (similar to a Donchian channel on previous bars).
* This shows the upper (swing high) and lower (swing low) boundaries the indicator used to define the last move.
---
**4. Key inputs (plain language)**
* **Swing window length (bars)**
How many bars back the indicator looks to find the last meaningful swing (highest high and lowest low).
This is like the length of a Donchian channel used to define the previous range.
Smaller values → more frequent, shorter targets.
Larger values → bigger swings and more distant targets.
* **Minimum move size (in ticks)**
This is a noise filter.
If the distance between the swing high and swing low is smaller than this threshold, no targets are drawn.
The indicator will only react to moves that are big enough to matter for your trading.
* **Breakout type: Close vs High/Low**
* **Breakout by Close**:
The target appears only when the **bar closes** above/below the swing range.
More conservative and fewer false signals.
* **Breakout by High/Low**:
The target appears as soon as the **high** or **low** of the bar breaks the swing range.
Faster and more aggressive, but more sensitive to noise.
* **Target line length (bars)**
How far to the right the UT/DT lines should be extended.
Shorter length → local target zones.
Longer length → important levels visible far into the future.
* **Appearance settings**
* Separate color, width and style for **UT** and **DT** lines.
* Option to show or hide labels with price and “UT/DT” text.
---
**5. How to use Target Shooter in trading**
> Important: this is **not** an entry signal indicator.
> Target Shooter is a **targeting and context tool**, not a standalone system.
Typical uses:
1. **Planning take-profit zones**
* You already have an entry signal from your own strategy (Wyckoff, Larry Williams patterns, levels, volume, whatever you use).
* Target Shooter shows a **logical equal move target** where the current wave can reasonably “shoot”.
* You can:
* place your main take-profit around the target,
* scale out part of the position,
* tighten stops when price approaches the target.
2. **Finding potential reaction / reversal areas**
* Equal move targets often act as **zones of interest**.
* If price reaches a UT/DT level and then shows weakness/absorption/volume spikes or reversal candles, this might be a good place to take profits or look for counter-trend opportunities (for experienced traders).
3. **Assessing trend strength**
* If price **easily exceeds** the equal move target and keeps going without any reaction, it suggests a very strong trend.
* If price **fails to reach** the target and reverses early, the move is weaker than expected.
---
**6. Timeframes**
Target Shooter can be used on:
* **Intraday** (M5, M15, M30, H1) — for shorter-term targets within the day,
* **Higher timeframes** (H4, D1 and above) — for swing and position trades.
General rule:
The **higher the timeframe and the larger the swing**, the **more important** the target level tends to be.
---
**7. Notes and limitations**
* The indicator does **not** predict the future.
It simply projects a geometric equal move from the last swing.
* It should be combined with your own trading framework:
* support/resistance,
* Wyckoff / VSA,
* trend tools,
* volume/flow, etc.
* Always keep proper risk management.
A target is a **scenario**, not a guarantee.
.
Advanced Trading System - Volume Profile + BB + RSI + FVG + FibAdvanced Multi-Indicator Trading System with Volume Profile, Bollinger Bands, RSI, FVG & Fibonacci
Overview
This comprehensive trading indicator combines five powerful technical analysis tools into one unified system, designed to identify high-probability trading opportunities with precision entry and exit signals. The indicator integrates Volume Profile analysis, Bollinger Bands, RSI momentum, Fair Value Gaps (FVG), and Fibonacci retracement levels to provide traders with a complete market analysis framework.
Key Features
1. Volume Profile & Point of Control (POC)
Automatically calculates the Point of Control - the price level with the highest trading volume
Identifies Value Area High (VAH) and Value Area Low (VAL)
Updates dynamically based on customizable lookback periods
Helps identify key support and resistance zones where institutional traders are active
2. Bollinger Bands Integration
Standard 20-period Bollinger Bands with customizable multiplier
Identifies overbought and oversold conditions
Measures market volatility through band width
Signals generated when price approaches extreme levels
3. RSI Momentum Analysis
14-period Relative Strength Index with visual background coloring
Overbought (70) and oversold (30) threshold alerts
Integrated into buy/sell signal logic for confirmation
Real-time momentum tracking in info dashboard
4. Fair Value Gap (FVG) Detection
Automatically identifies bullish and bearish fair value gaps
Visual representation with colored boxes
Highlights imbalance zones where price may return
Used for high-probability entry confirmation
5. Fibonacci Retracement Levels
Auto-calculated based on recent swing high/low
Key levels: 23.6%, 38.2%, 50%, 61.8%, 78.6%
Perfect for identifying profit-taking zones
Dynamic lines that update with market movement
6. Smart Signal Generation
The indicator generates BUY and SELL signals based on multi-condition confluence:
BUY Signal Requirements:
Price near lower Bollinger Band
RSI in oversold territory (< 30)
High volume confirmation (optional)
Bullish FVG or POC alignment
SELL Signal Requirements:
Price near upper Bollinger Band
RSI in overbought territory (> 70)
High volume confirmation (optional)
Bearish FVG or POC alignment
7. Automated Take Profit Levels
Three dynamic profit targets: 1%, 2%, and 3%
Automatically calculated from entry price
Visual markers on chart
Individual alerts for each level
8. Comprehensive Alert System
The indicator includes 10+ alert types:
Buy signal alerts
Sell signal alerts
Take profit level alerts (TP1, TP2, TP3)
Fibonacci level cross alerts
RSI overbought/oversold alerts
Bullish/Bearish FVG detection alerts
9. Real-Time Info Dashboard
Live display of all key metrics
Color-coded for quick visual analysis
Shows RSI, BB Width, Volume ratio, POC, Fib levels
Current signal status (BUY/SELL/WAIT)
How to Use
Setup
Add the indicator to your chart
Adjust parameters based on your trading style and timeframe
Set up alerts by clicking "Create Alert" and selecting desired conditions
Recommended Timeframes
Scalping: 5m - 15m
Day Trading: 15m - 1H
Swing Trading: 4H - Daily
Parameter Customization
Volume Profile Settings:
Length: 100 (adjust for more/less historical data)
Rows: 24 (granularity of volume distribution)
Bollinger Bands:
Length: 20 (standard period)
Multiplier: 2.0 (adjust for tighter/wider bands)
RSI Settings:
Length: 14 (standard momentum period)
Overbought: 70
Oversold: 30
Fibonacci:
Lookback: 50 (swing high/low detection period)
Signal Settings:
Volume Filter: Enable/disable volume confirmation
Volume MA Length: 20 (for volume comparison)
Trading Strategy Examples
Strategy 1: Trend Reversal
Wait for BUY signal at lower Bollinger Band
Confirm with bullish FVG or POC support
Enter position
Take partial profits at Fib 38.2% and 50%
Exit remaining position at TP3 or SELL signal
Strategy 2: Breakout Confirmation
Monitor price approaching POC level
Wait for volume spike
Enter on signal confirmation with FVG alignment
Use Fibonacci levels for scaling out
Strategy 3: Range Trading
Identify POC as range midpoint
Buy at lower BB with oversold RSI
Sell at upper BB with overbought RSI
Use FVG zones for additional confirmation
Best Practices
✅ Do:
Use multiple timeframe analysis
Combine with price action analysis
Set stop losses below/above recent swing points
Scale out at Fibonacci levels
Wait for volume confirmation on signals
❌ Don't:
Trade every signal blindly
Ignore overall market context
Use on extremely low timeframes without testing
Neglect risk management
Trade during low liquidity periods
Risk Management
Always use stop losses
Risk no more than 1-2% per trade
Consider market conditions and volatility
Scale position sizes based on signal strength
Use the volume filter for additional confirmation
Technical Specifications
Pine Script Version: 6
Overlay: Yes (displays on main chart)
Max Boxes: 500 (for FVG visualization)
Max Lines: 500 (for Fibonacci levels)
Alerts: 10+ customizable conditions
Performance Notes
This indicator works best in:
Trending markets with clear momentum
High-volume trading sessions
Assets with good liquidity
When multiple signals align
Less effective in:
Extremely choppy/sideways markets
Low-volume periods
During major news events (high volatility)
Updates & Support
This indicator is actively maintained and updated. Future enhancements may include:
Additional volume profile features
More sophisticated FVG tracking
Enhanced alert customization
Backtesting integration
Disclaimer
This indicator is for educational and informational purposes only. It does not constitute financial advice. Past performance does not guarantee future results. Always conduct your own research and consider consulting with a financial advisor before making trading decisions. Trading involves substantial risk of loss.
My script//@version=5
indicator("LTF Multi-Condition BUY Signal (v5 clean)", overlay=true, max_labels_count=100, max_lines_count=100)
// ───────────────── INPUTS ─────────────────
pivot_len = input.int(4, "Pivot sensitivity (structure)", minval=2, maxval=12)
range_len = input.int(20, "Range lookback for breakout", minval=5)
htf_tf = input.timeframe("480", "HTF timeframe (8H+)")
reclaim_window = input.int(5, "Reclaim window (bars)", minval=1)
ema_fast_len = input.int(9, "EMA fast length")
ema_slow_len = input.int(21, "EMA slow length")
rsi_len = input.int(14, "RSI length")
rsi_pivot_len = input.int(4, "RSI pivot sensitivity")
rsi_div_lookback = input.int(30, "RSI divergence max lookback (bars)")
daily_vol_mult = input.float(1.0, "Daily volume vs SMA multiplier", step=0.1)
htf_vol_sma_len = input.int(20, "HTF volume SMA length")
require_reclaim = input.bool(true, "Require HTF reclaim")
use_aggressive_HL = input.bool(false, "Aggressive HL detection")
// ───────────────── BASE INDICATORS ─────────────────
emaFast = ta.ema(close, ema_fast_len)
emaSlow = ta.ema(close, ema_slow_len)
rsiVal = ta.rsi(close, rsi_len)
// ───────────────── DAILY CHECKS (VOLUME & OBV) ─────────────────
// Daily OBV and previous value
daily_obv = request.security(syminfo.tickerid, "D",
ta.cum(ta.change(close) > 0 ? volume : ta.change(close) < 0 ? -volume : 0))
daily_obv_prev = request.security(syminfo.tickerid, "D",
ta.cum(ta.change(close) > 0 ? volume : ta.change(close) < 0 ? -volume : 0) )
// Daily volume & SMA
daily_vol = request.security(syminfo.tickerid, "D", volume)
daily_vol_sma = request.security(syminfo.tickerid, "D", ta.sma(volume, 20))
daily_vol_ok = not na(daily_vol) and not na(daily_vol_sma) and daily_vol > daily_vol_sma * daily_vol_mult
daily_obv_ok = not na(daily_obv) and not na(daily_obv_prev) and daily_obv > daily_obv_prev
// ───────────────── HTF SUPPORT / RECLAIM ─────────────────
htf_high = request.security(syminfo.tickerid, htf_tf, high)
htf_low = request.security(syminfo.tickerid, htf_tf, low)
htf_close = request.security(syminfo.tickerid, htf_tf, close)
htf_volume = request.security(syminfo.tickerid, htf_tf, volume)
htf_vol_sma = request.security(syminfo.tickerid, htf_tf, ta.sma(volume, htf_vol_sma_len))
htf_bull_reject = not na(htf_high) and not na(htf_low) and not na(htf_close) and (htf_close - htf_low) > (htf_high - htf_close)
htf_vol_confirm = not na(htf_volume) and not na(htf_vol_sma) and htf_volume > htf_vol_sma
htf_support_level = (htf_bull_reject and htf_vol_confirm) ? htf_low : na
// Reclaim: LTF close back above HTF support within N bars
reclaimed_now = not na(htf_support_level) and close > htf_support_level and ta.barssince(close <= htf_support_level) <= reclaim_window
htf_reclaim_ok = require_reclaim ? reclaimed_now : true
// ───────────────── STRUCTURE: BOS & HL (CoC) ─────────────────
swingHighVal = ta.pivothigh(high, pivot_len, pivot_len)
swingLowVal = ta.pivotlow(low, pivot_len, pivot_len)
swingHighCond = not na(swingHighVal)
swingLowCond = not na(swingLowVal)
lastSwingHigh = ta.valuewhen(swingHighCond, swingHighVal, 0)
prevSwingHigh = ta.valuewhen(swingHighCond, swingHighVal, 1)
lastSwingLow = ta.valuewhen(swingLowCond, swingLowVal, 0)
prevSwingLow = ta.valuewhen(swingLowCond, swingLowVal, 1)
bos_bull = not na(prevSwingHigh) and close > prevSwingHigh
hl_confirm = not na(lastSwingLow) and not na(prevSwingLow) and lastSwingLow > prevSwingLow and ta.barssince(swingLowCond) <= 30
if use_aggressive_HL
hl_confirm := hl_confirm or (low > low and ta.barssince(swingLowCond) <= 12)
// ───────────────── RSI BULLISH DIVERGENCE ─────────────────
rsiLowVal = ta.pivotlow(rsiVal, rsi_pivot_len, rsi_pivot_len)
rsiLowCond = not na(rsiLowVal)
priceAtRsiLowA = ta.valuewhen(rsiLowCond, low , 0)
priceAtRsiLowB = ta.valuewhen(rsiLowCond, low , 1)
rsiLowA = ta.valuewhen(rsiLowCond, rsiVal , 0)
rsiLowB = ta.valuewhen(rsiLowCond, rsiVal , 1)
rsi_div_ok = not na(priceAtRsiLowA) and not na(priceAtRsiLowB) and not na(rsiLowA) and not na(rsiLowB) and
(priceAtRsiLowA < priceAtRsiLowB) and (rsiLowA > rsiLowB) and ta.barssince(rsiLowCond) <= rsi_div_lookback
// ───────────────── RANGE BREAKOUT ─────────────────
range_high = ta.highest(high, range_len)
range_breakout = ta.crossover(close, range_high)
// ───────────────── EMA CROSS / TREND ─────────────────
ema_cross_happened = ta.crossover(emaFast, emaSlow)
ema_trend_ok = emaFast > emaSlow
// ───────────────── FINAL BUY CONDITION ─────────────────
all_price_checks = bos_bull and hl_confirm and rsi_div_ok and range_breakout
all_filter_checks = ema_trend_ok and ema_cross_happened and daily_vol_ok and daily_obv_ok and htf_reclaim_ok
buy_condition = all_price_checks and all_filter_checks
// ───────────────── PLOTS & ALERT ─────────────────
plotshape(
buy_condition,
title = "BUY Signal",
location = location.belowbar,
style = shape.labelup,
text = "BUY",
textcolor = color.white,
color = color.green,
size = size.small)
plot(htf_support_level, title="HTF Support", color=color.new(color.green, 0), linewidth=2, style=plot.style_linebr)
alertcondition(buy_condition, title="LTF BUY Signal", message="LTF BUY Signal on {{ticker}} ({{interval}}) — all conditions met")






















