0% found this document useful (0 votes)
256 views15 pages

Price Action Concepts 1.0.0

Uploaded by

izelhamza2512
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
256 views15 pages

Price Action Concepts 1.0.0

Uploaded by

izelhamza2512
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 15

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.

0
International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © HunterAlgos

//@version=5
indicator("Price Action Concepts [HunterAlgos]", shorttitle = "Price Action
Concepts [1.0.0]", overlay = true, max_lines_count = 500, max_labels_count = 500,
max_bars_back = 500, max_boxes_count = 500)

//-----------------------------------------------------------------------------{
//Boolean set
//-----------------------------------------------------------------------------{
s_bos = 0
s_choch = 1
i_bos = 2
i_choch = 3
i_pp_choch = 4
green_candle = 5
red_candle = 6

boolean =
array.from(
false // s_bos
, false // s_choch
, false // i_bos
, false // i_choch
, false // i_pp_choch
, false // up
, false // dn
)

//-----------------------------------------------------------------------------{
// User inputs
//-----------------------------------------------------------------------------{
show_swing_ms = input.string("All", "Swing ", ["All", "CHoCH", "BOS", "None"]
, group = "MARKET STRUCTURE", inline = "1")
show_internal_ms = input.string("All", "Internal", ["All", "CHoCH", "BOS",
"CHoCH+", "None"] , group = "MARKET STRUCTURE", inline =
"2")

internal_r_lookback = input.int(5 , "", group = "MARKET STRUCTURE", inline = "2",


minval = 2)
swing_r_lookback = input.int(50, "", group = "MARKET STRUCTURE", inline = "1",
minval = 2)

internal_l_lookback = math.round(internal_r_lookback / 2)
swing_l_lookback = swing_r_lookback / 2

i_ms_up_bos = input.color(#089981, group = "MARKET STRUCTURE", inline = "2",


title = "")
i_ms_up_choch = input.color(#00332a, group = "MARKET STRUCTURE", inline = "2",
title = "")
i_ms_dn_bos = input.color(#f23645, group = "MARKET STRUCTURE", inline = "2",
title = "")
i_ms_dn_choch = input.color(#801922, group = "MARKET STRUCTURE", inline = "2",
title = "")
s_ms_up_bos = input.color(#089981, group = "MARKET STRUCTURE", inline = "1",
title = "")
s_ms_up_choch = input.color(#00332a, group = "MARKET STRUCTURE", inline = "1",
title = "")
s_ms_dn_bos = input.color(#f23645, group = "MARKET STRUCTURE", inline = "1",
title = "")
s_ms_dn_choch = input.color(#801922, group = "MARKET STRUCTURE", inline = "1",
title = "")

invcol = color.new(color.white, 100)

