Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

NYSA TREND

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

//@version=5

indicator("NYSA-TREND KANALI", overlay=true)

//////////////////PARABOLIC

start = input.float(title='Start', step=0.001, defval=0.02)


increment = input.float(title='Increment', step=0.001, defval=0.02)
maximum = input.float(title='Maximum', step=0.01, defval=0.2)
width = input.int(title='Point Width', minval=1, defval=2)
highlightStartPoints = input(title='Highlight Start Points ?', defval=true)
showLabels = input(title='Show Buy/Sell Labels ?', defval=true)
highlightState = input(title='Highlight State ?', defval=true)

psar = ta.sar(start, increment, maximum)


dir = psar < close ? 1 : -1

psarColor = dir == 1 ? #3388bb : #fdcc02


psarPlot = plot(psar, title='PSAR', style=plot.style_circles, linewidth=width,
color=psarColor, transp=0)

var color longColor = color.green


var color shortColor = color.red

buySignal = dir == 1 and dir[1] == -1


plotshape(buySignal and highlightStartPoints ? psar : na, title='Long Start',
location=location.absolute, style=shape.circle, size=size.tiny,
color=color.new(longColor, 0))
plotshape(buySignal and showLabels ? psar : na, title='Buy Label', text='AL',
location=location.absolute, style=shape.labelup, size=size.tiny,
color=color.new(longColor, 0), textcolor=color.new(color.white, 0))

sellSignal = dir == -1 and dir[1] == 1


plotshape(sellSignal and highlightStartPoints ? psar : na, title='Short Start',
location=location.absolute, style=shape.circle, size=size.tiny,
color=color.new(shortColor, 0))
plotshape(sellSignal and showLabels ? psar : na, title='Sell Label', text='SAT',
location=location.absolute, style=shape.labeldown, size=size.tiny,
color=color.new(shortColor, 0), textcolor=color.new(color.white, 0))

// midPricePlot = plot(ohlc4, title='', display=display.none)

// fillColor = highlightState ? dir == 1 ? longColor : shortColor : na


// fill(midPricePlot, psarPlot, title='Trade State Filling', color=fillColor,
transp=90)

changeCond = dir != dir[1]


