Trade Bulls v1.2

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 5

//@version=5

indicator(title='Trade Bulls v1.2', shorttitle='Trade Bulls v1.2', overlay=true,


max_boxes_count=20)

// Block Order
BO_on =input(defval=true, title='Enable Block Order', group='Block Order')
Senset = input.int(28, minval=1, title='Sensitivity', group='Block Order')

OB_mtype = input.string("Close", title="OB Mitigation Type", options=["Close",


"Wick"], group="Block Order")

colUpp = input.color(#50b090, title="Bullish OB Border", inline="1", group="Block


Order")
colUpp_ob = input.color(color.new(#60C0A0, 85), title="BackGround", inline="1",
group="Block Order")
colDnn = input.color(#4060b0, title="Bearish OB Border", inline="2", group="Block
Order")
colDnn_ob = input.color(color.new(#5060D0, 85), title="BackGround", inline="2",
group="Block Order")

bool BO_is = false


bool BO_is_Upp = false

boUpp = OB_mtype=="Close" ? close[1] : low


boDnn = OB_mtype=="Close" ? close[1] : high

var box Lbox = na


var box Sbox = na
var L_boxes = array.new_box()
var S_boxes = array.new_box()

var int jj = na

CrDt = (open - open[4]) / open[4] * 100


Senset /= 100

if ta.crossover(CrDt, Senset)
BO_is_Upp := true
jj := bar_index
jj

if ta.crossunder(CrDt, -Senset)
BO_is := true
jj := bar_index
jj

if BO_is and jj - jj[1] > 5 and BO_on


float Lgrn = 0
for i = 4 to 15 by 1
if close[i] > open[i]
Lgrn := i
break
Sbox := box.new(left=bar_index[Lgrn], top=high[Lgrn], bottom=low[Lgrn],
right=bar_index[Lgrn], bgcolor=colDnn_ob, border_color=colDnn, extend=extend.right)
array.push(S_boxes, Sbox)
if BO_is_Upp and jj - jj[1] > 5 and BO_on
float Lred = 0
for i = 4 to 15 by 1
if close[i] < open[i]
Lred := i
break
Lbox := box.new(left=bar_index[Lred], top=high[Lred], bottom=low[Lred],
right=bar_index[Lred], bgcolor=colUpp_ob, border_color=colUpp, extend=extend.right)
array.push(L_boxes, Lbox)
if array.size(S_boxes) > 0
for i = array.size(S_boxes) - 1 to 0 by 1
sbox = array.get(S_boxes, i)
B_top = box.get_top(sbox)
B_bot = box.get_bottom(sbox)
if boDnn > B_top
array.remove(S_boxes, i)
box.delete(sbox)
if high > B_bot
alert('Price inside Bearish Block Order', alert.freq_once_per_bar)
if array.size(L_boxes) > 0
for i = array.size(L_boxes) - 1 to 0 by 1
sbox = array.get(L_boxes, i)
B_bot = box.get_bottom(sbox)
B_top = box.get_top(sbox)
if boUpp < B_bot
array.remove(L_boxes, i)
box.delete(sbox)
if low < B_top
alert('Price inside Bullish Block Order', alert.freq_once_per_bar)

// Sell/Buy/
BS_on =input(defval=true, title='Enable Buy/Sell', group='Buy/Sell')
LB_on =input(defval=true, title='Enable labels', group='Buy/Sell')
BS_type = input.string('Atr',options=['Atr','Manual'],inline='ln1',
group='Buy/Sell')
BS_size = input(1.,'',inline='ln1', group='Buy/Sell')
BS_max = input(3,'Sequence Length', group='Buy/Sell')
var BS_fib = array.from(1,1)
var BS_dist = 0.
var BS_avg = 0.
var BS_fib_n = 1
var BS_os = 0
BS_src = close
BS_n = bar_index
if barstate.isfirst
for i = 1 to BS_max
array.push(BS_fib,array.get(BS_fib,i-1) + array.get(BS_fib,i))
if BS_type == 'Atr'
BS_dist := ta.atr(200)*BS_size*array.get(BS_fib,BS_fib_n)
else
BS_dist := BS_size*array.get(BS_fib,BS_fib_n)

BS_fib_n := math.abs(BS_src-BS_avg) > BS_dist ? BS_fib_n+1 : BS_fib_n


BS_avg := nz(BS_fib_n > BS_max+1 ? BS_src : BS_avg[1],BS_src)
BS_fib_n := BS_fib_n > BS_max+1 ? 1 : BS_fib_n
BS_sell = BS_avg < BS_avg[1]
BS_buy = BS_avg > BS_avg[1]
BS_os := BS_buy ? 1 : BS_sell ? 0 : BS_os
BS_css = BS_os == 1 ? #00b010 : #fe1100
BS_stop = BS_avg != BS_avg[1] ? na : BS_os == 0 ? BS_avg + BS_dist : BS_avg -
BS_dist
BS_take = BS_avg != BS_avg[1] ? na : BS_os == 1 ? BS_avg + BS_dist : BS_avg -
BS_dist
p_0 = plot( BS_on? BS_src:na,color=na)
p_1 = plot( BS_on? BS_avg:na,color=na)
plot(BS_on ? BS_take:na,'Take',#00b010,1,plot.style_linebr)
plot(BS_on ? BS_stop:na,'Stop',#f01000,1,plot.style_linebr)
fill(p_0,p_1,color.new(BS_css,85))
plotshape(BS_on and BS_buy ? low :
na,"Buy_Label",shape.labelup,location.absolute,#00b010,0,text="B",textcolor=color.w
hite,size=size.tiny)
plotshape(BS_on and BS_sell ? high :
na,"Sell_Label",shape.labeldown,location.absolute,#f01000,0,text="S",textcolor=colo
r.white,size=size.tiny)

if BS_fib_n > BS_fib_n[1] and BS_os == 1 and BS_src > BS_avg and BS_on and LB_on
label.new(BS_n,BS_src,str.tostring(array.get(BS_fib,BS_fib_n-1)) + '
✅',yloc=yloc.abovebar,color=na,style=label.style_label_down,textcolor=color.gray,si
ze=size.small)
else if BS_fib_n > BS_fib_n[1] and BS_os == 1 and BS_src < BS_avg and BS_on and
LB_on
label.new(BS_n,BS_src,str.tostring(array.get(BS_fib,BS_fib_n-1)) + '
❌',yloc=yloc.belowbar,color=na,style=label.style_label_up,textcolor=color.gray,size
=size.small)
if BS_fib_n > BS_fib_n[1] and BS_os == 0 and BS_src < BS_avg and BS_on and LB_on
label.new(BS_n,BS_src,str.tostring(array.get(BS_fib,BS_fib_n-1)) + '
✅',yloc=yloc.belowbar,color=na,style=label.style_label_up,textcolor=color.gray,size
=size.small)
else if BS_fib_n > BS_fib_n[1] and BS_os == 0 and BS_src > BS_avg and BS_on and
LB_on
label.new(BS_n,BS_src,str.tostring(array.get(BS_fib,BS_fib_n-1)) + '
❌',yloc=yloc.abovebar,color=na,style=label.style_label_down,textcolor=color.gray,si
ze=size.small)

//Channel
CH_on =input(defval=true, title='Enable Channel', group='Channel')
CH_src = input(defval=close, title='Source', group='Channel')
CH_len = input.int(defval=100, title='Length', minval=10, group='Channel')
CH_divlen = input.float(defval=2., title='Deviation', minval=0.1, step=0.1,
group='Channel')
CH_ext = input(defval=true, title='Extend Lines', group='Channel')
CH_shwfib = input(defval=false, title='Show Fibonacci Levels', group='Channel')
CH_shwbrk = input.bool(defval=true, title='Show Broken Channel', inline='brk',
group='Channel')
CH_brkclr = input.color(defval=color.blue, title='', inline='brk', group='Channel')
CH_upclr = input.color(defval=color.lime, title='Up/Down Trend Colors',
inline='trcols', group='Channel')
CH_dnclr = input.color(defval=color.red, title='', inline='trcols',
group='Channel')
CH_lnwdt = input(defval=2, title='Line Width', group='Channel')
var CH_fiboln = array.new_float(0)
var CH_clrs = array.new_color(2)
if barstate.isfirst
array.push(CH_fiboln, 0.236)
array.push(CH_fiboln, 0.382)
array.push(CH_fiboln, 0.618)
array.push(CH_fiboln, 0.786)
array.unshift(CH_clrs, CH_upclr)
array.unshift(CH_clrs, CH_dnclr)
get_Channel(CH_src, CH_len) =>
md = math.sum(CH_src, CH_len) / CH_len
Ugl = ta.linreg(CH_src, CH_len, 0) - ta.linreg(CH_src, CH_len, 1)
ip = md - Ugl * math.floor(CH_len / 2) + (1 - CH_len % 2) / 2 * Ugl
lst = ip + Ugl * (CH_len - 1)
dev = 0.0
for x = 0 to CH_len - 1 by 1
dev += math.pow(CH_src[x] - (Ugl * (CH_len - x) + ip), 2)
dev
dev := math.sqrt(dev / CH_len)
[ip, lst, dev, Ugl]
[y1_, y2_, dev, Ugl] = get_Channel(CH_src, CH_len)
CH_break = Ugl > 0 and close < y2_ - dev * CH_divlen ? 0 : Ugl < 0 and close > y2_
+ dev * CH_divlen ? 2 : -1
var CH_rlns = array.new_line(3)
var CH_fiblns = array.new_line(4)
if CH_on
for x = 0 to 2 by 1
if not CH_shwbrk or CH_break != x or nz(CH_break[1], -1) != -1
line.delete(array.get(CH_rlns, x))
else
line.set_color(array.get(CH_rlns, x), color=CH_brkclr)
line.set_width(array.get(CH_rlns, x), width=2)
line.set_style(array.get(CH_rlns, x), style=line.style_dotted)
line.set_extend(array.get(CH_rlns, x), extend=extend.none)
array.set(CH_rlns, x, line.new(x1=bar_index - (CH_len - 1), y1=y1_ +
dev * CH_divlen * (x - 1), x2=bar_index, y2=y2_ + dev * CH_divlen * (x - 1),
color=array.get(CH_clrs, math.round(math.max(math.sign(Ugl), 0))), style=x % 2 == 1
? line.style_solid : line.style_dashed, width=CH_lnwdt, extend=CH_ext ?
extend.right : extend.none))
if CH_shwfib
for x = 0 to 3 by 1
line.delete(array.get(CH_fiblns, x))
array.set(CH_fiblns, x, line.new(x1=bar_index - (CH_len - 1), y1=y1_ - dev
* CH_divlen + dev * CH_divlen * 2 * array.get(CH_fiboln, x), x2=bar_index, y2=y2_ -
dev * CH_divlen + dev * CH_divlen * 2 * array.get(CH_fiboln, x),
color=array.get(CH_clrs, math.round(math.max(math.sign(Ugl), 0))),
style=line.style_dotted, width=CH_lnwdt, extend=CH_ext ? extend.right :
extend.none))
var label lbl1 = label.new(x=bar_index - (CH_len - 1), y=y1_, text='S',
size=size.large)
lb_text = Ugl > 0 ? Ugl > Ugl[1] ? '⇑' : '⇗' : Ugl < 0 ? Ugl < Ugl[1] ? '⇓' : '⇘' :
'⇒'
lb_style = Ugl > 0 ? Ugl > Ugl[1] ? label.style_label_up :
label.style_label_upper_right : Ugl < 0 ? Ugl < Ugl[1] ? label.style_label_down :
label.style_label_lower_right : label.style_label_right
if CH_on
label.set_style(lbl1, lb_style)
label.set_text(lbl1, lb_text)
label.set_x(lbl1, bar_index - (CH_len - 1))
label.set_y(lbl1, Ugl > 0 ? y1_ - dev * CH_divlen : Ugl < 0 ? y1_ + dev *
CH_divlen : y1_)
label.set_color(lbl1, Ugl > 0 ? CH_upclr : Ugl < 0 ? CH_dnclr : color.blue)

DnTrend = math.sign(Ugl) != math.sign(Ugl[1]) and Ugl < 0


UpTrend = math.sign(Ugl) != math.sign(Ugl[1]) and Ugl > 0

alertcondition(CH_break, title='Channel Broken', message='Channel Broken')


alertcondition(DnTrend, title='Channel Down trend', message='Channel Down trend')
alertcondition(UpTrend, title='Channel Up trend', message='Channel Up trend')

// Support/Resistance
SR_on =input(defval=true, title='Enable Support/Resistance',
group='Support/Resistance')
SR_lb = input(15, title='Left Bars ', group='Support/Resistance')
SR_rb = input(15, title='Right Bars', group='Support/Resistance')
SR_vol = input(20, title='Volume Threshold', group='Support/Resistance')
SR_high = fixnan(ta.pivothigh(SR_lb, SR_rb)[1])
SR_low = fixnan(ta.pivotlow(SR_lb, SR_rb)[1])
plot(SR_on?SR_low:na, color=ta.change(SR_low) ? na : #2030e0, linewidth=3, offset=-
(SR_rb + 1), title='Support')
plot(SR_on?SR_high:na, color=ta.change(SR_high) ? na : #F00000, linewidth=3,
offset=-(SR_rb + 1), title='Resistance')
SR_short = ta.ema(volume, 5)
SR_long = ta.ema(volume, 10)
SR_dlt = 100 * (SR_short - SR_long) / SR_long
alertcondition(ta.crossover(close, SR_high) and SR_dlt > SR_vol, title='Resistance
Broken', message='Resistance Broken')
alertcondition(ta.crossunder(close, SR_low) and SR_dlt > SR_vol, title='Support
Broken', message='Support Broken')

You might also like