lvl_daily = input.bool(false, "Day " , inline = "1", group = "HIGHS & LOWS
MTF")
lvl_weekly = input.bool(false, "Week " , inline = "2", group = "HIGHS & LOWS MTF")
lvl_monthly = input.bool(false, "Month", inline = "3", group = "HIGHS & LOWS MTF")
lvl_yearly = input.bool(false, "Year " , inline = "4", group = "HIGHS & LOWS
MTF")

css_d = input.color(color.blue, "", group = "HIGHS & LOWS MTF", inline = "1")
css_w = input.color(color.blue, "", group = "HIGHS & LOWS MTF", inline = "2")
css_m = input.color(color.blue, "", group = "HIGHS & LOWS MTF", inline = "3")
css_y = input.color(color.blue, "", group = "HIGHS & LOWS MTF", inline = "4")

s_d = input.string('⎯⎯⎯', '', options = ['⎯⎯⎯', '----', '····'], inline = '1',


group = 'HIGHS & LOWS MTF')
s_w = input.string('⎯⎯⎯', '', options = ['⎯⎯⎯', '----', '····'], inline = '2',
group = 'HIGHS & LOWS MTF')
s_m = input.string('⎯⎯⎯', '', options = ['⎯⎯⎯', '----', '····'], inline = '3',
group = 'HIGHS & LOWS MTF')
s_y = input.string('⎯⎯⎯', '', options = ['⎯⎯⎯', '----', '····'], inline = '4',
group = 'HIGHS & LOWS MTF')

ob_show = input.bool(true, "Order blocks", inline =


"1", group = "VOLUME ORDER BLOCKS")
ob_num = input.int(2 , "" , tooltip = "Orderblocks number", inline =
"1", group = "VOLUME ORDER BLOCKS", minval = 1, maxval = 10)

mult = input.int(5 , "Mult ", tooltip = "Add more bar to the


right for a clear view", inline = "2", group = "VOLUME ORDER BLOCKS", minval = 1)
ob_timeframe = input.timeframe("", "Timeframe "
, inline = "3", group = "VOLUME ORDER BLOCKS")

ob_bull_css = input.color(#08998186, "", inline = "1", group = "VOLUME ORDER


BLOCKS")
ob_bear_css = input.color(#f2364683, "", inline = "1", group = "VOLUME ORDER
BLOCKS")

ob_opacity = input.int(80, "", inline = "1", tooltip = "Opacity main orderblocks",


group = "VOLUME ORDER BLOCKS")

show_liq = input.bool(false, "Liquidity Wicks", inline = "1", group = "LIQUIDITY


WICKS")

liq_up_css = input.color(color.yellow, "", inline = "1", group = "LIQUIDITY WICKS")


liq_dn_css = input.color(color.orange, "", inline = "1", group = "LIQUIDITY WICKS")

volMA = input.int (200, "MA Volume threshold", group = "LIQUIDITY WICKS",


tooltip = "MA on volume to be above", minval = 2)
liq_thresh = input.float(10 , "Threshold" , group = "LIQUIDITY WICKS",
tooltip = "Wick bigger than body" , minval = 2, step = 0.1)

show_lbl = input.bool(true, "Show swing point", inline = "1", group =


"GENERAL SETTINGS")

lbl_size = input.string("Small", "", options = ["Tiny", "Small", "Normal",


"Large", "Huge"], group = "GENERAL SETTINGS", inline = "1")

show_bar_css = input.bool(false, "Show bar coloring", group = "GENERAL


SETTINGS")

//-----------------------------------------------------------------------------{
// Switch market strcture visuals
//-----------------------------------------------------------------------------{
switch show_swing_ms
"All" => boolean.set(s_bos, true) , boolean.set(s_choch, true)
"CHoCH" => boolean.set(s_bos, false), boolean.set(s_choch, true)
"BOS" => boolean.set(s_bos, true) , boolean.set(s_choch, false)
"None" => boolean.set(s_bos, false), boolean.set(s_choch, false)
=> na

switch show_internal_ms
"All" => boolean.set(i_bos, true) , boolean.set(i_choch, true) ,
boolean.set(i_pp_choch, true)
"CHoCH" => boolean.set(i_bos, false), boolean.set(i_choch, true) ,
boolean.set(i_pp_choch, false)
"BOS" => boolean.set(i_bos, true) , boolean.set(i_choch, false),
boolean.set(i_pp_choch, false)
"CHoCH+" => boolean.set(i_bos, false), boolean.set(i_choch, false),
boolean.set(i_pp_choch, true)
"None" => boolean.set(i_bos, false), boolean.set(i_choch, false),
boolean.set(i_pp_choch, false)
=> na

//-----------------------------------------------------------------------------{
// Custom Type
//-----------------------------------------------------------------------------{
type bar
float o = open
float c = close
float h = high
float l = low
float v = volume
int n = bar_index
int t = time
string xt = xloc.bar_time
string xn = xloc.bar_index

type bin
float [] i_hpoint
float [] i_lpoint
int [] i_nBull
int [] i_nBear
float [] s_hpoint
float [] s_lpoint
int [] s_nBull
int [] s_nBear
float [] up_ms_logs
float [] dn_ms_logs
string[] i_bulltxt
string[] i_beartxt

type ob
float[] bear_h
float[] bear_l
int [] bear_n
float[] bull_h
float[] bull_l
int [] bull_n
float[] h
float[] l
float[] m
int [] left
box [] ob_bx
line [] ob_line
int [] t_bull
int [] t_bear
float[] v_bull
float[] v_bear
int [] vn

//-----------------------------------------------------------------------------{
// Type set
//-----------------------------------------------------------------------------{
bar b = bar.new()

var pp = bin.new(
array.new< float >(1, na)
, array.new< float >(1, na)
, array.new< int >(1, na)
, array.new< int >(1, na)
, array.new< float >(1, na)
, array.new< float >(1, na)
, array.new< int >(1, na)
, array.new< int >(1, na)
, array.new< float >(1, na)
, array.new< float >(1, na)
, array.new< string>(1, na)
, array.new< string>(1, na)
)

var obv = ob.new(


array.new< float >(1, na)
, array.new< float >(1, na)
, array.new< int >(1, na)
, array.new< float >(1, na)
, array.new< float >(1, na)
, array.new< int >(1, na)
, array.new< float >(0, na)
, array.new< float >(0, na)
, array.new< float >(0, na)
, array.new< int >(0, na)
, array.new< box >(0, na)
, array.new< line >(0, na)
, array.new< int >(1 ,na)
, array.new< int >(1 ,na)
, array.new< float >(1 ,na)
, array.new< float >(1 ,na)
, array.new< int >(1 ,na)
)

//-----------------------------------------------------------------------------{
// order blocks candle cordinate
//-----------------------------------------------------------------------------{
switch
b.c > b.o => boolean.set(green_candle, true)
b.c < b.o => boolean.set(red_candle , true)

switch
boolean.get(green_candle) => obv.bull_h.push(b.h), obv.bull_l.push(b.l),
obv.bull_n.push(b.n), obv.t_bull.push(b.t)
boolean.get(red_candle) => obv.bear_h.push(b.h), obv.bear_l.push(b.l),
obv.bear_n.push(b.n), obv.t_bear.push(b.t)
=> na

//-----------------------------------------------------------------------------{
// lower timeframe volume
//-----------------------------------------------------------------------------{
method normalize(float _src, int _min, int _max) =>
var _historicMin = 10e10
var _historicMax = -10e10
_historicMin := math.min(nz(_src, _historicMin), _historicMin)
_historicMax := math.max(nz(_src, _historicMax), _historicMax)
_min + (_max - _min) * (_src - _historicMin) / math.max(_historicMax -
_historicMin, 10e-10)

vol() =>
float posVol = 0.0
float negVol = 0.0
switch
close > open => posVol += volume
close < open => negVol -= volume

tf = (timeframe.in_seconds("") / 60) / 6
[_one, _two] = request.security_lower_tf("", ob_timeframe , [posVol, negVol])

[_one.sum().normalize(0, 100), _two.sum().normalize(-100, 0)]

//-----------------------------------------------------------------------------{
// set orderblocks
//-----------------------------------------------------------------------------{
method orderblock(bool condition, float top, float btm, int left, int right, float
mitigation, bool bull, int num, color css, string _extend, string _xloc, float
target_bull, float target_bear, int transp_bg, int transp_border, string strVol) =>
var ob_top = array.new< float >(0)
var ob_btm = array.new< float >(0)
var ob_left = array.new< int >(0)
var ob_right = array.new< int >(0)
var bx = array.new< box >(0)
var l = array.new< line >(0)
var bull_tar = array.new< float >(0)
var bear_tar = array.new< float >(0)

if condition
avg = math.avg(top, btm )
ob_top .unshift(top )
ob_btm .unshift(btm )
ob_left .unshift(left )
ob_right.unshift(right )
bull_tar.unshift(target_bull)
bear_tar.unshift(target_bear)

if barstate.isconfirmed
target = bull ? bull_tar : bear_tar
for stuff in target
index = target.indexof(stuff)
if (bull ? mitigation < stuff : mitigation > stuff)
ob_top .remove(index)
ob_btm .remove(index)
ob_left .remove(index)
ob_right.remove(index)
bull_tar.remove(index)
bear_tar.remove(index)

if barstate.isfirst
for j = 0 to num - 1
bx.unshift(box.new(na, na, na, na
, xloc = _xloc
, extend = _extend
, bgcolor = css
, border_color = color.new(css, 100)
, text = str.tostring(strVol)
, text_halign = text.align_right
, text_size = size.auto
, text_color = css))

if barstate.islast
if ob_top.size() > 0
for j = 0 to math.min(num - 1, ob_top.size() - 1)
g_box = bx.get(j)
g_line = l.get (j)

g_box.set_left (ob_left .get(j))


g_box.set_right (ob_right.get(j))
g_box.set_top (ob_top .get(j))
g_box.set_bottom(ob_btm .get(j))

[up, dn] = vol()

//-----------------------------------------------------------------------------{
// General functions
//-----------------------------------------------------------------------------{
size(x) =>
switch x
"Tiny" => size.tiny
"Small" => size.small
"Large" => size.large
"Huge" => size.huge

_h_l() => [b.h, b.l]

lineStyle(x) =>
y = switch x
'⎯⎯⎯' => line.style_solid
'----' => line.style_dashed
'····' => line.style_dotted
y

f_line(x, y, z, css, txt, down, size, style) =>


var line id = na
var label lbl = na

id := line.new(x, y, z, y
, xloc = b.xn
, color = css
, width = 1
, style = style)

lbl := label.new(int(math.avg(x, z)), y, txt


, color = invcol
, textcolor = css
, style = down ? label.style_label_down : label.style_label_up
, size = size)

method sf_hl(string tf) =>


[h, l] = request.security("", tf, _h_l(), lookahead = barmerge.lookahead_on)
[h, l]

method f_hl_line(string _style, color css, string tf) =>


var line h_line = na
var line l_line = na
var label h_label = na
var label l_label = na

h_line := line.new(na, na, na, na


, xloc = b.xt
, color = css
, style = _style
)

l_line := line.new(na, na, na, na


, xloc = b.xt
, color = css
, style = _style
)

h_label := label.new(na, na
, xloc = b.xt
, text = str.format("{0} High" , tf)
, size = size.small
, style = label.style_label_left
, color = invcol
, textcolor = css
)

l_label := label.new(na, na
, xloc = b.xt
, text = str.format("{0} Low", tf)
, size = size.small
, style = label.style_label_left
, color = invcol
, textcolor = css
)

[h_line, l_line, h_label, l_label]

//-----------------------------------------------------------------------------{
// HTF high and low
//-----------------------------------------------------------------------------{
method highANDlow(string _tf, float _higs, float _lows, string _style, color _css)
=>
highY = ta.valuewhen(_higs != _higs[1], _higs, 1)
highX = ta.valuewhen(_higs == b.h , b.t , 1)
lowY = ta.valuewhen(_lows != _lows[1], _lows, 1)
lowX = ta.valuewhen(_lows == b.l , b.t , 1)

[h_line, l_line, h_label, l_label] = _style.f_hl_line(_css, _tf)

if barstate.islast
t_end = time + (time - time[1]) * 20
line.set_xy1(h_line , highX, highY)
line.set_xy2(h_line , t_end, highY)
label.set_xy(h_label, t_end, highY)
line.set_xy1(l_line , lowX , lowY )
line.set_xy2(l_line , t_end, lowY )
label.set_xy(l_label, t_end, lowY )

[d_h, d_l] = "D" .sf_hl()


[w_h, w_l] = "W" .sf_hl()
[m_h, m_l] = "M" .sf_hl()
[y_h, y_l] = "12M".sf_hl()

if lvl_daily
"D" .highANDlow(d_h, d_l, lineStyle(s_d), css_d)
if lvl_weekly
"W" .highANDlow(w_h, w_l, lineStyle(s_w), css_w)
if lvl_monthly
"M" .highANDlow(m_h, m_l, lineStyle(s_m), css_m)
if lvl_yearly
"12M".highANDlow(y_h, y_l, lineStyle(s_y), css_y)

//-----------------------------------------------------------------------------{
// Market strcture pivot point
//-----------------------------------------------------------------------------{
point() =>
ph_i = ta.pivothigh(b.h, internal_l_lookback, internal_r_lookback)
pl_i = ta.pivotlow (b.l , internal_l_lookback, internal_r_lookback)
ph_s = ta.pivothigh(b.h, swing_l_lookback, swing_r_lookback)
pl_s = ta.pivotlow (b.l , swing_l_lookback, swing_r_lookback)

[ph_i, pl_i, ph_s, pl_s]

[ph_i, pl_i, ph_s, pl_s] = point()

switch
ph_i => pp.i_hpoint.clear(), pp.i_nBull.clear(),
pp.i_hpoint.push(b.h[internal_r_lookback]),
pp.i_nBull.push(b.n[internal_r_lookback]),
pp.up_ms_logs.push(b.h[internal_r_lookback])
pl_i => pp.i_lpoint.clear(), pp.i_nBear.clear(),
pp.i_lpoint.push(b.l[internal_r_lookback]),
pp.i_nBear.push(b.n[internal_r_lookback]),
pp.dn_ms_logs.push(b.l[internal_r_lookback])
ph_s => pp.s_hpoint.clear(), pp.s_nBull.clear(),
pp.s_hpoint.push(b.h[swing_r_lookback]) , pp.s_nBull.push(b.n[swing_r_lookback])
pl_s => pp.s_lpoint.clear(), pp.s_nBear.clear(),
pp.s_lpoint.push(b.l[swing_r_lookback]) , pp.s_nBear.push(b.n[swing_r_lookback])
=> na

//-----------------------------------------------------------------------------{
// strcture set
//-----------------------------------------------------------------------------{
method structure(bin zz, bool mtf) =>
var color css = na
var int count = 0
var trend = 0
var itrend = 0
var ob_bear = false
bool bear_ob = false
bool bull_ob = false

if true

//-------------------------------------------------------------------------
----{
//Internal structure bullish
//-------------------------------------------------------------------------
----{
if zz.dn_ms_logs.size() > 1 and zz.i_hpoint.size() > 0 and
zz.i_nBull.size() > 0
if ta.crossover(b.c, zz.i_hpoint.last())
bool choch = na
string txt = na

if itrend < 0
choch := true

switch
choch and not (zz.dn_ms_logs.last() >
zz.dn_ms_logs.get(zz.dn_ms_logs.indexof(zz.dn_ms_logs.last()) - 1)) => txt :=
"CHoCH"
choch and (zz.dn_ms_logs.last() >
zz.dn_ms_logs.get(zz.dn_ms_logs.indexof(zz.dn_ms_logs.last()) - 1)) => txt :=
"CHoCH+"
not choch
=> txt := "BOS"

itrend := 1

switch txt
"CHoCH" => css := i_ms_up_choch
"BOS" => css := i_ms_up_bos
"CHoCH+" => css := i_ms_up_choch
=> css

if ((txt == "BOS" and boolean.get(i_bos) == true) or (txt ==


"CHoCH" and boolean.get(i_choch) == true) or (txt =="CHoCH+" and
boolean.get(i_pp_choch) == true)) and mtf == false
f_line(zz.i_nBull.last(), zz.i_hpoint.last(), b.n, i_ms_up_bos,
txt, true, size.small, line.style_dashed)

if txt == "BOS"
bull_ob := true

zz.i_nBull.clear ()
zz.i_hpoint.clear()
zz.i_bulltxt.push(txt)

//-------------------------------------------------------------------------
----{
//Internal structure bearish
//-------------------------------------------------------------------------
----{
if zz.up_ms_logs.size() > 1 and zz.i_lpoint.size() > 0 and
zz.i_nBear.size() > 0
if ta.crossunder(b.c, zz.i_lpoint.last())
bool choch = na
string txt = na

if itrend > 0
choch := true

switch
choch and not (zz.up_ms_logs.last() <
zz.up_ms_logs.get(zz.up_ms_logs.indexof(zz.up_ms_logs.last()) - 1)) => txt :=
"CHoCH"
choch and (zz.up_ms_logs.last() <
zz.up_ms_logs.get(zz.up_ms_logs.indexof(zz.up_ms_logs.last()) - 1)) => txt :=
"CHoCH+"
not choch
=> txt := "BOS"

itrend := -1

switch txt
"CHoCH" => css := i_ms_dn_choch
"BOS" => css := i_ms_dn_bos
"CHoCH+" => css := i_ms_dn_choch
=> css
if ((txt == "BOS" and boolean.get(i_bos) == true) or (txt ==
"CHoCH" and boolean.get(i_choch) == true) or (txt =="CHoCH+" and
boolean.get(i_pp_choch) == true)) and mtf == false
f_line(zz.i_nBear.last(), zz.i_lpoint.last(), b.n, i_ms_dn_bos,
txt, false, size.small, line.style_dashed)

if txt == "BOS"
bear_ob := true

zz.i_nBear.clear ()
zz.i_lpoint.clear()
zz.i_beartxt.push(txt)

//-------------------------------------------------------------------------
----{
//Swing structure bullish
//-------------------------------------------------------------------------
----{
if zz.s_hpoint.size() > 0
if ta.crossover(b.c, zz.s_hpoint.last())
bool choch = na
string txt = na

if trend < 0
choch := true

txt := choch ? "CHoCH" : "BOS"


trend := 1

if ((txt == "BOS" and boolean.get(s_bos) == true) or (txt ==


"CHoCH" and boolean.get(s_choch) == true) and mtf == false)
f_line(zz.s_nBull.last(), zz.s_hpoint.last(), b.n, i_ms_up_bos,
txt, true, size.small, line.style_solid)

zz.s_nBull.clear ()
zz.s_hpoint.clear()

//-------------------------------------------------------------------------
----{
//Swing structure bearish
//-------------------------------------------------------------------------
----{
if zz.s_lpoint.size() > 0
if ta.crossunder(b.c, zz.s_lpoint.last())
bool choch = na
string txt = na

if trend > 0
choch := true

txt := choch ? "CHoCH" : "BOS"


trend := -1

if ((txt == "BOS" and boolean.get(s_bos) == true) or (txt ==


"CHoCH" and boolean.get(s_choch) == true) and mtf == false)
f_line(zz.s_nBear.last(), zz.s_lpoint.last(), b.n, i_ms_dn_bos,
txt, false, size.small, line.style_solid)
zz.s_nBear.clear ()
zz.s_lpoint.clear()

[css, bear_ob, bull_ob]

[css, bear_ob_check, bull_ob_check] = pp.structure(false)

//-----------------------------------------------------------------------------{
// basic Liquidity wick function
//-----------------------------------------------------------------------------{
liq_wick(bool green, int len, float thresh) =>
bool up_liq = false
bool dn_liq = false
bool vol = b.v > ta.sma(b.v, len) ? true : false

float u_c = na
float u_h = na
float u_o = na

float d_c = na
float d_lo = na
float d_o = na

upwick = math.abs(high - math.max(open, close))


dnwick = math.abs(low - math.min(open, close))
body = math.abs(close - open)

switch green
true => up_liq := upwick > thresh * body and vol ? true : false
false => dn_liq := dnwick > thresh * body and vol ? true : false
=> na

switch up_liq
true => u_c := close, u_h := high, u_o := open
=> na

switch dn_liq
true => d_c := close, d_lo := low, d_o := open
=> na

[up_liq, dn_liq, u_c, u_h, u_o, d_c, d_lo, d_o]

[up_liq, dn_liq, u_c, u_h, u_o, d_c, d_lo, d_o] = liq_wick(close > open, volMA,
liq_thresh)

//-----------------------------------------------------------------------------{
// set order blocks
//-----------------------------------------------------------------------------{
switch ob_show
false => bear_ob_check := false, bull_ob_check := false
=> na

bull_ob_check.orderblock(
obv.bear_h.last()
, obv.bear_l.last()
, obv.t_bear.last()
, obv.t_bear.last()
, close
, true
, ob_num
, color.new(ob_bull_css, ob_opacity)
, extend.right
, xloc.bar_time
, obv.bear_l.last()
, obv.bear_l.last()
, ob_opacity
, 100
, "")

bull_ob_check.orderblock(
obv.bear_h.last()
, ((obv.bear_l.last() + obv.bear_h.last()) / 2)
, obv.t_bear.last()
, time_close + (time_close - time_close[1]) * int(up * mult)
, close
, true
, ob_num
, ob_bull_css
, extend.none, xloc.bar_time
, obv.bear_l.last()
, obv.bear_l.last()
, 60
, 100
, "")

bull_ob_check.orderblock(
((obv.bear_l.last() + obv.bear_h.last()) / 2)
, obv.bear_l.last()
, obv.t_bear.last()
, time_close + (time_close - time_close[1]) * int(math.abs(dn * mult))
, close
, true
, ob_num
, ob_bear_css
, extend.none
, xloc.bar_time
, obv.bear_l.last()
, obv.bear_l.last()
, 60
, 100
, "")

bear_ob_check.orderblock(
obv.bull_h.last()
, obv.bull_l.last()
, obv.t_bull.last()
, obv.t_bull.last()
, close
, false
, ob_num
, color.new(ob_bear_css, ob_opacity)
, extend.right
, xloc.bar_time
, obv.bull_h.last()
, obv.bull_h.last()
, ob_opacity
, 100
, "")

bear_ob_check.orderblock(
obv.bull_h.last()
, ((obv.bull_l.last() + obv.bull_h.last()) / 2)
, obv.t_bull.last()
, time_close + (time_close - time_close[1]) * int(up * mult)
, close
, false
, ob_num
, ob_bull_css
, extend.none
, xloc.bar_time
, obv.bull_h.last()
, obv.bull_h.last()
, 60
, 100
, "")

bear_ob_check.orderblock(
((obv.bull_l.last() + obv.bull_h.last()) / 2)
, obv.bull_l.last(), obv.t_bull.last()
, time_close + (time_close - time_close[1]) * int(math.abs(dn * mult))
, close
, false
, ob_num
, ob_bear_css
, extend.none
, xloc.bar_time
, obv.bull_h.last()
, obv.bull_h.last()
, 60
, 100
, "")

//-----------------------------------------------------------------------------{
// plotting
//-----------------------------------------------------------------------------{

if pp.s_hpoint.size() > 0
if ta.change(pp.s_hpoint.last())
label.new(bar_index[swing_r_lookback], high[swing_r_lookback], text = "HH",
color = invcol, style = label.style_label_down, textcolor = i_ms_up_bos, size =
size(lbl_size))
if pp.s_lpoint.size() > 0
if ta.change(pp.s_lpoint.last())
label.new(bar_index[swing_r_lookback], low[swing_r_lookback], text = "LL",
color = invcol, style = label.style_label_up, textcolor = i_ms_dn_bos, size =
size(lbl_size))

plotcandle(open,high,low,close , color = css , wickcolor = color.rgb(120,


123, 134, 50), bordercolor = css)
plotcandle(u_c, u_h, u_o, u_h , wickcolor = invcol, color = invcol, bordercolor =
show_liq ? liq_up_css : invcol)
plotcandle(d_c, d_c, d_lo, d_lo, wickcolor = invcol, color = invcol, bordercolor =
show_liq ? liq_dn_css : invcol)

barcolor(color = show_bar_css ? css : na)

You might also like