alertcondition(changeCond, title='Alert: PSAR Direction Change', message='PSAR has
changed direction!')
alertcondition(buySignal, title='Alert: PSAR Long', message='PSAR Long')
alertcondition(sellSignal, title='Alert: PSAR Short', message='PSAR Sell')

///////////////////

////////////
ma3_len = input(8, "Length", group='EMA')
src3 = input(close, "Source")
res3 = input.timeframe('1W', "Resolution", title="wma9Periyod")
htf_ma3 = ta.ema(src3, ma3_len)
out3 = request.security(syminfo.tickerid, res3, htf_ma3)
// plot(out1, color=color.rgb(21, 252, 4), linewidth=2, title='WMA-9HAFTALIK')

ma4_len = input.int(13, "Length", group='EMA')


src4 = input(close, "Source")
res4 = input.timeframe('1W', "Resolution", title="wma15Periyod")
htf_ma4 = ta.ema(src4, ma4_len)
out4 = request.security(syminfo.tickerid, res4, htf_ma4)
// plot(out2, color=color.rgb(255, 196, 2), linewidth=2, title='WMA-15HAFTALIK')

z0 = plot(out3, color=color.rgb(0, 176, 47), linewidth=2, title='EMA 8')


z1 = plot(out4, color=color.rgb(255, 136, 0), linewidth=2, title='EMA 13')
// z2 = plot(out1, color=color.rgb(231, 0, 0), linewidth=3, title='EMA 55')

//////////////////////////////////////////
//////////////HAFTALIK
// Calculate MACD on the weekly timeframe
[macdLine, signalLine, _] = request.security(syminfo.tickerid, "1W", ta.macd(close,
12, 26, 9))

// Check for MACD crossover on the weekly timeframe


macdCrossover = ta.crossover(macdLine, signalLine)

// Plot "M" label when there is a MACD crossover


plotshape(macdCrossover, color=color.new(color.orange, 0), style=shape.labelup,
title="HAFTALIK MACD", textcolor=color.new(color.white, 0), text="M-H",
location=location.belowbar)

//////////////RSI

////////////////
// Calculate RSI on the weekly timeframe
rsiValue = request.security(syminfo.tickerid, "1W", ta.rsi(close, 14))

// Calculate 14-period SMA of RSI


rsiSMA = ta.sma(rsiValue, 14)

///////////////EKLEME
// Check for RSI being above its 14-period SMA and crossing above 50 on the weekly
timeframe
rsiAboveSMA = rsiValue > rsiSMA
rsiAbove50 = ta.crossover(rsiValue, 50)

// Plot "R" label when RSI is above its SMA and crosses above 50
plotshape(rsiAboveSMA and rsiAbove50, color=color.new(#4400ff, 0),
style=shape.labelup, title="RSI-HAF", textcolor=color.new(color.white, 0), text="R-
H", location=location.belowbar)
////////////////////AYLIK

// Calculate MACD on the AYLIK timeframe


[macdLine1, signalLine1, _] = request.security(syminfo.tickerid, "1M",
ta.macd(close, 12, 26, 9))

// Check for MACD crossover on the AYLIK timeframe


macdCrossover1 = ta.crossover(macdLine1, signalLine1)

// Plot "M" label when there is a MACD crossover


plotshape(macdCrossover1, color=color.new(color.orange, 0), style=shape.labelup,
title="AYLIK MACD", textcolor=color.new(color.white, 0), text="M-A",
location=location.belowbar)

//////////////RSI

////////////////
// Calculate RSI on the AYLIK timeframe
rsiValue1 = request.security(syminfo.tickerid, "1M", ta.rsi(close, 14))

// Calculate 14-period SMA of RSI


rsiSMA1 = ta.sma(rsiValue1, 14)

///////////////EKLEME
// Check for RSI being above its 14-period SMA and crossing above 50 on the weekly
timeframe
rsiAboveSMA1 = rsiValue1 > rsiSMA1
rsiAbove501 = ta.crossover(rsiValue1, 50)

// Plot "R" label when RSI is above its SMA and crosses above 50
plotshape(rsiAboveSMA1 and rsiAbove501, color=color.new(#4400ff, 0),
style=shape.labelup, title="RSI-AYLIK", textcolor=color.new(color.white, 0),
transp=0, text="R-A", location=location.belowbar)

///////////////////////////////TREND KANALI

length = input.int(8, "Length")


show = input.bool(true, "Show Last Channel")
wait = input.bool(true, "Wait for Break")
extend = input.bool(false, "Extend Line")
enable_liquid = input.bool(false, "Volume BG")
top_color = input.color(color.rgb(2, 255, 99, 91), "Colors", inline = "Colors")
center_color = input.color(color.gray, "", inline = "Colors")
bottom_color = input.color(color.rgb(255, 1, 1, 92), "", inline = "Colors")

source_high = high
source_low = low

// variables to store the latest and previous pivot values


var float prev_pivot_high = na
var int prev_pivot_high_index = na
var float last_pivot_high = na
var int last_pivot_high_index = na

var float prev_pivot_low = na


var int prev_pivot_low_index = na
var float last_pivot_low = na
var int last_pivot_low_index = na

atan2(y, x) =>
var float angle = 0.0
if x > 0
angle := math.atan(y / x)
else
if x < 0 and y >= 0
angle := math.atan(y / x) + math.pi
else
if x < 0 and y < 0
angle := math.atan(y / x) - math.pi
else
if x == 0 and y > 0
angle := math.pi / 2
else
if x == 0 and y < 0
angle := -math.pi / 2
angle

min_max_volume(src) =>
out = (src - ta.lowest(src, 100))/(ta.highest(src, 100) - ta.lowest(src, 100))
* 100
math.max(math.min(100, out), 0)

volume_normalized()=>
min_max_volume(ta.wma(volume, 21))

simple_moving_average(source)=>
var float sum = na
var int count = na
count := nz(count[1]) + 1
sum := nz(sum[1]) + source
sum/count

liquidity_break()=>
vol = volume_normalized()
avg = simple_moving_average(vol)
rank = ta.percentile_nearest_rank(vol, 75, 100)
avg_rank = simple_moving_average(rank)
colour = vol < avg ? "LV" : (vol > avg and vol < avg_rank ? "MV" : "HV")

// Pivot high calculation


ph = ta.pivothigh(source_high, length, length)
if (not na(ph))
// Update the previous pivot high to the last pivot high before we update the
last pivot high
prev_pivot_high := last_pivot_high
prev_pivot_high_index := last_pivot_high_index
// Update the last pivot high
last_pivot_high := ph
last_pivot_high_index := bar_index
// Pivot low calculation
pl = ta.pivotlow(source_low, length, length)
if (not na(pl))
// Update the previous pivot low to the last pivot low before we update the
last pivot low
prev_pivot_low := last_pivot_low
prev_pivot_low_index := last_pivot_low_index
// Update the last pivot low
last_pivot_low := pl
last_pivot_low_index := bar_index

volume_score = volume_normalized()

var down_trend_top = line.new(na, na, na, na, color = na, width = 2)


var down_trend_bottom = line.new(na, na, na, na, color = na, width = 2)
var down_trend_top_zone = line.new(na, na, na, na, color = color.new(color.black,
100), width = 2)
var down_trend_bottom_zone = line.new(na, na, na, na, color =
color.new(color.black, 100), width = 2)
var down_trend_top_zone_mid = line.new(na, na, na, na, color =
color.new(color.black, 100), width = 2)
var down_trend_bottom_zone_mid = line.new(na, na, na, na, color =
color.new(color.black, 100), width = 2)
var down_trend_center = line.new(na, na, na, na, color = na, width = 2, style =
line.style_dashed)
var down_break_label = label.new(na, na, na, textcolor = color.new(color.silver,
0))
linefill.new(down_trend_top, down_trend_top_zone_mid, color.new(top_color, 20))
linefill.new(down_trend_bottom, down_trend_bottom_zone_mid, color.new(bottom_color,
20))
down_trend_top_zone_mid_fill = linefill.new(down_trend_top_zone_mid,
down_trend_top_zone, color.new(top_color, 80))
down_trend_bottom_zone_mid_fill = linefill.new(down_trend_bottom_zone_mid,
down_trend_bottom_zone, color.new(bottom_color, 80))
var up_trend_top = line.new(na, na, na, na, color = na, width = 2)
var up_trend_bottom = line.new(na, na, na, na, color = na, width = 2)
var up_trend_top_zone = line.new(na, na, na, na, color = color.new(color.black,
100), width = 2)
var up_trend_bottom_zone = line.new(na, na, na, na, color = color.new(color.black,
100), width = 2)
var up_trend_top_zone_mid = line.new(na, na, na, na, color = color.new(color.black,
100), width = 2)
var up_trend_bottom_zone_mid = line.new(na, na, na, na, color =
color.new(color.black, 100), width = 2)
var up_trend_center = line.new(na, na, na, na, color = na, width = 2, style =
line.style_dashed)
linefill.new(up_trend_top, up_trend_top_zone_mid, color.new(top_color, 20))
linefill.new(up_trend_bottom, up_trend_bottom_zone_mid, color.new(bottom_color,
20))
top_trend_top_zone_mid_fill = linefill.new(up_trend_top_zone_mid,
up_trend_top_zone, color.new(top_color, 80))
top_trend_bottom_zone_mid_fill = linefill.new(up_trend_bottom_zone_mid,
up_trend_bottom_zone, color.new(bottom_color, 80))
var up_break_label = label.new(na, na, na, textcolor = color.new(color.silver, 0),
style = label.style_label_up)

if extend
line.set_extend(down_trend_top, extend.right)
line.set_extend(down_trend_bottom, extend.right)
line.set_extend(down_trend_top_zone, extend.right)
line.set_extend(down_trend_bottom_zone, extend.right)
line.set_extend(down_trend_center, extend.right)
line.set_extend(up_trend_top, extend.right)
line.set_extend(up_trend_bottom, extend.right)
line.set_extend(up_trend_top_zone, extend.right)
line.set_extend(up_trend_bottom_zone, extend.right)
line.set_extend(up_trend_center, extend.right)
line.set_extend(down_trend_top_zone_mid, extend.right)
line.set_extend(down_trend_bottom_zone_mid, extend.right)
line.set_extend(up_trend_top_zone_mid, extend.right)
line.set_extend(up_trend_bottom_zone_mid, extend.right)
else
line.set_extend(down_trend_top, extend.none)
line.set_extend(down_trend_bottom, extend.none)
line.set_extend(down_trend_top_zone, extend.none)
line.set_extend(down_trend_bottom_zone, extend.none)
line.set_extend(down_trend_center, extend.none)
line.set_extend(up_trend_top, extend.none)
line.set_extend(up_trend_bottom, extend.none)
line.set_extend(up_trend_top_zone, extend.none)
line.set_extend(up_trend_bottom_zone, extend.none)
line.set_extend(up_trend_center, extend.none)
line.set_extend(down_trend_top_zone_mid, extend.none)
line.set_extend(down_trend_bottom_zone_mid, extend.none)
line.set_extend(up_trend_top_zone_mid, extend.none)
line.set_extend(up_trend_bottom_zone_mid, extend.none)

var down_dydx = 0.
var up_dydx = 0.

atr_10 = ta.atr(10) * 6
var down_count = 0
var up_count = 0

// Plot the trendlines if we have enough pivots


if (not na(prev_pivot_high)
and not na(last_pivot_high))
and prev_pivot_high != prev_pivot_high[1]
and atan2(last_pivot_high - prev_pivot_high, last_pivot_high_index -
prev_pivot_high_index) <= 0
and down_count == 0
and (wait ? up_count != 1 : true)
and barstate.isconfirmed
down_count := 1
offset = atr_10
line.set_xy1(down_trend_top, prev_pivot_high_index - length,
math.round_to_mintick(prev_pivot_high + offset/7))
line.set_xy2(down_trend_top, last_pivot_high_index - length,
math.round_to_mintick(last_pivot_high + offset/7))
line.set_color(down_trend_top, top_color)
line.set_xy1(down_trend_top_zone, prev_pivot_high_index - length,
math.round_to_mintick(prev_pivot_high - offset/7))
line.set_xy2(down_trend_top_zone, last_pivot_high_index - length,
math.round_to_mintick(last_pivot_high - offset/7))
line.set_xy1(down_trend_top_zone_mid, prev_pivot_high_index - length,
prev_pivot_high)
line.set_xy2(down_trend_top_zone_mid, last_pivot_high_index - length,
last_pivot_high)
down_dydx := (last_pivot_high - prev_pivot_high) / (last_pivot_high_index -
prev_pivot_high_index)
line.set_xy1(down_trend_bottom, prev_pivot_high_index - length,
math.round_to_mintick(prev_pivot_high - offset - offset/7))
line.set_xy2(down_trend_bottom, last_pivot_high_index - length,
math.round_to_mintick(last_pivot_high - offset - offset/7))
line.set_color(down_trend_bottom, bottom_color)
line.set_xy1(down_trend_bottom_zone, prev_pivot_high_index - length,
math.round_to_mintick(prev_pivot_high - offset + offset/7))
line.set_xy2(down_trend_bottom_zone, last_pivot_high_index - length,
math.round_to_mintick(last_pivot_high - offset + offset/7))
line.set_xy1(down_trend_bottom_zone_mid, prev_pivot_high_index - length,
math.round_to_mintick(prev_pivot_high - offset))
line.set_xy2(down_trend_bottom_zone_mid, last_pivot_high_index - length,
math.round_to_mintick(last_pivot_high - offset))

// Set center line for down trend


line.set_xy1(down_trend_center, prev_pivot_high_index - length,
math.round_to_mintick((prev_pivot_high + prev_pivot_high - offset) / 2))
line.set_xy2(down_trend_center, last_pivot_high_index - length,
math.round_to_mintick((last_pivot_high + last_pivot_high - offset) / 2))
line.set_color(down_trend_center, center_color)
label.set_text(down_break_label, "")
label.set_color(down_break_label, color.new(color.black, 100))
// Blank previous channel
if not show
line.set_xy1(up_trend_bottom, na, na)
line.set_xy2(up_trend_bottom, na, na)
line.set_xy1(up_trend_top, na, na)
line.set_xy2(up_trend_top, na, na)
line.set_xy1(up_trend_center, na, na)
line.set_xy2(up_trend_center, na, na)
line.set_xy1(up_trend_bottom_zone, na, na)
line.set_xy2(up_trend_bottom_zone, na, na)
line.set_xy1(up_trend_bottom_zone_mid, na, na)
line.set_xy2(up_trend_bottom_zone_mid, na, na)
line.set_xy1(up_trend_top_zone, na, na)
line.set_xy2(up_trend_top_zone, na, na)
line.set_xy1(up_trend_top_zone_mid, na, na)
line.set_xy2(up_trend_top_zone_mid, na, na)
label.set_text(up_break_label, "")
label.set_color(up_break_label, color.new(color.black, 100))

if (not na(prev_pivot_low)
and not na(last_pivot_low))
and prev_pivot_low != prev_pivot_low[1]
and atan2(last_pivot_low - prev_pivot_low, last_pivot_low_index -
prev_pivot_low_index) >= 0
and up_count == 0
and (wait ? down_count != 1 : true)
and barstate.isconfirmed
up_count := 1
offset = atr_10
line.set_xy1(up_trend_top, prev_pivot_low_index - length,
math.round_to_mintick(prev_pivot_low + offset + offset/7))
line.set_xy2(up_trend_top, last_pivot_low_index - length,
math.round_to_mintick(last_pivot_low + offset + offset/7))
line.set_color(up_trend_top, top_color)
line.set_xy1(up_trend_top_zone, prev_pivot_low_index - length,
math.round_to_mintick(prev_pivot_low + offset - offset/7))
line.set_xy2(up_trend_top_zone, last_pivot_low_index - length,
math.round_to_mintick(last_pivot_low + offset - offset/7))
line.set_xy1(up_trend_top_zone_mid, prev_pivot_low_index - length,
math.round_to_mintick(prev_pivot_low + offset))
line.set_xy2(up_trend_top_zone_mid, last_pivot_low_index - length,
math.round_to_mintick(last_pivot_low + offset))
line.set_xy1(up_trend_bottom, prev_pivot_low_index - length,
math.round_to_mintick(prev_pivot_low - offset/7))
line.set_xy2(up_trend_bottom, last_pivot_low_index - length,
math.round_to_mintick(last_pivot_low - offset/7))
line.set_color(up_trend_bottom, bottom_color)
line.set_xy1(up_trend_bottom_zone, prev_pivot_low_index - length,
math.round_to_mintick(prev_pivot_low + offset/7))
line.set_xy2(up_trend_bottom_zone, last_pivot_low_index - length,
math.round_to_mintick(last_pivot_low + offset/7))
line.set_xy1(up_trend_bottom_zone_mid, prev_pivot_low_index - length,
math.round_to_mintick(prev_pivot_low))
line.set_xy2(up_trend_bottom_zone_mid, last_pivot_low_index - length,
math.round_to_mintick(last_pivot_low))
up_dydx := (last_pivot_low - prev_pivot_low) / (last_pivot_low_index -
prev_pivot_low_index)
// Set center line for up trend
line.set_xy1(up_trend_center, prev_pivot_low_index - length,
math.round_to_mintick((prev_pivot_low + prev_pivot_low + offset) / 2))
line.set_xy2(up_trend_center, last_pivot_low_index - length,
math.round_to_mintick((last_pivot_low + last_pivot_low + offset) / 2))
line.set_color(up_trend_center, center_color)
label.set_text(up_break_label, "")
label.set_color(up_break_label, color.new(color.black, 100))
// Blank previous channel
if not show
line.set_xy1(down_trend_bottom, na, na)
line.set_xy2(down_trend_bottom, na, na)
line.set_xy1(down_trend_top, na, na)
line.set_xy2(down_trend_top, na, na)
line.set_xy1(down_trend_center, na, na)
line.set_xy2(down_trend_center, na, na)
line.set_xy1(down_trend_bottom_zone, na, na)
line.set_xy2(down_trend_bottom_zone, na, na)
line.set_xy1(down_trend_bottom_zone_mid, na, na)
line.set_xy2(down_trend_bottom_zone_mid, na, na)
line.set_xy1(down_trend_top_zone, na, na)
line.set_xy2(down_trend_top_zone, na, na)
line.set_xy1(down_trend_top_zone_mid, na, na)
line.set_xy2(down_trend_top_zone_mid, na, na)
label.set_text(down_break_label, "")
label.set_color(down_break_label, color.new(color.black, 100))

liquidity_score = liquidity_break()
volume_color_high = color.new(top_color, 60 + (100 - volume_score)/5)
volume_color_low = color.new(bottom_color, 60 + (100 - volume_score)/5)

atr_20 = ta.atr(20)/1.5
if down_count == 1
if enable_liquid
linefill.set_color(down_trend_top_zone_mid_fill, volume_color_high)
linefill.set_color(down_trend_bottom_zone_mid_fill, volume_color_low)
if not extend
line.set_y2(down_trend_top, line.get_y2(down_trend_top) + down_dydx)
line.set_y2(down_trend_bottom, line.get_y2(down_trend_bottom) + down_dydx)
line.set_y2(down_trend_top_zone, line.get_y2(down_trend_top_zone) +
down_dydx)
line.set_y2(down_trend_bottom_zone, line.get_y2(down_trend_bottom_zone) +
down_dydx)
line.set_y2(down_trend_top_zone_mid, line.get_y2(down_trend_top_zone_mid) +
down_dydx)
line.set_y2(down_trend_bottom_zone_mid,
line.get_y2(down_trend_bottom_zone_mid) + down_dydx)
line.set_y2(down_trend_center, line.get_y2(down_trend_center) + down_dydx)
line.set_x2(down_trend_top, bar_index)
line.set_x2(down_trend_bottom, bar_index)
line.set_x2(down_trend_top_zone, bar_index)
line.set_x2(down_trend_bottom_zone, bar_index)
line.set_x2(down_trend_top_zone_mid, bar_index)
line.set_x2(down_trend_bottom_zone_mid, bar_index)
line.set_x2(down_trend_center, bar_index)

if low > line.get_price(down_trend_top, bar_index)


down_count := 0
label.set_text(down_break_label, liquidity_score)
label.set_color(down_break_label, top_color)
label.set_style(down_break_label, label.style_label_up)
label.set_xy(down_break_label, bar_index, line.get_y2(down_trend_top) -
atr_20)
if high < line.get_price(down_trend_bottom, bar_index)
down_count := 0
label.set_text(down_break_label, liquidity_score)
label.set_color(down_break_label, bottom_color)
label.set_style(down_break_label, label.style_label_down)
label.set_xy(down_break_label, bar_index, line.get_y2(down_trend_bottom) +
atr_20)

if up_count == 1
if enable_liquid
linefill.set_color(top_trend_top_zone_mid_fill, volume_color_high)
linefill.set_color(top_trend_bottom_zone_mid_fill, volume_color_low)
if not extend
line.set_y2(up_trend_top, line.get_y2(up_trend_top) + up_dydx)
line.set_y2(up_trend_bottom, line.get_y2(up_trend_bottom) + up_dydx)
line.set_y2(up_trend_top_zone, line.get_y2(up_trend_top_zone) + up_dydx)
line.set_y2(up_trend_bottom_zone, line.get_y2(up_trend_bottom_zone) +
up_dydx)
line.set_y2(up_trend_top_zone_mid, line.get_y2(up_trend_top_zone_mid) +
up_dydx)
line.set_y2(up_trend_bottom_zone_mid, line.get_y2(up_trend_bottom_zone_mid)
+ up_dydx)
line.set_y2(up_trend_center, line.get_y2(up_trend_center) + up_dydx)
line.set_x2(up_trend_top, bar_index)
line.set_x2(up_trend_bottom, bar_index)
line.set_x2(up_trend_top_zone, bar_index)
line.set_x2(up_trend_bottom_zone, bar_index)
line.set_x2(up_trend_top_zone_mid, bar_index)
line.set_x2(up_trend_bottom_zone_mid, bar_index)
line.set_x2(up_trend_center, bar_index)

if low > line.get_price(up_trend_top, bar_index) and barstate.isconfirmed


up_count := 0
label.set_text(up_break_label, liquidity_score)
label.set_color(up_break_label, top_color)
label.set_style(up_break_label, label.style_label_up)
label.set_xy(up_break_label, bar_index, line.get_y2(up_trend_top) - atr_20)
if high < line.get_price(up_trend_bottom, bar_index) and barstate.isconfirmed
up_count := 0
label.set_text(up_break_label, liquidity_score)
label.set_color(up_break_label, bottom_color)
label.set_style(up_break_label, label.style_label_down)
label.set_xy(up_break_label, bar_index, line.get_y2(up_trend_bottom) +
atr_20)

You might also like