@salmanadeem
//@version=5
strategy(title="3C Price Action indicator", shorttitle="3C Price Action in", overlay=true)
showVWAP = input(title='Show VWAP', defval=true)
ema2= input(title='Data 1', defval=false)
ema3= input(title='Data 2', defval=true)
showhhll = input(title='Real Time HH-LL', defval=true)
prd1 = [login to view URL](defval=8, title='HH-LL /Length', minval=2, maxval=100)
prd = [login to view URL](defval=10, title='S/R Length', minval=2, maxval=100)
maxnumsr = [login to view URL](defval=5, title='Number of S/R', minval=1, maxval=20) - 1
loopback = 200////
float ph = [login to view URL](close, prd,prd)
float pl = [login to view URL](low, prd,prd)
prdhighest = [login to view URL](200)
prdlowest = [login to view URL](200)
cwidth = (prdhighest - prdlowest) * 2 / 100
var pivotvals = array.new_float(0)
var pivotlocs = array.new_float(0)
if ph or pl
[login to view URL](pivotvals, ph ? ph : pl)
[login to view URL](pivotlocs, bar_index)
for x = [login to view URL](pivotvals) - 1 to 0 by 1
if bar_index - [login to view URL](pivotlocs, x) > loopback
[login to view URL](pivotvals)
[login to view URL](pivotlocs)
get_sr_vals(ind) =>
float lo = [login to view URL](pivotvals, ind)
float hi = lo
int numpp = 0
for y = 0 to [login to view URL](pivotvals) - 1 by 1
float cpp = [login to view URL](pivotvals, y)
float wdth = cpp <= hi ? hi - cpp : cpp - lo
if wdth <= cwidth
if cpp <= hi
lo := [login to view URL](lo, cpp)
hi := [login to view URL](hi, cpp)
numpp += 20
[hi, lo, numpp]
var sup = array.new_float(20, 0)
changeit(x, y) =>
tmp = [login to view URL](sup, y * 2)
[login to view URL](sup, y * 2, [login to view URL](sup, x * 2))
[login to view URL](sup, x * 2, tmp)
tmp := [login to view URL](sup, y * 2 + 1)
[login to view URL](sup, y * 2 + 1, [login to view URL](sup, x * 2 + 1))
[login to view URL](sup, x * 2 + 1, tmp)
if ph or pl
supres = array.new_float(0)
stren = array.new_float(10, 0)
for x = 0 to [login to view URL](pivotvals) - 1 by 1
[hi, lo, strength] = get_sr_vals(x)
[login to view URL](supres, strength)
[login to view URL](supres, hi)
[login to view URL](supres, lo)
for x = 0 to [login to view URL](pivotvals) - 1 by 1
h = [login to view URL](supres, x * 3 + 1)
l = [login to view URL](supres, x * 3 + 2)
s = 0
for y = 0 to loopback by 1
if high[y] <= h and high[y] >= l or low[y] <= h and low[y] >= l
s += 1
[login to view URL](supres, x * 3, [login to view URL](supres, x * 3) + s)
[login to view URL](sup, 0)
src = 0
for x = 0 to [login to view URL](pivotvals) - 1 by 1
stv = -1.
stl = -1
for y = 0 to [login to view URL](pivotvals) - 1 by 1
if [login to view URL](supres, y * 3) > stv and [login to view URL](supres, y * 3) >= 1 * 20
stv := [login to view URL](supres, y * 3)
stl := y
stl
if stl >= 0
hh = [login to view URL](supres, stl * 3 + 1)
ll = [login to view URL](supres, stl * 3 + 2)
[login to view URL](sup, src * 2, hh)
[login to view URL](sup, src * 2 + 1, ll)
[login to view URL](stren, src, [login to view URL](supres, stl * 3))
for y = 0 to [login to view URL](pivotvals) - 1 by 1
if [login to view URL](supres, y * 3 + 1) <= hh and [login to view URL](supres, y * 3 + 1) >= ll or
[login to view URL](supres, y * 3 + 2) <= hh and [login to view URL](supres, y * 3 + 2) >= ll
[login to view URL](supres, y * 3, -1)
src += 1
if src >= 10
break
for x = 0 to 8 by 1
for y = x + 1 to 9 by 1
if [login to view URL](stren, y) > [login to view URL](stren, x)
tmp = [login to view URL](stren, y)
[login to view URL](stren, y, [login to view URL](stren, x))
changeit(x, y)
get_level(ind) =>
float ret = na
if ind < [login to view URL](sup)
if [login to view URL](sup, ind) != 0
ret := [login to view URL](sup, ind)
get_color(ind) =>
color ret = na
if ind < [login to view URL](sup)
if [login to view URL](sup, ind) != 0
ret := [login to view URL](sup, ind) > close and [login to view URL](sup, ind + 1) > close ? #ff525259
: [login to view URL](sup, ind) < close and [login to view URL](sup, ind + 1) < close ? #089981b3 : #787b86b3
var srchannels = array.new_box(10)
for x = 0 to [login to view URL](9, maxnumsr) by 1
[login to view URL]([login to view URL](srchannels, x))
srcol = get_color(x * 2)
if not na(srcol)
[login to view URL](srchannels, x, [login to view URL](left=bar_index - 180, top=get_level(x * 2)
,right=bar_index + 2, bottom=get_level(x * 2 + 1), border_color=srcol, border_width=1, bgcolor=srcol))
emalen2= [login to view URL](13, minval=1, title="Data 1")
source2= input(close, title="Data 1")
eout2= [login to view URL](source2, emalen2)
plot(ema2 ? eout2 : na, title="Data 1", color=#00bcd4bf, linewidth=2)
emalen3= [login to view URL](50, minval=1, title="Data 2")
source3= input(close, title="Data 2")
eout3= [login to view URL](source3, emalen3)
plot(ema3 ? eout3 : na, title="Data 2", color=#f23645b3, linewidth=2)
cvwap = [login to view URL](hlc3)
plotvwap = plot([login to view URL] ? showVWAP ? cvwap : na : na, title='VWAP', color=[login to view URL](#ff9800, 0), linewidth=1)
liceco = input(defval = #131722, title = "Color Size HH-LL",inline='#4')
size = [login to view URL]("tiny", title="", options=["tiny", "small", "large"],inline='#4')
ph1 = [login to view URL](high, prd1) == 0 ? high : na, pl1 = [login to view URL](low, prd1) == 0 ? low : na, var dir1 = 0
iff_1 = pl1 and na(ph1) ? -1 : dir1, dir1 := ph1 and na(pl1) ? 1 : iff_1
var max_array_size = 10, var zigzag1 = array.new_float(0),oldzigzag1 = [login to view URL](zigzag1)
add_to_zigzag(pointer, value, bindex) =>
[login to view URL](pointer, bindex), [login to view URL](pointer, value)
if [login to view URL](pointer) > max_array_size
[login to view URL](pointer),[login to view URL](pointer)
update_zigzag(pointer, value, bindex, dir) =>
if [login to view URL](pointer) == 0
add_to_zigzag(pointer, value, bindex)
else
if dir == 1 and value > [login to view URL](pointer, 0) or dir == -1 and value < [login to view URL](pointer, 0)
[login to view URL](pointer, 0, value), [login to view URL](pointer, 1, bindex)
0.
dir1changed = [login to view URL](dir1), if ph1 or pl1
if dir1changed
add_to_zigzag(zigzag1, dir1 == 1 ? ph1 : pl1, bar_index)
else
update_zigzag(zigzag1, dir1 == 1 ? ph1 : pl1, bar_index, dir1)
if [login to view URL](zigzag1) >= 6
var line zzline1 = na, var label zzlabel1 = na
if [login to view URL](zigzag1, 0) != [login to view URL](oldzigzag1, 0) or [login to view URL](zigzag1, 1) != [login to view URL](oldzigzag1, 1)
if [login to view URL](zigzag1, 2) == [login to view URL](oldzigzag1, 2) and [login to view URL](zigzag1, 3) == [login to view URL](oldzigzag1, 3)
[login to view URL](zzline1), [login to view URL](zzlabel1)
if showhhll == true
hhlltxt = dir1 == 1 ? [login to view URL](zigzag1, 0) > [login to view URL](zigzag1, 4) ? 'SELL_STRONG' : 'SELL' : [login to view URL](zigzag1, 0) < [login to view URL](zigzag1, 4) ? 'BUY_STRONG':'BUY'
l= dir1 == 1 ? [login to view URL](zigzag1, 0) > [login to view URL](zigzag1, 4) ? liceco : liceco : [login to view URL](zigzag1, 0) < [login to view URL](zigzag1, 4) ? liceco : liceco
zzlabel1 :=[login to view URL](x=[login to view URL]([login to view URL](zigzag1, 1)),y=[login to view URL](zigzag1,0),text=hhlltxt,color=l,size=size,textcolor=#ffffff,style=dir1==1?
label.style_label_lower_right:label.style_label_upper_right)////(zigzag1,0),text=hhlltxt,color=l,size=size,textcolor=#ffffff,style=dir1==1?
Buy condition when LL OR HL shown on any candle then LL OR HL HIGH PRICE IS THE ENTRY PRICE AND STOP LOSS WILL BE ENTRY CANDEL LOW . TRAILING STOP LOSS SHOULD ME ACTIVE BY 1$SELL SIDE EFFECT CONDITION IS HH and LH SHOWS ON CHART then high is the stop loss and low is the entry price trailing Stop loss will be active for 0.05 ///////////////////////////////////////////////END OF LINE///////////////////////////////////////////////////////////////////////////////////////////////////////////@version=5
strategy(title="3C Price Action Strategy", shorttitle="3C Price Action", overlay=true)
// Input for trailing stop parameters
trail_jump_percentage = [login to view URL](0.05, title="Trailing Stop Jump (%)") * 0.01
trail_offset = [login to view URL](10, title="Trailing Stop Offset")
trail_step = [login to view URL](1, title="Trailing Stop Step")
// Calculate HH, LL, LH, and HL
high_condition = high > [login to view URL](high, 10)[1]
low_condition = low < [login to view URL](low, 10)[1]
lower_high_condition = high < high[1] and low > low[1]
higher_low_condition = high > high[1] and low < low[1]
// Buy and Sell conditions
buy_condition = low_condition or higher_low_condition
sell_condition = high_condition or lower_high_condition
// Trailing stop calculation
var stop_loss_level = na
if buy_condition
stop_loss_level := low
else if sell_condition
stop_loss_level := high
// Update trailing stop level
if not na(stop_loss_level)
stop_loss_level := max(stop_loss_level, close - (close * trail_jump_percentage))
stop_loss_level := stop_loss_level + trail_step * [login to view URL]
// Plot buy and sell signals
plotshape(buy_condition, style=[login to view URL], location=[login to view URL], color=[login to view URL], size=[login to view URL])
plotshape(sell_condition, style=[login to view URL], location=[login to view URL], color=[login to view URL], size=[login to view URL])
// Strategy exit conditions
[login to view URL]("Sell", from_entry=buy_condition, when=sell_condition)
[login to view URL]("TrailingStop", from_entry=buy_condition, when=crossunder(close, stop_loss_level))
// Plot trailing stop level
plot(stop_loss_level, color=[login to view URL], title="Trailing Stop Level")