//@version=5
indicator('VUGS_AIO_1', overlay=true)
exponential = input(true, title='Exponential MA')
bars_back = 500
src = close
ema_4 = [Link](src, 200)
sma_4 = [Link](src, 200)
ma200 = exponential ? ema_4 : sma_4
ema_2 = [Link](src, 18)
sma_2 = [Link](src, 18)
ma18 = exponential ? ema_2 : sma_2
plot(ma18, color=[Link]([Link], 0), style=plot.style_line, title='MMA18',
linewidth=1)
plot(ma200, color=[Link]([Link], 0), style=plot.style_line, title='MMA200',
linewidth=1)
candle_OutsideBar1 = high > high[1] and low < low[1] and close > open
candle_OutsideBar2 = high > high[1] and low < low[1] and close < open
outsidebar_up = candle_OutsideBar1 ? [Link](63, 231, 231) : na
outsidebar_down = candle_OutsideBar2 ? [Link](240, 62, 195) : na
// plots
barcolor(outsidebar_up)
// plots
barcolor(outsidebar_down)
length = [Link](13, minval=1)
mult = input(1.3, 'Multiplier')
exp = input(true, 'exponential')
BandsStyle = [Link]('true range', options=['range', 'true range'],
title='Bands Style')
esma(source, length) =>
s = [Link](source, length)
e = [Link](source, length)
exp ? e : s
ma = esma(src, length)
range_1 = BandsStyle == 'true range' ? [Link](true) : high - low
rangema = [Link](range_1, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
c = [Link]
u = plot(upper, color=[Link](#0094FF, 0), title='Upper')
plot(ma, color=[Link](#6d047a, 0), title='Basis')
l = plot(lower, color=[Link](#0094FF, 0), title='Lower')
fill(u, l, color=[Link](#0094FF, 95), title='Background')
AUTO = "Auto"
DAILY = "Daily"
WEEKLY = "Weekly"
MONTHLY = "Monthly"
QUARTERLY = "Quarterly"
YEARLY = "Yearly"
BIYEARLY = "Biyearly"
TRIYEARLY = "Triyearly"
QUINQUENNIALLY = "Quinquennially"
DECENNIALLY = "Decennially"
TRADITIONAL = "Traditional"
FIBONACCI = "Fibonacci"
WOODIE = "Woodie"
CLASSIC = "Classic"
DM = "DM"
CAMARILLA = "Camarilla"
kind = [Link](title="Type", defval="Traditional", options=[TRADITIONAL,
FIBONACCI, WOODIE, CLASSIC, DM, CAMARILLA])
pivot_time_frame = [Link](title="Pivots Timeframe", defval=AUTO,
options=[AUTO, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY, BIYEARLY, TRIYEARLY,
QUINQUENNIALLY, DECENNIALLY])
look_back = [Link](title="Number of Pivots Back", defval=15, minval=1,
maxval=5000)
is_daily_based = [Link](title="Use Daily-based Values", defval=true,
tooltip="When this option is unchecked, Pivot Points will use intraday data while
calculating on intraday charts. If Extended Hours are displayed on the chart, they
will be taken into account during the pivot level calculation. If intraday OHLC
values are different from daily-based values (normal for stocks), the pivot levels
will also differ.")
show_labels = [Link](title="Show Labels", defval=true, group="labels")
show_prices = [Link](title="Show Prices", defval=true, group="labels")
position_labels = [Link]("Left", "Labels Position", options=["Left",
"Right"], group="labels")
line_width = [Link](title="Line Width", defval=1, minval=1, maxval=100,
group="levels")
var DEF_COLOR = #FB8C00
var arr_time = array.new_int()
var p = array.new_float()
p_color = [Link](DEF_COLOR, "P ", inline="P", group="levels")
p_show = [Link](true, "", inline="P", group="levels")
var r1 = array.new_float()
var s1 = array.new_float()
s1_color = [Link](DEF_COLOR, "S1", inline="S1/R1" , group="levels")
s1_show = [Link](true, "", inline="S1/R1", group="levels")
r1_color = [Link](DEF_COLOR, " R1", inline="S1/R1",
group="levels")
r1_show = [Link](true, "", inline="S1/R1", group="levels")
var r2 = array.new_float()
var s2 = array.new_float()
s2_color = [Link](DEF_COLOR, "S2", inline="S2/R2", group="levels")
s2_show = [Link](true, "", inline="S2/R2", group="levels")
r2_color = [Link](DEF_COLOR, " R2", inline="S2/R2",
group="levels")
r2_show = [Link](true, "", inline="S2/R2", group="levels")
var r3 = array.new_float()
var s3 = array.new_float()
s3_color = [Link](DEF_COLOR, "S3", inline="S3/R3", group="levels")
s3_show = [Link](true, "", inline="S3/R3", group="levels")
r3_color = [Link](DEF_COLOR, " R3", inline="S3/R3",
group="levels")
r3_show = [Link](true, "", inline="S3/R3", group="levels")
var r4 = array.new_float()
var s4 = array.new_float()
s4_color = [Link](DEF_COLOR, "S4", inline="S4/R4", group="levels")
s4_show = [Link](true, "", inline="S4/R4", group="levels")
r4_color = [Link](DEF_COLOR, " R4", inline="S4/R4",
group="levels")
r4_show = [Link](true, "", inline="S4/R4", group="levels")
var r5 = array.new_float()
var s5 = array.new_float()
s5_color = [Link](DEF_COLOR, "S5", inline="S5/R5", group="levels")
s5_show = [Link](true, "", inline="S5/R5", group="levels")
r5_color = [Link](DEF_COLOR, " R5", inline="S5/R5",
group="levels")
r5_show = [Link](true, "", inline="S5/R5", group="levels")
pivotX_open = float(na)
pivotX_open := nz(pivotX_open[1], open)
pivotX_high = float(na)
pivotX_high := nz(pivotX_high[1], high)
pivotX_low = float(na)
pivotX_low := nz(pivotX_low[1], low)
pivotX_prev_open = float(na)
pivotX_prev_open := nz(pivotX_prev_open[1])
pivotX_prev_high = float(na)
pivotX_prev_high := nz(pivotX_prev_high[1])
pivotX_prev_low = float(na)
pivotX_prev_low := nz(pivotX_prev_low[1])
pivotX_prev_close = float(na)
pivotX_prev_close := nz(pivotX_prev_close[1])
get_pivot_resolution() =>
resolution = "M"
if pivot_time_frame == AUTO
if [Link]
resolution := [Link] <= 15 ? "D" : "W"
else if [Link] or [Link]
resolution := "12M"
else if pivot_time_frame == DAILY
resolution := "D"
else if pivot_time_frame == WEEKLY
resolution := "W"
else if pivot_time_frame == MONTHLY
resolution := "M"
else if pivot_time_frame == QUARTERLY
resolution := "3M"
else if pivot_time_frame == YEARLY or pivot_time_frame == BIYEARLY or
pivot_time_frame == TRIYEARLY or pivot_time_frame == QUINQUENNIALLY or
pivot_time_frame == DECENNIALLY
resolution := "12M"
resolution
var lines = array.new_line()
var labels = array.new_label()
draw_line(i, pivot, col) =>
if [Link](arr_time) > 1
[Link](lines, [Link]([Link](arr_time, i), [Link](pivot, i),
[Link](arr_time, i + 1), [Link](pivot, i), color=col, xloc=xloc.bar_time,
width=line_width))
draw_label(i, y, txt, txt_color) =>
if (show_labels or show_prices) and not na(y)
display_text = (show_labels ? txt : "") + (show_prices ? [Link]("
({0})", math.round_to_mintick(y)) : "")
label_style = position_labels == "Left" ? label.style_label_right :
label.style_label_left
x = position_labels == "Left" ? [Link](arr_time, i) :
[Link](arr_time, i + 1)
[Link](labels, [Link](x = x, y=y, text=display_text,
textcolor=txt_color, style=label_style, color=#00000000, xloc=xloc.bar_time))
traditional() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
[Link](p, pivotX_Median)
[Link](r1, pivotX_Median * 2 - pivotX_prev_low)
[Link](s1, pivotX_Median * 2 - pivotX_prev_high)
[Link](r2, pivotX_Median + 1 * (pivotX_prev_high - pivotX_prev_low))
[Link](s2, pivotX_Median - 1 * (pivotX_prev_high - pivotX_prev_low))
[Link](r3, pivotX_Median * 2 + (pivotX_prev_high - 2 * pivotX_prev_low))
[Link](s3, pivotX_Median * 2 - (2 * pivotX_prev_high - pivotX_prev_low))
[Link](r4, pivotX_Median * 3 + (pivotX_prev_high - 3 * pivotX_prev_low))
[Link](s4, pivotX_Median * 3 - (3 * pivotX_prev_high - pivotX_prev_low))
[Link](r5, pivotX_Median * 4 + (pivotX_prev_high - 4 * pivotX_prev_low))
[Link](s5, pivotX_Median * 4 - (4 * pivotX_prev_high - pivotX_prev_low))
fibonacci() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
pivot_range = pivotX_prev_high - pivotX_prev_low
[Link](p, pivotX_Median)
[Link](r1, pivotX_Median + 0.382 * pivot_range)
[Link](s1, pivotX_Median - 0.382 * pivot_range)
[Link](r2, pivotX_Median + 0.618 * pivot_range)
[Link](s2, pivotX_Median - 0.618 * pivot_range)
[Link](r3, pivotX_Median + 1 * pivot_range)
[Link](s3, pivotX_Median - 1 * pivot_range)
woodie() =>
pivotX_Woodie_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_open * 2)/4
pivot_range = pivotX_prev_high - pivotX_prev_low
[Link](p, pivotX_Woodie_Median)
[Link](r1, pivotX_Woodie_Median * 2 - pivotX_prev_low)
[Link](s1, pivotX_Woodie_Median * 2 - pivotX_prev_high)
[Link](r2, pivotX_Woodie_Median + 1 * pivot_range)
[Link](s2, pivotX_Woodie_Median - 1 * pivot_range)
pivot_point_r3 = pivotX_prev_high + 2 * (pivotX_Woodie_Median -
pivotX_prev_low)
pivot_point_s3 = pivotX_prev_low - 2 * (pivotX_prev_high -
pivotX_Woodie_Median)
[Link](r3, pivot_point_r3)
[Link](s3, pivot_point_s3)
[Link](r4, pivot_point_r3 + pivot_range)
[Link](s4, pivot_point_s3 - pivot_range)
classic() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close)/3
pivot_range = pivotX_prev_high - pivotX_prev_low
[Link](p, pivotX_Median)
[Link](r1, pivotX_Median * 2 - pivotX_prev_low)
[Link](s1, pivotX_Median * 2 - pivotX_prev_high)
[Link](r2, pivotX_Median + 1 * pivot_range)
[Link](s2, pivotX_Median - 1 * pivot_range)
[Link](r3, pivotX_Median + 2 * pivot_range)
[Link](s3, pivotX_Median - 2 * pivot_range)
[Link](r4, pivotX_Median + 3 * pivot_range)
[Link](s4, pivotX_Median - 3 * pivot_range)
dm() =>
pivotX_DM_X = pivotX_prev_high + pivotX_prev_low * 2 + pivotX_prev_close
if pivotX_prev_close == pivotX_prev_open
pivotX_DM_X := pivotX_prev_high + pivotX_prev_low + pivotX_prev_close * 2
if pivotX_prev_close > pivotX_prev_open
pivotX_DM_X := pivotX_prev_high * 2 + pivotX_prev_low + pivotX_prev_close
[Link](p, pivotX_DM_X / 4)
[Link](r1, pivotX_DM_X / 2 - pivotX_prev_low)
[Link](s1, pivotX_DM_X / 2 - pivotX_prev_high)
camarilla() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
pivot_range = pivotX_prev_high - pivotX_prev_low
[Link](p, pivotX_Median)
[Link](r1, pivotX_prev_close + pivot_range * 1.1 / 12.0)
[Link](s1, pivotX_prev_close - pivot_range * 1.1 / 12.0)
[Link](r2, pivotX_prev_close + pivot_range * 1.1 / 6.0)
[Link](s2, pivotX_prev_close - pivot_range * 1.1 / 6.0)
[Link](r3, pivotX_prev_close + pivot_range * 1.1 / 4.0)
[Link](s3, pivotX_prev_close - pivot_range * 1.1 / 4.0)
[Link](r4, pivotX_prev_close + pivot_range * 1.1 / 2.0)
[Link](s4, pivotX_prev_close - pivot_range * 1.1 / 2.0)
r5_val = pivotX_prev_high / pivotX_prev_low * pivotX_prev_close
[Link](r5, r5_val)
[Link](s5, 2 * pivotX_prev_close - r5_val)
calc_pivot() =>
if kind == TRADITIONAL
traditional()
else if kind == FIBONACCI
fibonacci()
else if kind == WOODIE
woodie()
else if kind == CLASSIC
classic()
else if kind == DM
dm()
else if kind == CAMARILLA
camarilla()
resolution = get_pivot_resolution()
SIMPLE_DIVISOR = -1
custom_years_divisor = switch pivot_time_frame
BIYEARLY => 2
TRIYEARLY => 3
QUINQUENNIALLY => 5
DECENNIALLY => 10
=> SIMPLE_DIVISOR
calc_high(prev, curr) =>
if na(prev) or na(curr)
nz(prev, nz(curr, na))
else
[Link](prev, curr)
calc_low(prev, curr) =>
if not na(prev) and not na(curr)
[Link](prev, curr)
else
nz(prev, nz(curr, na))
calc_OHLC_for_pivot(custom_years_divisor) =>
if custom_years_divisor == SIMPLE_DIVISOR
[open, high, low, close, open[1], high[1], low[1], close[1], time[1],
time_close]
else
var prev_sec_open = float(na)
var prev_sec_high = float(na)
var prev_sec_low = float(na)
var prev_sec_close = float(na)
var prev_sec_time = int(na)
var curr_sec_open = float(na)
var curr_sec_high = float(na)
var curr_sec_low = float(na)
var curr_sec_close = float(na)
if year(time_close) % custom_years_divisor == 0
curr_sec_open := open
curr_sec_high := high
curr_sec_low := low
curr_sec_close := close
prev_sec_high := high[1]
prev_sec_low := low[1]
prev_sec_close := close[1]
prev_sec_time := time[1]
for i = 2 to custom_years_divisor
prev_sec_open := nz(open[i], prev_sec_open)
prev_sec_high := calc_high(prev_sec_high, high[i])
prev_sec_low := calc_low(prev_sec_low, low[i])
prev_sec_time := nz(time[i], prev_sec_time)
[curr_sec_open, curr_sec_high, curr_sec_low, curr_sec_close, prev_sec_open,
prev_sec_high, prev_sec_low, prev_sec_close, prev_sec_time, time_close]
[sec_open, sec_high, sec_low, sec_close, prev_sec_open, prev_sec_high,
prev_sec_low, prev_sec_close, prev_sec_time, sec_time] =
[Link]([Link], resolution,
calc_OHLC_for_pivot(custom_years_divisor), lookahead = barmerge.lookahead_on)
sec_open_gaps_on = [Link]([Link], resolution, open, gaps =
barmerge.gaps_on, lookahead = barmerge.lookahead_on)
is_change_years = custom_years_divisor > 0 and [Link](time(resolution)) and
year(time_close) % custom_years_divisor == 0
var is_change = false
var uses_current_bar = [Link] and kind == WOODIE
var change_time = int(na)
is_time_change = ([Link](time(resolution)) and custom_years_divisor ==
SIMPLE_DIVISOR) or is_change_years
if is_time_change
change_time := time
var start_time = time
var was_last_premarket = false
var start_calculate_in_premarket = false
is_last_premarket = [Link] and [Link] and time_close >
sec_time and not was_last_premarket
if is_last_premarket
was_last_premarket := true
start_calculate_in_premarket := true
if [Link]
was_last_premarket := false
without_time_change = [Link] and [Link](arr_time) == 0
is_can_calc_pivot = (not uses_current_bar and is_time_change and [Link])
or ([Link](sec_open) and not start_calculate_in_premarket) or is_last_premarket
or (uses_current_bar and not na(sec_open_gaps_on)) or without_time_change
enough_bars_for_calculate = prev_sec_time >= start_time or is_daily_based
if is_can_calc_pivot and enough_bars_for_calculate
if [Link](arr_time) == 0 and is_daily_based
pivotX_prev_open := prev_sec_open[1]
pivotX_prev_high := prev_sec_high[1]
pivotX_prev_low := prev_sec_low[1]
pivotX_prev_close := prev_sec_close[1]
pivotX_open := sec_open[1]
pivotX_high := sec_high[1]
pivotX_low := sec_low[1]
[Link](arr_time, start_time)
calc_pivot()
if is_daily_based
if is_last_premarket
pivotX_prev_open := sec_open
pivotX_prev_high := sec_high
pivotX_prev_low := sec_low
pivotX_prev_close := sec_close
pivotX_open := open
pivotX_high := high
pivotX_low := low
else
pivotX_prev_open := prev_sec_open
pivotX_prev_high := prev_sec_high
pivotX_prev_low := prev_sec_low
pivotX_prev_close := prev_sec_close
pivotX_open := sec_open
pivotX_high := sec_high
pivotX_low := sec_low
else
pivotX_prev_high := pivotX_high
pivotX_prev_low := pivotX_low
pivotX_prev_open := pivotX_open
pivotX_prev_close := close[1]
pivotX_open := open
pivotX_high := high
pivotX_low := low
if [Link] and not is_change and [Link](arr_time) > 0 and not
without_time_change
[Link](arr_time, [Link](arr_time) - 1, change_time)
else if without_time_change
[Link](arr_time, start_time)
else
[Link](arr_time, nz(change_time, time))
calc_pivot()
if [Link](arr_time) > look_back
if [Link](arr_time) > 0
[Link](arr_time)
if [Link](p) > 0 and p_show
[Link](p)
if [Link](r1) > 0 and r1_show
[Link](r1)
if [Link](s1) > 0 and s1_show
[Link](s1)
if [Link](r2) > 0 and r2_show
[Link](r2)
if [Link](s2) > 0 and s2_show
[Link](s2)
if [Link](r3) > 0 and r3_show
[Link](r3)
if [Link](s3) > 0 and s3_show
[Link](s3)
if [Link](r4) > 0 and r4_show
[Link](r4)
if [Link](s4) > 0 and s4_show
[Link](s4)
if [Link](r5) > 0 and r5_show
[Link](r5)
if [Link](s5) > 0 and s5_show
[Link](s5)
is_change := true
else if not is_daily_based
pivotX_high := [Link](pivotX_high, high)
pivotX_low := [Link](pivotX_low, low)
if [Link] and not is_daily_based and [Link](arr_time) == 0
[Link]("Not enough intraday data to calculate Pivot Points. Lower the
Pivots Timeframe or turn on the 'Use Daily-based Values' option in the indicator
settings.")
if [Link] and [Link](arr_time) > 0 and is_change
is_change := false
if custom_years_divisor > 0
last_pivot_time = [Link](arr_time, [Link](arr_time) - 1)
pivot_timeframe = [Link](12 * custom_years_divisor) + "M"
estimate_pivot_time = last_pivot_time +
timeframe.in_seconds(pivot_timeframe) * 1000
[Link](arr_time, estimate_pivot_time)
else
[Link](arr_time, time_close(resolution))
for i = 0 to [Link](lines) - 1
if [Link](lines) > 0
[Link]([Link](lines))
if [Link](labels) > 0
[Link]([Link](labels))
for i = 0 to [Link](arr_time) - 2
if [Link](p) > 0 and p_show
draw_line(i, p, p_color)
draw_label(i, [Link](p, i), "P", p_color)
if [Link](r1) > 0 and r1_show
draw_line(i, r1, r1_color)
draw_label(i, [Link](r1, i), "R1", r1_color)
if [Link](s1) > 0 and s1_show
draw_line(i, s1, s1_color)
draw_label(i, [Link](s1, i), "S1", s1_color)
if [Link](r2) > 0 and r2_show
draw_line(i, r2, r2_color)
draw_label(i, [Link](r2, i), "R2", r2_color)
if [Link](s2) > 0 and s2_show
draw_line(i, s2, s2_color)
draw_label(i, [Link](s2, i), "S2", s2_color)
if [Link](r3) > 0 and r3_show
draw_line(i, r3, r3_color)
draw_label(i, [Link](r3, i), "R3", r3_color)
if [Link](s3) > 0 and s3_show
draw_line(i, s3, s3_color)
draw_label(i, [Link](s3, i), "S3", s3_color)
if [Link](r4) > 0 and r4_show
draw_line(i, r4, r4_color)
draw_label(i, [Link](r4, i), "R4", r4_color)
if [Link](s4) > 0 and s4_show
draw_line(i, s4, s4_color)
draw_label(i, [Link](s4, i), "S4", s4_color)
if [Link](r5) > 0 and r5_show
draw_line(i, r5, r5_color)
draw_label(i, [Link](r5, i), "R5", r5_color)
if [Link](s5) > 0 and s5_show
draw_line(i, s5, s5_color)
draw_label(i, [Link](s5, i), "S5", s5_color)
// Calculate body size of the current candle
bodySize = [Link](open - close)
// Calculate body size of the previous candle
prevBodySize = [Link](open[1] - close[1])
// Check if the current body size is larger than the previous body size
bodyLarger = bodySize > prevBodySize
// Check if the volume of the current candle is smaller than the previous candle
volDecreasing = volume <= volume[1]
// Add arrows to the candles that meet the conditions
upArrowColor = [Link](#00FF00, 0)
downArrowColor = [Link](#FF0000, 0)
upArrowCondition = bodyLarger and volDecreasing and close > open
downArrowCondition = bodyLarger and volDecreasing and close < open
plotshape(series=upArrowCondition, title='Up Arrow', text='', style=[Link],
location=[Link], color=upArrowColor, size=[Link])
plotshape(series=downArrowCondition, title='Down Arrow', text='',
style=[Link], location=[Link], color=downArrowColor,
size=[Link])