0% found this document useful (0 votes)
11 views10 pages

Trading Indicator for MA and Pivots

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)
11 views10 pages

Trading Indicator for MA and Pivots

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

//@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])

You might also like