// Prev Published: 1008
// Curr Published: 1046
//@version=6
indicator('ICT HTF Candles (Ken)', overlay = true, max_boxes_count = 500,
max_lines_count = 500, max_labels_count = 500, max_bars_back = 5000)
type Candle
float o
float c
float h
float l
int o_time
int o_idx
int c_idx
int h_idx
int l_idx
string dow
box body
line wick_up
line wick_down
label dow_label
type Trace
line o
line c
line h
line l
label o_l
label c_l
label h_l
label l_l
type Imbalance
box b
int idx
type CandleSettings
bool show
string htf
int max_display
type Settings
int max_sets
color bull_body
color bull_border
color bull_wick
color bear_body
color bear_border
color bear_wick
int offset
int buffer
int htf_buffer
int width
bool use_custom_daily
string custom_daily
bool daily_name
bool trace_show
color trace_o_color
string trace_o_style
int trace_o_size
color trace_c_color
string trace_c_style
int trace_c_size
color trace_h_color
string trace_h_style
int trace_h_size
color trace_l_color
string trace_l_style
int trace_l_size
string trace_anchor
bool label_show
color label_color
string label_size
string label_position
string label_alignment
bool fvg_show
color fvg_color
bool vi_show
color vi_color
bool htf_label_show
color htf_label_color
string htf_label_size
bool htf_timer_show
color htf_timer_color
string htf_timer_size
color dow_color
string dow_size
type CandleSet
array<Candle> candles
array<Imbalance> imbalances
CandleSettings settings
label tfNameTop
label tfNameBottom
label tfTimerTop
label tfTimerBottom
type Helper
string name = 'Helper'
Settings settings = [Link]()
var CandleSettings SettingsHTF1 = [Link]()
var CandleSettings SettingsHTF2 = [Link]()
var CandleSettings SettingsHTF3 = [Link]()
var CandleSettings SettingsHTF4 = [Link]()
var CandleSettings SettingsHTF5 = [Link]()
var CandleSettings SettingsHTF6 = [Link]()
var array<Candle> candles_1 = [Link]<Candle>(0)
var array<Candle> candles_2 = [Link]<Candle>(0)
var array<Candle> candles_3 = [Link]<Candle>(0)
var array<Candle> candles_4 = [Link]<Candle>(0)
var array<Candle> candles_5 = [Link]<Candle>(0)
var array<Candle> candles_6 = [Link]<Candle>(0)
var array<Imbalance> imbalances_1 = [Link]<Imbalance>()
var array<Imbalance> imbalances_2 = [Link]<Imbalance>()
var array<Imbalance> imbalances_3 = [Link]<Imbalance>()
var array<Imbalance> imbalances_4 = [Link]<Imbalance>()
var array<Imbalance> imbalances_5 = [Link]<Imbalance>()
var array<Imbalance> imbalances_6 = [Link]<Imbalance>()
var CandleSet htf1 = [Link]()
[Link] := SettingsHTF1
[Link] := candles_1
[Link] := imbalances_1
var CandleSet htf2 = [Link]()
[Link] := SettingsHTF2
[Link] := candles_2
[Link] := imbalances_2
var CandleSet htf3 = [Link]()
[Link] := SettingsHTF3
[Link] := candles_3
[Link] := imbalances_3
var CandleSet htf4 = [Link]()
[Link] := SettingsHTF4
[Link] := candles_4
[Link] := imbalances_4
var CandleSet htf5 = [Link]()
[Link] := SettingsHTF5
[Link] := candles_5
[Link] := imbalances_5
var CandleSet htf6 = [Link]()
[Link] := SettingsHTF6
[Link] := candles_6
[Link] := imbalances_6
//
+----------------------------------------------------------------------------------
--------------------------+//
//+--- Settings
---+//
//
+----------------------------------------------------------------------------------
--------------------------+//
string group_style = "Styling ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
string group_label = "Label Settings ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
string group_imbalance = "Imbalance ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
string group_trace = "Trace ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
[Link] := [Link](true, 'HTF 1 ', inline = 'htf1')
htf_1 = [Link]('5', '', inline = 'htf1')
[Link] := htf_1
[Link].max_display := [Link](10, '', inline = 'htf1')
[Link] := [Link](true, 'HTF 2 ', inline = 'htf2')
htf_2 = [Link]('15', '', inline = 'htf2')
[Link] := htf_2
[Link].max_display := [Link](10, '', inline = 'htf2')
[Link] := [Link](true, 'HTF 3 ', inline = 'htf3')
htf_3 = [Link]('60', '', inline = 'htf3')
[Link] := htf_3
[Link].max_display := [Link](10, '', inline = 'htf3')
[Link] := [Link](true, 'HTF 4 ', inline = 'htf4')
htf_4 = [Link]('240', '', inline = 'htf4')
[Link] := htf_4
[Link].max_display := [Link](10, '', inline = 'htf4')
[Link] := [Link](true, 'HTF 5 ', inline = 'htf5')
htf_5 = [Link]('1D', '', inline = 'htf5')
[Link] := htf_5
[Link].max_display := [Link](10, '', inline = 'htf5')
[Link] := [Link](true, 'HTF 6 ', inline = 'htf6')
htf_6 = [Link]('1W', '', inline = 'htf6')
[Link] := htf_6
[Link].max_display := [Link](10, '', inline = 'htf6')
settings.max_sets := [Link](6, 'Limit to next HTFs only', minval =
1, maxval = 6)
settings.use_custom_daily := [Link](false, 'Custom daily candle
open ', inline='customdaily')
settings.custom_daily := [Link]('Midnight', '',
options=['Midnight', '8:30', '9:30'], inline='customdaily')
settings.bull_body := [Link]([Link]([Link], 10),
'Body ', inline = 'body', group=group_style)
settings.bear_body := [Link]([Link]([Link], 10), '', inline
= 'body', group=group_style)
settings.bull_border := [Link]([Link]([Link], 10),
'Borders', inline = 'borders', group=group_style)
settings.bear_border := [Link]([Link]([Link], 10), '',
inline = 'borders', group=group_style)
settings.bull_wick := [Link]([Link]([Link], 10),
'Wick ', inline = 'wick', group=group_style)
settings.bear_wick := [Link]([Link]([Link], 10), '',
inline = 'wick', group=group_style)
[Link] := [Link](10, 'padding from current candles',
minval = 1, group=group_style)
[Link] := [Link](1, 'space between candles', minval =
1, maxval = 4, group=group_style)
settings.htf_buffer := [Link](10, 'space between Higher Timeframes',
minval = 1, maxval = 10, group=group_style)
[Link] := [Link](1, 'Candle Width', minval = 1, maxval
= 4, group=group_style) * 2
settings.htf_label_show := [Link](true, 'HTF Label ',
group=group_label, inline = 'HTFlabel')
settings.htf_label_color := [Link]([Link]([Link], 10), '',
group=group_label, inline = 'HTFlabel')
settings.htf_label_size := [Link]([Link], '', [[Link],
[Link], [Link], [Link], [Link]], group=group_label, inline =
'HTFlabel')
settings.label_position := [Link]("Both", 'Label Positions',
options=['Both', 'Top', 'Bottom'], group=group_label)
settings.label_alignment := [Link]("Align", "Label Alignment",
options=['Align', 'Follow Candles'], group=group_label)
settings.htf_timer_show := [Link](true, 'Remaining time ', inline
= 'timer', group=group_label)
settings.htf_timer_color := [Link]([Link]([Link], 10), '',
inline = 'timer', group=group_label)
settings.htf_timer_size := [Link]([Link], '', [[Link],
[Link], [Link], [Link], [Link]], group=group_label, inline =
'timer')
settings.daily_name := [Link](false, 'Interval Value ',
group=group_label, inline = 'dow')
settings.dow_color := [Link]([Link] , '', group=group_label,
inline = 'dow')
settings.dow_size := [Link]([Link], '', [[Link],
[Link], [Link], [Link], [Link]], group=group_label, inline = 'dow')
settings.fvg_show := [Link](true, 'Fair Value Gap ', group =
group_imbalance, inline = 'fvg')
settings.fvg_color := [Link]([Link]([Link], 80), '',
inline = 'fvg', group = group_imbalance)
settings.vi_show := [Link](true, 'Volume Imbalance', group =
group_imbalance, inline = 'vi')
settings.vi_color := [Link]([Link]([Link], 50), '', inline
= 'vi', group = group_imbalance)
settings.trace_show := [Link](false, 'Trace lines', group =
group_trace)
settings.trace_o_color := [Link]([Link]([Link], 50),
'Open ', inline = '1', group = group_trace)
settings.trace_o_style := [Link]('····', '', options = ['⎯⎯⎯',
'----', '····'], inline = '1', group = group_trace)
settings.trace_o_size := [Link](1, '', options = [1, 2, 3, 4], inline
= '1', group = group_trace)
settings.trace_c_color := [Link]([Link]([Link], 50),
'Close ', inline = '2', group = group_trace)
settings.trace_c_style := [Link]('····', '', options = ['⎯⎯⎯',
'----', '····'], inline = '2', group = group_trace)
settings.trace_c_size := [Link](1, '', options = [1, 2, 3, 4], inline
= '2', group = group_trace)
settings.trace_h_color := [Link]([Link]([Link], 50),
'High ', inline = '3', group = group_trace)
settings.trace_h_style := [Link]('····', '', options = ['⎯⎯⎯',
'----', '····'], inline = '3', group = group_trace)
settings.trace_h_size := [Link](1, '', options = [1, 2, 3, 4], inline
= '3', group = group_trace)
settings.trace_l_color := [Link]([Link]([Link], 50),
'Low ', inline = '4', group = group_trace)
settings.trace_l_style := [Link]('····', '', options = ['⎯⎯⎯',
'----', '····'], inline = '4', group = group_trace)
settings.trace_l_size := [Link](1, '', options = [1, 2, 3, 4], inline
= '4', group = group_trace)
settings.trace_anchor := [Link]('First Timeframe', 'Anchor to',
options = ['First Timeframe', 'Last Timeframe'], group = group_trace)
settings.label_show := [Link](false, 'Price Label ',
inline = 'label')
settings.label_color := [Link]([Link]([Link], 10), '',
inline = 'label')
settings.label_size := [Link]([Link], '', [[Link],
[Link], [Link], [Link], [Link]], inline = 'label')
//
+----------------------------------------------------------------------------------
--------------------------+//
//+--- Variables
---+//
//
+----------------------------------------------------------------------------------
--------------------------+//
Helper helper = [Link]()
var Trace trace = [Link]()
color color_transparent = #ffffff00
//
+----------------------------------------------------------------------------------
--------------------------+//
//+--- Internal Functions
---+//
//
+----------------------------------------------------------------------------------
--------------------------+//
method LineStyle(Helper helper, string style) =>
[Link] := style
out = switch style
'----' => line.style_dashed
'····' => line.style_dotted
=> line.style_solid
out
method DayofWeek(Helper helper, int index) =>
[Link] := 'DOW'
switch
index == 1 => 'M'
index == 2 => 'T'
index == 3 => 'W'
index == 4 => 'T'
index == 5 => 'F'
index == 6 => 'S'
index == 7 => 'S'
na(index) => ''
method ValidTimeframe(Helper helper, string HTF) =>
[Link] := HTF
if timeframe.in_seconds(HTF) >= timeframe.in_seconds('D') and
timeframe.in_seconds(HTF) > timeframe.in_seconds()
true
else
n1 = timeframe.in_seconds()
n2 = timeframe.in_seconds(HTF)
n3 = n1 % n2
n1 < n2 and [Link](n2 / n1) == n2 / n1
method RemainingTime(Helper helper, string HTF) =>
[Link] := HTF
if [Link]
timeRemaining = (time_close(HTF) - timenow) / 1000
days = [Link](timeRemaining / 86400)
hours = [Link]((timeRemaining - days * 86400) / 3600)
minutes = [Link]((timeRemaining - days * 86400 - hours * 3600) / 60)
seconds = [Link](timeRemaining - days * 86400 - hours * 3600 - minutes
* 60)
r = [Link](seconds, '00')
if minutes > 0 or hours > 0 or days > 0
r := [Link](minutes, '00') + ':' + r
r
if hours > 0 or days > 0
r := [Link](hours, '00') + ':' + r
r
if days > 0
r := [Link](days) + 'D ' + r
r
r
else
'n/a'
method HTFName(Helper helper, string HTF) =>
[Link] := 'HTFName'
formatted = HTF
seconds = timeframe.in_seconds(HTF)
if seconds < 60
formatted := [Link](seconds) + 's'
formatted
else if seconds / 60 < 60
formatted := [Link](seconds / 60) + 'm'
formatted
else if seconds / 60 / 60 < 24
formatted := [Link](seconds / 60 / 60) + 'H'
formatted
formatted
method HTFEnabled(Helper helper) =>
[Link] := 'HTFEnabled'
int enabled = 0
enabled := enabled + ([Link] ? 1 : 0)
enabled := enabled + ([Link] ? 1 : 0)
enabled := enabled + ([Link] ? 1 : 0)
enabled := enabled + ([Link] ? 1 : 0)
enabled := enabled + ([Link] ? 1 : 0)
enabled := enabled + ([Link] ? 1 : 0)
int last = [Link](enabled, settings.max_sets)
last
method CandleSetHigh(Helper helper, array<Candle> candles, float h) =>
[Link] := 'CandlesSetHigh'
float _h = h
if [Link](candles) > 0
for i = 0 to [Link](candles) - 1 by 1
Candle c = [Link](candles, i)
if c.h > _h
_h := c.h
_h
_h
method CandleSetLow(Helper helper, array<Candle> candles, float l) =>
[Link] := 'CandlesSetLow'
float _l = l
if [Link](candles) > 0
for i = 0 to [Link](candles) - 1 by 1
Candle c = [Link](candles, i)
if c.l < _l
_l := c.l
_l
_l
method CandlesHigh(Helper helper, array<Candle> candles) =>
[Link] := 'CandlesHigh'
h = 0.0
int cnt = 0
int last = [Link]()
if [Link] and [Link]([Link])
h := [Link]([Link], h)
cnt := cnt + 1
if [Link] and [Link]([Link]) and cnt <
last
h := [Link]([Link], h)
cnt := cnt + 1
if [Link] and [Link]([Link]) and cnt <
last
h := [Link]([Link], h)
cnt := cnt + 1
if [Link] and [Link]([Link]) and cnt <
last
h := [Link]([Link], h)
cnt := cnt + 1
if [Link] and [Link]([Link]) and cnt <
last
h := [Link]([Link], h)
cnt := cnt + 1
if [Link] and [Link]([Link]) and cnt <
last
h := [Link]([Link], h)
if [Link](candles) > 0
for i = 0 to [Link](candles) - 1 by 1
Candle c = [Link](candles, i)
if c.h > h
h := c.h
h
method CandlesLow(Helper helper, array<Candle> candles, float h) =>
[Link] := 'CandlesLow'
l = h
int cnt = 0
int last = [Link]()
if [Link] and [Link]([Link])
l := [Link]([Link], l)
cnt := cnt + 1
if [Link] and [Link]([Link]) and cnt <
last
l := [Link]([Link], l)
cnt := cnt + 1
if [Link] and [Link]([Link]) and cnt <
last
l := [Link]([Link], l)
cnt := cnt + 1
if [Link] and [Link]([Link]) and cnt <
last
l := [Link]([Link], l)
cnt := cnt + 1
if [Link] and [Link]([Link]) and cnt <
last
l := [Link]([Link], l)
cnt := cnt + 1
if [Link] and [Link]([Link]) and cnt <
last
l := [Link]([Link], l)
if [Link](candles) > 0
for i = 0 to [Link](candles) - 1 by 1
Candle c = [Link](candles, i)
if c.l < l
l := c.l
l
method UpdateTime(CandleSet candleSet, int offset) =>
if settings.htf_timer_show and ([Link] or [Link])
string tmr = '(' + [Link]([Link]) + ')'
if not na([Link])
[Link].set_text(tmr)
if not na([Link])
[Link].set_text(tmr)
candleSet
method Reorder(CandleSet candleSet, int offset) =>
size = [Link]()
if size > 0
for i = size - 1 to 0 by 1
Candle candle = [Link](i)
t_buffer = offset + ([Link] + [Link]) * (size - i - 1)
box.set_left([Link], bar_index + t_buffer)
box.set_right([Link], bar_index + [Link] + t_buffer)
line.set_x1(candle.wick_up, bar_index + [Link] / 2 + t_buffer)
line.set_x2(candle.wick_up, bar_index + [Link] / 2 + t_buffer)
line.set_x1(candle.wick_down, bar_index + [Link] / 2 +
t_buffer)
line.set_x2(candle.wick_down, bar_index + [Link] / 2 +
t_buffer)
if settings.daily_name //and [Link] == '1D'
if not na(candle.dow_label)
candle.dow_label.set_y(candle.h)
candle.dow_label.set_x(bar_index + [Link] / 2 +
t_buffer)
candle.dow_label.set_text([Link])
else
candle.dow_label := [Link](bar_index + [Link] / 2 +
t_buffer, candle.h, [Link], color = color_transparent, textcolor =
settings.dow_color, style = label.style_label_down, size = settings.dow_size)
top = 0.0
bottom = 0.0
if settings.label_alignment == 'Align'
top := [Link]([Link])
bottom := [Link]([Link], top)
if settings.label_alignment == 'Follow Candles'
top := [Link]([Link], 0)
bottom := [Link]([Link], top)
left = bar_index + offset + ([Link] + [Link]) * (size - 1) / 2
if settings.htf_label_show
string lblt = [Link]([Link])
string lbll = lblt
if settings.htf_timer_show
lblt := lblt + '\n'
lbll := '\n' + lbll
if settings.daily_name
lblt := lblt + '\n'
string tmr = '(' + [Link]([Link]) + ')' +
(settings.daily_name ? '\n' : '')
if settings.label_position == 'Both' or settings.label_position == 'Top'
if not na([Link])
[Link].set_xy(left, top)
else
[Link] := [Link](left, top, lblt, color =
color_transparent, textcolor = settings.htf_label_color, style =
label.style_label_down, size = settings.htf_label_size)
if settings.htf_timer_show
if not na([Link])
[Link].set_xy(left, top)
else
[Link] := [Link](left, top, tmr, color =
color_transparent, textcolor = settings.htf_timer_color, style =
label.style_label_down, size = settings.htf_timer_size)
if settings.label_position == 'Both' or settings.label_position == 'Bottom'
if not na([Link])
[Link].set_xy(left, bottom)
else
[Link] := [Link](left, bottom, lbll, color =
color_transparent, textcolor = settings.htf_label_color, style =
label.style_label_up, size = settings.htf_label_size)
if settings.htf_timer_show
if settings.htf_timer_show
if not na([Link])
[Link].set_xy(left, bottom)
else
[Link] := [Link](left, bottom, tmr,
color = color_transparent, textcolor = settings.htf_timer_color, style =
label.style_label_up, size = settings.htf_timer_size)
candleSet
method FindImbalance(CandleSet candleSet) =>
if [Link] or [Link]
if [Link]() > 0
for i = [Link]() - 1 to 0 by 1
Imbalance del = [Link](i)
[Link](del.b)
[Link]()
if [Link]() > 3 and settings.fvg_show
for i = 0 to [Link]() - 3 by 1
candle1 = [Link](i)
candle2 = [Link](i + 2)
candle3 = [Link](i + 1)
if candle1.l > candle2.h and [Link](candle1.o, candle1.c) >
[Link](candle2.o, candle2.c)
Imbalance imb = [Link]()
imb.b := [Link](box.get_left([Link]), candle2.h,
box.get_right([Link]), candle1.l, bgcolor = settings.fvg_color, border_color
= color_transparent, xloc = xloc.bar_index)
[Link](imb)
if candle1.h < candle2.l and [Link](candle1.o, candle1.c) <
[Link](candle2.o, candle2.c)
Imbalance imb = [Link]()
imb.b := [Link](box.get_right([Link]), candle1.h,
box.get_left([Link]), candle2.l, bgcolor = settings.fvg_color, border_color =
color_transparent)
[Link](imb)
box temp = [Link]([Link])
[Link]([Link])
[Link] := temp
[Link]
if [Link]() > 2 and settings.vi_show
for i = 0 to [Link]() - 2 by 1
candle1 = [Link](i)
candle2 = [Link](i + 1)
if candle1.l < candle2.h and [Link](candle1.o, candle1.c) >
[Link](candle2.o, candle2.c)
Imbalance imb = [Link]()
imb.b := [Link](box.get_left([Link]),
[Link](candle1.o, candle1.c), box.get_right([Link]), [Link](candle2.o,
candle2.c), bgcolor = settings.vi_color, border_color = color_transparent)
[Link](imb)
if candle1.h > candle2.l and [Link](candle1.o, candle1.c) <
[Link](candle2.o, candle2.c)
Imbalance imb = [Link]()
imb.b := [Link](box.get_right([Link]),
[Link](candle2.o, candle2.c), box.get_left([Link]), [Link](candle1.o,
candle1.c), bgcolor = settings.vi_color, border_color = color_transparent)
[Link](imb)
candleSet
method Monitor(CandleSet candleSet) =>
HTFBarTime = time([Link], 'america/New_York')
isNewHTFCandle = [Link](HTFBarTime) > 0
if settings.use_custom_daily
int _830 = 0
if isNewHTFCandle
_830 := timestamp("America/New_York", year(time), month(time),
dayofmonth(time), 0, 0) + 30600000
if [Link] == '1D'
if settings.custom_daily == 'Midnight'
isNewHTFCandle := dayofweek(time, 'America/New_York') !=
dayofweek(time - (time - time[1]), 'America/New_York')
if settings.custom_daily == '8:30'
// Get 8:30 AM New York time for today
isNewHTFCandle := not na(time([Link], "0830-0831:123456",
'America/New_York')) and na(time([Link], "0830-0831:123456",
'America/New_York')[1])
if settings.custom_daily == '9:30'
// Get 9:30 AM New York time for today
isNewHTFCandle := not na(time([Link], "0930-0931:123456",
'America/New_York')) and na(time([Link], "0930-0931:123456",
'America/New_York')[1])
if isNewHTFCandle
Candle candle = [Link]()
candle.o := open
candle.c := close
candle.h := high
candle.l := low
candle.o_time := time
candle.o_idx := bar_index
candle.c_idx := bar_index
candle.h_idx := bar_index
candle.l_idx := bar_index
[Link] := switch
[Link] == '1D' =>
[Link](dayofweek(time_tradingday, "America/New_York"))
[Link]([Link]) < 60 =>
str.format_time(candle.o_time, 'm', 'America/New_York')
[Link]([Link]) >= 60 =>
str.format_time(candle.o_time, 'H', 'America/New_York')
[Link] == '1M' =>
str.format_time(candle.o_time, 'M', 'America/New_York')
=>
''
[Link]('dow: {1} |{0}|', [Link], [Link])
bull = candle.c > candle.o
[Link] := [Link](bar_index, [Link](candle.o, candle.c), bar_index +
2, [Link](candle.o, candle.c), bull ? settings.bull_border :
settings.bear_border, 1, bgcolor = bull ? settings.bull_body : settings.bear_body)
candle.wick_up := [Link](bar_index + 1, candle.h, bar_index,
[Link](candle.o, candle.c), color = bull ? settings.bull_wick :
settings.bear_wick)
candle.wick_down := [Link](bar_index + 1, [Link](candle.o, candle.c),
bar_index, candle.l, color = bull ? settings.bull_wick : settings.bear_wick)
[Link](candle)
if [Link]() > [Link].max_display
Candle delCandle = [Link]([Link])
[Link]([Link])
[Link](delCandle.wick_up)
[Link](delCandle.wick_down)
delCandle.dow_label.delete()
candleSet
method Update(CandleSet candleSet, int offset, bool showTrace) =>
if [Link]() > 0
Candle candle = [Link]()
candle.h_idx := high > candle.h ? bar_index : candle.h_idx
candle.h := high > candle.h ? high : candle.h
candle.l_idx := low < candle.l ? bar_index : candle.l_idx
candle.l := low < candle.l ? low : candle.l
candle.c := close
candle.c_idx := bar_index
bull = candle.c > candle.o
box.set_top([Link], candle.o)
box.set_bottom([Link], candle.c)
box.set_bgcolor([Link], bull ? settings.bull_body :
settings.bear_body)
box.set_border_color([Link], bull ? settings.bull_border :
settings.bear_border)
line.set_color(candle.wick_up, bull ? settings.bull_wick :
settings.bear_wick)
line.set_color(candle.wick_down, bull ? settings.bull_wick :
settings.bear_wick)
line.set_y1(candle.wick_up, candle.h)
line.set_y2(candle.wick_up, [Link](candle.o, candle.c))
line.set_y1(candle.wick_down, candle.l)
line.set_y2(candle.wick_down, [Link](candle.o, candle.c))
if [Link] or [Link]
[Link](offset)
if settings.trace_show and showTrace
if bar_index - candle.o_idx < 5000
if na(trace.o)
trace.o := [Link](candle.o_idx, candle.o,
box.get_left([Link]), candle.o, xloc = xloc.bar_index, color =
settings.trace_o_color, style = [Link](settings.trace_o_style), width =
settings.trace_o_size)
trace.o
else
line.set_xy1(trace.o, candle.o_idx, candle.o)
line.set_xy2(trace.o, box.get_left([Link]), candle.o)
if settings.label_show
if na(trace.o_l)
trace.o_l := [Link](box.get_right([Link]),
candle.o, [Link](candle.o), textalign = text.align_center, style =
label.style_label_left, size = settings.label_size, color = color_transparent,
textcolor = settings.label_color)
trace.o_l
else
label.set_xy(trace.o_l, box.get_right([Link]),
candle.o)
label.set_text(trace.o_l, [Link](candle.o))
if bar_index - candle.c_idx < 5000
if na(trace.c)
trace.c := [Link](candle.c_idx, candle.c,
box.get_left([Link]), candle.c, xloc = xloc.bar_index, color =
settings.trace_c_color, style = [Link](settings.trace_c_style), width =
settings.trace_c_size)
trace.c
else
line.set_xy1(trace.c, candle.c_idx, candle.c)
line.set_xy2(trace.c, box.get_left([Link]), candle.c)
if settings.label_show
if na(trace.c_l)
trace.c_l := [Link](box.get_right([Link]),
candle.c, [Link](candle.c), textalign = text.align_center, style =
label.style_label_left, size = settings.label_size, color = color_transparent,
textcolor = settings.label_color)
trace.c_l
else
label.set_xy(trace.c_l, box.get_right([Link]),
candle.c)
label.set_text(trace.c_l, [Link](candle.c))
if bar_index - candle.h_idx < 5000
if na(trace.h)
trace.h := [Link](candle.h_idx, candle.h,
line.get_x1(candle.wick_up), candle.h, xloc = xloc.bar_index, color =
settings.trace_h_color, style = [Link](settings.trace_h_style), width =
settings.trace_h_size)
trace.h
else
line.set_xy1(trace.h, candle.h_idx, candle.h)
line.set_xy2(trace.h, line.get_x1(candle.wick_up),
candle.h)
if settings.label_show
if na(trace.h_l)
trace.h_l := [Link](box.get_right([Link]),
candle.h, [Link](candle.h), textalign = text.align_center, style =
label.style_label_left, size = settings.label_size, color = color_transparent,
textcolor = settings.label_color)
trace.h_l
else
label.set_xy(trace.h_l, box.get_right([Link]),
candle.h)
label.set_text(trace.h_l, [Link](candle.h))
if bar_index - candle.l_idx < 5000
if na(trace.l)
trace.l := [Link](candle.l_idx, candle.l,
line.get_x1(candle.wick_down), candle.l, xloc = xloc.bar_index, color =
settings.trace_l_color, style = [Link](settings.trace_l_style), width =
settings.trace_l_size)
trace.l
else
line.set_xy1(trace.l, candle.l_idx, candle.l)
line.set_xy2(trace.l, line.get_x1(candle.wick_down),
candle.l)
if settings.label_show
if na(trace.l_l)
trace.l_l := [Link](box.get_right([Link]),
candle.l, [Link](candle.l), textalign = text.align_center, style =
label.style_label_left, size = settings.label_size, color = color_transparent,
textcolor = settings.label_color)
trace.l_l
else
label.set_xy(trace.l_l, box.get_right([Link]),
candle.l)
label.set_text(trace.l_l, [Link](candle.l))
candleSet
int cnt = 0
int last = [Link]()
int offset = [Link]
if [Link] and [Link]([Link])
bool showTrace = false
if settings.trace_anchor == 'First Timeframe'
showTrace := true
showTrace
if settings.trace_anchor == 'Last Timeframe' and settings.max_sets == 1
showTrace := true
showTrace
[Link](offset)
[Link]().Update(offset, showTrace).FindImbalance()
cnt := cnt + 1
offset := offset + (cnt > 0 ? [Link]() * [Link] +
([Link]() > 0 ? ([Link]() - 1) * [Link] : 0) +
settings.htf_buffer : 0)
offset
if [Link] and [Link]([Link]) and cnt < last
bool showTrace = false
if settings.trace_anchor == 'First Timeframe' and cnt == 0
showTrace := true
showTrace
if settings.trace_anchor == 'Last Timeframe' and cnt == last - 1
showTrace := true
showTrace
[Link](offset)
[Link]().Update(offset, showTrace).FindImbalance()
cnt := cnt + 1
offset := offset + (cnt > 0 ? [Link]() * [Link] +
([Link]() > 0 ? ([Link]() - 1) * [Link] : 0) +
settings.htf_buffer : 0)
offset
if [Link] and [Link]([Link]) and cnt < last
bool showTrace = false
if settings.trace_anchor == 'First Timeframe' and cnt == 0
showTrace := true
showTrace
if settings.trace_anchor == 'Last Timeframe' and cnt == last - 1
showTrace := true
showTrace
[Link](offset)
[Link]().Update(offset, showTrace).FindImbalance()
cnt := cnt + 1
offset := offset + (cnt > 0 ? [Link]() * [Link] +
([Link]() > 0 ? ([Link]() - 1) * [Link] : 0) +
settings.htf_buffer : 0)
offset
if [Link] and [Link]([Link]) and cnt < last
bool showTrace = false
if settings.trace_anchor == 'First Timeframe' and cnt == 0
showTrace := true
showTrace
if settings.trace_anchor == 'Last Timeframe' and cnt == last - 1
showTrace := true
showTrace
[Link](offset)
[Link]().Update(offset, showTrace).FindImbalance()
cnt := cnt + 1
offset := offset + (cnt > 0 ? [Link]() * [Link] +
([Link]() > 0 ? ([Link]() - 1) * [Link] : 0) +
settings.htf_buffer : 0)
offset
if [Link] and [Link]([Link]) and cnt < last
bool showTrace = false
if settings.trace_anchor == 'First Timeframe' and cnt == 0
showTrace := true
showTrace
if settings.trace_anchor == 'Last Timeframe' and cnt == last - 1
showTrace := true
showTrace
[Link](offset)
[Link]().Update(offset, showTrace).FindImbalance()
cnt := cnt + 1
offset := offset + (cnt > 0 ? [Link]() * [Link] +
([Link]() > 0 ? ([Link]() - 1) * [Link] : 0) +
settings.htf_buffer : 0)
offset
if [Link] and [Link]([Link]) and cnt < last
bool showTrace = false
if settings.trace_anchor == 'First Timeframe' and cnt == 0
showTrace := true
showTrace
if settings.trace_anchor == 'Last Timeframe'
showTrace := true
showTrace
[Link](offset)
[Link]().Update(offset, showTrace).FindImbalance()